diff --git a/.gitignore b/.gitignore index f830aca3a..567cff4fb 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,7 @@ vendor # yard .yardoc -doc/* \ No newline at end of file +doc/* + +# our custom dictionary pulled from https://github.com/chef/chef_dictionary/ +chef_dictionary.txt \ No newline at end of file diff --git a/Rakefile b/Rakefile index 200737d3a..93aff2952 100644 --- a/Rakefile +++ b/Rakefile @@ -2,6 +2,7 @@ require "bundler/gem_tasks" begin require "rspec/core/rake_task" + require_relative "tasks/spellcheck" RSpec::Core::RakeTask.new do |t| t.pattern = "spec/**/*_spec.rb" diff --git a/cspell.json b/cspell.json new file mode 100644 index 000000000..97996bf9c --- /dev/null +++ b/cspell.json @@ -0,0 +1,38 @@ +// cSpell Settings +{ + // Version of the setting file. Always 0.1 + "version": "0.1", + // language - current active spelling language + "language": "en", + "dictionaryDefinitions": [ + { + "name": "chef", + "file": "./chef_dictionary.txt", + "description": "Custom Chef Dictionary" + } + ], + "dictionaries": ["chef"], + // flagWords - list of words to be always considered incorrect + // This is useful for offensive words and common spelling errors. + // For example "hte" should be "the" + "flagWords": [ + "hte" + ], + "ignorePaths": [ + "CHANGELOG.md", + "**/*.gemspec", + "**/Gemfile.lock", + "**/Gemfile", + ".expeditor/**/*", + "**/*.yml", + "**/*.toml", + "spec/data/**/*", + "spec/**" + ], + "ignoreRegExpList": [ + // Ignore "'s" at the end of a word. If "Chef" is an accepted word, so is "Chef's". + "/'s\\b/", + // Ignore "'d" at the end of a word. If "dup" is an accepted word, so is "dup'd". + "/'d\\b/" + ] +} diff --git a/tasks/spellcheck.rb b/tasks/spellcheck.rb new file mode 100644 index 000000000..002518d9e --- /dev/null +++ b/tasks/spellcheck.rb @@ -0,0 +1,34 @@ +# +# Copyright:: Copyright (c) Chef Software Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +namespace :spellcheck do + task :fetch_common do + sh "wget https://raw.githubusercontent.com/chef/chef_dictionary/master/chef.txt -O chef_dictionary.txt" + end + + task run: :fetch_common do + sh 'cspell "**/*"' + end + + desc "List the unique unrecognized words in the project." + task unknown_words: :fetch_common do + sh 'cspell "**/*" --wordsOnly --no-summary | sort | uniq' + end +end + +desc "Run spellcheck on the project." +task spellcheck: "spellcheck:run"