mypy: Remove daemon mode.

mypy in daemon mode takes some 400 MiB of memory, and cannot follow
imports of type-annotated third-party packages; meanwhile, non-daemon
mode is no longer nearly as slow as it once was.

Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
This commit is contained in:
Anders Kaseorg 2019-08-06 18:55:10 -07:00 committed by Tim Abbott
parent 9c49049c9e
commit 99904527f5
4 changed files with 3 additions and 31 deletions

View File

@ -48,14 +48,6 @@ To run mypy on Zulip's python code, you can run the command:
tools/run-mypy tools/run-mypy
This will take a while to start running, since it runs mypy as a
long-running daemon (server) process and send type-checking requests
to the server; this makes checking mypy about 100x faster. But if
you're debugging or for whatever reason don't want the daemon, you can
use:
tools/run-mypy --no-daemon
Mypy outputs errors in the same style as a compiler would. For Mypy outputs errors in the same style as a compiler would. For
example, if your code has a type error like this: example, if your code has a type error like this:
@ -118,10 +110,6 @@ everything in the third-party module as an `Any`, which is the right
model (one certainly wouldn't want to need stubs for everything just model (one certainly wouldn't want to need stubs for everything just
to use `mypy`!), but means the code can't be fully type-checked. to use `mypy`!), but means the code can't be fully type-checked.
**Note**: When editing stubs, we recommend using
`tools/run-mypy --no-daemon`, because the mypy daemon's caching
system has some bugs around editing stubs that can be confusing.
## `type_debug.py` ## `type_debug.py`
`zerver/lib/type_debug.py` has a useful decorator `print_types`. It `zerver/lib/type_debug.py` has a useful decorator `print_types`. It

View File

@ -1,6 +1,3 @@
# NOTE: When editing stubs, we recommend using `tools/run-mypy --no-daemon`,
# because the mypy daemon's caching system has some bugs around editing stubs
#
# See https://zulip.readthedocs.io/en/latest/testing/mypy.html#mypy-stubs-for-third-party-modules # See https://zulip.readthedocs.io/en/latest/testing/mypy.html#mypy-stubs-for-third-party-modules
# for notes on how we manage mypy stubs. # for notes on how we manage mypy stubs.

View File

@ -17,10 +17,7 @@ set -x
# We run mypy after the backend tests so we get output from the # We run mypy after the backend tests so we get output from the
# backend tests, which tend to uncover more serious problems, first. # backend tests, which tend to uncover more serious problems, first.
./tools/run-mypy --version ./tools/run-mypy --version
# We run mypy without daemon mode, since that's faster given that ./tools/run-mypy
# we're only going to run it once, and catches more errors since
# daemon mode doesn't follow package imports.
./tools/run-mypy --no-daemon
./tools/test-migrations ./tools/test-migrations
./tools/setup/optimize-svg ./tools/setup/optimize-svg

View File

@ -27,8 +27,6 @@ parser.add_argument('--quick', action='store_true',
help="pass --quick to mypy") help="pass --quick to mypy")
parser.add_argument('-m', '--modified', action='store_true', parser.add_argument('-m', '--modified', action='store_true',
help="check only modified files") help="check only modified files")
parser.add_argument('--no-daemon', action='store_true',
help="Start and run the mypy fine-grained incremental daemon")
parser.add_argument('--scripts-only', action='store_true', parser.add_argument('--scripts-only', action='store_true',
help="only check extensionless python scripts") help="only check extensionless python scripts")
parser.add_argument('-a', '--all', action='store_true', parser.add_argument('-a', '--all', action='store_true',
@ -39,7 +37,7 @@ args = parser.parse_args()
assert_provisioning_status_ok(args.force) assert_provisioning_status_ok(args.force)
command_name = "mypy" if (args.no_daemon or args.version) else "dmypy" command_name = "mypy"
# Use zulip-py3-venv's mypy if it's available. # Use zulip-py3-venv's mypy if it's available.
VENV_DIR = "/srv/zulip-py3-venv" VENV_DIR = "/srv/zulip-py3-venv"
@ -75,15 +73,7 @@ if args.quick:
extra_args.append("--quick") extra_args.append("--quick")
mypy_args = extra_args + python_files + pyi_files mypy_args = extra_args + python_files + pyi_files
if args.no_daemon: rc = subprocess.call([mypy_command] + mypy_args)
rc = subprocess.call([mypy_command] + mypy_args)
else:
mypy_args += ["--follow-imports=skip"]
rc = subprocess.call([mypy_command, "status"], stdout=subprocess.PIPE)
if rc != 0:
print("Starting mypy daemon, this will take a minute...")
sys.stdout.flush()
rc = subprocess.call([mypy_command, 'run', '--'] + mypy_args)
if rc != 0: if rc != 0:
print("") print("")