mypy: Move configuration to pyproject.toml.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2021-07-05 14:36:46 -07:00 committed by Tim Abbott
parent 19ee45ccc4
commit 0ae94c6051
5 changed files with 45 additions and 44 deletions

View File

@ -192,7 +192,7 @@ highlighting. The system is largely managed by the code in
* **Mypy type checker**. Because we're using mypy in a strict mode, * **Mypy type checker**. Because we're using mypy in a strict mode,
when you add use of a new Python dependency, you usually need to when you add use of a new Python dependency, you usually need to
either adds stubs to the `stubs/` directory for the library, or edit either adds stubs to the `stubs/` directory for the library, or edit
`mypy.ini` in the root of the Zulip project to configure `pyproject.toml` in the root of the Zulip project to configure
`ignore_missing_imports` for the new library. See `ignore_missing_imports` for the new library. See
[our mypy docs][mypy-docs] for more details. [our mypy docs][mypy-docs] for more details.

View File

@ -98,14 +98,14 @@ basically the equivalent of C header files defining the types used in
these Python APIs. these Python APIs.
For other third-party modules that we call from Zulip, one either For other third-party modules that we call from Zulip, one either
needs to add an `ignore_missing_imports` entry in `mypy.ini` in the needs to add an `ignore_missing_imports` entry in `pyproject.toml` in the
root of the project, letting `mypy` know that it's third-party code, root of the project, letting `mypy` know that it's third-party code,
or add type stubs to the `stubs/` directory, which has type stubs that or add type stubs to the `stubs/` directory, which has type stubs that
mypy can use to type-check calls into that third-party module. mypy can use to type-check calls into that third-party module.
It's easy to add new stubs! Just read the docs, look at some of It's easy to add new stubs! Just read the docs, look at some of
existing examples to see how they work, and remember to remove the existing examples to see how they work, and remember to remove the
`ignore_missing_imports` entry in `mypy.ini` when you add them. `ignore_missing_imports` entry in `pyproject.toml` when you add them.
For any third-party modules that don't have stubs, `mypy` treats For any third-party modules that don't have stubs, `mypy` treats
everything in the third-party module as an `Any`, which is the right everything in the third-party module as an `Any`, which is the right

View File

@ -1,40 +0,0 @@
[mypy]
# Logistics of what code to check and how to handle the data.
scripts_are_modules = True
show_traceback = True
# See https://zulip.readthedocs.io/en/latest/testing/mypy.html#mypy-stubs-for-third-party-modules
# for notes on how we manage mypy stubs.
mypy_path = $MYPY_CONFIG_FILE_DIR/stubs
cache_dir = $MYPY_CONFIG_FILE_DIR/var/mypy-cache
# These are all the options that would be enabled by mypy --strict, in
# the order listed by the mypy --help documentation of --strict. We
# do not yet enable all of them.
warn_unused_configs = True
disallow_any_generics = True
disallow_subclassing_any = False
disallow_untyped_calls = False
disallow_untyped_defs = True
disallow_incomplete_defs = True
check_untyped_defs = True
disallow_untyped_decorators = False
no_implicit_optional = True
warn_redundant_casts = True
warn_unused_ignores = True
warn_return_any = False
no_implicit_reexport = False
strict_equality = True
# Display the codes needed for # type: ignore[code] annotations.
show_error_codes = True
# We use a lot of third-party libraries we don't have stubs for, as
# well as a handful of our own modules that we haven't told mypy how
# to find. Ignore them. (For some details, see:
# `git log -p -S ignore_missing_imports mypy.ini`.)
#
# This doesn't get in the way of using the stubs we *do* have.
ignore_missing_imports = True
# Warn of unreachable or redundant code.
warn_unreachable = True

View File

@ -7,3 +7,44 @@ src_paths = [".", "tools", "tools/setup/emoji"]
known_third_party = "zulip" known_third_party = "zulip"
profile = "black" profile = "black"
line_length = 100 line_length = 100
[tool.mypy]
# Logistics of what code to check and how to handle the data.
scripts_are_modules = true
show_traceback = true
# See https://zulip.readthedocs.io/en/latest/testing/mypy.html#mypy-stubs-for-third-party-modules
# for notes on how we manage mypy stubs.
mypy_path = "$MYPY_CONFIG_FILE_DIR/stubs"
cache_dir = "$MYPY_CONFIG_FILE_DIR/var/mypy-cache"
# These are all the options that would be enabled by mypy --strict, in
# the order listed by the mypy --help documentation of --strict. We
# do not yet enable all of them.
warn_unused_configs = true
disallow_any_generics = true
disallow_subclassing_any = false
disallow_untyped_calls = false
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
disallow_untyped_decorators = false
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_return_any = false
no_implicit_reexport = false
strict_equality = true
# Display the codes needed for # type: ignore[code] annotations.
show_error_codes = true
# We use a lot of third-party libraries we don't have stubs for, as
# well as a handful of our own modules that we haven't told mypy how
# to find. Ignore them. (For some details, see:
# `git log -p -S ignore_missing_imports -- mypy.ini`.)
#
# This doesn't get in the way of using the stubs we *do* have.
ignore_missing_imports = true
# Warn of unreachable or redundant code.
warn_unreachable = true

View File

@ -134,7 +134,7 @@ def run() -> None:
command, command,
["py"], ["py"],
pass_targets=False, pass_targets=False,
description="Static type checker for Python (config: mypy.ini)", description="Static type checker for Python (config: pyproject.toml)",
) )
linter_config.external_linter( linter_config.external_linter(
"tsc", "tsc",