From 504f92db9748d73fd05a935ab341268a2ab0c321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Sun, 21 Aug 2022 15:56:07 +0200 Subject: Assert on fatal errors in primer --- pylint/testutils/_primer/primer_run_command.py | 63 +++++++++----------------- 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/pylint/testutils/_primer/primer_run_command.py b/pylint/testutils/_primer/primer_run_command.py index ec7dee8f4..520029adb 100644 --- a/pylint/testutils/_primer/primer_run_command.py +++ b/pylint/testutils/_primer/primer_run_command.py @@ -6,7 +6,6 @@ from __future__ import annotations import json import sys -import warnings from io import StringIO from pylint.lint import Run @@ -23,20 +22,11 @@ CRASH_TEMPLATE_INTRO = "There is a pre-filled template" class RunCommand(PrimerCommand): def run(self) -> None: packages: dict[str, list[OldJsonExport]] = {} - astroid_errors: list[Message] = [] - other_fatal_msgs: list[Message] = [] + fatal_msgs: list[Message] = [] for package, data in self.packages.items(): - messages, p_astroid_errors, p_other_fatal_msgs = self._lint_package( - package, data - ) - astroid_errors += p_astroid_errors - other_fatal_msgs += p_other_fatal_msgs + messages, p_fatal_msgs = self._lint_package(package, data) + fatal_msgs += p_fatal_msgs packages[package] = messages - plural = "s" if len(other_fatal_msgs) > 1 else "" - assert not other_fatal_msgs, ( - f"We encountered {len(other_fatal_msgs)} fatal error message{plural}" - " that can't be attributed to bleeding edge astroid alone (see log)." - ) path = ( self.primer_directory / f"output_{'.'.join(str(i) for i in sys.version_info[:3])}_{self.config.type}.txt" @@ -44,16 +34,19 @@ class RunCommand(PrimerCommand): print(f"Writing result in {path}") with open(path, "w", encoding="utf-8") as f: json.dump(packages, f) + # Assert that a PR run does not introduce new fatal errors + if self.config.type == "pr": + plural = "s" if len(fatal_msgs) > 1 else "" + assert ( + not fatal_msgs + ), f"We encountered {len(fatal_msgs)} fatal error message{plural} (see log)." @staticmethod - def _filter_astroid_errors( + def _filter_fatal_errors( messages: list[OldJsonExport], - ) -> tuple[list[Message], list[Message]]: - """Separate fatal errors caused by astroid so we can report them - independently. - """ - astroid_errors = [] - other_fatal_msgs = [] + ) -> list[Message]: + """Separate fatal errors so we can report them independently.""" + fatal_msgs: list[Message] = [] for raw_message in messages: message = JSONReporter.deserialize(raw_message) if message.category == "fatal": @@ -61,11 +54,8 @@ class RunCommand(PrimerCommand): # Remove the crash template location if we're running on GitHub. # We were falsely getting "new" errors when the timestamp changed. message.msg = message.msg.rsplit(CRASH_TEMPLATE_INTRO)[0] - if message.symbol == "astroid-error": - astroid_errors.append(message) - else: - other_fatal_msgs.append(message) - return astroid_errors, other_fatal_msgs + fatal_msgs.append(message) + return fatal_msgs @staticmethod def _print_msgs(msgs: list[Message]) -> str: @@ -73,7 +63,7 @@ class RunCommand(PrimerCommand): def _lint_package( self, package_name: str, data: PackageToLint - ) -> tuple[list[OldJsonExport], list[Message], list[Message]]: + ) -> tuple[list[OldJsonExport], list[Message]]: # We want to test all the code we can enables = ["--enable-all-extensions", "--enable=all"] # Duplicate code takes too long and is relatively safe @@ -90,21 +80,12 @@ class RunCommand(PrimerCommand): pylint_exit_code = int(e.code) readable_messages: str = output.getvalue() messages: list[OldJsonExport] = json.loads(readable_messages) - astroid_errors: list[Message] = [] - other_fatal_msgs: list[Message] = [] + fatal_msgs: list[Message] = [] if pylint_exit_code % 2 == 0: print(f"Successfully primed {package_name}.") else: - astroid_errors, other_fatal_msgs = self._filter_astroid_errors(messages) - print(f"Encountered fatal errors while priming {package_name} !\n") - if other_fatal_msgs: - print( - "Fatal messages unrelated to astroid:\n" - f"{self._print_msgs(other_fatal_msgs)}\n\n" - ) - if astroid_errors: - warnings.warn( - f"Fatal messages that could be related to bleeding edge astroid:\n" - f"{self._print_msgs(astroid_errors)}\n\n" - ) - return messages, astroid_errors, other_fatal_msgs + fatal_msgs = self._filter_fatal_errors(messages) + if fatal_msgs: + print(f"Encountered fatal errors while priming {package_name} !\n") + print(f"{self._print_msgs(fatal_msgs)}\n\n") + return messages, fatal_msgs -- cgit v1.2.1