Skip to content

Commit 4250899

Browse files
committed
mypy: a separate tox env for mypy
1 parent 3823cc6 commit 4250899

File tree

12 files changed

+180
-141
lines changed

12 files changed

+180
-141
lines changed

.github/workflows/quality.yml

+25-3
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,37 @@ jobs:
4646

4747
- name: "Install dependencies"
4848
run: |
49-
set -xe
50-
python -VV
51-
python -m site
5249
python -m pip install --require-hashes -r requirements/tox.pip
5350
5451
- name: "Tox lint"
5552
run: |
5653
python -m tox -e lint
5754
55+
mypy:
56+
name: "Check types"
57+
runs-on: ubuntu-latest
58+
59+
steps:
60+
- name: "Check out the repo"
61+
uses: "actions/checkout@v3"
62+
63+
- name: "Install Python"
64+
uses: "actions/setup-python@v4"
65+
with:
66+
python-version: "3.8" # Minimum of PYVERSIONS, but at least 3.8
67+
cache: pip
68+
cache-dependency-path: 'requirements/*.pip'
69+
70+
- name: "Install dependencies"
71+
run: |
72+
# We run on 3.8, but the pins were made on 3.7, so don't insist on
73+
# hashes, which won't match.
74+
python -m pip install -r requirements/tox.pip
75+
76+
- name: "Tox mypy"
77+
run: |
78+
python -m tox -e mypy
79+
5880
doc:
5981
name: "Build docs"
6082
runs-on: ubuntu-latest

Makefile

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ upgrade: ## Update the *.pip files with the latest packages satisfying *.in
9696
$(PIP_COMPILE) -o requirements/light-threads.pip requirements/light-threads.in
9797
$(PIP_COMPILE) -o doc/requirements.pip doc/requirements.in
9898
$(PIP_COMPILE) -o requirements/lint.pip doc/requirements.in requirements/dev.in
99+
$(PIP_COMPILE) -o requirements/mypy.pip requirements/mypy.in
99100

100101
diff_upgrade: ## Summarize the last `make upgrade`
101102
@git diff -U0 | grep -v '^@' | grep == | sort -k1.2,1.99 -k1.1,1.1r -u

pyproject.toml

+11-20
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,19 @@ build-backend = 'setuptools.build_meta'
77

88
[tool.mypy]
99
# mypy settings started from https://quantlane.com/blog/type-checking-large-codebase/
10-
# Ensure full coverage
11-
disallow_untyped_calls = false
12-
disallow_untyped_defs = true
13-
disallow_incomplete_defs = true
14-
disallow_untyped_decorators = false
1510
check_untyped_defs = true
16-
17-
# Restrict dynamic typing
1811
disallow_any_generics = true
12+
disallow_incomplete_defs = true
1913
disallow_subclassing_any = true
20-
warn_return_any = true
21-
22-
# Know exactly what you're doing
14+
disallow_untyped_calls = false
15+
disallow_untyped_decorators = false
16+
disallow_untyped_defs = true
17+
follow_imports = "silent"
18+
ignore_missing_imports = true
19+
no_implicit_optional = true
20+
show_error_codes = true
2321
warn_redundant_casts = true
24-
warn_unused_ignores = true
25-
warn_unused_configs = true
22+
warn_return_any = true
2623
warn_unreachable = true
27-
show_error_codes = true
28-
29-
# Explicit is better than implicit
30-
no_implicit_optional = true
31-
32-
# Don't follow imports
33-
ignore_missing_imports = true
34-
follow_imports = "silent"
24+
warn_unused_configs = true
25+
warn_unused_ignores = true

requirements/dev.in

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ check-manifest
1616
cogapp
1717
greenlet
1818
pylint
19-
mypy
2019
readme_renderer
2120

2221
# for kitting.

requirements/dev.pip

