What is cspell?
cspell is a spell checker for code that helps developers identify and correct spelling errors in their codebase, comments, strings, and documentation. It is highly configurable and can be integrated into various development workflows.
What are cspell's main functionalities?
Basic Spell Checking
This command runs cspell to check for spelling errors in all TypeScript files within the 'src' directory and its subdirectories.
npx cspell 'src/**/*.ts'
Custom Dictionaries
You can add custom dictionaries to cspell by specifying them in the configuration file. This allows you to include domain-specific terms that are not in the default dictionary.
{
"dictionaries": ["custom-words"]
}
Ignoring Files and Patterns
cspell allows you to ignore specific files or patterns by adding them to the 'ignorePaths' array in the configuration file. This is useful for excluding generated files or dependencies.
{
"ignorePaths": ["node_modules/**", "dist/**"]
}
Configurable Language Settings
You can configure the language and locale settings in cspell to match the language used in your codebase. This ensures that the spell checker uses the correct dictionary and rules.
{
"language": "en",
"local": "en-US"
}
Integration with Code Editors
cspell can be integrated with popular code editors like VSCode. By enabling the cspell extension, you can get real-time spell checking as you write code.
/* Example for VSCode */
{
"cSpell.enabled": true
}
Other packages similar to cspell
eslint-plugin-spellcheck
eslint-plugin-spellcheck is an ESLint plugin that checks for spelling errors in comments and string literals. It is less comprehensive than cspell but integrates directly with ESLint, making it a good choice for projects already using ESLint.
spellchecker
spellchecker is a simple spell checking library that can be used in Node.js applications. It provides basic spell checking functionality but lacks the extensive configuration options and integrations that cspell offers.
hunspell-spellchecker
hunspell-spellchecker is a Node.js wrapper for the Hunspell spell checker. It provides powerful spell checking capabilities but requires more setup and configuration compared to cspell.
cspell
A Spell Checker for Code!
cspell
is a command line tool and library for spell checking code.
Features
- Spell Checks Code -- Able to spell check code by parsing it into words before checking against the dictionaries.
- Supports CamelCase, snake_case, and compoundwords naming styles.
- Self contained -- does not depend upon OS libraries like Hunspell or aspell. Nor does it depend upon online services.
- Fast -- checks 1000's of lines of code in seconds.
- Programming Language Specific Dictionaries -- Has dedicated support for:
- JavaScript, TypeScript, Python, PHP, C#, C++, LaTex, Go, HTML, CSS, etc.
- Customizable -- supports custom dictionaries and word lists.
- Continuous Integration Support -- Can easily be added as a linter to Travis-CI.
cspell was initially built as the spell checking service for the spell checker extension for
Visual Studio Code.
Installation
npm install -g cspell
Usage
Example: recursively spell check all javascript files in src
cspell "src/**/*.js"
Help
cspell --help
Requirements
cspell needs Node 6 and above.
How it works
The concept is simple, split camelCase and snake_case words before checking them against a list of known words.
camelCase
-> camel case
HTMLInput
-> html input
srcCode
-> src code
snake_case_words
-> snake case words
camel2snake
-> camel snake
-- (the 2 is ignored)function parseJson(text: string)
-> function parse json text string
Special cases
- Escape characters like
\n
, \t
are removed if the word does not match:
\narrow
-> narrow
- because narrow
is a word\ncode
-> code
- because ncode
is not a word.\network
-> network
- but it might be hiding a spelling error, if \n
was an escape character.
Things to note
- This spellchecker is case insensitive. It will not catch errors like
english
which should be English
. - The spellchecker uses dictionaries stored locally. It does not send anything outside your machine.
- The words in the dictionaries can and do contain errors.
- There are missing words.
- Only words longer than 3 characters are checked. "jsj" is ok, while "jsja" is not.
- All symbols and punctuation are ignored.
In Document Settings
It is possible to add spell check settings into your source code.
This is to help with file specific issues that may not be applicable to the entire project.
All settings are prefixed with cSpell:
or spell-checker:
.
disable
-- turn off the spell checker for a section of code.enable
-- turn the spell checker back on after it has been turned off.ignore
-- specify a list of words to be ignored.words
-- specify a list of words to be considered correct and will appear in the suggestions list.ignoreRegExp
-- Any text matching the regular expression will NOT be checked for spelling.includeRegExp
-- Only text matching the collection of includeRegExp will be checked.enableCompoundWords
/ disableCompoundWords
-- Allow / disallow words like: "stringlength".
Enable / Disable checking sections of code
It is possible to disable / enable the spell checker by adding comments to your code.
Disable Checking
/* cSpell:disable */
/* spell-checker: disable */
/* spellchecker: disable */
Enable Checking
/* cSpell:enable */
/* spell-checker: enable */
/* spellchecker: enable */
Example
const wackyWord = ['zaallano', 'wooorrdd', 'zzooommmmmmmm'];
var liep = 1;
const str = "goededag";
const str = "goedemorgen";
Ignore
Ignore allows you the specify a list of words you want to ignore within the document.
const wackyWord = ['zaallano', 'wooorrdd', 'zzooommmmmmmm'];
Note: words defined with ignore
will be ignored for the entire file.
Words
The words list allows you to add words that will be considered correct and will be used as suggestions.
const companyName = 'woorxs sweeetbeat';
Note: words defined with words
will be used for the entire file.
Enable / Disable compound words
In some programing language it is common to glue words together.
char * errormessage;
int errornumber;
Note: Compound word checking cannot be turned on / off in the same file.
The last setting in the file determines the value for the entire file.
Excluding and Including Text to be checked.
By default, the entire document is checked for spelling.
cSpell:disable
/cSpell:enable
above allows you to block off sections of the document.
ignoreRegExp
and includeRegExp
give you the ability to ignore or include patterns of text.
By default the flags gim
are added if no flags are given.
The spell checker works in the following way:
- Find all text matching
includeRegExp
- Remove any text matching
excludeRegExp
- Check the remaining text.
Exclude Example
var encodedImage = 'HR+cPzr7XGAOJNurPL0G8I2kU0UhKcqFssoKvFTR7z0T3VJfK37vS025uKroHfJ9nA6WWbHZ/ASn...';
var email1 = 'emailaddress@myfancynewcompany.com';
var email2 = '<emailaddress@myfancynewcompany.com>';
Note: ignoreRegExp and includeRegExp are applied to the entire file. They do not start and stop.
Include Example
In general you should not need to use includeRegExp
. But if you are mixing languages then it could come in helpful.
def sum_it(self, seq):
"""This is checked for spelling"""
variabele = 0
alinea = 'this is not checked'
for num in seq:
variabele += num
yield variabele
Predefined RegExp expressions
Exclude patterns
Urls
1 -- Matches urlsHexDigits
-- Matches hex digits: /^x?[0-1a-f]+$/i
HexValues
-- Matches common hex format like #aaa, 0xfeef, \u0134Base64
1 -- matches base64 blocks of text longer than 40 characters.Email
-- matches most email addresses.
Include Patterns
Everything
1 -- By default we match an entire document and remove the excludes.string
-- This matches common string formats like '...', "...", and `...`CStyleComment
-- These are C Style comments /* */ and //PhpHereDoc
-- This matches PHPHereDoc strings.
1. These patterns are part of the default include/exclude list for every file.
Customization
cspell's behavior can be controlled through a config file. By default it looks for any of the following files:
cspell.json
.cspell.json
cSpell.json
Or you can specify a path to a config file with the --config <path>
argument on the command line.
cSpell.json
Example cSpell.json file
{
"version": "0.1",
"language": "en",
"words": [
"mkdirp",
"tsmerge",
"githubusercontent",
"streetsidesoftware",
"vsmarketplacebadge",
"visualstudio"
],
"flagWords": [
"hte"
]
}
cspell.json sections
-
version
- currently always 0.1
-
language
- this specifies the language local to use in choosing the general dictionary.
For example: "language": "en-GB"
tells cspell to use British English instead of US English.
-
words
- a list of words to be considered correct.
-
flagWords
- a list of words to be allways considered incorrect
-
ignoreWords
- a list of words to be ignored (even if they are in the flagWords).
-
ignorePaths
- a list of globs to specify which files are to be ignored.
Example
"ignorePaths": ["node_modules/**"]
will cause cspell to ignore anything in the node_modules
directory.
-
maxNumberOfProblems
- defaults to 100 per file.
-
minWordLength
- defaults to 4 - the minimum length of a word before it is checked.
-
allowCompoundWords
- defaults to false; set to true to allow compound words by default.
-
dictionaries
- list of the names of the dictionaries to use. See Dictionaries below.
-
dictionaryDefinitions
- this list defines any custom dictionaries to use. This is how you can include other langauges like Spanish.
Example
"language": "en",
"dictionaries": ["spanish", "ruby", "corp-terms", "fonts"],
"dictionaryDefinitions": [
{ "name": "spanish", "path": "./spanish-words.txt"},
{ "name": "ruby", "path": "./ruby.txt"},
{ "name": "company-terms", "path": "./corp-terms.txt"}
],
-
ignoreRegExpList
- list of patterns to be ignored
-
includeRegExpList
- (Advanced) limits the text checked to be only that matching the expressions in the list.
-
patterns
- this allows you to define named patterns to be used with
ignoreRegExpList
and includeRegExpList
.
-
languageSettings
- this allow for per programming language configuration settings. See LanguageSettings
Dictionaries
The spell checker includes a set of default dictionaries.
General Dictionaries
- en_US - Derived from Hunspell US English words.
- en-gb - Derived from Hunspell GB English words.
- companies - List of well known companies
- softwareTerms - Software Terms and concepts like "coroutine", "debounce", "tree", etc.
- misc - Terms that do not belong in the other dictionaries.
Programming Language Dictionaries
- typescript - keywords for Typescript and Javascript
- node - terms related to using nodejs.
- php - php keywords and library methods
- go - go keywords and library methods
- python - python keywords
- powershell - powershell keywords
- html - html related keywords
- css - css, less, and scss related keywords
- cpp - C++ related keywords
- csharp - C# related keywords
- latex - LaTex related words
Miscellaneous Dictionaries
- fonts - long list of fonts - to assist with css
- filetypes - list of file typescript
- npm - list of top 500+ package names on npm.
LanguageSettings