typos/docs/about.md
2019-07-19 07:28:17 -06:00

4 KiB

About typos

Design Requirements

Spell checks source code:

  • Requires special word-splitting logic to handle situations like hex (0xDEADBEEF), c\nescapes, snake_case, CamelCase, SCREAMING_CASE, and maybe arrow-case.
  • Each programming language has its own quirks, like abbreviations, lack of word separator (copysign), etc
  • Backwards compatibility might require keeping misspelled words.
  • Case for proper nouns is irrelevant.

Checking for errors in a CI:

  • No false-positives.
  • On spelling errors, sets the exit code to fail the CI.

Quick feedback and resolution for developer:

  • Fix errors for the user.
  • Integration into other programs, like editors:
    • fork: easy to call into and provides a stable API, including output format
    • linking: either in the language of choice or bindings can be made to language of choice.

Design Trade Offs

typos uses a blacklist

Blacklist: Known typos that map to their corresponding word

  • Ignores unknown typos
  • Ignores typos that follow c-escapes if they aren't handled correctly

Whitelist: A confidence rating is given for how close a word is to one in the whitelist

  • Sensitive to false positives due to hex numbers and c-escapes
  • Traditional spell checkers use a whitelist.
typos bloom42/misspell client9/misspell codespell scspell3k
"Runtime" Rust (#18) Rust None Python Python
Dictionary Blacklist Blacklist Blacklist Blacklist Whitelist
Custom Dict No (#9) No ? Yes Yes
Per-Lang Dict No (#14) No ? No Yes
CamelCase Yes No ? No Yes
snake_case Yes No ? No Yes
Ignore Hex Yes No ? No Yes
C-Escapes No (#20) No ? No Yes
Encodings UTF-8 (#17) UTF-8 ? Auto Auto
Whole-project Yes Yes Yes Yes No
Ignores hidden Yes Yes ? Yes No
Respect gitignore Yes Yes ? No No
Checks filenames Yes No ? Yes No
API Rust / JSON Lines Rust ? Python None
License MIT or Apache AGPL MIT GPLv2 GPLv2