diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml new file mode 100644 index 0000000000..c581db3c5a --- /dev/null +++ b/.github/workflows/autofix.yml @@ -0,0 +1,19 @@ +name: autofix.ci + +on: # yamllint disable-line rule:truthy + pull_request: + types: [opened, synchronize, labeled, unlabeled] + +permissions: + contents: read + +jobs: + autofix: + name: Regenerate autogenerated files + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + - run: make codespell_lib/data/dictionary_en_to_en-OX_AUTOGENERATED.txt + - uses: autofix-ci/action@7a166d7532b277f34e16238930461bf77f9d7ed8 diff --git a/.github/workflows/codespell-windows.yml b/.github/workflows/codespell-windows.yml deleted file mode 100644 index c090a224d7..0000000000 --- a/.github/workflows/codespell-windows.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Test Codespell Windows -on: - - push - - pull_request -permissions: {} -jobs: - test-windows: - name: Test Windows - runs-on: windows-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Setup python - uses: actions/setup-python@v5 - with: - python-version: "3.8" - - name: Install dependencies - run: | - python --version - pip install -U pip - pip install setuptools - pip install -e .[dev] - - run: codespell --help - - run: codespell --version - - run: pytest codespell_lib - - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml index 3163b4e35f..bdd0396eba 100644 --- a/.github/workflows/codespell.yml +++ b/.github/workflows/codespell.yml @@ -9,7 +9,7 @@ jobs: name: Check for spelling errors runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: persist-credentials: false - uses: codespell-project/actions-codespell@master diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 88048710d8..d603c5624b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,11 +18,11 @@ jobs: package: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: persist-credentials: false - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.10" - name: Install dependencies @@ -36,7 +36,7 @@ jobs: - name: Check env vars run: | echo "Triggered by: ${{ github.event_name }}" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: dist path: dist @@ -47,7 +47,7 @@ jobs: runs-on: ubuntu-latest if: github.event_name == 'release' steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: dist path: dist diff --git a/.github/workflows/codespell-private.yml b/.github/workflows/tests.yml similarity index 60% rename from .github/workflows/codespell-private.yml rename to .github/workflows/tests.yml index b77b2aa061..16bc8ba438 100644 --- a/.github/workflows/codespell-private.yml +++ b/.github/workflows/tests.yml @@ -11,66 +11,82 @@ permissions: {} jobs: test: env: - REQUIRE_ASPELL: true + REQUIRE_ASPELL: ${{ startsWith(matrix.os, 'ubuntu') }} RUFF_OUTPUT_FORMAT: github # Make sure we're using the latest aspell dictionary - runs-on: ubuntu-24.04-arm + runs-on: ${{ matrix.os }} timeout-minutes: 10 strategy: fail-fast: false matrix: python-version: - - "3.8" - "3.9" - "3.10" - "3.11" - "3.12" - "3.13" - no-toml: - - "" + - "3.14" + kind: + - "standard" + os: + - "ubuntu-24.04-arm" include: - python-version: "3.10" - no-toml: "no-toml" - name: ${{ matrix.python-version }} ${{ matrix.no-toml }} + kind: "old" + os: "ubuntu-24.04-arm" + - python-version: "3.10" + kind: "no-toml" + os: "ubuntu-24.04-arm" + - python-version: "3.13" + kind: "standard" + os: "windows-latest" + name: "${{ matrix.python-version }} ${{ matrix.kind }} ${{ matrix.os }}" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: persist-credentials: false - name: Setup python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - run: sudo apt-get install libaspell-dev aspell-en + if: startsWith(matrix.os, 'ubuntu') - name: Install dependencies + shell: bash -e {0} run: | python --version # just to check - pip install --upgrade pip wheel # upgrade to latest pip find 3.5 wheels; wheel to avoid errors + python -m pip install --upgrade pip wheel # upgrade to latest pip find 3.5 wheels; wheel to avoid errors pip install --upgrade "setuptools!=47.2.0" docutils setuptools_scm[toml] twine - pip install aspell-python-py3 pip install -e ".[dev]" # install the codespell dev packages + - run: pip install aspell-python-py3 + if: startsWith(matrix.os, 'ubuntu') + - run: pip install "chardet<7" + if: ${{ matrix.kind == 'old' }} - run: codespell --help - run: codespell --version - run: make check + if: startsWith(matrix.os, 'ubuntu') + - run: pytest codespell_lib + if: startsWith(matrix.os, 'windows') - uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} # tomli should not be required for the next two steps (and make sure it's not) - run: pip uninstall -yq tomli - if: ${{ matrix.no-toml == 'no-toml' }} - - run: codespell --check-filenames --skip="./.git/*,./.pytest_cache/*,./junit-results.xml,*.pyc,./codespell_lib/tests/test_basic.py,./codespell_lib/data/*,./example/code.c,./build/lib/codespell_lib/tests/test_basic.py,./build/lib/codespell_lib/data/*,README.rst,*.egg-info/*,pyproject-codespell.precommit-toml,./.mypy_cache" + if: ${{ matrix.kind == 'no-toml' }} + - run: codespell --check-filenames --skip="./.*,./build/*,./codespell_lib/data/*,./codespell_lib/tests/test_basic.py,./example/code.c,./junit-results.xml,*.egg-info/*,*.pyc,*.sig,pyproject-codespell.precommit-toml,README.rst," # this file has an error - run: "! codespell codespell_lib/tests/test_basic.py" + shell: bash -e {0} make-check-dictionaries: runs-on: ubuntu-latest timeout-minutes: 10 steps: - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: 3.x - - uses: actions/checkout@v4 + uses: actions/setup-python@v6 + - uses: actions/checkout@v6 with: persist-credentials: false - name: Install general dependencies diff --git a/.gitignore b/.gitignore index f4d749b818..cb3acd2e3e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ codespell.egg-info codespell_lib/_version.py junit-results.xml *.egg-info/ +.DS_Store diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6c43f392e1..218ff0117e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,7 +4,7 @@ exclude: ^(\.[^/]*cache/.*)$ repos: - repo: https://github.com/executablebooks/mdformat # Do this before other tools "fixing" the line endings - rev: 0.7.21 + rev: 1.0.0 hooks: - id: mdformat name: Format Markdown @@ -26,7 +26,7 @@ repos: hooks: - id: rst-linter - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: no-commit-to-branch args: [--branch, main] @@ -50,7 +50,7 @@ repos: files: dictionary.*\.txt$|\.wordlist$ args: [--ignore-case] - repo: https://github.com/adrienverge/yamllint.git - rev: v1.35.1 + rev: v1.38.0 hooks: - id: yamllint args: @@ -58,28 +58,28 @@ repos: - -d - "{extends: relaxed, rules: {line-length: {max: 90}}}" - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.9.1 + rev: v0.15.4 hooks: - - id: ruff + - id: ruff-check - id: ruff-format - - repo: https://github.com/pre-commit/mirrors-prettier - rev: v4.0.0-alpha.8 + - repo: https://github.com/rbubley/mirrors-prettier + rev: v3.8.1 hooks: - id: prettier types_or: [yaml, markdown, html, css, scss, javascript, json] - repo: https://github.com/codespell-project/codespell - rev: v2.3.0 + rev: v2.4.1 hooks: - id: codespell args: [--toml, pyproject-codespell.precommit-toml] additional_dependencies: - tomli - repo: https://github.com/abravalheri/validate-pyproject - rev: v0.23 + rev: v0.25 hooks: - id: validate-pyproject - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.14.1 + rev: v1.19.1 hooks: - id: mypy args: ["--config-file", "pyproject.toml"] @@ -89,4 +89,4 @@ repos: - types-chardet ci: - autoupdate_schedule: monthly + autoupdate_schedule: weekly diff --git a/Makefile b/Makefile index 1915f2e69f..fdbad92948 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,21 @@ -DICTIONARIES := codespell_lib/data/dictionary*.txt codespell_lib/tests/data/*.wordlist +DICTIONARIES = codespell_lib/data/dictionary*.txt codespell_lib/tests/data/*.wordlist PHONY := all check check-dictionaries sort-dictionaries trim-dictionaries check-dist pytest pypi ruff clean -all: check-dictionaries codespell.1 +GENERATED := codespell_lib/data/dictionary_en_to_en-OX_AUTOGENERATED.txt -check: check-dictionaries check-dist pytest ruff +all: $(GENERATED) check-dictionaries codespell.1 + +check: $(GENERATED) check-dictionaries check-dist pytest ruff + +$(GENERATED): codespell_lib/data/dictionary_en-GB_to_en-US.txt ./tools/gen_OX.sh + ./tools/gen_OX.sh codespell_lib/data/dictionary_en-GB_to_en-US.txt > codespell_lib/data/dictionary_en_to_en-OX_AUTOGENERATED.txt codespell.1: codespell.1.include Makefile PYTHONPATH=. help2man codespell --include codespell.1.include --no-info --output codespell.1 sed -i '/\.SS \"Usage/,+2d' codespell.1 -check-dictionaries: +check-dictionaries: sort-dictionaries @for dictionary in ${DICTIONARIES}; do \ if grep -E -n "^\s*$$|\s$$|^\s" $$dictionary; then \ echo "Dictionary $$dictionary contains leading/trailing whitespace and/or blank lines. Trim with 'make trim-dictionaries'"; \ @@ -24,10 +29,10 @@ check-dictionaries: exit 1; \ fi -sort-dictionaries: +sort-dictionaries: $(GENERATED) pre-commit run --all-files file-contents-sorter -trim-dictionaries: +trim-dictionaries: $(GENERATED) @for dictionary in ${DICTIONARIES}; do \ sed -E -i.bak -e 's/^[[:space:]]+//; s/[[:space:]]+$$//; /^$$/d' $$dictionary && rm $$dictionary.bak; \ done @@ -39,9 +44,9 @@ check-dist: rm -rf $(TMP) ruff: - pre-commit run --all-files ruff + pre-commit run --all-files ruff-check -pytest: +pytest: sort-dictionaries @if command -v pytest > /dev/null; then \ pytest codespell_lib; \ else \ diff --git a/README.rst b/README.rst index d98f8cd96d..a9562e8f2b 100644 --- a/README.rst +++ b/README.rst @@ -20,7 +20,7 @@ Useful links Requirements ------------ -Python 3.8 or above. +Python 3.9 or above. Installation ------------ @@ -119,7 +119,7 @@ You can select the optional dictionaries with the ``--builtin`` option. Ignoring words -------------- -When ignoring false positives, note that spelling errors are *case-insensitive* but words to ignore are *case-sensitive*. For example, the dictionary entry ``wrod`` will also match the typo ``Wrod``, but to ignore it you must pass ``Wrod``. +When ignoring false positives, note that spelling errors are *case-insensitive* but words to ignore are *case-sensitive*. For example, the dictionary entry ``wrod`` will also match the typo ``Wrod``, but to ignore it you must pass ``wrod`` (to match the case of the dictionary entry). The words to ignore can be passed in two ways: @@ -229,6 +229,13 @@ instead of these invalid entries: .. _tomli: https://pypi.org/project/tomli/ +Reading arguments from file +--------------------------- + +Additional arguments can be read from a file with ``@PATH``. Arguments are +extracted using ``shlex.split()``. + + pre-commit hook --------------- @@ -237,7 +244,7 @@ codespell also works with `pre-commit `_, using .. code-block:: yaml - repo: https://github.com/codespell-project/codespell - rev: v2.2.4 + rev: v2.4.1 hooks: - id: codespell @@ -246,7 +253,7 @@ If one configures codespell using the `pyproject.toml` file instead use: .. code-block:: yaml - repo: https://github.com/codespell-project/codespell - rev: v2.2.4 + rev: v2.4.1 hooks: - id: codespell additional_dependencies: diff --git a/codespell_lib/_codespell.py b/codespell_lib/_codespell.py index 794009bf56..c5b5b4e21b 100644 --- a/codespell_lib/_codespell.py +++ b/codespell_lib/_codespell.py @@ -23,20 +23,15 @@ import itertools import os import re +import shlex import sys import textwrap +from collections.abc import Iterable, Sequence +from re import Match, Pattern from typing import ( Any, - Dict, - Iterable, - List, - Match, Optional, - Pattern, - Sequence, - Set, TextIO, - Tuple, ) if sys.platform == "win32": @@ -58,9 +53,12 @@ # these may occur unescaped in URIs, and so we are more restrictive on the # endpoint. Emails are more restrictive, so the endpoint remains flexible. uri_regex_def = ( - "(\\b(?:https?|[ts]?ftp|file|git|smb)://[^\\s]+(?=$|\\s)|\\b[\\w.%+-]+@[\\w.-]+\\b)" + r"(\b(?:https?|[ts]?ftp|file|git|smb)://[^\s]+(?=$|\s)|\b[\w.%+-]+@[\w.-]+\b)" +) +codespell_ignore_tag = "codespell:ignore" +inline_ignore_regex = re.compile( + rf"[^\w\s]\s*{codespell_ignore_tag}\b(\s+(?P[\w,]*))?" ) -inline_ignore_regex = re.compile(r"[^\w\s]\s?codespell:ignore\b(\s+(?P[\w,]*))?") USAGE = """ \t%prog [OPTIONS] [file1 file2 ... fileN] """ @@ -132,6 +130,15 @@ ("en_GB",), ("en_US",), ), + ( + "en_to_en-OX", + "for corrections from en to en-OX", + "_en_to_en-OX_AUTOGENERATED", + None, + None, + None, + None, + ), ) _builtin_default = "clear,rare" @@ -161,8 +168,8 @@ class QuietLevels: class GlobMatch: - def __init__(self, pattern: List[str]) -> None: - self.pattern_list: List[str] = pattern + def __init__(self, pattern: list[str]) -> None: + self.pattern_list: list[str] = pattern def match(self, filename: str) -> bool: return any(fnmatch.fnmatch(filename, p) for p in self.pattern_list) @@ -184,7 +191,7 @@ def disable(self) -> None: class Summary: def __init__(self) -> None: - self.summary: Dict[str, int] = {} + self.summary: dict[str, int] = {} def update(self, wrongword: str) -> None: if wrongword in self.summary: @@ -216,23 +223,29 @@ def __init__( def init_chardet(self) -> None: try: - from chardet.universaldetector import UniversalDetector - except ImportError as e: + import chardet # noqa: F401 + except ImportError: msg = ( "There's no chardet installed to import from. " "Please, install it and check your PYTHONPATH " "environment variable" ) - raise ImportError(msg) from e + raise ImportError(msg) + try: + from chardet import UniversalDetector + except ImportError: # chardet < 7 + from chardet.universaldetector import UniversalDetector self.encdetector = UniversalDetector() - def open(self, filename: str) -> Tuple[List[str], str]: + def open(self, filename: str) -> tuple[list[tuple[bool, int, list[str]]], str]: if self.use_chardet: return self.open_with_chardet(filename) return self.open_with_internal(filename) - def open_with_chardet(self, filename: str) -> Tuple[List[str], str]: + def open_with_chardet( + self, filename: str + ) -> tuple[list[tuple[bool, int, list[str]]], str]: self.encdetector.reset() with open(filename, "rb") as fb: for line in fb: @@ -259,7 +272,9 @@ def open_with_chardet(self, filename: str) -> Tuple[List[str], str]: return lines, f.encoding - def open_with_internal(self, filename: str) -> Tuple[List[str], str]: + def open_with_internal( + self, filename: str + ) -> tuple[list[tuple[bool, int, list[str]]], str]: encoding = None first_try = True for encoding in ("utf-8", "iso-8859-1"): @@ -286,21 +301,25 @@ def open_with_internal(self, filename: str) -> Tuple[List[str], str]: return lines, encoding - def get_lines(self, f: TextIO) -> List[str]: + def get_lines(self, f: TextIO) -> list[tuple[bool, int, list[str]]]: + fragments = [] + line_number = 0 if self.ignore_multiline_regex: text = f.read() pos = 0 - text2 = "" for m in re.finditer(self.ignore_multiline_regex, text): - text2 += text[pos : m.start()] - # Replace with blank lines so line numbers are unchanged. - text2 += "\n" * m.group().count("\n") + lines = text[pos : m.start()].splitlines(True) + fragments.append((False, line_number, lines)) + line_number += len(lines) + lines = m.group().splitlines(True) + fragments.append((True, line_number, lines)) + line_number += len(lines) - 1 pos = m.end() - text2 += text[pos:] - lines = text2.split("\n") + lines = text[pos:].splitlines(True) + fragments.append((False, line_number, lines)) else: - lines = f.readlines() - return lines + fragments.append((False, line_number, f.readlines())) + return fragments # -.-:-.-:-.-:-.:-.-:-.-:-.-:-.-:-.:-.-:-.-:-.-:-.-:-.:-.-:- @@ -313,7 +332,7 @@ def get_lines(self, f: TextIO) -> List[str]: class NewlineHelpFormatter(argparse.HelpFormatter): """Help formatter that preserves newlines and deals with lists.""" - def _split_lines(self, text: str, width: int) -> List[str]: + def _split_lines(self, text: str, width: int) -> list[str]: parts = text.split("\n") out = [] for part in parts: @@ -330,7 +349,7 @@ def _split_lines(self, text: str, width: int) -> List[str]: return out -def _toml_to_parseconfig(toml_dict: Dict[str, Any]) -> Dict[str, Any]: +def _toml_to_parseconfig(toml_dict: dict[str, Any]) -> dict[str, Any]: """Convert a dict read from a TOML file to the parseconfig.read_dict() format.""" return { k: "" if v is True else ",".join(v) if isinstance(v, list) else v @@ -373,8 +392,28 @@ def _supports_ansi_colors() -> bool: def parse_options( args: Sequence[str], -) -> Tuple[argparse.Namespace, argparse.ArgumentParser, List[str]]: - parser = argparse.ArgumentParser(formatter_class=NewlineHelpFormatter) +) -> tuple[argparse.Namespace, argparse.ArgumentParser, list[str]]: + # Split lines read from `@PATH` using shlex.split(), otherwise default + # behaviour is to have one arg per line. See: + # https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.convert_arg_line_to_args + class ArgumentParser2(argparse.ArgumentParser): + def convert_arg_line_to_args(self, arg_line: str) -> list[str]: + if sys.platform == "win32": + # On Windows, shlex.split() seems to be messed up by back + # slashes. Temporarily changing them to forward slashes seems + # to make things work better. + arg_line = arg_line.replace("\\", "/") + ret = shlex.split(arg_line) + ret = [p.replace("/", "\\") for p in ret] + else: + ret = shlex.split(arg_line) + return ret + + parser = ArgumentParser2( + formatter_class=NewlineHelpFormatter, + fromfile_prefix_chars="@", + epilog="Use @PATH to read additional arguments from file PATH.", + ) parser.set_defaults(colors=_supports_ansi_colors()) parser.add_argument("--version", action="version", version=VERSION) @@ -697,7 +736,7 @@ def parse_options( def process_ignore_words( - words: Iterable[str], ignore_words: Set[str], ignore_words_cased: Set[str] + words: Iterable[str], ignore_words: set[str], ignore_words_cased: set[str] ) -> None: for word in words: word = word.strip() @@ -708,10 +747,10 @@ def process_ignore_words( def parse_ignore_words_option( - ignore_words_option: List[str], -) -> Tuple[Set[str], Set[str]]: - ignore_words: Set[str] = set() - ignore_words_cased: Set[str] = set() + ignore_words_option: list[str], +) -> tuple[set[str], set[str]]: + ignore_words: set[str] = set() + ignore_words_cased: set[str] = set() if ignore_words_option: for comma_separated_words in ignore_words_option: process_ignore_words( @@ -722,13 +761,13 @@ def parse_ignore_words_option( return (ignore_words, ignore_words_cased) -def build_exclude_hashes(filename: str, exclude_lines: Set[str]) -> None: +def build_exclude_hashes(filename: str, exclude_lines: set[str]) -> None: with open(filename, encoding="utf-8") as f: exclude_lines.update(line.rstrip() for line in f) def build_ignore_words( - filename: str, ignore_words: Set[str], ignore_words_cased: Set[str] + filename: str, ignore_words: set[str], ignore_words_cased: set[str] ) -> None: with open(filename, encoding="utf-8") as f: process_ignore_words( @@ -756,7 +795,7 @@ def ask_for_word_fix( misspelling: Misspelling, interactivity: int, colors: TermColors, -) -> Tuple[bool, str]: +) -> tuple[bool, str]: wrongword = match.group() if interactivity <= 0: return misspelling.fix, fix_case(wrongword, misspelling.data) @@ -813,9 +852,9 @@ def ask_for_word_fix( def print_context( - lines: List[str], + lines: list[str], index: int, - context: Tuple[int, int], + context: tuple[int, int], ) -> None: # context = (context_before, context_after) for i in range(index - context[0], index + context[1] + 1): @@ -836,7 +875,7 @@ def extract_words( text: str, word_regex: Pattern[str], ignore_word_regex: Optional[Pattern[str]], -) -> List[str]: +) -> list[str]: return word_regex.findall(_ignore_word_sub(text, ignore_word_regex)) @@ -844,18 +883,18 @@ def extract_words_iter( text: str, word_regex: Pattern[str], ignore_word_regex: Optional[Pattern[str]], -) -> List[Match[str]]: +) -> list[Match[str]]: return list(word_regex.finditer(_ignore_word_sub(text, ignore_word_regex))) def apply_uri_ignore_words( - check_matches: List[Match[str]], + check_matches: list[Match[str]], line: str, word_regex: Pattern[str], ignore_word_regex: Optional[Pattern[str]], uri_regex: Pattern[str], - uri_ignore_words: Set[str], -) -> List[Match[str]]: + uri_ignore_words: set[str], +) -> list[Match[str]]: if not uri_ignore_words: return check_matches for uri in uri_regex.findall(line): @@ -869,88 +908,63 @@ def apply_uri_ignore_words( return check_matches -def parse_file( +def _format_colored_output( + filename: str, + colors: TermColors, + line_num: int, + wrong: str, + right: str, +) -> tuple[str, str, str, str]: + """Format colored strings for output. + + Args: + filename: The filename being processed. + colors: TermColors instance for color formatting. + line_num: Line number (1-based) where the misspelling was found. + wrong: The misspelled word. + right: The correct word. + + Returns: + Tuple of (filename, line_num, wrong_word, right_word) with color codes. + """ + cfilename = f"{colors.FILE}{filename}{colors.DISABLE}" + cline = f"{colors.FILE}{line_num}{colors.DISABLE}" + cwrongword = f"{colors.WWORD}{wrong}{colors.DISABLE}" + crightword = f"{colors.FWORD}{right}{colors.DISABLE}" + return cfilename, cline, cwrongword, crightword + + +def parse_lines( + fragment: tuple[bool, int, list[str]], filename: str, colors: TermColors, summary: Optional[Summary], - misspellings: Dict[str, Misspelling], - ignore_words_cased: Set[str], - exclude_lines: Set[str], - file_opener: FileOpener, + misspellings: dict[str, Misspelling], + ignore_words_cased: set[str], + exclude_lines: set[str], word_regex: Pattern[str], ignore_word_regex: Optional[Pattern[str]], uri_regex: Pattern[str], - uri_ignore_words: Set[str], - context: Optional[Tuple[int, int]], + uri_ignore_words: set[str], + context: Optional[tuple[int, int]], options: argparse.Namespace, -) -> int: +) -> tuple[int, bool, list[tuple[int, str, str]]]: bad_count = 0 - lines = None changed = False + changes_made: list[tuple[int, str, str]] = [] - if filename == "-": - f = sys.stdin - encoding = "utf-8" - lines = f.readlines() - else: - if options.check_filenames: - for word in extract_words(filename, word_regex, ignore_word_regex): - if word in ignore_words_cased: - continue - lword = word.lower() - if lword not in misspellings: - continue - fix = misspellings[lword].fix - fixword = fix_case(word, misspellings[lword].data) - - if summary and fix: - summary.update(lword) - - cfilename = f"{colors.FILE}{filename}{colors.DISABLE}" - cwrongword = f"{colors.WWORD}{word}{colors.DISABLE}" - crightword = f"{colors.FWORD}{fixword}{colors.DISABLE}" - - reason = misspellings[lword].reason - if reason: - if options.quiet_level & QuietLevels.DISABLED_FIXES: - continue - creason = f" | {colors.FILE}{reason}{colors.DISABLE}" - else: - if options.quiet_level & QuietLevels.NON_AUTOMATIC_FIXES: - continue - creason = "" - - bad_count += 1 - - print(f"{cfilename}: {cwrongword} ==> {crightword}{creason}") - - # ignore irregular files - if not os.path.isfile(filename): - return bad_count - - try: - text = is_text_file(filename) - except PermissionError as e: - print(f"WARNING: {e.strerror}: {filename}", file=sys.stderr) - return bad_count - except OSError: - return bad_count - - if not text: - if not options.quiet_level & QuietLevels.BINARY_FILE: - print(f"WARNING: Binary file: {filename}", file=sys.stderr) - return bad_count - try: - lines, encoding = file_opener.open(filename) - except OSError: - return bad_count + _, fragment_line_number, lines = fragment for i, line in enumerate(lines): - if line.rstrip() in exclude_lines: + line = line.rstrip() + if not line or line in exclude_lines: continue + line_number = fragment_line_number + i extra_words_to_ignore = set() - match = inline_ignore_regex.search(line) + match = ( + inline_ignore_regex.search(line) if codespell_ignore_tag in line else None + ) if match: extra_words_to_ignore = set( filter(None, (match.group("words") or "").split(",")) @@ -1023,6 +1037,7 @@ def parse_file( changed = True lines[i] = re.sub(rf"\b{word}\b", fixword, lines[i]) fixed_words.add(word) + changes_made.append((line_number + 1, word, fixword)) continue # otherwise warning was explicitly set by interactive mode @@ -1033,10 +1048,9 @@ def parse_file( ): continue - cfilename = f"{colors.FILE}{filename}{colors.DISABLE}" - cline = f"{colors.FILE}{i + 1}{colors.DISABLE}" - cwrongword = f"{colors.WWORD}{word}{colors.DISABLE}" - crightword = f"{colors.FWORD}{fixword}{colors.DISABLE}" + cfilename, cline, cwrongword, crightword = _format_colored_output( + filename, colors, line_number + 1, word, fixword + ) reason = misspellings[lword].reason if reason: @@ -1066,25 +1080,143 @@ def parse_file( f"==> {crightword}{creason}" ) + return bad_count, changed, changes_made + + +def parse_file( + filename: str, + colors: TermColors, + summary: Optional[Summary], + misspellings: dict[str, Misspelling], + ignore_words_cased: set[str], + exclude_lines: set[str], + file_opener: FileOpener, + word_regex: Pattern[str], + ignore_word_regex: Optional[Pattern[str]], + uri_regex: Pattern[str], + uri_ignore_words: set[str], + context: Optional[tuple[int, int]], + options: argparse.Namespace, +) -> int: + bad_count = 0 + fragments = None + + # Read lines. + if filename == "-": + f = sys.stdin + encoding = "utf-8" + fragments = file_opener.get_lines(f) + else: + if options.check_filenames: + for word in extract_words(filename, word_regex, ignore_word_regex): + if word in ignore_words_cased: + continue + lword = word.lower() + if lword not in misspellings: + continue + fix = misspellings[lword].fix + fixword = fix_case(word, misspellings[lword].data) + + if summary and fix: + summary.update(lword) + + cfilename, _, cwrongword, crightword = _format_colored_output( + filename, colors, 0, word, fixword + ) + + reason = misspellings[lword].reason + if reason: + if options.quiet_level & QuietLevels.DISABLED_FIXES: + continue + creason = f" | {colors.FILE}{reason}{colors.DISABLE}" + else: + if options.quiet_level & QuietLevels.NON_AUTOMATIC_FIXES: + continue + creason = "" + + bad_count += 1 + + print(f"{cfilename}: {cwrongword} ==> {crightword}{creason}") + + # ignore irregular files + if not os.path.isfile(filename): + return bad_count + + try: + text = is_text_file(filename) + except PermissionError as e: + print(f"WARNING: {e.strerror}: {filename}", file=sys.stderr) + return bad_count + except OSError: + return bad_count + + if not text: + if not options.quiet_level & QuietLevels.BINARY_FILE: + print(f"WARNING: Binary file: {filename}", file=sys.stderr) + return bad_count + try: + fragments, encoding = file_opener.open(filename) + except OSError: + return bad_count + + # Parse lines. + changed = False + changes_made: list[tuple[int, str, str]] = [] + for fragment in fragments: + ignore, _, _ = fragment + if ignore: + continue + + bad_count_update, changed_update, changes_made_update = parse_lines( + fragment, + filename, + colors, + summary, + misspellings, + ignore_words_cased, + exclude_lines, + word_regex, + ignore_word_regex, + uri_regex, + uri_ignore_words, + context, + options, + ) + bad_count += bad_count_update + changed = changed or changed_update + changes_made.extend(changes_made_update) + + # Write out lines, if changed. if changed: if filename == "-": print("---") - for line in lines: - print(line, end="") + for _, _, lines in fragments: + for line in lines: + print(line, end="") else: if not options.quiet_level & QuietLevels.FIXES: print( f"{colors.FWORD}FIXED:{colors.DISABLE} {filename}", file=sys.stderr, ) + for line_num, wrong, right in changes_made: + cfilename, cline, cwrongword, crightword = _format_colored_output( + filename, colors, line_num, wrong, right + ) + print( + f" {cfilename}:{cline}: {cwrongword} ==> {crightword}", + file=sys.stderr, + ) with open(filename, "w", encoding=encoding, newline="") as f: - f.writelines(lines) + for _, _, lines in fragments: + f.writelines(lines) + return bad_count def flatten_clean_comma_separated_arguments( arguments: Iterable[str], -) -> List[str]: +) -> list[str]: """ >>> flatten_clean_comma_separated_arguments(["a, b ,\n c, d,", "e"]) ['a', 'b', 'c', 'd', 'e'] @@ -1226,7 +1358,7 @@ def main(*args: str) -> int: f"ERROR: cannot find dictionary file: {dictionary}", ) use_dictionaries.append(dictionary) - misspellings: Dict[str, Misspelling] = {} + misspellings: dict[str, Misspelling] = {} for dictionary in use_dictionaries: build_dict(dictionary, misspellings, ignore_words) colors = TermColors() @@ -1254,7 +1386,7 @@ def main(*args: str) -> int: context_after = max(0, options.after_context) context = (context_before, context_after) - exclude_lines: Set[str] = set() + exclude_lines: set[str] = set() if options.exclude_file: exclude_files = flatten_clean_comma_separated_arguments(options.exclude_file) for exclude_file in exclude_files: diff --git a/codespell_lib/_spellchecker.py b/codespell_lib/_spellchecker.py index 82865cdd19..7b511e6d3e 100644 --- a/codespell_lib/_spellchecker.py +++ b/codespell_lib/_spellchecker.py @@ -16,11 +16,6 @@ Copyright (C) 2011 ProFUSION embedded systems """ -from typing import ( - Dict, - Set, -) - # Pass all misspellings through this translation table to generate # alternative misspellings and fixes. alt_chars = (("'", "’"),) # noqa: RUF001 @@ -36,7 +31,7 @@ def __init__(self, data: str, fix: bool, reason: str) -> None: def add_misspelling( key: str, data: str, - misspellings: Dict[str, Misspelling], + misspellings: dict[str, Misspelling], ) -> None: data = data.strip() @@ -53,8 +48,8 @@ def add_misspelling( def build_dict( filename: str, - misspellings: Dict[str, Misspelling], - ignore_words: Set[str], + misspellings: dict[str, Misspelling], + ignore_words: set[str], ) -> None: with open(filename, encoding="utf-8") as f: translate_tables = [(x, str.maketrans(x, y)) for x, y in alt_chars] diff --git a/codespell_lib/data/dictionary.txt b/codespell_lib/data/dictionary.txt index 2fd566f0b5..e1f291a9d0 100644 --- a/codespell_lib/data/dictionary.txt +++ b/codespell_lib/data/dictionary.txt @@ -635,6 +635,12 @@ acceleratored->accelerated acceleratoring->accelerating acceleratrion->acceleration acceleread->accelerated +accelereate->accelerate +accelereated->accelerated +accelereates->accelerates +accelereating->accelerating +accelereation->acceleration +accelereations->accelerations accelerte->accelerate accelertion->acceleration accelertor->accelerator @@ -834,6 +840,8 @@ acciental->accidental accientally->accidentally accissible->accessible acclamied->acclaimed +accleometer->accelerometer +accleometers->accelerometers acclerate->accelerate acclerated->accelerated acclerates->accelerates @@ -1663,6 +1671,7 @@ actice->active acticely->actively acticities->activities acticity->activity +actieve->active actine->active actitivies->activities actiual->actual @@ -1719,7 +1728,7 @@ activsted->activated activstes->activates activte->activate activted->activated -activtes->activates +activtes->activates, activities, activties->activities activting->activating activtion->activation @@ -1952,6 +1961,8 @@ additionalyy->additionally additionnal->additional additionnally->additionally additionnaly->additionally +addititional->additional +addititionally->additionally additivies->additives additivley->additively, additive, additoin->addition @@ -2431,9 +2442,19 @@ adverst->adverts advertice->advertise adverticed->advertised adverticement->advertisement +adverticements->advertisements +advertie->advertise +advertied->advertised +advertiement->advertisement +advertiements->advertisements +advertier->advertiser +advertiers->advertisers +adverties->advertises +advertiing->advertising advertis->adverts, advertise, advertisiers->advertisers advertisiment->advertisement +advertisiments->advertisements advertisin->advertising advertisment->advertisement advertisments->advertisements @@ -2459,6 +2480,7 @@ adviced->advised advices->advice advicing->advising advirtisement->advertisement +advirtisements->advertisements adviseable->advisable adviseer->adviser adviseur->adviser @@ -2544,6 +2566,8 @@ affilations->affiliations affiliato->affiliation affiliaton->affiliation affiliction->affiliation, affliction, +affilitation->affiliation +affilitations->affiliations affilliate->affiliate affinitied->affinities affinitiy->affinity @@ -2575,6 +2599,10 @@ affortable->affordable afforts->affords, efforts, affraid->afraid affrimative->affirmative +afftect->affect +afftected->affected +afftecting->affecting +afftects->affects affter->after affulent->affluent afgahnistan->Afghanistan @@ -2725,6 +2753,14 @@ aggreeableness->agreeableness aggreeably->agreeably aggreecate->aggregate aggreed->agreed +aggreegate->aggregate +aggreegated->aggregated +aggreegates->aggregates +aggreegating->aggregating +aggreegation->aggregation +aggreegations->aggregations +aggreegator->aggregator +aggreegators->aggregators aggreeing->agreeing aggreement->agreement aggreements->agreements @@ -3107,6 +3143,18 @@ alernative->alternative alernatively->alternatively alernatives->alternatives alers->alerts, alters, +aletr->alert, alter, +aletred->alerted, altered, +aletring->alerting, altering, +aletrnate->alternate +aletrnated->alternated +aletrnately->alternately +aletrnates->alternates +aletrnating->alternating +aletrnative->alternative +aletrnatively->alternatively +aletrnatives->alternatives +aletrs->alerts, alters, aleviate->alleviate aleviates->alleviates aleviating->alleviating @@ -3393,6 +3441,7 @@ aligment->alignment aligments->alignments aligmnet->alignment aligmnets->alignments +alignaed->aligned alignament->alignment alignaments->alignments alignation->alignment @@ -3971,6 +4020,7 @@ ambigious->ambiguous ambigous->ambiguous ambiguious->ambiguous ambiguitiy->ambiguity +ambigunous->ambiguous ambiguos->ambiguous ambiguuous->ambiguous ambiguuously->ambiguously @@ -4461,7 +4511,7 @@ androis->androids andthe->and the andtoid->android andtoids->androids -ane->and +ane->and, one, anecdatal->anecdotal anecdatally->anecdotally anecdate->anecdote @@ -5166,6 +5216,8 @@ aparently->apparently aparment->apartment aparrent->apparent aparrently->apparently +apartemnt->apartment +apartemnts->apartments apartheied->apartheid aparthide->apartheid aparthied->apartheid @@ -5174,6 +5226,8 @@ apartmen->apartment apartmens->apartments apartmet->apartment apartmets->apartments +aparttment->apartment +aparttments->apartments apaul->appall apauled->appalled apauling->appalling @@ -5413,7 +5467,11 @@ appeciating->appreciating appeciation->appreciation appeciative->appreciative appeded->appended +appedice->appendice, appendix, +appedices->appendices +appedicitis->appendicitis appeding->appending +appedix->appendix appedn->append appen->append, happen, aspen, appendend->appended @@ -6744,6 +6802,8 @@ arrants->arrangements arraows->arrows arrary->array arrarys->arrays +arrauy->array +arrauys->arrays arraye->array arrayes->arrays arre->are @@ -7011,6 +7071,7 @@ askign->asking askin->asking, ask in, akin, skin, a skin, askreddt->AskReddit aslo->also +asncronous->asynchronous asnd->and asnwer->answer asnwered->answered @@ -7167,6 +7228,7 @@ assesments->assessments assessin->assassin, assessing, assess in, assessmant->assessment assessmants->assessments +assests->assess, assets, assfalt->asphalt assfalted->asphalted assfalting->asphalting @@ -7623,6 +7685,8 @@ asterices->asterisks asterik->asterisk asteriks->asterisk, asterisks, asteriod->asteroid +asterisc->asterisk +asteriscs->asterisks astethic->aesthetic astethically->aesthetically astethicism->aestheticism @@ -7674,6 +7738,11 @@ asymetricaly->asymmetrically asymetries->asymmetries asymetriy->asymmetry asymetry->asymmetry +asymmectric->asymmetric +asymmectrical->asymmetrical +asymmectrically->asymmetrically +asymmectries->asymmetries +asymmectry->asymmetry asymmeric->asymmetric asymmerical->asymmetrical asymmerically->asymmetrically @@ -7926,6 +7995,13 @@ attirbute->attribute attirbutes->attributes attiribute->attribute attitide->attitude +attitides->attitudes +attivate->activate +attivated->activated +attivates->activates +attivating->activating +attivation->activation +attivations->activations attmept->attempt attmepted->attempted attmepting->attempting @@ -8140,6 +8216,7 @@ auhtorized->authorized auhtorizes->authorizes auhtorizing->authorizing auhtors->authors +aulty->aunty, faulty, aumatically->automatically, traumatically, aunthenticate->authenticate aunthenticated->authenticated @@ -8479,6 +8556,7 @@ auto-detetion->auto-detection, auto-deletion, auto-detets->auto-detects, auto-deletes, auto-ganerated->auto-generated auto-generaged->auto-generated +auto-genertaed->auto-generated auto-genrated->auto-generated auto-genratet->auto-generated auto-genration->auto-generation @@ -8529,6 +8607,9 @@ auto-negoziation->auto-negotiation auto-negoziations->auto-negotiations auto-realease->auto-release auto-realeased->auto-released +autoated->automated +autoatic->automatic +autoatically->automatically autochtonous->autochthonous autocmplete->autocomplete autocmpleted->autocompleted @@ -8836,6 +8917,12 @@ avod->avoid avoded->avoided avoding->avoiding avods->avoids +avoic->avoid +avoicance->avoidance +avoiced->avoided +avoicing->avoiding +avoics->avoids +avoide->avoid, avoided, avoids, avoidence->avoidance avoidin->avoiding, avoid in, a void in, avoind->avoid @@ -8871,6 +8958,7 @@ awsome->awesome awya->away axises->axes axissymmetric->axisymmetric +axisymmectric->axisymmetric axix->axis axixsymmetric->axisymmetric axpressed->expressed @@ -8984,6 +9072,8 @@ backwarks->backwards backwars->backward, backwards, backwrad->backward backwrads->backwards +backwward->backward +backwwards->backwards bacome->become, became, bacomes->becomes bacoming->becoming @@ -9251,6 +9341,7 @@ beeings->beings beetween->between beetwen->between beffer->buffer +beflow->below befoer->before befoerhand->beforehand befor->before @@ -9287,6 +9378,7 @@ beginer->beginner beginers->beginners begines->begins beging->begging, beginning, being, +beginin->beginning begininer->beginner begininers->beginners begining->beginning @@ -9606,6 +9698,8 @@ binay->binary bindin->binding, bind in, bindi, bindis, bindins->bindings binidng->binding +binnaries->binaries +binnary->binary binominal->binomial binraries->binaries binrary->binary @@ -10079,6 +10173,8 @@ breackpoints->breakpoints breacks->breaks, brakes, breackthrough->breakthrough breackthroughs->breakthroughs +breadcumb->breadcrumb +breadcumbs->breadcrumbs breaked->broken breakes->breaks breakin->breaking, break in, @@ -10232,6 +10328,7 @@ bubbless->bubbles buda->Buddha Buddah->Buddha Buddist->Buddhist +buest->burst, best, guest, bust, bluest, bufefr->buffer bufer->buffer bufers->buffers @@ -10418,6 +10515,7 @@ butons->buttons butterly->butterfly buttin->button buttins->buttons +butto->button buttom->button, bottom, buttoms->buttons, bottoms, buttong->button @@ -10433,6 +10531,10 @@ buyed->bought, buyer, buzilla->bugzilla bve->be bwtween->between +by-pass->bypass +by-passed->bypassed +by-passes->bypasses +by-passing->bypassing byast->biased bycicle->bicycle bycicled->bicycled @@ -10760,6 +10862,15 @@ calibraitons->calibrations calibratin->calibrating, calibration, calibrte->calibrate calibrtion->calibration +calid->valid, canid, +calidate->validate +calidated->validated +calidates->validates +calidating->validating +calidation->validation +calidations->validations +calidator->validator +calidators->validators caligraphy->calligraphy calilng->calling caliming->claiming @@ -10818,6 +10929,12 @@ callls->calls calloed->called callser->caller callsr->calls +calncel->cancel +calncellation->cancellation +calncellations->cancellations +calncelled->cancelled +calncelling->cancelling +calncels->cancels calss->calls, class, calsses->classes calssic->classic @@ -10887,6 +11004,7 @@ cammander->commander cammanders->commanders cammanding->commanding cammands->commands +cammond->command camoflage->camouflage camoflaged->camouflaged camoflages->camouflages @@ -10930,6 +11048,11 @@ canabelyze->cannibalize canabelyzed->cannibalized canabelyzes->cannibalizes canabelyzing->cannibalizing +canacel->cancel +canaceled->canceled +canaceling->canceling +canacelling->cancelling +canacels->cancels canadan->canadian canbe->can be cancelaltion->cancellation @@ -11067,6 +11190,8 @@ cantacting->contacting cantacts->contacts cantain->contain cantained->contained +cantainer->container +cantainers->containers cantaining->containing cantains->contains cantalope->cantaloupe @@ -11135,6 +11260,11 @@ capbailities->capabilities capbaility->capability capbale->capable capbaly->capably +capcaitance->capacitance +capcaities->capacities +capcaitor->capacitor +capcaitors->capacitors +capcaity->capacity capcitance->capacitance capcities->capacities capcitor->capacitor @@ -11767,6 +11897,8 @@ cerinomial->ceremonial cerinomially->ceremonially cerinomies->ceremonies cerinomy->ceremony +ceritificate->certificate +ceritificates->certificates cermonial->ceremonial cermonially->ceremonially cermonies->ceremonies @@ -11842,6 +11974,8 @@ certificats->certificates certifice->certificate certificed->certificated certifices->certificates +certificiate->certificate +certificiates->certificates certificion->certification certificste->certificate certificsted->certificated @@ -11968,6 +12102,7 @@ chanaged->changed chanager->changer chanages->changes chanaging->changing +chanc->chance, chunk, chanceled->canceled chanceling->canceling chancge->change, chance, @@ -11978,7 +12113,10 @@ chanche->chance, change, chanched->changed chanches->chances, changes, chanching->changing +chanck->chunk +chancks->chunks chancnel->channel, cancel, +chancs->chances, chunks, chandaleer->chandelier chandaleers->chandeliers chandalier->chandelier @@ -12020,6 +12158,8 @@ changuing->changing chanined->chained chaning->chaining, changing, chaninging->changing +chank->clank, crank, chalk, chant, chink, chunk, shank, hank, chonk, thank, +chanks->clanks, cranks, chants, chinks, chunks, shanks, hanks, chonks, thanks, chanllenge->challenge chanllenging->challenging channael->channel @@ -12382,6 +12522,7 @@ checksume->checksum checksumed->checksummed checksuming->checksumming checkt->checked +checkto->check to, checkout, checkts->checked, checks, checkum->checksum checkums->checksums @@ -12602,6 +12743,7 @@ chked->checked chlid->child chlidren->children chlids->children +chloropleth->choropleth chnage->change chnaged->changed chnages->changes @@ -12956,6 +13098,7 @@ claibscale->calibscale claime->claim claimes->claims claimin->claiming, claim in, +clairity->clarity clairvoiant->clairvoyant clairvoiantes->clairvoyants clairvoiants->clairvoyants @@ -12967,6 +13110,7 @@ clapse->collapse, clasp, claps, lapse, clapsed->collapsed clapses->collapses clapsing->collapsing +claraty->clarity claravoyant->clairvoyant claravoyantes->clairvoyants claravoyants->clairvoyants @@ -12975,6 +13119,8 @@ clared->cleared clarety->clarity clarifyin->clarifying, clarify in, claring->clearing +claritiy->clarity +clarrity->clarity clases->classes, clashes, cases, clasic->classic clasical->classical @@ -13020,7 +13166,7 @@ classifiying->classifying classifyin->classifying, classify in, classrom->classroom classroms->classrooms -classs->class +classs->class, classes, classses->classes classsic->classic classsical->classical @@ -13197,6 +13343,7 @@ cloess->closes cloesst->closest cloisonay->cloisonné cloisonays->cloisonnés +clokwise->clockwise clonez->clones, cloner, clonin->cloning clonne->clone @@ -13424,6 +13571,8 @@ coeffiecient->coefficient coeffiecients->coefficients coeffient->coefficient coeffients->coefficients +coeffitient->coefficient +coeffitients->coefficients coeficent->coefficient coeficents->coefficients coeficient->coefficient @@ -13432,6 +13581,7 @@ coelesce->coalesce coercable->coercible coerceion->coercion coercin->coercing, coercion, +coered->coerced coersce->coerce coersced->coerced coersces->coerces @@ -13646,13 +13796,16 @@ collumns->columns collums->columns colmn->column colmns->columns +colmun->column colmuned->columned -coloer->color -coloeration->coloration -coloered->colored -coloering->coloring -coloers->colors -coloful->colorful +colmuns->columns +coloer->color, colour, +coloeration->coloration, colouration, +coloered->colored, coloured, +coloering->coloring, colouring, +coloers->colors, colours, +coloful->colorful, colourful, +colokwise->clockwise colombus->Columbus colomn->column colomns->columns @@ -13665,6 +13818,8 @@ colorizoer->colorizer colorpsace->colorspace colorpsaces->colorspaces colose->close +coloskwise->clockwise +colouer->colour coloum->column coloumn->column coloumns->columns @@ -13681,6 +13836,8 @@ colsest->closest, coldest, colsing->closing colud->could, cloud, colum->column +colume->column, volume, +columes->columns, volumes, columm->column colummn->column colummns->columns @@ -13704,6 +13861,7 @@ comamndline->commandline comamnds->commands comand->command comand-line->command-line +comande->command comanded->commanded comander->commander, commandeer, comanding->commanding @@ -13726,6 +13884,9 @@ comapatibility->compatibility comapatible->compatible comapletion->completion comapnies->companies +comapnion->companion +comapnions->companions +comapnionship->companionship comapny->company comaprable->comparable comaprator->comparator @@ -14220,6 +14381,12 @@ commputed->computed commputer->computer commputes->computes commputing->computing +commssion->commission +commssioned->commissioned +commssioner->commissioner +commssioners->commissioners +commssioning->commissioning +commssions->commissions commti->commit commtis->commits commtited->committed @@ -14694,6 +14861,8 @@ complitely->completely complites->completes, compiles, complition->completion, compilation, complmenet->complement +complox->complex +comploxity->complexity complte->complete complted->completed compltely->completely @@ -14748,6 +14917,8 @@ comporessors->compressors comporison->comparison comporisons->comparisons composablity->composability +composant->component +composants->components composibility->composability composiblity->composability composiste->composite @@ -15029,6 +15200,8 @@ concludin->concluding concret->concrete, concert, concretly->concretely concrets->concrete, concerts, +conctructor->constructor +conctructors->constructors concured->concurred, conquered, concurence->concurrence concurency->concurrency @@ -15288,6 +15461,9 @@ confidantally->confidentially confidantals->confidentials confidantial->confidential confidantially->confidentially +confidencial->confidential +confidenciall->confidential +confidencialy->confidentially confidental->confidential confidentally->confidentially confids->confides @@ -15822,6 +15998,7 @@ conneection->connection conneiction->connection connektors->connectors connet->connect +connetable->connectable connetc->connect connetced->connected connetcing->connecting @@ -15829,7 +16006,9 @@ connetcion->connection connetcions->connections connetcor->connector connetcors->connectors +connetec->connected conneted->connected +connetet->connected Conneticut->Connecticut conneting->connecting connetion->connection @@ -15873,6 +16052,8 @@ conntects->connects conntent->content conntents->contents conntroller->controller +connvertion->conversion +connvertions->conversions cononical->canonical cononicalization->canonicalization cononicalize->canonicalize @@ -16163,7 +16344,7 @@ constents->constants, consents, contents, constext->context consting->consisting constinually->continually -constist->consist +constist->consist, consists, constisted->consisted constistency->consistency constistent->consistent @@ -16201,12 +16382,16 @@ constrant->constraint constrants->constraints constrast->contrast constrasts->contrasts +constrat->contrast, constraint, +constrated->contrasted, constrained, constratin->constraint, constrain, constratined->constrained +constrating->contrasting, constraining, constratining->constraining constratins->constraints, constrains, constratint->constraint constratints->constraints +constrats->contrasts, constraints, constraucts->constructs constrct->construct, constrict, constrcted->constructed, constricted, @@ -16346,6 +16531,7 @@ containes->contains, container, contained, containg->containing containging->containing containig->containing +containign->containing containin->containing containined->contained containings->containing @@ -16365,7 +16551,7 @@ containted->contained containter->container containters->containers containting->containing -containts->contains +containts->contains, constraints, containuations->continuations contais->contains contaisn->contains @@ -16530,6 +16716,7 @@ continuem->continuum continueous->continuous continueously->continuously continuesly->continuously +continuim->continuum continuin->continuing continuos->continuous continuosly->continuously @@ -16752,6 +16939,7 @@ conttributes->contributes conttributing->contributing conttribution->contribution conttributions->contributions +contuguous->contiguous contur->contour contzains->contains conuntry->country @@ -17095,6 +17283,13 @@ copmiler->compiler copmilers->compilers copmiles->compiles copmiling->compiling +copmlete->complete +copmleted->completed +copmletely->completely +copmletes->completes +copmleting->completing +copmletion->completion +copmletions->completions copmonent->component copmonents->components copmutations->computations @@ -17530,6 +17725,11 @@ corretness->correctness corretor->corrector corretors->correctors correts->corrects +correxpond->correspond +correxpondance->correspondence +correxponded->corresponded +correxponding->corresponding +correxponds->corresponds corridoor->corridor corridoors->corridors corrispond->correspond @@ -17789,6 +17989,8 @@ counry->country, county, counsellin->counselling counsil->counsel counsils->counsels +counstructor->constructor +counstructors->constructors countain->contain countainer->container countainers->containers @@ -17843,8 +18045,14 @@ coutermeasures->countermeasures couterpart->counterpart couters->counters, routers, scouters, couting->counting +coutn->count +coutndown->countdown +coutned->counted coutner->counter coutners->counters +coutning->counting +coutnown->countdown +coutns->counts coutries->countries coutry->country couuld->could @@ -18092,6 +18300,7 @@ critcially->critically critcials->criticals criteak->critique critera->criteria +criteras->criteria criterea->criteria critereon->criterion criterias->criteria @@ -18128,6 +18337,7 @@ critizing->criticizing critque->critique critqued->critiqued critquing->critiquing +critreria->criteria croch->crotch crockadile->crocodile crockodiles->crocodiles @@ -18437,6 +18647,8 @@ custamizable->customizable custamized->customized custamizes->customizes custamizing->customizing +custoemr->customer +custoemrs->customers custoisable->customisable custoisation->customisation custoise->customise @@ -18706,6 +18918,9 @@ daquiri->daiquiri daquiris->daiquiris Dardenelles->Dardanelles darma->dharma +darw->draw +darwn->drawn, Darwin, +darws->draws dasboard->dashboard dasboards->dashboards dasdot->dashdot @@ -18859,8 +19074,8 @@ deafualts->defaults deafult->default deafulted->defaulted deafults->defaults -deail->deal -deailing->dealing +deail->deal, detail, derail, +deailing->dealing, detailing, derailing, deaktivate->deactivate deaktivated->deactivated dealed->dealt @@ -19152,6 +19367,12 @@ decommissionin->decommissioning, decommission in, decommissionn->decommission decommissionned->decommissioned decommpress->decompress +decommssion->decommission +decommssioned->decommissioned +decommssioner->decommissioner +decommssioners->decommissioners +decommssioning->decommissioning +decommssions->decommissions decomoposition->decomposition decomposin->decomposing decomposion->decomposition @@ -19506,6 +19727,10 @@ definintion->definition definintions->definitions definintive->definitive definintively->definitively +definishion->definition +definishions->definitions +definision->definition +definisions->definitions definit->definite definitelly->definitely definitian->definition @@ -19566,6 +19791,10 @@ defnitively->definitively defore->before defqault->default defragmenation->defragmentation +defrentiate->differentiate +defrentiated->differentiated +defrentiates->differentiates +defrentiating->differentiating defualt->default defualtdict->defaultdict defualts->defaults @@ -19774,6 +20003,8 @@ delimma->dilemma delimted->delimited delimter->delimiter delimters->delimiters +delimtier->delimiter +delimtiers->delimiters delink->unlink delivared->delivered delivative->derivative @@ -20173,6 +20404,12 @@ depracated->deprecated depracates->deprecates depracating->deprecating depracation->deprecation +depreacate->deprecate +depreacated->deprecated +depreacates->deprecates +depreacating->deprecating +depreacation->deprecation +depreacations->deprecations depreacte->deprecate depreacted->deprecated depreactes->deprecates @@ -20224,7 +20461,6 @@ depricating->deprecating deprication->deprecation, deprivation, dequed->dequeued dequeing->dequeuing -deques->dequeues derageable->dirigible derailin->derailing, derail in, deram->dram, dream, @@ -21174,6 +21410,8 @@ devolopers->developers devoloping->developing devolopment->development devolops->develops +devrice->device, dervice, +devrices->devices, dervices, devritualisation->devirtualisation devritualization->devirtualization devuce->device @@ -21295,7 +21533,10 @@ dicard->discard dicarded->discarded dicarding->discarding dicards->discards +dicate->dictate +dicated->dictated dicates->dictates +dicating->dictating dicationaries->dictionaries dicationary->dictionary dicergence->divergence @@ -21335,7 +21576,17 @@ dicriminates->discriminates dicriminating->discriminating dicriminator->discriminator dicriminators->discriminators +dicslose->disclose +dicslosed->disclosed +dicsloses->discloses +dicslosing->disclosing +dicslosure->disclosure +dicslosures->disclosures dicsriminated->discriminated +dictacte->dictate +dictacted->dictated +dictactes->dictates +dictacting->dictating dictaionaries->dictionaries dictaionary->dictionary dictinary->dictionary @@ -21526,6 +21777,9 @@ difficultes->difficulties difficults->difficult, difficulties, difficutl->difficult difficutly->difficulty +diffirence->difference +diffirences->differences +diffirent->different diffreences->differences diffreent->different diffreents->different, difference, @@ -21587,6 +21841,7 @@ digitalise->digitize digitalising->digitizing digitalize->digitize digitalizing->digitizing +digitaly->digitally digitial->digital digitis->digits digitisin->digitising @@ -21644,6 +21899,7 @@ dimensionaility->dimensionality dimensionailties->dimensionalities dimensionailty->dimensionality dimensiones->dimensions +dimensionned->dimensioned dimenson->dimension dimensonal->dimensional dimensonalities->dimensionalities @@ -21673,6 +21929,11 @@ dimesnional->dimensional dimesnions->dimensions diminsh->diminish diminshed->diminished +diminsion->dimension +diminsional->dimensional +diminsioned->dimensioned +diminsioning->dimensioning +diminsions->dimensions diminuitive->diminutive dimiss->dismiss dimissal->dismissal @@ -21796,6 +22057,7 @@ directoriei->directories directoris->directories directort->directory directorty->directory +directoryes->directories directorys->directories directoty->directory directove->directive @@ -21804,6 +22066,8 @@ directoy->directory directpries->directories directpry->directory directries->directories +directrion->direction +directrions->directions directrive->directive directrives->directives directrly->directly @@ -22188,7 +22452,6 @@ disired->desired disires->desires disiring->desiring disitributions->distributions -disjointness->disjointedness diskrete->discrete diskretion->discretion diskretization->discretization @@ -22501,9 +22764,15 @@ disssociate->dissociate disssociated->dissociated disssociates->dissociates disssociating->dissociating +dissymmectric->dissymmetric +dissymmectrical->dissymmetrical +dissymmectry->dissymmetry distace->distance, distaste, distaced->distanced distaces->distances, distastes, +distacne->distance +distacned->distanced +distacnes->distances distancef->distanced, distances, distance, distancin->distancing distange->distance @@ -22754,7 +23023,19 @@ divsion->division divsions->divisions divsiors->divisors djanog->Django +dleay->delay +dleayed->delayed +dleaying->delaying +dleays->delays dloating->floating +dmaage->damage +dmaaged->damaged +dmaages->damages +dmaaging->damaging +dmage->damage +dmaged->damaged +dmages->damages +dmaging->damaging dnamically->dynamically dne->done dnymaic->dynamic @@ -23172,7 +23453,7 @@ downsteramer->downstreamer downsteramers->downstreamers downsteraming->downstreaming downsterams->downstreams -dows->does +dows->does, down, dowt->doubt doxgen->doxygen doygen->doxygen @@ -23236,7 +23517,7 @@ drammatic->dramatic dramtic->dramatic dran->drawn drapin->draping -drastical->drastically +drastical->drastically, drastic, drasticaly->drastically drats->drafts draughtman->draughtsman @@ -23456,6 +23737,8 @@ dupplicates->duplicates dupplicating->duplicating dupplication->duplication dupplications->duplications +durantion->duration +durantions->durations durationm->duration durectories->directories durectory->directory @@ -23839,6 +24122,7 @@ elaspe->elapse elasped->elapsed elaspes->elapses elasping->elapsing +elatic->elastic elction->election elctric->electric elctrical->electrical @@ -24209,6 +24493,10 @@ enabeling->enabling enabels->enables enabes->enables enabing->enabling +enabke->enable +enabked->enabled +enabkes->enables +enabking->enabling enabledi->enabled enableing->enabling enablen->enabled @@ -24482,6 +24770,11 @@ eneumretaion->enumeration eneumretaions->enumerations enew->new enflamed->inflamed +enfoce->enforce +enfoced->enforced +enfocement->enforcement +enfoces->enforces +enfocing->enforcing enforcable->enforceable enforceing->enforcing enforcin->enforcing @@ -24504,6 +24797,7 @@ enfornces->enforces enforncing->enforcing enforrce->enforce enforrced->enforced +enforrcement->enforcement enforrces->enforces enforrcing->enforcing engagment->engagement @@ -24687,6 +24981,7 @@ entires->entries entirey->entirely entirity->entirety entirly->entirely +entiry->entry, entirely, entite->entire, entity, entitee->entity entitees->entities @@ -24702,6 +24997,7 @@ entitiys->entities entitlied->entitled entitys->entities entiy->entity +entiyt->entity entoties->entities entoty->entity entquire->enquire, inquire, @@ -24830,6 +25126,7 @@ environent->environment environental->environmental environents->environments environmane->environment +environmen->environment environmenet->environment environmenetal->environmental environmenets->environments @@ -25296,6 +25593,8 @@ estimater->estimator, estimated, estimates, estimate, estimaters->estimators, estimates, estimatied->estimated estimatin->estimating, estimation, +estimlator->estimator +estimlators->estimators estiomator->estimator estiomators->estimators estuwarries->estuaries @@ -25553,6 +25852,7 @@ evrytime->every time evrywhere->everywhere evyrthing->everything ewhwer->where +ewll->well exaclinic->hexaclinic exaclty->exactly exacly->exactly @@ -25972,6 +26272,7 @@ exculsive->exclusive exculsively->exclusively exculsivly->exclusively excusin->excusing +excusively->exclusively excutable->executable excutables->executables excute->execute @@ -26377,6 +26678,10 @@ exlains->explains exlamation->exclamation exlanation->explanation exlanations->explanations +exlclude->exclude +exlcluded->excluded +exlcludes->excludes +exlcluding->excluding exlcude->exclude exlcuded->excluded exlcudes->excludes @@ -26394,6 +26699,14 @@ exlpicitly->explicitly exlpoit->exploit exlpoited->exploited exlpoits->exploits +exlucde->exclude +exlucded->excluded +exlucdes->excludes +exlucding->excluding +exlucsion->exclusion +exlucsions->exclusions +exlucsive->exclusive +exlucsively->exclusively exlude->exclude, exude, exluded->excluded, exuded, exludes->excludes, exudes, @@ -27227,7 +27540,12 @@ exporing->exploring, expiring, exporting, exposing, expors->exports exportet->exported, exporter, exportin->exporting, export in, +exposere->exposure exposin->exposing, expos in, +exposte->expose +exposted->exposed +expostes->exposes +exposting->exposing expport->export exppressed->expressed expration->expiration @@ -27775,6 +28093,7 @@ faulsure->failure faulsures->failures faulure->failure faulures->failures +faulyt->faulty faund->found, fund, fause->false fauture->feature @@ -27954,6 +28273,7 @@ fiields->fields filal->final filaname->filename filanames->filenames +filaneme->filename filder->folder, filter, finder, fielder, filer, filders->folders, filters, finders, fielders, filers, fileand->file and @@ -28404,6 +28724,7 @@ followign->following followiing->following followin->following followind->following +followinig->following followins->following, followings, followint->following followng->following @@ -28540,6 +28861,9 @@ fomrats->formats fomratted->formatted fomratter->formatter fomratting->formatting +fomrula->formula +fomrulae->formulae +fomrulas->formulas fomula->formula fomulae->formulae fomulaic->formulaic @@ -28811,6 +29135,8 @@ fotografy->photography fotograph->photograph fotography->photography foucs->focus +foudation->foundation +foudations->foundations foudn->found foudning->founding fougth->fought @@ -28897,6 +29223,8 @@ frecuently->frequently frecuents->frequents freecallrelpy->freecallreply freedeom->freedom, freedoms, +freedome->freedom +freedomes->freedoms freedon->freedom freedons->freedoms freedum->freedom @@ -29324,6 +29652,7 @@ futher->further futherize->further futhermore->furthermore futhroc->futhark, futhorc, +futre->future futrue->future futrure->future futture->future @@ -29415,6 +29744,10 @@ gatable->gateable gateing->gating gatherig->gathering gatherin->gathering, gather in, +gathter->gather +gathtered->gathered +gathtering->gathering +gathters->gathers gatin->gating, latin, satin, gain, gratin, gatway->gateway gauage->gauge @@ -29883,6 +30216,8 @@ gnorung->ignoring gobal->global gobally->globally gocde->gcode +godd->good, god, +godds->goods, gods, godess->goddess godesses->goddesses Godounov->Godunov @@ -29991,7 +30326,7 @@ granuality->granularity granualtiry->granularity granularty->granularity granulatiry->granularity -grap->grep, grape, +grap->grep, grape, graph, grasp, grapgic->graphic grapgical->graphical grapgics->graphics @@ -30302,6 +30637,10 @@ halp->help halpoints->halfpoints hammmer->hammer hampster->hamster +hanbdle->handle +hanbdled->handled +hanbdles->handles +hanbdling->handling hande->handle, hand, handel->handle handeld->handled, handheld, @@ -30414,6 +30753,8 @@ happpened->happened happpening->happening happpenings->happenings happpens->happens +haracteristic->characteristic +haracteristics->characteristics haranguin->haranguing harased->harassed harases->harasses @@ -30458,6 +30799,8 @@ has'nt->hasn't hases->hashes hashi->hash hashin->hashing, hash in, +hashnap->hashmap +hashnaps->hashmaps hashreference->hash reference hashs->hashes hashses->hashes @@ -30630,6 +30973,8 @@ heusitics->heuristics hevy->heavy hexademical->hexadecimal hexdecimal->hexadecimal +hexedacimal->hexadecimal +hexedacimals->hexadecimals hexgaon->hexagon hexgaonal->hexagonal hexgaons->hexagons @@ -30639,6 +30984,9 @@ hexidecimals->hexadecimals hexigon->hexagon hexigonal->hexagonal hexigons->hexagons +hexogan->hexagon +hexoganal->hexagonal +hexogans->hexagons hge->he hhttp->http hhttps->https @@ -30836,6 +31184,7 @@ histroy->history histry->history hiting->hitting, hiding, hinting, hiring, hating, biting, hiking, hitogram->histogram +hitorical->historical hitories->histories hitory->history hitsingles->hit singles @@ -31062,6 +31411,12 @@ hyperboly->hyperbole Hyperldger->Hyperledger hypervior->hypervisor hyphenatin->hyphenating, hyphenation, +hypocencter->hypocenter +hypocenctre->hypocentre +hypocengter->hypocenter +hypocengtre->hypocentre +hypocnter->hypocenter +hypocntre->hypocentre hypocracy->hypocrisy hypocrasy->hypocrisy hypocricy->hypocrisy @@ -31327,6 +31682,7 @@ ignested->ingested ignesting->ingesting ignests->ingests ignnore->ignore +ignnored->ignored ignoded->ignored ignoerd->ignored ignonre->ignore @@ -31409,6 +31765,8 @@ ileagle->illegal ilegal->illegal ilegle->illegal iligal->illegal +ilkely->likely +ilkley->likely illegimacy->illegitimacy illegitmate->illegitimate illess->illness @@ -31873,6 +32231,12 @@ impplement->implement impplementating->implementing impplementation->implementation impplemented->implemented +impprove->improve +impproved->improved +impprovement->improvement +impprovements->improvements +impproves->improves +impproving->improving imprement->implement, improvement, imprementation->implementation imprementations->implementations @@ -31982,6 +32346,10 @@ inaccessble->inaccessible inaccuraccies->inaccuracies inaccuraccy->inaccuracy inacessible->inaccessible +inactice->inactive +inactieve->inactive +inactiv->inactive +inactivly->inactively inacurate->inaccurate inacurracies->inaccuracies inacurrate->inaccurate @@ -32371,12 +32739,36 @@ incremet->increment incremetal->incremental incremeted->incremented incremeting->incrementing +incremint->increment +incremintal->incremental +incremintally->incrementally +incremintd->incremented +increminted->incremented +increminting->incrementing +incremints->increments +incremment->increment +incremmental->incremental +incremmentally->incrementally +incremmentd->incremented +incremmented->incremented +incremmenting->incrementing +incremments->increments incremnet->increment +incremnetal->incremental +incremnetally->incrementally +incremnetd->incremented +incremneted->incremented +incremneting->incrementing +incremnets->increments increse->increase incresed->increased increses->increases incresing->increasing incrfemental->incremental +incriease->increase +incrieased->increased +incrieases->increases +incrieasing->increasing incrmenet->increment incrmenetd->incremented incrmeneted->incremented @@ -32543,6 +32935,10 @@ indepentendly->independently indepentent->independent indepentently->independently indepently->independently +indepndence->independence +indepndences->independences +indepndent->independent +indepndents->independents inderect->indirect inderts->inserts indes->index @@ -32579,6 +32975,8 @@ indiciate->indicate indiciated->indicated indiciates->indicates indiciating->indicating +indiciation->indication +indiciations->indications indicies->indices indicte->indicate indictement->indictment @@ -32639,6 +33037,9 @@ indivisuals->individuals indiviual->individual indiviually->individually indiviuals->individuals +indiviudal->individual +indiviudally->individually +indiviudals->individuals indivual->individual indivually->individually indivuals->individuals @@ -32822,6 +33223,7 @@ informtion->information informtional->informational inforrmation->information inforrmational->informational +infp->info infrantryman->infantryman infrasctructure->infrastructure infrasctructures->infrastructures @@ -32870,6 +33272,8 @@ ingration->integration ingreediants->ingredients inh->in inhabitans->inhabitants +inheent->inherent +inheently->inherently inherantly->inherently inherat->inherit inheratance->inheritance @@ -33807,6 +34211,8 @@ insitution->institution insitutional->institutional insitutions->institutions insonsistency->inconsistency +inspeciton->inspection +inspecitons->inspections inspectin->inspecting, inspect in, inspection, inspite->in spite, inspire, insstance->instance @@ -34080,6 +34486,9 @@ insuffciently->insufficiently insufficency->insufficiency insufficent->insufficient insufficently->insufficiently +insuffieciency->insufficiency +insuffiecient->insufficient +insuffieciently->insufficiently insuffiency->insufficiency insuffient->insufficient insuffiently->insufficiently @@ -34211,7 +34620,6 @@ inteneded->intended intenet->internet, intent, intenisty->intensity intension->intention -intensional->intentional intensionally->intentionally intensionaly->intentionally intensitive->insensitive, intensive, @@ -34938,6 +35346,8 @@ intrisics->intrinsics intrisinc->intrinsic intrisincally->intrinsically intrisincs->intrinsics +introdcution->introduction +introdcutions->introductions introducin->introducing introducted->introduced introducting->introducing @@ -35193,6 +35603,7 @@ irrevelant->irrelevant, irreverent, irreversable->irreversible irritatin->irritating, irritation, is'nt->isn't +is's->it's isalha->isalpha isconnection->isconnected iscrated->iscreated @@ -35451,6 +35862,12 @@ iverse->diverse, inverse, iversed->inverse, inversed, ivocation->invocation ivocations->invocations +ivoice->invoice +ivoiced->invoiced +ivoicer->invoicer +ivoicers->invoicers +ivoices->invoices +ivoicing->invoicing ivoke->invoke ivoked->invoked ivoker->invoker @@ -35715,6 +36132,10 @@ kimerrically->chimerically kindergarden->kindergarten kindgergarden->kindergarten kindgergarten->kindergarten +kindgom->kingdom +kindgoms->kingdoms +kindom->kingdom +kindoms->kingdoms kinf->kind kinfs->kinds kinnect->Kinect @@ -36190,6 +36611,7 @@ lerans->learns lern->learn, lean, lerned->learned, learnt, leaned, lerning->learning, leaning, +lesda->leads lessson->lesson lesssons->lessons lesstiff->LessTif @@ -36237,6 +36659,7 @@ liason->liaison liasons->liaisons libararies->libraries libarary->library +libaray->library libaries->libraries libary->library libell->libel @@ -36351,7 +36774,7 @@ lighbulbs->lightbulbs ligher->lighter, liar, liger, lighers->lighters, liars, ligers, lighing->lighting -lighning->lightning +lighning->lightning, lighting, lightbulp->lightbulb lightbulps->lightbulbs lightin->lighting, light in, lighten, @@ -37073,6 +37496,8 @@ mangement->management mangementt->management manges->manages manging->managing +mangitude->magnitude +mangitudes->magnitudes manifacture->manufacture manifactured->manufactured manifacturer->manufacturer @@ -37086,6 +37511,12 @@ manifiesting->manifesting manifiesto->manifesto manifiestos->manifestos manifiests->manifests +manigest->manifest +manigested->manifested +manigesting->manifesting +manigesto->manifesto +manigestos->manifestos +manigests->manifests manipluate->manipulate manipluated->manipulated manipulater->manipulator, manipulated, manipulates, manipulate, @@ -37551,6 +37982,7 @@ medadata->metadata medai->media meddo->meadow meddos->meadows +mede->made, mere, mead, lede, mete, medeival->medieval medeval->medieval medevial->medieval @@ -37657,12 +38089,16 @@ memmick->mimic memmicked->mimicked memmicking->mimicking memmics->mimics +memmories->memories memmory->memory +memmoryes->memories +memmorys->memories memner->member memoery->memory memomry->memory memor->memory memorizin->memorizing +memorys->memories memoty->memory memove->memmove mempry->memory @@ -38088,6 +38524,7 @@ minimim->minimum minimisin->minimising minimium->minimum minimizin->minimizing +minimmum->minimum minimsation->minimisation minimse->minimise minimsed->minimised @@ -38367,6 +38804,12 @@ misusin->misusing mitake->mistake mitaken->mistaken mitakes->mistakes +mitgate->mitigate +mitgated->mitigated +mitgates->mitigates +mitgating->mitigating +mitgation->mitigation +mitgations->mitigations miticate->mitigate miticated->mitigated miticateing->mitigating @@ -38778,6 +39221,8 @@ movememnt->movement movememnts->movements movememt->movement movememts->movements +movemenet->movement +movemenets->movements movemet->movement movemets->movements movemment->movement @@ -38848,6 +39293,7 @@ mulipliers->multipliers muliplies->multiplies muliply->multiply muliplying->multiplying +mulit->multi mulitcast->multicast mulithread->multithread mulithreaded->multithreaded @@ -39431,6 +39877,7 @@ necessarlily->necessarily necessarly->necessary, necessarily, necessarrily->necessarily necessarry->necessary +necessaru->necessary necessaryly->necessarily necessay->necessary necesserily->necessarily @@ -39510,6 +39957,7 @@ neglibible->negligible neglible->negligible negligable->negligible negligble->negligible +negligeable->negligible negoable->negotiable negoate->negotiate negoated->negotiated @@ -39722,6 +40170,7 @@ neice->niece, nice, neigbhor->neighbor neigbhorhood->neighborhood neigbhorhoods->neighborhoods +neigbhoring->neighboring neigbhors->neighbors neigbhour->neighbour neigbhours->neighbours @@ -40138,6 +40587,8 @@ noice->noise, nice, notice, noification->notification noifications->notifications noified->notified +noifier->notifier +noifiers->notifiers noifies->notifies noify->notify, noisy, noifying->notifying @@ -40432,6 +40883,10 @@ non-virtural->non-virtual non-virutal->non-virtual non-virutual->non-virtual non-vitrual->non-virtual +non-volatial->non-volatile +non-volitable->non-volatile +non-volitale->non-volatile +non-volitile->non-volatile non-vritual->non-virtual non-wirtual->non-virtual nonbloking->non-blocking @@ -40603,6 +41058,7 @@ notifcation->notification notifcations->notifications notifed->notified notifer->notifier +notifers->notifiers notifes->notifies notifiaction->notification notifiactions->notifications @@ -40631,6 +41087,9 @@ notifiction->notification notifictions->notifications notififation->notification notififations->notifications +notifing->notifying +notifition->notification +notifitions->notifications notifiy->notify notifiying->notifying notifyable->notifiable @@ -40749,6 +41208,8 @@ numberring->numbering numberrs->numbers numberss->numbers numbert->number +numbes->numbers, numbs, numbed, +numbesr->numbers numbet->number numbets->numbers numbr->number @@ -40775,6 +41236,8 @@ numerial->numeral, numerical, numering->numbering numerious->numerous numers->numbers +numher->number +numhers->numbers nummber->number nummbers->numbers nummeral->numeral @@ -41077,6 +41540,9 @@ occuppiers->occupiers occuppies->occupies occuppy->occupy occuppying->occupying +occuption->occupation +occuptional->occupational +occuptions->occupations occupyin->occupying, occupy in, occuracy->accuracy occurance->occurrence @@ -41088,6 +41554,7 @@ occure->occur, occurred, occured->occurred occurence->occurrence occurences->occurrences +occureneces->occurrences occures->occurs occuring->occurring occurr->occur @@ -41230,8 +41697,8 @@ offred->offered offsence->offence offsense->offense offsenses->offenses -offser->offset -offsers->offers +offser->offer, offset, +offsers->offers, offsets, offsest->offsets, offset, offseted->offsetted offsetes->offsets @@ -41367,6 +41834,7 @@ onedimenionsal->one-dimensional oneliners->one-liners oneyway->oneway ongly->only +ongoign->ongoing ongoin->ongoing onl->only onlie->online, only, @@ -41421,6 +41889,8 @@ onwer->owner onwership->ownership onwing->owning onws->owns +onwward->onward +onwwards->onwards ony->only, on, one, onyl->only oommits->commits @@ -41491,10 +41961,11 @@ opemess->openness opeming->opening opems->opens openbrower->openbrowser -opended->opened +opend->opened +opended->opened, open-ended, openeing->opening openen->opened, opening, -openend->opened +openend->opened, open-ended, openened->opened openening->opening openes->opens, openness, @@ -41712,6 +42183,7 @@ oposed->opposed oposite->opposite oposition->opposition oppen->open +oppend->opened, append, oppened->opened oppenent->opponent oppenents->opponents @@ -42169,6 +42641,10 @@ osffset->offset osffsets->offsets osffsetting->offsetting osicllations->oscillations +ossociate->associate +ossociated->associated +ossociation->association +ossociations->associations osterage->ostrich osterages->ostriches ostridge->ostrich @@ -42207,6 +42683,7 @@ otherwhile->otherwise otherwhise->otherwise otherwice->otherwise otherwide->otherwise +otherwiese->otherwise otherwis->otherwise otherwize->otherwise otherwordly->otherworldly @@ -42358,6 +42835,8 @@ outperfomring->outperforming outperformin->outperforming, outperform in, outpout->output outpouts->outputs +outptu->output +outptus->outputs outpu->output outpupt->output outpus->output, outputs, @@ -42979,6 +43458,7 @@ paramterizes->parameterizes paramterizing->parameterizing paramterless->parameterless paramters->parameters +paramterts->parameters paramtrical->parametrical parana->piranha paraniac->paranoiac @@ -43068,6 +43548,8 @@ paretheses->parentheses parethesis->parenthesis parfay->parfait parge->large +parger->larger, pager, parker, parser, +pargers->pagers, parkers, parsers, paria->pariah, parka, parial->partial parially->partially @@ -43531,6 +44013,7 @@ peerowet->pirouette peerowetes->pirouettes peerowets->pirouettes pefect->perfect, prefect, defect, +pefected->perfected pefection->perfection pefectly->perfectly pefer->prefer @@ -43567,6 +44050,9 @@ peirod->period peirodical->periodical peirodicals->periodicals peirods->periods +peizometer->piezometer +peizometers->piezometers +peizometric->piezometric Peloponnes->Peloponnese, Peloponnesus, penalities->penalties penality->penalty @@ -43635,13 +44121,20 @@ percieving->perceiving percise->precise percisely->precisely percision->precision +percison->precision perenially->perennially perentage->percentage, parentage, perentages->percentages, parentages, peresent->present, presents, presence, percent, peretrator->perpetrator +perfact->prefect, perfect, +perfacted->perfected +perfaction->perfection +perfactly->perfectly perfec->perfect perfecct->perfect +perfeccted->perfected +perfecction->perfection perfecctly->perfectly perfeclty->perfectly perfecly->perfectly @@ -43652,6 +44145,8 @@ perferably->preferably perferance->preference perferances->preferences perferct->perfect +perfercted->perfected +perferction->perfection perferctly->perfectly perferect->perfect perferectly->perfectly @@ -43806,6 +44301,8 @@ peridic->periodic peridical->periodical peridically->periodically peridioc->periodic +peridiocal->periodical +peridiocally->periodically perihperal->peripheral perihperals->peripherals perilious->perilous @@ -44219,6 +44716,8 @@ pictureskly->picturesquely pictureskness->picturesqueness picure->picture, epicure, picures->pictures, epicures, +picutre->picture +picutres->pictures pidgeon->pigeon, pidgin, pidgeons->pigeons, pidgins, pieceweise->piecewise, piece wise, @@ -44401,6 +44900,7 @@ playgrouns->playgrounds, playground, playin->playing, play in, playist->playlist playists->playlists +playlise->playlist playright->playwright playwrite->playwright playwrites->playwrights @@ -44476,7 +44976,8 @@ poduction->production poductions->productions poducts->products podule->module -poenis->penis +poen->open, pen, poem, phone, +poenis->peonies, penis, poential->potential poentially->potentially poentials->potentials @@ -44764,6 +45265,10 @@ porgressed->progressed porgresses->progresses porgressing->progressing poriferal->peripheral +porition->portion +poritioned->portioned +poritioning->portioning +poritions->portions porject->project porjection->projection porjects->projects @@ -44788,6 +45293,9 @@ porpose->propose, purpose, porposed->proposed porposes->proposes, purposes, porposing->proposing +porprties->properties +porprty->property +porpuse->purpose, porpoise, porsalin->porcelain porshan->portion porshon->portion @@ -44826,6 +45334,8 @@ posessing->possessing posession->possession posessions->possessions posgresql->PostgreSQL +posibble->possible +posibbly->possibly posibilities->possibilities posibility->possibility posibilties->possibilities @@ -44848,6 +45358,7 @@ posisition->position posisitioned->positioned posisitioning->positioning posisitions->positions +posisson->Poisson posistion->position posistioned->positioned posistioning->positioning @@ -45083,6 +45594,7 @@ practictitioners->practitioners practicval->practical practioner->practitioner practioners->practitioners +practive->practice, proactive, praefix->prefix pragam->pragma pragmato->pragma to @@ -45145,6 +45657,10 @@ pre-proces->pre-process pre-procesing->pre-processing pre-realease->pre-release pre-registeres->pre-registers +pre-select->preselect +pre-selected->preselected +pre-selecting->preselecting +pre-selects->preselects preallocationg->preallocating, preallocation, prealocate->preallocate prealocated->preallocated @@ -45311,7 +45827,9 @@ preety->pretty preexistin->preexisting, preexist in, prefacin->prefacing prefectches->prefetches -prefecth->prefetch +prefected->perfected +prefecth->prefect, prefetch, +prefection->perfection prefectly->perfectly prefence->pretence, presence, preference, prefences->preferences @@ -45389,6 +45907,8 @@ pregressions->progressions pregressive->progressive pregressively->progressively prehaps->perhaps +preice->price +preices->prices preint->print, preprint, preinted->printed, preprinted, preinting->printing, preprinting, @@ -45408,6 +45928,7 @@ prejudgudices->prejudices prejudgudicing->prejudicing prejudicin->prejudicing preliferation->proliferation +prelimary->preliminary prelimitary->preliminary prematurelly->prematurely premeire->premiere @@ -45424,6 +45945,7 @@ premptive->preemptive premptively->preemptively premutation->permutation premutations->permutations +preoccuption->preoccupation preocess->process preocupation->preoccupation preoperty->property @@ -45519,6 +46041,10 @@ presearves->preserves presearving->preserving presed->pressed, preset, presedential->presidential +preselet->preselect +preseleted->preselected +preseleting->preselecting +preselets->preselects presenation->presentation presenations->presentations presenece->presence @@ -45821,6 +46347,9 @@ priorized->prioritized priorizes->prioritizes priorizin->prioritizing priorizing->prioritizing +priororities->priorities +priorority->priority +priort->prior, priory, priors, priori, priorties->priorities, prior ties, priortisation->prioritisation priortisations->prioritisations @@ -46160,6 +46689,8 @@ produser->producer produsers->producers produses->produces produsing->producing +produt->product +produts->products proect->protect, project, proected->protected, projected, proecting->protecting, projecting, @@ -46321,6 +46852,7 @@ programatically->programmatically programattic->programmatic programattically->programmatically programd->programmed +programemd->programmed programemer->programmer programemers->programmers programm->program, programme, @@ -46358,9 +46890,12 @@ prohibt->prohibit prohibted->prohibited prohibting->prohibiting prohibts->prohibits +proider->provider +proiders->providers proir->prior proirities->priorities proirity->priority +proivded->provided projcet->project projcets->projects projct's->project's @@ -46371,6 +46906,8 @@ projctor->projector projctors->projectors projcts->projects projec->project +projeciton->projection +projecitons->projections projecs->projects projectd->projected projecter->projector, projected, project, @@ -46445,6 +46982,12 @@ pronouced->pronounced pronounched->pronounced pronounciation->pronunciation pronounciations->pronunciations +pront->print, pronto, prone, front, prong, +pronte->prone, pronate, pronto, ponte, +pronted->printed, pronated, pronged, proned, +prontes->pronates, prones, +pronting->printing, pronating, proning, +pronts->prints, prongs, pronto, pronunce->pronounce prooblem->problem prooblematic->problematic @@ -46493,6 +47036,10 @@ propagatin->propagating, propagation, propage->propagate, propane, propaged->propagated propages->propagates +propagete->propagate +propageted->propagated +propagetes->propagates +propageting->propagating propaging->propagating propatagion->propagation propator->propagator @@ -46663,6 +47210,8 @@ protcols->protocols protcool->protocol protcools->protocols protcted->protected +proteced->protected +proteceted->protected protecion->protection protecte->protected, protect, protectin->protecting, protect in, protection, @@ -46986,6 +47535,8 @@ puplishes->publishes puplishing->publishing pupose->purpose puposes->purposes +puprose->purpose +puproses->purposes pupular->popular pupularity->popularity pupulate->populate @@ -47184,7 +47735,6 @@ quartenion->quaternion quartenions->quaternions quartically->quadratically quatation->quotation -quater->quarter quating->quoting, squatting, equating, quation->equation quations->equations @@ -47317,6 +47867,8 @@ quivalent->equivalent quizes->quizzes quizs->quizzes quizzs->quizzes +quntities->quantities +quntity->quantity quoshant->quotient quoshants->quotients quotaion->quotation @@ -47781,6 +48333,7 @@ reademe->README readiable->readable readibility->readability readible->readable +readiblity->readability readibly->readably readig->reading readigs->readings @@ -47821,6 +48374,8 @@ realeasing->releasing realiability->reliability realiable->reliable realiably->reliably +realignement->realignment +realignements->realignments realisin->realising realitime->realtime realitvely->relatively @@ -47848,6 +48403,10 @@ reallocaitions->reallocations reallocaiton->reallocation reallocaitons->reallocations reallocatin->reallocating, reallocation, +realod->reload +realoded->reloaded +realoding->reloading +realods->reloads realsitic->realistic realtd->related realte->relate @@ -47961,6 +48520,7 @@ reasonin->reasoning, reason in, reasonnable->reasonable reasonnably->reasonably reassignin->reassigning, reassign in, +reassing->reassign reassinging->reassigning reassocation->reassociation reassocations->reassociations @@ -48006,6 +48566,10 @@ rebulit->rebuilt rebult->rebuilt recahed->reached recal->recall +recalcalculate->recalculate +recalcalculated->recalculated +recalcalculates->recalculates +recalcalculating->recalculating recalcualte->recalculate recalcualted->recalculated recalcualter->re-calculator @@ -48284,6 +48848,7 @@ recommeding->recommending recommeds->recommends recommenation->recommendation recommenations->recommendations +recommendet->recommended recommendin->recommending, recommend in, recommened->recommended, recommend, recommeneded->recommended @@ -48452,6 +49017,12 @@ recordin->recording, record in, recordproducer->record producer recordss->records recored->recorded +recorev->recover +recoreved->recovered +recorevies->recoveries +recoreving->recovering +recorevs->recovers +recorevy->recovery recoriding->recording recource->resource, recourse, recourced->resourced @@ -48596,6 +49167,7 @@ redings->readings redircet->redirect redirectd->redirected redirectrion->redirection +redirectrions->redirections redisign->redesign redistirbute->redistribute redistirbuted->redistributed @@ -49038,6 +49610,7 @@ regnerated->regenerated regnerates->regenerates regnerating->regenerating regneration->regeneration +regoin->regain, region, regon->region regons->regions regorded->recorded @@ -49047,6 +49620,7 @@ regrads->regards, regrades, regresion->regression regresison->regression regressin->regressing, regress in, regression, +regressos->regressors regresssion->regression regrigerator->refrigerator regsion->region @@ -49198,10 +49772,13 @@ reinstaled->reinstalled reinstaling->reinstalling reinstallin->reinstalling, reinstall in, reinstals->reinstalls +reinstat->reinstate +reinstatd->reinstate, reinstated, reinstatiate->reinstantiate reinstatiated->reinstantiated reinstatiates->reinstantiates reinstatiation->reinstantiation +reinstats->reinstate, reinstates, reintantiate->reinstantiate reintantiating->reinstantiating reintepret->reinterpret @@ -49225,6 +49802,7 @@ relaased->released, relapsed, relaases->releases, relapses, relaasing->releasing, relapsing, relaative->relative +relaction->reaction, relation, redaction, relocation, relady->ready relaease->release relaese->release @@ -49263,6 +49841,7 @@ relativated->relative, relatively, relativly->relatively relavant->relevant relavent->relevant +relaxiation->relaxation releaase->release releaased->released releaases->releases @@ -49336,6 +49915,7 @@ reletive->relative reletively->relatively relevabt->relevant relevane->relevant +relevante->relevant relevants->relevant releveant->relevant relevence->relevance @@ -49351,6 +49931,8 @@ relfects->reflects reliabe->reliable reliabily->reliably, reliability, reliablity->reliability +relibility->reliability +relible->reliable relie->rely, relies, really, relief, reliefed->relieved reliefes->relieves @@ -50061,6 +50643,7 @@ replases->replaces, relapses, rephases, replasing->replacing, relapsing, rephasing, replcace->replace replcaced->replaced +replcae->replace replcaof->replicaof replenishin->replenishing, replenish in, replentish->replenish @@ -50558,6 +51141,7 @@ resestatus->resetstatus resetable->resettable reseted->reset reseting->resetting +resett->reset resetted->reset resettin->resetting resevation->reservation @@ -50598,6 +51182,7 @@ resintalled->reinstalled resintalling->reinstalling resintalls->reinstalls resistable->resistible +resistece->resistance resistence->resistance resistent->resistant resitance->resistance @@ -50760,6 +51345,8 @@ responcibility->responsibility responcible->responsible responcive->responsive responciveness->responsiveness +respondant->respondent +respondants->respondents responde->respond, response, responds, responded, responder, respondin->responding, respond in, respone->response, respond, @@ -50912,6 +51499,7 @@ resteraunt->restaurant resteraunts->restaurants restes->reset, rests, restesting->retesting +restet->reset restict->restrict resticted->restricted resticting->restricting @@ -50933,6 +51521,7 @@ restoreble->restorable restoreing->restoring restorin->restoring restors->restores +restort->restore, restored, restouration->restoration restraunt->restraint, restaurant, restraunts->restraints, restaurants, @@ -51183,7 +51772,7 @@ retrvieves->retrieves retryin->retrying, retry in, retrain, retsart->restart retsarts->restarts -retun->return +retun->return, rerun, retune, retunr->return, retune, retunred->returned, retuned, retunring->returning, retuning, @@ -51211,6 +51800,7 @@ returnin->returning, return in, returnn->return returnned->returned returnning->returning +returnst->returns returs->returns retursn->returns retutn->return @@ -51613,8 +52203,12 @@ roundtriped->roundtripped, round-tripped, round tripped, roundtriping->roundtripping, round-tripping, round tripping, roundtripp->roundtrip, round-trip, round trip, roung->round +rounted->routed, rounded, +rounter->router, rounder, +rounters->routers, rounders, rountine->routine rountines->routines +rounting->routing, rounding, rountrip->roundtrip, round-trip, round trip, rountriped->roundtripped, round-tripped, round tripped, rountriping->roundtripping, round-tripping, round tripping, @@ -52079,6 +52673,8 @@ scedulers->schedulers scedules->schedules sceduling->scheduling sceen->scene, seen, screen, scheme, +sceene->scene +sceenes->scenes sceens->scenes, screens, schemes, sceenshot->screenshot sceenshots->screenshots @@ -52258,6 +52854,8 @@ scripots->scripts scripst->scripts scripte->script, scripted, scriptin->scripting, script in, +scriptiong->scripting +scriptng->scripting scriptype->scripttype scrit->script, scrip, scritp->script @@ -53096,6 +53694,13 @@ sequenzers->sequencers sequenzes->sequences sequenzing->sequencing sequetial->sequential +sequeunce->sequence +sequeunced->sequenced +sequeuncer->sequencer +sequeuncers->sequencers +sequeunces->sequences +sequeuncing->sequencing +sequeuntial->sequential sequeze->squeeze, sequence, sequnce->sequence sequnced->sequenced @@ -53398,6 +54003,7 @@ shapshots->snapshots shapsnot->snapshot shapsnots->snapshots shapt->shaped, shape, +sharability->shareability shareed->shared shareing->sharing sharin->sharing, sharia, sarin, @@ -53663,6 +54269,7 @@ sighths->scythes, sights, sigificance->significance sigificant->significant sigificantly->significantly +siginals->signals siginificance->significance siginificant->significant siginificantly->significantly @@ -53728,6 +54335,7 @@ signle->single, signal, signles->singles, signals, signleton->singleton signletons->singletons +signnals->signals signol->signal signto->sign to signul->signal @@ -54096,6 +54704,10 @@ siplifies->simplifies siplify->simplify siplifying->simplifying siply->simply +sipport->support +sipported->supported +sipporting->supporting +sipports->supports sircle->circle sircles->circles sircular->circular @@ -54296,6 +54908,8 @@ slewth->sleuth slewthed->sleuthed slewthing->sleuthing slewths->sleuths +slibling->sibling +sliblings->siblings slicable->sliceable slience->silence slienced->silenced @@ -54405,6 +55019,7 @@ snythetically->synthetically snythetics->synthetics Soalris->Solaris socail->social +socal->social socalism->socialism socalist->socialist socalists->socialists @@ -54493,6 +55108,8 @@ soltions->solutions soltuion->solution soltuions->solutions soluable->soluble +soluation->solution +soluations->solutions solum->solemn soluton->solution solutons->solutions @@ -54869,6 +55486,8 @@ specical->special specically->specifically specication->specification specications->specifications +specicification->specification +specicifications->specifications specidic->specific specied->specified speciefic->specific @@ -55506,6 +56125,8 @@ srceens->screens srceenshot->screenshot srceenshots->screenshots srcipt->script +srcipted->scripted +srcipting->scripting srcipts->scripts srcoll->scroll srcollable->scrollable @@ -55859,6 +56480,7 @@ stickness->stickiness stickyness->stickiness stiffenin->stiffening, stiffen in, stiffneing->stiffening +stifness->stiffness stiky->sticky stil->still stilus->stylus @@ -56298,6 +56920,8 @@ subexpresssion->subexpression subexpresssions->subexpressions subfoilder->subdolder subfoilders->subdolders +subfoler->subfolder +subfolers->subfolders subfolfer->subfolder subfolfers->subfolders subfromat->subformat @@ -56411,6 +57035,8 @@ subscibe->subscribe subscibed->subscribed subsciber->subscriber subscibers->subscribers +subsciption->subscription +subsciptions->subscriptions subscirbe->subscribe subscirbed->subscribed subscirber->subscriber @@ -56547,6 +57173,7 @@ subtitutes->substitutes subtituting->substituting subtitution->substitution subtitutions->substitutions +subtlely->subtly, subtlety, subtractin->subtracting, subtract in, subtraction, subtrafuge->subterfuge subtrate->substrate @@ -57098,7 +57725,7 @@ supposedy->supposedly supposin->supposing supposingly->supposedly suppossed->supposed -suppost->support, suppose, supports, +suppost->support, suppose, supposed, supports, supposted->supposed, supported, supposting->supporting, supposing, supposts->supports, supposes, @@ -57556,6 +58183,13 @@ symetrically->symmetrically symetriy->symmetry symetry->symmetry symettric->symmetric +symlinc->symlink +symmectric->symmetric +symmectrical->symmetrical +symmectrically->symmetrically +symmectries->symmetries +symmectrized->symmetrized +symmectry->symmetry symmeterized->symmetrized symmetetric->symmetric symmetic->symmetric @@ -58121,6 +58755,7 @@ tekst->text teksts->texts telegramm->telegram telelevision->television +telemetery->telemetry telemtry->telemetry televsion->television telocom->telecom @@ -58354,6 +58989,8 @@ teraforming->terraforming teraforms->terraforms terain->terrain, train, terains->terrains, trains, +terator->iterator +terators->iterators terfform->terraform terfformed->terraformed terfforming->terraforming @@ -58567,6 +59204,7 @@ tghe->the tha->than, that, the, thair->their, there, thairs->theirs, there's, +tham->than thankfull->thankful, thankfully, thankfullly->thankfully thankfuly->thankfully @@ -58648,6 +59286,7 @@ theorectically->theoretically theoreticall->theoretically theoreticaly->theoretically theoreticl->theoretical +theoretocally->theoretically theorical->theoretical theorically->theoretically theoritical->theoretical @@ -58845,6 +59484,8 @@ threhold->threshold threholds->thresholds threre->there, three, threrefore->therefore +threschold->threshold +threscholds->thresholds threshhold->threshold threshholds->thresholds threshod->threshold @@ -58991,6 +59632,7 @@ timemout->timeout timemouts->timeouts timeot->timeout timeots->timeouts +timeour->timeout timeoutted->timed out timeput->timeout, time put, timeputs->timeouts, time puts, @@ -59337,10 +59979,20 @@ tranalations->translations tranasction->transaction tranasctional->transactional tranasctions->transactions +trancate->truncate +trancated->truncated +trancates->truncates +trancating->truncating tranceiver->transceiver tranceivers->transceivers trancendent->transcendent trancending->transcending +trancevier->transceiver +tranceviers->transceivers +tranciever->transceiver +trancievers->transceivers +tranciver->transceiver +trancivers->transceivers tranclate->translate trancode->transcode trancoded->transcoded @@ -59439,6 +60091,8 @@ transacitons->transactions transacrtion->transaction transacrtional->transactional transacrtions->transactions +transactino->transaction +transactinos->transactions transaction-spacific->transaction-specific transactiona->transactions, transactional, transactoin->transaction @@ -59511,9 +60165,13 @@ transction->transaction transctional->transactional transctions->transactions transeint->transient +transeiver->transceiver +transeivers->transceivers transending->transcending transer->transfer transesxuals->transsexuals +transevier->transceiver +transeviers->transceivers transferd->transferred transfered->transferred transfering->transferring @@ -59560,6 +60218,8 @@ transfroming->transforming transfroms->transforms transiet->transient transiets->transients +transiever->transceiver +transievers->transceivers transision->transition transisioning->transitioning transisions->transitions @@ -59581,6 +60241,8 @@ transitoning->transitioning transitons->transitions transitor->transistor transitors->transistors +transiver->transceiver +transivers->transceivers translater->translator translaters->translators translatied->translated @@ -59732,6 +60394,8 @@ transtitioning->transitioning transtitions->transitions transtorm->transform transtormed->transformed +transverer->traverser, transverter, transferer, +transverers->traversers, transverters, transferers, transvers->transverse transvorm->transform transvormation->transformation @@ -60227,7 +60891,14 @@ tryin->trying, try in, tryinng->trying trys->tries tryying->trying -ttests->tests +ttempt->attempt, tempt, +ttempted->attempted, tempted, +ttempting->attempting, tempting, +ttempts->attempts, tempts, +ttest->test, attest, +ttested->tested, attested, +ttesting->test, attesting, +ttests->tests, attests, tthank->thank tthanks->thanks tthat->that @@ -60533,6 +61204,8 @@ unambigiously->unambiguously unambigous->unambiguous unambigously->unambiguously unamed->unnamed +unamiguous->unambiguous +unamiguously->unambiguously unanimuous->unanimous unanimuously->unanimously unannimous->unanimous @@ -60846,6 +61519,8 @@ undfine->undefine undfined->undefined undfines->undefines undistinghable->indistinguishable +undmaaged->damaged +undmaged->damaged undocummented->undocumented undoed->undo, undone, undorder->unorder @@ -61184,12 +61859,18 @@ unline->unlike unloadin->unloading, unload in, unloadins->unloading unmached->unmatched +unmacthed->unmatched unmainted->unmaintained unmanouverable->unmaneuverable, unmanoeuvrable, unmaping->unmapping unmappend->unmapped unmarsalling->unmarshalling unmaximice->unmaximize +unmber->number, umber, +unmbered->numbered +unmbering->numbering +unmbers->numbers +unmergable->unmergeable unmisakable->unmistakable unmisakably->unmistakably unmistakeably->unmistakably @@ -61359,6 +62040,11 @@ unreigstering->unregistering unreigsters->unregisters unrelatd->unrelated unreleated->unrelated +unreliabe->unreliable +unreliabily->unreliably, unreliability, +unreliablity->unreliability +unrelibility->unreliability +unrelible->unreliable unrelted->unrelated unrelyable->unreliable unrelying->underlying @@ -61422,8 +62108,10 @@ unserstand->understand unserstanding->understanding unserstands->understands unserstood->understood +unseted->unset, unseated, unseting->unsetting unsetset->unset +unsetted->unset, unseated, unsettin->unsetting unshfit->unshift unshfited->unshifted @@ -61535,6 +62223,7 @@ unsuccesfully->unsuccessfully unsuccess->unsuccessful unsuccessfull->unsuccessful unsuccessfullly->unsuccessfully +unsuccessfuly->unsuccessfully unsucesful->unsuccessful unsucesfull->unsuccessful unsucesfully->unsuccessfully @@ -61927,6 +62616,7 @@ userspase->userspace usesfull->useful usespace->userspace usetnet->Usenet +usgin->using usiability->usability usiable->usable usiage->usage @@ -62005,6 +62695,7 @@ utilitization->utilization utilitize->utilize utilitizes->utilizes utilitizing->utilizing +utiliy->utility utiliz->utilize utiliza->utilize utilizaton->utilization @@ -62031,6 +62722,7 @@ utilties->utilities utiltities->utilities utiltity->utility utilty->utility +utily->utility utilzation->utilization utilze->utilize utilzed->utilized @@ -62542,6 +63234,7 @@ verical->vertical verically->vertically verication->verification verications->verifications +veridying->verifying verifable->verifiable verifcation->verification verifcations->verifications @@ -62689,6 +63382,10 @@ vesion->version vesioned->versioned vesioning->versioning vesions->versions +vesrion->version +vesrioned->versioned +vesrioning->versioning +vesrions->versions vetex->vertex vetexes->vertices vetical->vertical @@ -62733,6 +63430,8 @@ victimizin->victimizing victum->victim victums->victims videostreamming->videostreaming +vidget->widget +vidgets->widgets viee->view viees->views vieport->viewport @@ -62852,6 +63551,7 @@ visibile->visible visibililty->visibility visibilit->visibility visibiliy->visibly, visibility, +visibiltiy->visibility visibilty->visibility visibily->visibly, visibility, visibl->visible @@ -63019,6 +63719,9 @@ volentiered->volunteered volentiering->volunteering volentiers->volunteers voleyball->volleyball +volital->volatile +volitale->volatile +volitile->volatile volontary->voluntary volonteer->volunteer volonteered->volunteered @@ -63028,9 +63731,10 @@ volounteer->volunteer volounteered->volunteered volounteering->volunteering volounteers->volunteers -volumn->volume +volumn->volume, column, volumne->volume -volums->volume +volumns->volumes, columns, +volums->volume, volumes, volunteerin->volunteering, volunteer in, volxel->voxel volxels->voxels @@ -63136,12 +63840,15 @@ vulnerabiliies->vulnerabilities vulnerabilility->vulnerability vulnerabililties->vulnerabilities vulnerabililty->vulnerability +vulnerabilit->vulnerability, vulnerabilities, vulnerabilites->vulnerabilities -vulnerabiliti->vulnerability -vulnerabilitie->vulnerability -vulnerabilitis->vulnerabilities +vulnerabiliti->vulnerability, vulnerabilities, +vulnerabilitie->vulnerability, vulnerabilities, +vulnerabilitiesy->vulnerability, vulnerabilities, +vulnerabilitis->vulnerabilities, vulnerability, vulnerabilitiy->vulnerability vulnerabilitu->vulnerability +vulnerabilityies->vulnerability, vulnerabilities, vulnerabilitys->vulnerability, vulnerabilities, vulnerabiliy->vulnerability vulnerabillities->vulnerabilities @@ -63178,6 +63885,9 @@ vulnerbility->vulnerability vulnerble->vulnerable vulnerbuilities->vulnerabilities vulnerbuility->vulnerability +vulnererabilities->vulnerabilities +vulnererability->vulnerability +vulnererable->vulnerable vulnreabilities->vulnerabilities vulnreability->vulnerability vulnreable->vulnerable @@ -63205,6 +63915,8 @@ walkthough->walkthrough, walk though, walkthoughs->walkthroughs wallowin->wallowing, wallow in, wallthickness->wall thickness +walue->value +walues->values wan't->want, wasn't, wantin->wanting, want in, wanton, wantto->want to @@ -63216,6 +63928,8 @@ warantee->warranty waranties->warranties waranty->warranty wardobe->wardrobe +warehosue->warehouse +warehosues->warehouses waring->warning warings->warnings warinig->warning @@ -63414,6 +64128,7 @@ whcih->which whe->when, we, wheareas->whereas wheather->weather, whether, +wheen->wheel, when, wheh->when whehter->whether wheigh->weigh @@ -63449,6 +64164,7 @@ whicg->which whichs->which's whicht->which whick->which, whisk, wick, whack, +whicth->which whih->which whihc->which whihch->which @@ -63567,6 +64283,8 @@ wilcard->wildcard wilcards->wildcards wildebeast->wildebeest wildebeasts->wildebeests +wildget->widget +wildgets->widgets wilfull->wilful wilh->will wille->will @@ -63693,8 +64411,8 @@ wiythin->within wiythout->without wizzard->wizard wjat->what -wll->will -wlll->will +wll->will, well, +wlll->will, well, wmpty->empty wnat->want, what, wnated->wanted @@ -64013,6 +64731,7 @@ wuthin->within wuthout->without wya->way wyas->ways +wysiwy->wysiwyg wyth->with wythout->without xdescribe->describe diff --git a/codespell_lib/data/dictionary_code.txt b/codespell_lib/data/dictionary_code.txt index fa3701364c..1a09fe97c9 100644 --- a/codespell_lib/data/dictionary_code.txt +++ b/codespell_lib/data/dictionary_code.txt @@ -47,7 +47,6 @@ jupyter->Jupiter keypair->key pair keypairs->key pairs lateset->latest -lets->let's lite->light lowcase->lowercase movei->movie @@ -98,6 +97,7 @@ uint->unit uis->is, use, upto->up to usesd->used, uses, +waitfor->wait for wan->want warmup->warm up, warm-up, were'->we're diff --git a/codespell_lib/data/dictionary_en-GB_to_en-US.txt b/codespell_lib/data/dictionary_en-GB_to_en-US.txt index adab0d1277..2b160ffb9d 100644 --- a/codespell_lib/data/dictionary_en-GB_to_en-US.txt +++ b/codespell_lib/data/dictionary_en-GB_to_en-US.txt @@ -69,6 +69,7 @@ characterise->characterize characterised->characterized characterises->characterizes characterising->characterizing +civilisation->civilization cognisant->cognizant colour->color colouration->coloration @@ -258,6 +259,7 @@ manoeuvres->maneuvers manoeuvring->maneuvering marshalled->marshaled marshalling->marshaling +maths->math maximisation->maximization maximise->maximize maximised->maximized @@ -359,7 +361,7 @@ polarises->polarizes polarising->polarizing practise->practice practised->practiced -practises->practiced +practises->practices practising->practicing pretence->pretense pretences->pretenses @@ -368,6 +370,7 @@ prioritise->prioritize prioritised->prioritized prioritises->prioritizes prioritising->prioritizing +programme->program publicise->publicize publicised->publicized publicises->publicizes @@ -400,6 +403,8 @@ recognising->recognizing refocussed->refocused refocusses->refocuses refocussing->refocusing +refuelled->refueled +refuelling->refueling regularisation->regularization regularise->regularize regularised->regularized @@ -420,6 +425,8 @@ reparameterised->reparameterized reparameterises->reparameterizes reparameterising->reparameterizing rigour->rigor +routeing->routing +saleable->salable sanitisation->sanitization sanitise->sanitize sanitised->sanitized @@ -489,6 +496,8 @@ synthesiser->synthesizer synthesisers->synthesizers synthesises->synthesizes synthesising->synthesizing +titbit->tidbit +titbits->tidbits totalled->totaled totalling->totaling unauthorised->unauthorized diff --git a/codespell_lib/data/dictionary_en_to_en-OX_AUTOGENERATED.txt b/codespell_lib/data/dictionary_en_to_en-OX_AUTOGENERATED.txt new file mode 100644 index 0000000000..9fbc281d53 --- /dev/null +++ b/codespell_lib/data/dictionary_en_to_en-OX_AUTOGENERATED.txt @@ -0,0 +1,550 @@ +acknowledgment->acknowledgement +acknowledgments->acknowledgements +aggrandise->aggrandize +aggrandised->aggrandized +aggrandisement->aggrandizement +aggrandises->aggrandizes +aggrandising->aggrandizing +aluminum->aluminium +amortise->amortize +amortised->amortized +amortises->amortizes +amortising->amortizing +analog->analogue +analyze->analyse +analyzed->analysed +analyzer->analyser +analyzers->analysers +analyzing->analysing +apologise->apologize +apologised->apologized +apologises->apologizes +apologising->apologizing +armor->armour +armored->armoured +armoring->armouring +armors->armours +armory->armoury +artifact->artefact +artifacts->artefacts +authorisation->authorization +authorisations->authorizations +authorise->authorize +authorised->authorized +authorises->authorizes +authorising->authorizing +bastardise->bastardize +bastardised->bastardized +bastardises->bastardizes +bastardising->bastardizing +behavior->behaviour +behavioral->behavioural +behaviors->behaviours +biased->biassed +canceled->cancelled +canceling->cancelling +capitalisation->capitalization +capitalise->capitalize +capitalised->capitalized +capitalises->capitalizes +capitalising->capitalizing +catalog->catalogue +catalogs->catalogues +categorise->categorize +categorised->categorized +categorises->categorizes +center->centre +centered->centred +centers->centres +centimeter->centimetre +centimeters->centimetres +centralisation->centralization +centralise->centralize +centralised->centralized +centralises->centralizes +centralising->centralizing +characterisation->characterization +characterisations->characterizations +characterise->characterize +characterised->characterized +characterises->characterizes +characterising->characterizing +civilisation->civilization +cognizant->cognisant +color->colour +coloration->colouration +colorations->colourations +colored->coloured +colorful->colourful +colorfully->colourfully +coloring->colouring +colorizable->colourizable +colorization->colourization +colorizations->colourizations +colorize->colourize +colorized->colourized +colorizer->colourizer +colorizes->colourizes +colorizing->colourizing +colorless->colourless +colors->colours +colourisable->colourizable +colourisation->colourization +colourisations->colourizations +colourise->colourize +colourised->colourized +colouriser->colourizer +colourises->colourizes +colourising->colourizing +counselor->counsellor +criticise->criticize +criticised->criticized +criticises->criticizes +criticising->criticizing +crystallisation->crystallization +crystallise->crystallize +crystallised->crystallized +crystallises->crystallizes +crystallising->crystallizing +customisable->customizable +customisation->customization +customise->customize +customised->customized +customises->customizes +customising->customizing +daemonise->daemonize +daemonised->daemonized +daemonises->daemonizes +daemonising->daemonizing +decentralisation->decentralization +decentralise->decentralize +decentralised->decentralized +decentralises->decentralizes +decentralising->decentralizing +defence->defense +defenceless->defenseless +defences->defenses +demonise->demonize +demonised->demonized +demonises->demonizes +demonising->demonizing +deserialisation->deserialization +deserialise->deserialize +deserialised->deserialized +deserialises->deserializes +deserialising->deserializing +dialog->dialogue +dialogs->dialogues +digitisation->digitization +digitise->digitize +digitised->digitized +digitises->digitizes +digitising->digitizing +disfavor->disfavour +dishonor->dishonour +dishonorable->dishonourable +dishonored->dishonoured +dishonoring->dishonouring +dishonors->dishonours +donut->doughnut +donuts->doughnuts +economise->economize +emphasise->emphasize +emphasised->emphasized +emphasises->emphasizes +emphasising->emphasizing +enamor->enamour +enamored->enamoured +enamoring->enamouring +enamors->enamours +endeavor->endeavour +endeavored->endeavoured +endeavoring->endeavouring +endeavors->endeavours +enroll->enrol +enrollment->enrolment +enrollments->enrolments +enrolls->enrols +equalisation->equalization +equalise->equalize +equalised->equalized +equaliser->equalizer +equalises->equalizes +equalising->equalizing +equalizers->equalisers +favor->favour +favorable->favourable +favored->favoured +favoring->favouring +favorite->favourite +favorites->favourites +favoritism->favouritism +favorizable->favourizable +favorize->favourize +favorized->favourized +favorizes->favourizes +favorizing->favourizing +favors->favours +favourisable->favourizable +favourise->favourize +favourised->favourized +favourises->favourizes +favourising->favourizing +finalisation->finalization +finalise->finalize +finalised->finalized +finalises->finalizes +finalising->finalizing +flavor->flavour +flavors->flavours +focussed->focused +focusses->focuses +focussing->focusing +formalisation->formalization +formalise->formalize +formalised->formalized +formalises->formalizes +formalising->formalizing +fulfill->fulfil +fulfills->fulfils +generalisation->generalization +generalisations->generalizations +generalise->generalize +generalised->generalized +generalises->generalizes +generalising->generalizing +gray->grey +grayed->greyed +grayish->greyish +grays->greys +grayscale->greyscale +hemorrhage->haemorrhage +hemorrhaged->haemorrhaged +hemorrhages->haemorrhages +hemorrhagic->haemorrhagic +hemorrhaging->haemorrhaging +honor->honour +honored->honoured +honoring->honouring +honors->honours +humor->humour +hypothesise->hypothesize +hypothesised->hypothesized +hypothesises->hypothesizes +hypothesising->hypothesizing +initialisation->initialization +initialise->initialize +initialised->initialized +initialises->initializes +initialising->initializing +internationalisation->internationalization +internationalise->internationalize +internationalised->internationalized +internationalises->internationalizes +internationalising->internationalizing +italicise->italicize +italicised->italicized +italicises->italicizes +italicising->italicizing +journaling->journalling +judgment->judgement +judgments->judgements +kilometer->kilometre +kilometers->kilometres +labeled->labelled +labeling->labelling +labor->labour +labored->laboured +laborer->labourer +laborers->labourers +laboring->labouring +labors->labours +lambaste->lambast +lambastes->lambasts +legalisation->legalization +legalise->legalize +legalised->legalized +legalises->legalizes +legalising->legalizing +leukemia->leukaemia +licensing->licencing +liter->litre +liters->litres +localisation->localization +localisations->localizations +localise->localize +localised->localized +localises->localizes +localising->localizing +maneuver->manoeuvre +maneuvered->manoeuvred +maneuvering->manoeuvring +maneuvers->manoeuvres +marshaled->marshalled +marshaling->marshalling +math->maths +maximisation->maximization +maximise->maximize +maximised->maximized +maximises->maximizes +maximising->maximizing +memorisation->memorization +memorise->memorize +memorised->memorized +memorises->memorizes +memorising->memorizing +millimeter->millimetre +millimeters->millimetres +minimisation->minimization +minimise->minimize +minimised->minimized +minimises->minimizes +minimising->minimizing +miter->mitre +modeled->modelled +modeler->modeller +modelers->modellers +modeling->modelling +modernise->modernize +modernised->modernized +modernises->modernizes +modernising->modernizing +mold->mould +molds->moulds +nasalisation->nasalization +nationalisation->nationalization +nationalisations->nationalizations +nationalise->nationalize +nationalised->nationalized +nationalises->nationalizes +nationalising->nationalizing +neighbor->neighbour +neighboring->neighbouring +neighbors->neighbours +normalisation->normalization +normalisations->normalizations +normalise->normalize +normalised->normalized +normalises->normalizes +normalising->normalizing +ocher->ochre +ocherous->ochreous +ochery->ochrey +optimisation->optimization +optimisations->optimizations +optimise->optimize +optimised->optimized +optimiser->optimizer +optimises->optimizes +optimising->optimizing +organisation->organization +organisations->organizations +organise->organize +organised->organized +organiser->organizer +organises->organizes +organising->organizing +organizational->organisational +organizers->organisers +overwritable->overwriteable +parallelisation->parallelization +parallelise->parallelize +parallelised->parallelized +parallelises->parallelizes +parallelising->parallelizing +parameterisable->parameterizable +parameterisation->parameterization +parameterise->parameterize +parameterised->parameterized +parameterises->parameterizes +parameterising->parameterizing +paravirtualisation->paravirtualization +paravirtualise->paravirtualize +paravirtualised->paravirtualized +paravirtualises->paravirtualizes +paravirtualising->paravirtualizing +pasteurisation->pasteurization +pasteurise->pasteurize +pasteurised->pasteurized +pasteurises->pasteurizes +pasteurising->pasteurizing +penalise->penalize +penalised->penalized +penalises->penalizes +penalising->penalizing +plagiarise->plagiarize +plagiarised->plagiarized +plagiarises->plagiarizes +plagiarising->plagiarizing +polarise->polarize +polarised->polarized +polarises->polarizes +polarising->polarizing +practicing->practising +pretense->pretence +pretenses->pretences +prioritisation->prioritization +prioritise->prioritize +prioritised->prioritized +prioritises->prioritizes +prioritising->prioritizing +publicise->publicize +publicised->publicized +publicises->publicizes +publicising->publicizing +randomise->randomize +randomised->randomized +randomises->randomizes +randomising->randomizing +rasterisation->rasterization +rasterise->rasterize +rasterised->rasterized +rasterises->rasterizes +rasterising->rasterizing +rationalisation->rationalization +rationalise->rationalize +rationalised->rationalized +rationalising->rationalizing +realisable->realizable +realisation->realization +realisations->realizations +realise->realize +realised->realized +realises->realizes +realising->realizing +recognisable->recognizable +recognise->recognize +recognised->recognized +recognises->recognizes +recognising->recognizing +refocused->refocussed +refocuses->refocusses +refocusing->refocussing +refueled->refuelled +refueling->refuelling +regularisation->regularization +regularise->regularize +regularised->regularized +regularises->regularizes +regularising->regularizing +reinitialise->reinitialize +reinitialised->reinitialized +reinitialises->reinitializes +reinitialising->reinitializing +reorganisation->reorganization +reorganisations->reorganizations +reorganise->reorganize +reorganised->reorganized +reorganises->reorganizes +reorganising->reorganizing +reparameterise->reparameterize +reparameterised->reparameterized +reparameterises->reparameterizes +reparameterising->reparameterizing +rigor->rigour +routing->routeing +salable->saleable +sanitisation->sanitization +sanitise->sanitize +sanitised->sanitized +sanitiser->sanitizer +sanitises->sanitizes +sanitising->sanitizing +sanitizers->sanitisers +serialisation->serialization +serialise->serialize +serialised->serialized +serialises->serializes +serialising->serializing +signaled->signalled +signaling->signalling +skeptical->sceptical +skillful->skilful +skillfully->skilfully +skillfulness->skilfulness +specialisation->specialization +specialisations->specializations +specialise->specialize +specialised->specialized +specialises->specializes +specialising->specializing +specialties->specialities +specialty->speciality +splendor->splendour +standardisation->standardization +standardise->standardize +standardised->standardized +standardises->standardizes +standardising->standardizing +sterilisation->sterilization +sterilisations->sterilizations +sterilise->sterilize +sterilised->sterilized +steriliser->sterilizer +sterilises->sterilizes +sterilising->sterilizing +sulfate->sulphate +sulfide->sulphide +sulfur->sulphur +sulfureous->sulphureous +sulfuric->sulphuric +sulfurous->sulphurous +summarise->summarize +summarised->summarized +summarises->summarizes +summarising->summarizing +symbolise->symbolize +symbolised->symbolized +symbolises->symbolizes +symbolising->symbolizing +synchronisation->synchronization +synchronisations->synchronizations +synchronise->synchronize +synchronised->synchronized +synchroniser->synchronizer +synchronises->synchronizes +synchronising->synchronizing +synchronizers->synchronisers +synthesise->synthesize +synthesised->synthesized +synthesiser->synthesizer +synthesises->synthesizes +synthesising->synthesizing +synthesizers->synthesisers +tidbit->titbit +tidbits->titbits +totaled->totalled +totaling->totalling +unauthorised->unauthorized +unfavorable->unfavourable +unfavorably->unfavourably +uninitialised->uninitialized +unorganised->unorganized +unrecognisable->unrecognizable +unrecognised->unrecognized +unsynchronised->unsynchronized +utilisable->utilizable +utilisation->utilization +utilise->utilize +utilised->utilized +utilises->utilizes +utilising->utilizing +vectorisation->vectorization +vectorisations->vectorizations +vectorise->vectorize +vectorised->vectorized +vectorises->vectorizes +vectorising->vectorizing +virtualisation->virtualization +virtualise->virtualize +virtualised->virtualized +virtualises->virtualizes +virtualising->virtualizing +visualisation->visualization +visualisations->visualizations +visualise->visualize +visualised->visualized +visualiser->visualizer +visualises->visualizes +visualising->visualizing +writable->writeable diff --git a/codespell_lib/data/dictionary_rare.txt b/codespell_lib/data/dictionary_rare.txt index 675f9c7381..eac6735fcb 100644 --- a/codespell_lib/data/dictionary_rare.txt +++ b/codespell_lib/data/dictionary_rare.txt @@ -82,6 +82,8 @@ degrate->degrade degrates->degrades dependant->dependent derails->details +dervice->device, service, +dervices->devices, services, descried->described descries->describes dirivative->derivative @@ -92,6 +94,7 @@ discontentment->discontent discreet->discrete discus->discuss discuses->discusses +disjointness->disjointedness disturbative->distributive, disruptive, doest->does, doesn't, empress->impress @@ -144,6 +147,8 @@ infarction->infraction infarctions->infractions ingenuous->ingenious inly->only +insteam->instead +intensional->intentional irregardless->regardless joo->you knifes->knives @@ -154,8 +159,6 @@ lamdas->lambdas leaded->led, lead, leas->least, lease, lief->leaf, life, -lien->line -liens->lines lightening->lightning, lighting, loafing->loading lod->load, loud, lode, @@ -179,6 +182,7 @@ mistakingly->mistakenly moil->soil, mohel, mot->not moue->mouse +mouting->moulting, mounting, mouthing, muting, pouting, multistory->multistorey, multi-storey, nickle->nickel noes->nose, knows, nodes, does, @@ -220,7 +224,8 @@ protestors->protesters provence->province purportive->supportive purvue->purview -ques->quest +quater->quarter +ques->quest, queues, cues, readd->re-add, read, readded->re-added, read, readding->re-adding, reading, diff --git a/codespell_lib/data/dictionary_usage.txt b/codespell_lib/data/dictionary_usage.txt index 8b3a15038c..91b67cf9c2 100644 --- a/codespell_lib/data/dictionary_usage.txt +++ b/codespell_lib/data/dictionary_usage.txt @@ -2,7 +2,6 @@ black-hat->malicious actor, attacker, blackhat->malicious actor, attacker, blacklist->blocklist blacklists->blocklists -blueish->bluish cripples->slows down, hinders, obstructs, crippling->attenuating, incapacitating, dummy-value->placeholder value diff --git a/codespell_lib/tests/test_basic.py b/codespell_lib/tests/test_basic.py index a6c05fc089..5120e1e8a1 100644 --- a/codespell_lib/tests/test_basic.py +++ b/codespell_lib/tests/test_basic.py @@ -5,10 +5,11 @@ import re import subprocess import sys +from collections.abc import Generator from io import StringIO from pathlib import Path from shutil import copyfile -from typing import Any, Generator, Optional, Tuple, Union +from typing import Any, Optional, Union from unittest import mock import pytest @@ -39,7 +40,7 @@ def main( *args: Any, count: bool = True, std: bool = False, - ) -> Union[int, Tuple[int, str, str]]: + ) -> Union[int, tuple[int, str, str]]: args = tuple(str(arg) for arg in args) if count: args = ("--count", *args) @@ -65,7 +66,7 @@ def main( def run_codespell( - args: Tuple[Any, ...] = (), + args: tuple[Any, ...] = (), cwd: Optional[Path] = None, ) -> int: """Run codespell.""" @@ -168,6 +169,31 @@ def test_basic( assert cs.main(tmp_path) == 0 +def test_write_changes_lists_changes( + tmp_path: Path, + capsys: pytest.CaptureFixture[str], +) -> None: + """Test that -w flag shows list of changes made to file.""" + + fname = tmp_path / "misspelled.txt" + fname.write_text("This is abandonned\nAnd this is occured\nAlso teh typo\n") + + result = cs.main("-w", fname, std=True) + assert isinstance(result, tuple) + code, _, stderr = result + assert code == 0 + + assert "FIXED:" in stderr + + # Check that changes are listed with format: filename:line: wrong ==> right + assert "misspelled.txt:1: abandonned ==> abandoned" in stderr + assert "misspelled.txt:2: occured ==> occurred" in stderr + assert "misspelled.txt:3: teh ==> the" in stderr + + corrected = fname.read_text() + assert corrected == "This is abandoned\nAnd this is occurred\nAlso the typo\n" + + def test_default_word_parsing( tmp_path: Path, capsys: pytest.CaptureFixture[str], @@ -951,19 +977,19 @@ def test_ignore_multiline_regex_option( assert code == EX_USAGE assert "usage:" in stdout + text = """ + Please see http://example.com/abandonned for info + # codespell:ignore-begin + ''' + abandonned + abandonned + ''' + # codespell:ignore-end + abandonned + """ + fname = tmp_path / "flag.txt" - fname.write_text( - """ - Please see http://example.com/abandonned for info - # codespell:ignore-begin - ''' - abandonned - abandonned - ''' - # codespell:ignore-end - abandonned - """ - ) + fname.write_text(text) assert cs.main(fname) == 4 assert ( cs.main( @@ -974,6 +1000,44 @@ def test_ignore_multiline_regex_option( == 2 ) + with FakeStdin(text): + assert ( + cs.main( + "-", + "--ignore-multiline-regex", + "codespell:ignore-begin.*codespell:ignore-end", + ) + == 2 + ) + + fname.write_text("This\nThsi") + cs.main( + fname, + "-w", + "--ignore-multiline-regex", + "codespell:ignore-begin.*codespell:ignore-end", + ) + assert fname.read_text() == "This\nThis" + + fname.write_text(text) + cs.main( + fname, + "-w", + "--ignore-multiline-regex", + "codespell:ignore-begin.*codespell:ignore-end", + ) + fixed_text = """ + Please see http://example.com/abandoned for info + # codespell:ignore-begin + ''' + abandonned + abandonned + ''' + # codespell:ignore-end + abandoned + """ + assert fname.read_text() == fixed_text + def test_uri_regex_option( tmp_path: Path, @@ -1373,7 +1437,7 @@ def FakeStdin(text: str) -> Generator[None, None, None]: def run_codespell_stdin( text: str, - args: Tuple[Any, ...], + args: tuple[Any, ...], cwd: Optional[Path] = None, ) -> int: """Run codespell in stdin mode and return number of lines in output.""" @@ -1390,14 +1454,14 @@ def run_codespell_stdin( return output.count("\n") -def test_stdin(tmp_path: Path) -> None: +def test_stdin(tmp_path: Path, capsys: pytest.CaptureFixture[str]) -> None: """Test running the codespell executable.""" input_file_lines = 4 text = "" for _ in range(input_file_lines): text += "abandonned\n" for single_line_per_error in (True, False): - args: Tuple[str, ...] = () + args: tuple[str, ...] = () if single_line_per_error: args = ("--stdin-single-line",) # we expect 'input_file_lines' number of lines with @@ -1405,3 +1469,58 @@ def test_stdin(tmp_path: Path) -> None: assert run_codespell_stdin( text, args=args, cwd=tmp_path ) == input_file_lines * (2 - int(single_line_per_error)) + + with FakeStdin("Thsi is a line"): + result = cs.main("-", "-w", std=True) + assert isinstance(result, tuple) + code, stdout, _ = result + assert stdout == "---\nThis is a line" + assert code == 0 + + with FakeStdin("Thsi is a line"): + result = cs.main("-", "--stdin-single-line", std=True) + assert isinstance(result, tuple) + code, stdout, _ = result + assert stdout == "1: Thsi ==> This\n" + assert code == 1 + + +def test_args_from_file( + tmp_path: Path, + capsys: pytest.CaptureFixture[str], +) -> None: + import textwrap + + print() + fname1 = tmp_path / "tmp1" + fname2 = tmp_path / "tmp2" + fname3 = tmp_path / "tmp3" + fname_list = tmp_path / "tmp_list" + fname_list.write_text(f"{fname1} {fname2}\n{fname3}") + fname1.write_text("abandonned\ncode") + fname2.write_text("exmaple\n") + fname3.write_text("abilty\n") + print(f"{fname_list=}") + args = ["codespell", f"@{fname_list}"] + print(f"Running: {args=}") + cp = subprocess.run( # noqa: S603 + args, + check=False, + text=True, + capture_output=True, + ) + code = cp.returncode + stdout = cp.stdout + stderr = cp.stderr + print(f"{code=}") + print(f"stdout:\n{textwrap.indent(stdout, ' ')}") + print(f"stderr:\n{textwrap.indent(stderr, ' ')}") + assert "tmp1:1: abandonned ==> abandoned\n" in stdout, f"{stdout=}" + assert "tmp2:1: exmaple ==> example\n" in stdout, f"{stdout=}" + assert "tmp3:1: abilty ==> ability\n" in stdout, f"{stdout=}" + assert code, f"{code=}" + + # Run same test via cs_.main() so code coverage checks work. + print("Testing with direct call to cs_.main()") + r = cs_.main(*args[1:]) + print(f"{r=}") diff --git a/codespell_lib/tests/test_dictionary.py b/codespell_lib/tests/test_dictionary.py index 8270087116..4411c49225 100644 --- a/codespell_lib/tests/test_dictionary.py +++ b/codespell_lib/tests/test_dictionary.py @@ -3,7 +3,8 @@ import os.path as op import pathlib import re -from typing import Any, Dict, Iterable, Optional, Set, Tuple +from collections.abc import Iterable +from typing import Any, Optional import pytest @@ -37,8 +38,8 @@ ) raise RuntimeError(msg) from e -global_err_dicts: Dict[str, Dict[str, Any]] = {} -global_pairs: Set[Tuple[str, str]] = set() +global_err_dicts: dict[str, dict[str, Any]] = {} +global_pairs: set[tuple[str, str]] = set() # Filename, should be seen as errors in aspell or not _data_dir = op.join(op.dirname(__file__), "..", "data") @@ -61,8 +62,8 @@ def test_dictionaries_exist() -> None: @fname_params def test_dictionary_formatting( fname: str, - in_aspell: Tuple[bool, bool], - in_dictionary: Tuple[Iterable[str], Iterable[str]], + in_aspell: tuple[bool, bool], + in_dictionary: tuple[Iterable[str], Iterable[str]], ) -> None: """Test that all dictionary entries are valid.""" errors = [] @@ -137,9 +138,9 @@ def _check_aspell( def _check_err_rep( err: str, rep: str, - in_aspell: Tuple[Optional[bool], Optional[bool]], + in_aspell: tuple[Optional[bool], Optional[bool]], fname: str, - languages: Tuple[Iterable[str], Iterable[str]], + languages: tuple[Iterable[str], Iterable[str]], ) -> None: assert whitespace.search(err) is None, f"error {err!r} has whitespace" assert "," not in err, f"error {err!r} has a comma" @@ -283,12 +284,19 @@ def test_error_checking_in_aspell( allowed_dups = { ("dictionary.txt", "dictionary_code.txt"), ("dictionary.txt", "dictionary_en-GB_to_en-US.txt"), + ("dictionary.txt", "dictionary_en_to_en-OX_AUTOGENERATED.txt"), ("dictionary.txt", "dictionary_names.txt"), ("dictionary.txt", "dictionary_rare.txt"), ("dictionary.txt", "dictionary_usage.txt"), ("dictionary_code.txt", "dictionary_rare.txt"), + ("dictionary_code.txt", "dictionary_en_to_en-OX_AUTOGENERATED.txt"), ("dictionary_rare.txt", "dictionary_en-GB_to_en-US.txt"), + ("dictionary_rare.txt", "dictionary_en_to_en-OX_AUTOGENERATED.txt"), ("dictionary_rare.txt", "dictionary_usage.txt"), + ("dictionary_en-GB_to_en-US.txt", "dictionary_en_to_en-OX_AUTOGENERATED.txt"), + ("dictionary_en_to_en-OX_AUTOGENERATED.txt", "dictionary_en-GB_to_en-US.txt"), + ("dictionary_en_to_en-OX_AUTOGENERATED.txt", "dictionary_rare.txt"), + ("dictionary_en_to_en-OX_AUTOGENERATED.txt", "dictionary_code.txt"), } @@ -296,8 +304,8 @@ def test_error_checking_in_aspell( @pytest.mark.dependency(name="dictionary loop") def test_dictionary_looping( fname: str, - in_aspell: Tuple[bool, bool], - in_dictionary: Tuple[bool, bool], + in_aspell: tuple[bool, bool], + in_dictionary: tuple[bool, bool], ) -> None: """Test that all dictionary entries are valid.""" this_err_dict = {} @@ -329,8 +337,8 @@ def test_dictionary_looping( global_pairs.add(pair) for other_fname, other_err_dict in global_err_dicts.items(): # error duplication (eventually maybe we should just merge?) - for err in this_err_dict: - assert err not in other_err_dict, ( + for err, fix in this_err_dict.items(): + assert err not in other_err_dict or fix == other_err_dict[err], ( f"error {err!r} in dictionary {short_fname} " f"already exists in dictionary {other_fname}" ) diff --git a/pyproject.toml b/pyproject.toml index c07ab9601b..58bc385343 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,14 +4,13 @@ name = "codespell" description = "Fix common misspellings in text files" readme = { file = "README.rst", content-type = "text/x-rst" } -requires-python = ">=3.8" -license = {text = "GPL-2.0-only"} +requires-python = ">=3.9" +license = "GPL-2.0-only" authors = [ {name = "Lucas De Marchi", email = "lucas.de.marchi@gmail.com"}, ] classifiers = [ "Intended Audience :: Developers", - "License :: OSI Approved", "Programming Language :: Python", "Topic :: Software Development", "Operating System :: Microsoft :: Windows", @@ -21,7 +20,6 @@ classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", @@ -67,7 +65,7 @@ repository = "https://github.com/codespell-project/codespell" [build-system] build-backend = "setuptools.build_meta" -requires = ["setuptools>=64", "setuptools_scm[toml]>=6.2, != 8.0.0"] +requires = ["setuptools>=77", "setuptools_scm[toml]>=6.2, != 8.0.0"] [tool.setuptools_scm] write_to = "codespell_lib/_version.py" @@ -137,6 +135,7 @@ select = [ ] ignore = [ "B904", + "PLC0415", "PLR0914", "PLR6201", "PLW2901", @@ -144,7 +143,6 @@ ignore = [ "S404", "SIM105", "SIM115", - "UP038", # https://github.com/astral-sh/ruff/issues/7871 # https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules "W191", "E111", @@ -173,4 +171,4 @@ allow-magic-value-types = ["bytes", "int", "str",] max-args = 13 max-branches = 48 max-returns = 12 -max-statements = 119 +max-statements = 120 diff --git a/tools/gen_OX.sh b/tools/gen_OX.sh new file mode 100755 index 0000000000..6c45efe18f --- /dev/null +++ b/tools/gen_OX.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +one_of() { + LIST="$*" + echo '\(\('"${LIST// /\\)\\|\\(}"'\)\)' +} + +SUFFIXES=( + "ize" + "izes" + "izer" + "izable" + "ized" + "izing" + "izement" + "ization" + "izations" +) +PAT1="$(one_of "${SUFFIXES[@]}")$" + +# choose US for these ones +EXCEPTIONS=( + 'defenc' + 'focuss' +) +PAT2="^$(one_of "${EXCEPTIONS[@]}")" + +# these one should be left out +IGNORE=( + 'storey' + 'practise' + 'programme' + 'licence' + 'metre' +) +PAT3="^$(one_of "${IGNORE[@]}")" + +( + grep -e "$PAT1" -e "$PAT2" "$1" | grep -v "$PAT3" | grep -v '^\(colouris\)\|\(favouris\)' + for i in e es ed ing ation ations er able; do + echo "colouris$i->colouriz$i" + echo "coloriz$i->colouriz$i" + done + for i in e es ed ing able; do + echo "favouris$i->favouriz$i" + echo "favoriz$i->favouriz$i" + done + grep -v -e "$PAT1" -e "$PAT2" "$1" | grep -v "$PAT3" | sed 's/^\(.*\)->\(.*\)$/\2->\1/' +) | sort -f -t- -k 1b,1 diff --git a/tox.ini b/tox.ini index 2876ddeffe..6e0850475b 100644 --- a/tox.ini +++ b/tox.ini @@ -2,6 +2,12 @@ min_version = 4.0 env_list = unitest,type,dictionaries +[testenv:dictionaries] +description = run dictionary checks +skip_install = true +allowlist_externals = make +commands = make check-dictionaries + [testenv:unitest] description = run unit tests extras = dev @@ -11,9 +17,3 @@ commands = pytest --cov=codespell_lib codespell_lib description = run type checks extras = types commands = mypy codespell_lib - -[testenv:dictionaries] -description = run dictionary checks -skip_install = true -allowlist_externals = make -commands = make check-dictionaries