diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dc411c6da49b1..2176d6d1ee48a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,6 +21,12 @@ repos: - id: check-github-workflows - id: check-github-actions - id: check-readthedocs + - repo: https://github.com/codespell-project/codespell + rev: v2.3.0 + hooks: + - id: codespell + additional_dependencies: + - tomli - repo: https://github.com/rhysd/actionlint rev: v1.7.6 hooks: diff --git a/docs/source/generics.rst b/docs/source/generics.rst index 731365d3789bb..15538dea13bf3 100644 --- a/docs/source/generics.rst +++ b/docs/source/generics.rst @@ -999,7 +999,7 @@ similarly supported via generics (Python 3.12 syntax): .. code-block:: python - from colletions.abc import Callable + from collections.abc import Callable from typing import Any def route[F: Callable[..., Any]](url: str) -> Callable[[F], F]: diff --git a/docs/source/more_types.rst b/docs/source/more_types.rst index cbf40d5dcaa51..0383c3448d068 100644 --- a/docs/source/more_types.rst +++ b/docs/source/more_types.rst @@ -390,7 +390,7 @@ program: The ``summarize([])`` call matches both variants: an empty list could be either a ``list[int]`` or a ``list[str]``. In this case, mypy will break the tie by picking the first matching variant: ``output`` -will have an inferred type of ``float``. The implementor is responsible +will have an inferred type of ``float``. The implementer is responsible for making sure ``summarize`` breaks ties in the same way at runtime. However, there are two exceptions to the "pick the first match" rule. diff --git a/docs/source/runtime_troubles.rst b/docs/source/runtime_troubles.rst index d63d0f9a74ae1..b61f0048dd0a7 100644 --- a/docs/source/runtime_troubles.rst +++ b/docs/source/runtime_troubles.rst @@ -274,7 +274,7 @@ libraries if types are generic only in stubs. Using types defined in stubs but not at runtime ----------------------------------------------- -Sometimes stubs that you're using may define types you wish to re-use that do +Sometimes stubs that you're using may define types you wish to reuse that do not exist at runtime. Importing these types naively will cause your code to fail at runtime with ``ImportError`` or ``ModuleNotFoundError``. Similar to previous sections, these can be dealt with by using :ref:`typing.TYPE_CHECKING diff --git a/mypy/argmap.py b/mypy/argmap.py index c863844f90ad5..8db78b5413e8f 100644 --- a/mypy/argmap.py +++ b/mypy/argmap.py @@ -220,7 +220,7 @@ def expand_actual_type( self.tuple_index += 1 item = actual_type.items[self.tuple_index - 1] if isinstance(item, UnpackType) and not allow_unpack: - # An upack item that doesn't have special handling, use upper bound as above. + # An unpack item that doesn't have special handling, use upper bound as above. unpacked = get_proper_type(item.type) if isinstance(unpacked, TypeVarTupleType): fallback = get_proper_type(unpacked.upper_bound) diff --git a/mypy/join.py b/mypy/join.py index 166434f58f8d9..11e0c88cca89a 100644 --- a/mypy/join.py +++ b/mypy/join.py @@ -499,7 +499,7 @@ def join_tuples(self, s: TupleType, t: TupleType) -> list[Type] | None: return items return None if s_unpack_index is not None and t_unpack_index is not None: - # The most complex case: both tuples have an upack item. + # The most complex case: both tuples have an unpack item. s_unpack = s.items[s_unpack_index] assert isinstance(s_unpack, UnpackType) s_unpacked = get_proper_type(s_unpack.type) diff --git a/mypy/messages.py b/mypy/messages.py index b63310825f7d7..986915ffcfa57 100644 --- a/mypy/messages.py +++ b/mypy/messages.py @@ -210,7 +210,7 @@ def are_type_names_disabled(self) -> bool: def prefer_simple_messages(self) -> bool: """Should we generate simple/fast error messages? - If errors aren't shown to the user, we don't want to waste cyles producing + If errors aren't shown to the user, we don't want to waste cycles producing complex error messages. """ return self.errors.prefer_simple_messages() diff --git a/mypy/semanal_namedtuple.py b/mypy/semanal_namedtuple.py index a18d0591364c4..b67747d16887a 100644 --- a/mypy/semanal_namedtuple.py +++ b/mypy/semanal_namedtuple.py @@ -198,7 +198,7 @@ def check_namedtuple_classdef( # Something is incomplete. We need to defer this named tuple. return None types.append(analyzed) - # ...despite possible minor failures that allow further analyzis. + # ...despite possible minor failures that allow further analysis. if name.startswith("_"): self.fail( f"NamedTuple field name cannot start with an underscore: {name}", stmt diff --git a/mypy/semanal_newtype.py b/mypy/semanal_newtype.py index c9c0c46f7aeec..0c717b5d9a0e7 100644 --- a/mypy/semanal_newtype.py +++ b/mypy/semanal_newtype.py @@ -174,7 +174,7 @@ def analyze_newtype_declaration(self, s: AssignmentStmt) -> tuple[str | None, Ca def check_newtype_args( self, name: str, call: CallExpr, context: Context ) -> tuple[Type | None, bool]: - """Ananlyze base type in NewType call. + """Analyze base type in NewType call. Return a tuple (type, should defer). """ diff --git a/mypy/stubgenc.py b/mypy/stubgenc.py index 694be8e4beda0..b5bb4f8f727b2 100755 --- a/mypy/stubgenc.py +++ b/mypy/stubgenc.py @@ -341,7 +341,7 @@ def get_pos_default(i: int, _arg: str) -> Any | None: # Add *args if present if varargs: arglist.append(ArgSig(f"*{varargs}", get_annotation(varargs))) - # if we have keyword only args, then wee need to add "*" + # if we have keyword only args, then we need to add "*" elif kwonlyargs: arglist.append(ArgSig("*")) diff --git a/mypy/suggestions.py b/mypy/suggestions.py index 36dc7e8e2acd5..16e630bf8c6ed 100644 --- a/mypy/suggestions.py +++ b/mypy/suggestions.py @@ -454,7 +454,7 @@ def get_guesses_from_parent(self, node: FuncDef) -> list[CallableType]: pnode = parent.names.get(node.name) if pnode and isinstance(pnode.node, (FuncDef, Decorator)): typ = get_proper_type(pnode.node.type) - # FIXME: Doesn't work right with generic tyeps + # FIXME: Doesn't work right with generic types if isinstance(typ, CallableType) and len(typ.arg_types) == len(node.arguments): # Return the first thing we find, since it probably doesn't make sense # to grab things further up in the chain if an earlier parent has it. diff --git a/mypyc/codegen/emitfunc.py b/mypyc/codegen/emitfunc.py index 6088fb06dd32f..ab397ccdab538 100644 --- a/mypyc/codegen/emitfunc.py +++ b/mypyc/codegen/emitfunc.py @@ -149,7 +149,7 @@ def generate_native_function( # generates them will add instructions between the branch and the # next label, causing the label to be wrongly removed. A better # solution would be to change the IR so that it adds a basic block - # inbetween the calls. + # in between the calls. is_problematic_op = isinstance(terminator, Branch) and any( isinstance(s, GetAttr) for s in terminator.sources() ) diff --git a/mypyc/doc/dev-intro.md b/mypyc/doc/dev-intro.md index a8a04a297688d..b310f0cedd7b2 100644 --- a/mypyc/doc/dev-intro.md +++ b/mypyc/doc/dev-intro.md @@ -229,7 +229,7 @@ pretty-printed IR into `build/ops.txt`. This is the final IR that includes the output from exception and reference count handling insertion passes. -We also have tests that verify the generate IR +We also have tests that verify the generated IR (`mypyc/test-data/irbuild-*.text`). ## Type-checking Mypyc @@ -290,7 +290,7 @@ under `mypyc/lib-rt`. ## Inspecting Generated C -It's often useful to inspect the C code genenerate by mypyc to debug +It's often useful to inspect the C code generated by mypyc to debug issues. Mypyc stores the generated C code as `build/__native.c`. Compiled native functions have the prefix `CPyDef_`, while wrapper functions used for calling functions from interpreted Python code have diff --git a/mypyc/irbuild/prebuildvisitor.py b/mypyc/irbuild/prebuildvisitor.py index 17f907d42111f..5f178a2901382 100644 --- a/mypyc/irbuild/prebuildvisitor.py +++ b/mypyc/irbuild/prebuildvisitor.py @@ -73,7 +73,7 @@ def __init__( self.decorators_to_remove: dict[FuncDef, list[int]] = decorators_to_remove # A mapping of import groups (a series of Import nodes with - # nothing inbetween) where each group is keyed by its first + # nothing in between) where each group is keyed by its first # import node. self.module_import_groups: dict[Import, list[Import]] = {} self._current_import_group: Import | None = None diff --git a/pyproject.toml b/pyproject.toml index 157c26385e4ea..b87d46a919506 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -110,6 +110,10 @@ force-exclude = ''' ^/test-data ''' +[tool.codespell] +ignore-words-list = "ans,ccompiler,corus,fo,froms,haa,hax,notin,ot,statics,whet,zar" +skip = "./mypyc/external/*,*.pyi,*.test" + [tool.ruff] line-length = 99 target-version = "py39"