lint: Disallow old-style type comments.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg 2020-05-08 15:29:45 -07:00 committed by Tim Abbott
parent 8cdf2801f7
commit caf64585e4
1 changed files with 13 additions and 14 deletions

View File

@ -270,11 +270,7 @@ python_rules = RuleList(
'description': 'Use `is None` to check whether something is None', 'description': 'Use `is None` to check whether something is None',
'good_lines': ['if foo is None'], 'good_lines': ['if foo is None'],
'bad_lines': ['foo == None']}, 'bad_lines': ['foo == None']},
{'pattern': "type:[(]", {'pattern': r"#\s*type:\s*ignore(?!\[[^][]+\] +# +\S)",
'description': 'Missing whitespace after ":" in type annotation',
'good_lines': ['# type: (Any, Any)', 'colon:separated:string:containing:type:as:keyword'],
'bad_lines': ['# type:(Any, Any)']},
{'pattern': r"type: ignore(?!\[[^][]+\] +# +\S)",
'exclude': {'tools/tests', 'exclude': {'tools/tests',
'zerver/lib/test_runner.py', 'zerver/lib/test_runner.py',
'zerver/tests'}, 'zerver/tests'},
@ -283,14 +279,6 @@ python_rules = RuleList(
'bad_lines': ['foo = bar # type: ignore', 'bad_lines': ['foo = bar # type: ignore',
'foo = bar # type: ignore[code]', 'foo = bar # type: ignore[code]',
'foo = bar # type: ignore # explanation']}, 'foo = bar # type: ignore # explanation']},
{'pattern': "# type [(]",
'description': 'Missing : after type in type annotation',
'good_lines': ['foo = 42 # type: int', '# type: (str, int) -> None'],
'bad_lines': ['# type (str, int) -> None']},
{'pattern': "#type",
'description': 'Missing whitespace after "#" in type annotation',
'good_lines': ['foo = 42 # type: int'],
'bad_lines': ['foo = 42 #type: int']},
{'pattern': r'\b(if|else|while)[(]', {'pattern': r'\b(if|else|while)[(]',
'description': 'Put a space between statements like if, else, etc. and (.', 'description': 'Put a space between statements like if, else, etc. and (.',
'good_lines': ['if (1 == 2):', 'while (foo == bar):'], 'good_lines': ['if (1 == 2):', 'while (foo == bar):'],
@ -410,13 +398,24 @@ python_rules = RuleList(
'description': "Use `id` instead of `pk`.", 'description': "Use `id` instead of `pk`.",
'good_lines': ['if my_django_model.id == 42', 'self.user_profile._meta.pk'], 'good_lines': ['if my_django_model.id == 42', 'self.user_profile._meta.pk'],
'bad_lines': ['if my_django_model.pk == 42']}, 'bad_lines': ['if my_django_model.pk == 42']},
{'pattern': r'^[ ]*# type: \(', {'pattern': r'^\s*#\s*type:',
'exclude': { 'exclude': {
# thumbor is (currently) python2 only # thumbor is (currently) python2 only
'zthumbor/', 'zthumbor/',
}, },
'description': 'Comment-style function type annotation. Use Python3 style annotations instead.', 'description': 'Comment-style function type annotation. Use Python3 style annotations instead.',
}, },
{'pattern': r"\S\s*#\s*type:(?!\s*ignore)",
'exclude': {'scripts/lib/hash_reqs.py',
'scripts/lib/setup_venv.py',
'scripts/lib/zulip_tools.py',
'tools/lib/provision.py',
'zproject/dev_settings.py',
'zproject/prod_settings_template.py',
'zthumbor'},
'description': 'Comment-style variable type annotation. Use Python 3.6 style annotations instead.',
'good_lines': ['a: List[int] = []'],
'bad_lines': ['a = [] # type: List[int]']},
{'pattern': r': *(?!Optional)[^ ].*= models[.].*null=True', {'pattern': r': *(?!Optional)[^ ].*= models[.].*null=True',
'include_only': {"zerver/models.py"}, 'include_only': {"zerver/models.py"},
'description': 'Model variable with null=true not annotated as Optional.', 'description': 'Model variable with null=true not annotated as Optional.',