|
7 | 7 | import sys |
8 | 8 | import time |
9 | 9 |
|
10 | | -from typing import Any, Dict, IO, Iterable, List, Optional, Sequence, Tuple, TextIO, Union |
| 10 | +from typing import Any, Dict, IO, List, Optional, Sequence, Tuple, TextIO, Union |
11 | 11 | from typing_extensions import Final, NoReturn |
12 | 12 |
|
13 | 13 | from mypy import build |
@@ -869,24 +869,22 @@ def set_strict_flags() -> None: |
869 | 869 | parser.error("You can't make a variable always true and always false (%s)" % |
870 | 870 | ', '.join(sorted(overlap))) |
871 | 871 |
|
872 | | - # Process disabled (--disable-error-code) codes |
| 872 | + # Process `--enable-error-code` and `--disable-error-code` flags |
873 | 873 | disabled_codes = set(options.disable_error_code) |
874 | | - if disabled_codes: |
875 | | - invalid_error_codes = process_error_codes(disabled_codes, enable=False) |
| 874 | + enabled_codes = set(options.enable_error_code) |
876 | 875 |
|
877 | | - if invalid_error_codes: |
878 | | - parser.error("Disabled error codes provided invalid values: (%s)" % |
879 | | - ', '.join(sorted(invalid_error_codes))) |
| 876 | + valid_error_codes = set(error_codes.keys()) |
880 | 877 |
|
881 | | - # Process enabled (--enable-error-code) codes |
882 | | - # If a flag is both enabled and disabled the result is enabled |
883 | | - enabled_codes = set(options.enable_error_code) |
884 | | - if enabled_codes: |
885 | | - invalid_error_codes = process_error_codes(enabled_codes, enable=True) |
| 878 | + invalid_codes = (enabled_codes | disabled_codes) - valid_error_codes |
| 879 | + if invalid_codes: |
| 880 | + parser.error("Invalid error code(s): %s" % |
| 881 | + ', '.join(sorted(invalid_codes))) |
886 | 882 |
|
887 | | - if invalid_error_codes: |
888 | | - parser.error("Enabled error codes provided invalid values: (%s)" % |
889 | | - ', '.join(sorted(invalid_error_codes))) |
| 883 | + options.disabled_error_codes |= {error_codes[code] for code in disabled_codes} |
| 884 | + options.enabled_error_codes |= {error_codes[code] for code in enabled_codes} |
| 885 | + |
| 886 | + # Enabling an error code always overrides disabling |
| 887 | + options.disabled_error_codes -= options.enabled_error_codes |
890 | 888 |
|
891 | 889 | # Set build flags. |
892 | 890 | if options.strict_optional_whitelist is not None: |
@@ -1012,20 +1010,6 @@ def process_cache_map(parser: argparse.ArgumentParser, |
1012 | 1010 | options.cache_map[source] = (meta_file, data_file) |
1013 | 1011 |
|
1014 | 1012 |
|
1015 | | -def process_error_codes(codes: Iterable[str], enable: bool) -> List[str]: |
1016 | | - invalid_error_codes = [] # type: List[str] |
1017 | | - |
1018 | | - # process globally disabled error codes |
1019 | | - for code in codes: |
1020 | | - as_code = error_codes.get(code) |
1021 | | - if not as_code: |
1022 | | - invalid_error_codes.append(code) |
1023 | | - continue |
1024 | | - as_code.enabled = enable |
1025 | | - |
1026 | | - return invalid_error_codes |
1027 | | - |
1028 | | - |
1029 | 1013 | def maybe_write_junit_xml(td: float, serious: bool, messages: List[str], options: Options) -> None: |
1030 | 1014 | if options.junit_xml: |
1031 | 1015 | py_version = '{}_{}'.format(options.python_version[0], options.python_version[1]) |
|
0 commit comments