+8-47
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ execnet==1.9.0 \
7777
# via
7878
# -r requirements/pytest.pip
7979
# pytest-xdist
80-
filelock==3.8.2 \
81-
--hash=sha256:7565f628ea56bfcd8e54e42bdc55da899c85c1abfe1b5bcfd147e9188cebb3b2 \
82-
--hash=sha256:8df285554452285f79c035efb0c861eb33a4bcfa5b7a137016e32e6a90f9792c
80+
filelock==3.9.0 \
81+
--hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \
82+
--hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d
8383
# via
8484
# -r requirements/pip.pip
8585
# -r requirements/tox.pip
@@ -238,42 +238,6 @@ more-itertools==9.0.0 \
238238
--hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \
239239
--hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab
240240
# via jaraco-classes
241-
mypy==0.991 \
242-
--hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \
243-
--hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \
244-
--hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \
245-
--hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \
246-
--hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \
247-
--hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \
248-
--hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \
249-
--hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \
250-
--hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \
251-
--hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \
252-
--hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \
253-
--hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \
254-
--hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \
255-
--hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \
256-
--hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \
257-
--hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \
258-
--hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \
259-
--hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \
260-
--hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \
261-
--hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \
262-
--hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \
263-
--hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \
264-
--hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \
265-
--hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \
266-
--hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \
267-
--hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \
268-
--hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \
269-
--hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \
270-
--hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \
271-
--hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef
272-
# via -r requirements/dev.in
273-
mypy-extensions==0.4.3 \
274-
--hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \
275-
--hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8
276-
# via mypy
277241
packaging==22.0 \
278242
--hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \
279243
--hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3
@@ -300,9 +264,9 @@ pkginfo==1.9.2 \
300264
--hash=sha256:ac03e37e4d601aaee40f8087f63fc4a2a6c9814dda2c8fa6aab1b1829653bdfa \
301265
--hash=sha256:d580059503f2f4549ad6e4c106d7437356dbd430e2c7df99ee1efe03d75f691e
302266
# via twine
303-
platformdirs==2.6.0 \
304-
--hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \
305-
--hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e
267+
platformdirs==2.6.2 \
268+
--hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \
269+
--hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2
306270
# via
307271
# -r requirements/pip.pip
308272
# -r requirements/tox.pip
@@ -396,7 +360,6 @@ tomli==2.0.1 \
396360
# -r requirements/tox.pip
397361
# build
398362
# check-manifest
399-
# mypy
400363
# pep517
401364
# pylint
402365
# pytest
@@ -444,9 +407,7 @@ typed-ast==1.5.4 \
444407
--hash=sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6 \
445408
--hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \
446409
--hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66
447-
# via
448-
# astroid
449-
# mypy
410+
# via astroid
450411
typing-extensions==4.4.0 \
451412
--hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \
452413
--hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e
@@ -455,7 +416,7 @@ typing-extensions==4.4.0 \
455416
# -r requirements/pytest.pip
456417
# astroid
457418
# importlib-metadata
458-
# mypy
419+
# platformdirs
459420
# pylint
460421
# rich
461422
urllib3==1.26.13 \

requirements/kit.pip

+7-6
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ colorama==0.4.6 \
3232
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
3333
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
3434
# via -r requirements/kit.in
35-
filelock==3.8.2 \
36-
--hash=sha256:7565f628ea56bfcd8e54e42bdc55da899c85c1abfe1b5bcfd147e9188cebb3b2 \
37-
--hash=sha256:8df285554452285f79c035efb0c861eb33a4bcfa5b7a137016e32e6a90f9792c
35+
filelock==3.9.0 \
36+
--hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \
37+
--hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d
3838
# via cibuildwheel
3939
importlib-metadata==5.2.0 \
4040
--hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \
@@ -53,9 +53,9 @@ pep517==0.13.0 \
5353
--hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \
5454
--hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59
5555
# via build
56-
platformdirs==2.6.0 \
57-
--hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \
58-
--hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e
56+
platformdirs==2.6.2 \
57+
--hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \
58+
--hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2
5959
# via cibuildwheel
6060
pyelftools==0.29 \
6161
--hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \
@@ -78,6 +78,7 @@ typing-extensions==4.4.0 \
7878
# via
7979
# cibuildwheel
8080
# importlib-metadata
81+
# platformdirs
8182
wheel==0.38.4 \
8283
--hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \
8384
--hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8

