drahnr / Cargo Spellcheck
Labels
Projects that are alternatives of or similar to Cargo Spellcheck
cargo-spellcheck
Check your spelling with
hunspell and/or languagetool.
Use Cases
Run cargo spellcheck --fix or cargo spellcheck fix to fix all your
documentation comments in order to avoid nasty typos all over your source tree.
Meant as a helper simplifying review as well as improving CI checks after a
learning phase for custom/topic specific lingo.
Check For Spelling and/or Grammar Mistakes
cargo spellcheck check
error: spellcheck
--> src/main.rs:44
|
44 | Fun facets shalld cause some erroris.
| ^^^^^^
| - shall or shall d
|
Apply Suggestions Interactively
cargo spellcheck fix
error: spellcheck(Hunspell)
--> /media/supersonic1t/projects/cargo-spellcheck/src/literalset.rs:291
|
291 | Returns literl within the Err variant if not adjacent
| ^^^^^^
(13/14) Apply this suggestion [y,n,q,a,d,j,e,?]?
lite
litter
litterer
liter l
liters
literal
liter
» a custom replacement literal
Continuous Integration / CI
cargo spellcheck can be configured with -m <code> to return a non-zero
return code if mistakes are found instead of 0.
git pre-commit hook
#!/usr/bin/sh
# Redirect output to stderr.
exec 1>&2
exec cargo spellcheck -m 99 $(git diff-index --cached --name-only --diff-filter=AM HEAD)
Implemented Features + Roadmap
- [x] Parse doc comments from arbitrary files
- [x] Decent error printing
- [x]
cargo-spellcheck check - [x] Spell checking using
hunspell - [x] Merge multiline doc comments
- [x] Handle multiline and fragmented mistakes (i.e. for grammar) #25
- [x] Grammar check using
languagetoolhttp API - [x] Follow module declarations rather than blindly recurse
- [x] Be
commonmark/markdownaware - [x] Check
README.mdfiles #37 - [x] Improve interactive user interface with
crossterm - [x] Ellipsize overly long statements with
...#42 - [ ] Learn topic lingo and filter false-positive-suggestions #41
- [x] Handle cargo workspaces #38
- [x] Re-flow doc comments #39
- [x] Collect dev comments as well #115
hunspell and languagetool are currently the two supported featuresets.
Configuration
# Project settings where a Cargo.toml exists and is passed
# ${CARGO_MANIFEST_DIR}/.config/spellcheck.toml
# Also take into account developer comments
dev_comments = false
# Skip the README.md file as defined in the cargo manifest
skip_readme = false
# Fallback to per use configuration files:
# Linux: /home/alice/.config/cargo_spellcheck/config.toml
# Windows: C:\Users\Alice\AppData\Roaming\cargo_spellcheck\config.toml
# macOS: /Users/Alice/Library/Preferences/cargo_spellcheck/config.toml
[LanguageTool]
url = "127.0.0.1:8010"
[Hunspell]
# lang and name of `.dic` file
lang = "en_US"
# OS specific additives
# Linux: [ /usr/share/myspell ]
# Windows: []
# macOS [ /home/alice/Libraries/hunspell, /Libraries/hunspell ]
# Additional search paths, which take presedence over the default
# os specific search dirs, searched in order, defaults last
# search_dirs = []
# Adds additional dictionaries, can be specified as
# absolute paths or relative in the search dirs (in this order).
# Relative paths are resolved relative to the configuration file
# which is used.
# Refer to `man 5 hunspell`
# or https://www.systutorials.com/docs/linux/man/4-hunspell/#lbAE
# on how to define a custom dictionary file.
extra_dictionaries = []
[Hunspell.quirks]
# Transforms words that are provided by the tokenizer
# into word fragments based on the capture groups which are to
# be checked.
# If no capture groups are present, the matched word is whitelisted.
transform_regex = ["^'([^\\s])'$", "^[0-9]+x$"]
# Accepts `alphabeta` variants if the checker provides a replacement suggestion
# of `alpha-beta`.
allow_concatenation = true
# And the counterpart, which accepts words with dashes, when the suggestion has
# recommendations without the dashes. This is less common.
allow_dashed = false
[NlpRules]
# Allows the user to override the default included
# exports of LanguageTool, with other custom
# languages
# override_rules = "/path/to/rules_binencoded.bin"
# override_tokenizer = "/path/to/tokenizer_binencoded.bin"
[Reflow]
# Reflows doc comments to adhere to adhere to a given maximum line width limit.
max_line_length = 80
To increase verbosity add -v (multiple) to increase verbosity.
Installation
cargo install cargo-spellcheck
Checkers
Available checker support
Hunspell
Requires a C++ compiler to compile the hunspell CXX source files which are part
of hunspell-sys
Fedora 30+
dnf install -y clang
Ubuntu 19.10+
apt install -y clang
Mac OS X
brew install llvm
The environment variable LLVM_CONFIG_PATH needs to point to llvm-config, to
do so:
export LLVM_CONFIG_PATH=/usr/local/opt/llvm/bin/llvm-config
NlpRules
When compiled with the default featureset which includes nlprules, the
resulting binary can only be distributed under the LGPLv2.1
since the rules and tokenizer definitions are extracted from LanguageTool
(which is itself licensed under LGPLv2.1) as described by
the library that is used for pulling and integrating - details are to be found
under crate nlprule's
README.md.
LanguageTool
Deprecated!
You must run an instance of the LanguageTool server i.e. as container.
