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,
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
`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
[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.
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,
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.
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
`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
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"
profile = "black"
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,
["py"],
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(
"tsc",