requirements/lint.pip

+8-47
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ execnet==1.9.0 \
9191
# via
9292
# -r requirements/pytest.pip
9393
# pytest-xdist
94-
filelock==3.8.2 \
95-
--hash=sha256:7565f628ea56bfcd8e54e42bdc55da899c85c1abfe1b5bcfd147e9188cebb3b2 \
96-
--hash=sha256:8df285554452285f79c035efb0c861eb33a4bcfa5b7a137016e32e6a90f9792c
94+
filelock==3.9.0 \
95+
--hash=sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de \
96+
--hash=sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d
9797
# via
9898
# -r requirements/pip.pip
9999
# -r requirements/tox.pip
@@ -308,42 +308,6 @@ more-itertools==9.0.0 \
308308
--hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \
309309
--hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab
310310
# via jaraco-classes
311-
mypy==0.991 \
312-
--hash=sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d \
313-
--hash=sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6 \
314-
--hash=sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf \
315-
--hash=sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f \
316-
--hash=sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813 \
317-
--hash=sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33 \
318-
--hash=sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad \
319-
--hash=sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05 \
320-
--hash=sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297 \
321-
--hash=sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06 \
322-
--hash=sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd \
323-
--hash=sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243 \
324-
--hash=sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305 \
325-
--hash=sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476 \
326-
--hash=sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711 \
327-
--hash=sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70 \
328-
--hash=sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5 \
329-
--hash=sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461 \
330-
--hash=sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab \
331-
--hash=sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c \
332-
--hash=sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d \
333-
--hash=sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135 \
334-
--hash=sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93 \
335-
--hash=sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648 \
336-
--hash=sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a \
337-
--hash=sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb \
338-
--hash=sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3 \
339-
--hash=sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372 \
340-
--hash=sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb \
341-
--hash=sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef
342-
# via -r requirements/dev.in
343-
mypy-extensions==0.4.3 \
344-
--hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \
345-
--hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8
346-
# via mypy
347311
packaging==22.0 \
348312
--hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \
349313
--hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3
@@ -371,9 +335,9 @@ pkginfo==1.9.2 \
371335
--hash=sha256:ac03e37e4d601aaee40f8087f63fc4a2a6c9814dda2c8fa6aab1b1829653bdfa \
372336
--hash=sha256:d580059503f2f4549ad6e4c106d7437356dbd430e2c7df99ee1efe03d75f691e
373337
# via twine
374-
platformdirs==2.6.0 \
375-
--hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \
376-
--hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e
338+
platformdirs==2.6.2 \
339+
--hash=sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490 \
340+
--hash=sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2
377341
# via
378342
# -r requirements/pip.pip
379343
# -r requirements/tox.pip
@@ -535,7 +499,6 @@ tomli==2.0.1 \
535499
# -r requirements/tox.pip
536500
# build
537501
# check-manifest
538-
# mypy
539502
# pep517
540503
# pylint
541504
# pytest
@@ -596,9 +559,7 @@ typed-ast==1.5.4 \
596559
--hash=sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6 \
597560
--hash=sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3 \
598561
--hash=sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66
599-
# via
600-
# astroid
601-
# mypy
562+
# via astroid
602563
typing-extensions==4.4.0 \
603564
--hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \
604565
--hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e
@@ -607,7 +568,7 @@ typing-extensions==4.4.0 \
607568
# -r requirements/pytest.pip
608569
# astroid
609570
# importlib-metadata
610-
# mypy
571+
# platformdirs
611572
# pylint
612573
# rich
613574
urllib3==1.26.13 \

requirements/mypy.in

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
2+
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
3+
4+
-c pins.pip
5+
6+
mypy

0 commit comments

Comments
 (0)