Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python3
import os
from os.path import join, splitext
from check_mypy_config import PATHS, BLACKLIST
from typing import (
Any,
Callable,
Generator,
Optional,
Tuple,
Dict,
)
FileAndArgs = Tuple[str, Tuple[Any, ...], Dict[str, str]]
# print(PATHS)
SOURCE_EXT = (
# Python
".py",
)
def is_source(filename: str) -> bool:
return filename.endswith(SOURCE_EXT)
def path_iter(
path: str,
filename_check: Optional[Callable[[str], bool]] = None,
) -> Generator[str, None, None]:
for dirpath, dirnames, filenames in os.walk(path):
# skip ".git"
dirnames[:] = [d for d in dirnames if not d.startswith(".")]
for filename in filenames:
if filename.startswith("."):
continue
filepath = join(dirpath, filename)
if filename_check is None or filename_check(filepath):
yield filepath
def path_expand_with_args(
paths_and_args: Tuple[FileAndArgs, ...],
filename_check: Optional[Callable[[str], bool]] = None,
) -> Generator[FileAndArgs, None, None]:
for f_and_args in paths_and_args:
f, f_args = f_and_args[0], f_and_args[1:]
if not os.path.exists(f):
print("Missing:", f)
elif os.path.isdir(f):
for f_iter in path_iter(f, filename_check):
yield (f_iter, *f_args)
else:
yield (f, *f_args)
def main() -> None:
import sys
import subprocess
import shlex
# Fixed location, so change the current working directory doesn't create cache everywhere.
cache_dir = os.path.join(os.getcwd(), ".mypy_cache")
if os.path.samefile(sys.argv[-1], __file__):
paths = path_expand_with_args(PATHS, is_source)
else:
paths = path_expand_with_args(
tuple((p, (), {}) for p in sys.argv[1:]),
is_source,
)
for f, extra_args, extra_env in paths:
if f in BLACKLIST:
continue
if not extra_args:
extra_args = ()
if not extra_env:
extra_env = {}
# print(f)
print(repr(f[len('/src/blender/'):]) + ',')
cmd = (
"mypy",
"--strict",
"--cache-dir=" + cache_dir,
"--color-output",
f,
*extra_args,
)
# p = subprocess.Popen(cmd, env=extra_env, stdout=sys.stdout, stderr=sys.stderr)
if extra_env:
for k, v in extra_env.items():
os.environ[k] = v
os.chdir(os.path.dirname(f))
os.system(" ".join([shlex.quote(arg) for arg in cmd]))
if extra_env:
for k in extra_env.keys():
del os.environ[k]
if __name__ == "__main__":
main()