Source code spell checker
Find a file
2021-07-07 15:37:10 -05:00
.github chore(gh): Be friendlier to contributors 2021-07-07 15:37:10 -05:00
benches test(dict): Bench more varcon cases 2021-06-30 19:56:00 -05:00
benchsuite perf: Re-enable large-file checks 2021-05-22 21:21:03 -05:00
crates refactor(typos): Remove unused calculations 2021-07-06 11:08:05 -05:00
docker chore: Release 2021-06-29 15:34:25 -05:00
docs chore: Release 2021-06-29 15:34:25 -05:00
src perf(diff): Don't lock on every line 2021-07-06 09:27:31 -05:00
tests test: Only run tests relevant for features 2021-07-01 19:33:32 -05:00
.gitignore Initial commit 2019-01-22 15:01:33 -07:00
.ignore feat: Support english dialects 2020-08-20 19:37:37 -05:00
.pre-commit-hooks.yaml feat(pre-commit): Add binary based install 2021-06-28 19:53:51 +03:00
action.yml feat(ci): adding github action to use typos to check spelling (#267) 2021-05-31 19:42:45 -05:00
Cargo.lock feat(dict): Shared PHF support 2021-07-01 11:14:30 -05:00
Cargo.toml fix(docker): Ensure using latest version 2021-07-02 10:44:44 -05:00
CHANGELOG.md chore: Release 2021-06-29 15:34:25 -05:00
committed.toml chore: Pass along improvements 2021-02-04 21:46:38 -06:00
CONTRIBUTING.md docs: Fix links 2019-10-25 09:58:24 -06:00
Dockerfile fix(docker): Ensure using latest version 2021-07-02 10:44:44 -05:00
LICENSE-APACHE Initial commit 2019-01-22 15:01:33 -07:00
LICENSE-MIT fix(docs): Replace mentions of scorrect with typos 2021-01-10 23:13:38 -05:00
README.md feat: Add pre-commit integration 2021-06-08 23:07:54 +03:00
release.toml chore: Fix release commit message 2021-04-21 12:14:19 -05:00
setup.py chore: Release 2021-06-29 15:34:25 -05:00

typos

Source code spell checker

Finds and corrects spelling mistakes among source code:

  • Fast enough to run on monorepos
  • Low false positives so you can run on PRs

Screenshot

Build Status codecov Documentation License Crates Status

Dual-licensed under MIT or Apache 2.0

Documentation

Install

Download a pre-built binary (installable via gh-install).

Or use rust to install:

cargo install typos-cli

Getting Started

Most commonly, you'll either want to see what typos are available with

typos

Or have them fixed

typos --write-changes
typos -w

If there is any ambiguity (multiple possible corrections), typos will just report it to the user and move on.

False-positives

Sometimes, what looks like a typo is intentional, like with people's names, acronyms, or localized content.

To mark an identifier or word as valid, add it your _typos.toml by declaring itself as the valid spelling:

[default.extend-identifiers]
# *sigh* this just isn't worth the cost of fixing
AttributeIDSupressMenu = "AttributeIDSupressMenu"

[default.extend-words]
# Don't correct the surname "Teh"
teh = "teh"

For cases like localized content, you can disable spell checking of file contents while still checking the file name:

[type.po]
extend-globs = ["*.po"]
check-file = false

(run typos --type-list to see configured file types)

If you need some more flexibility, you can completely exclude some files from consideration:

[files]
extend-exclude = ["localized/*.po"]

Integrations

Custom

typos provides several building blocks for custom native integrations

  • - reads from stdin, --write-changes will be written to stdout
  • --diff to provide a diff
  • --format json to get jsonlines with exit code 0 on no errors, code 2 on typos, anything else is an error.

Examples:

# Read file from stdin, write corrected version to stdout
typos - --write-changes
# Creates a diff of what would change
typos dir/file --diff
# Fully programmatic control
typos dir/file --format json

Debugging

You can see what the effective config looks like by running

typos --dump-config -

You can then see how typos is processing your project with

typos --files
typos --identifiers
typos --words

If you need to dig in more, you can enable debug logging with -v