add unused ignores reporting (#188)

This commit is contained in:
Maxim Kurnikov
2019-09-28 04:48:44 +03:00
committed by GitHub
parent 2c23d8e70f
commit 7725b416b6

View File

@@ -2,29 +2,52 @@ import itertools
import shutil import shutil
import subprocess import subprocess
import sys import sys
from collections import defaultdict
from pathlib import Path from pathlib import Path
from typing import Pattern from typing import Dict, Pattern, Union
from scripts.enabled_test_modules import IGNORED_ERRORS, IGNORED_MODULES from scripts.enabled_test_modules import (
EXTERNAL_MODULES, IGNORED_ERRORS, IGNORED_MODULES, MOCK_OBJECTS,
)
PROJECT_DIRECTORY = Path(__file__).parent.parent PROJECT_DIRECTORY = Path(__file__).parent.parent
def is_ignored(line: str, test_folder_name: str) -> bool: def print_unused_ignores(ignored_message_freq):
for root_key, patterns in IGNORED_ERRORS.items():
for pattern in patterns:
if (ignored_message_freq[root_key][pattern] == 0
and pattern not in itertools.chain(EXTERNAL_MODULES, MOCK_OBJECTS)):
print(f'{root_key}: {pattern}')
def is_pattern_fits(pattern: Union[Pattern, str], line: str):
if isinstance(pattern, Pattern):
if pattern.search(line):
return True
else:
if pattern in line:
return True
return False
def is_ignored(line: str, test_folder_name: str, *, ignored_message_freqs: Dict[str, Dict[str, int]]) -> bool:
if 'runtests' in line: if 'runtests' in line:
return True return True
if test_folder_name in IGNORED_MODULES: if test_folder_name in IGNORED_MODULES:
return True return True
for pattern in itertools.chain(IGNORED_ERRORS['__new_common__'], for pattern in IGNORED_ERRORS['__new_common__']:
IGNORED_ERRORS.get(test_folder_name, [])): if is_pattern_fits(pattern, line):
if isinstance(pattern, Pattern): ignored_message_freqs['__new_common__'][pattern] += 1
if pattern.search(line): return True
return True
else: for pattern in IGNORED_ERRORS.get(test_folder_name, []):
if pattern in line: if is_pattern_fits(pattern, line):
return True ignored_message_freqs[test_folder_name][pattern] += 1
return True
return False return False
@@ -71,6 +94,8 @@ if __name__ == '__main__':
) )
output = completed.stdout.decode() output = completed.stdout.decode()
ignored_message_freqs = defaultdict(lambda: defaultdict(int))
sorted_lines = sorted(output.splitlines()) sorted_lines = sorted(output.splitlines())
for line in sorted_lines: for line in sorted_lines:
try: try:
@@ -79,10 +104,13 @@ if __name__ == '__main__':
except IndexError: except IndexError:
test_folder_name = 'unknown' test_folder_name = 'unknown'
if not is_ignored(line, test_folder_name): if not is_ignored(line, test_folder_name,
ignored_message_freqs=ignored_message_freqs):
global_rc = 1 global_rc = 1
print(line) print(line)
print('UNUSED IGNORES ------------------------------------------------')
print_unused_ignores(ignored_message_freqs)
sys.exit(global_rc) sys.exit(global_rc)
except BaseException as exc: except BaseException as exc: