summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniël van Noord <13665637+DanielNoord@users.noreply.github.com>2022-08-21 15:56:07 +0200
committerDaniël van Noord <13665637+DanielNoord@users.noreply.github.com>2022-08-21 19:55:30 +0200
commit504f92db9748d73fd05a935ab341268a2ab0c321 (patch)
tree70b26009bc225e807dcc507923dc80c79455af6d
parent3bfd0756d669c69f11164eab67340e9f2bc3383a (diff)
downloadpylint-git-504f92db9748d73fd05a935ab341268a2ab0c321.tar.gz
Assert on fatal errors in primer
-rw-r--r--pylint/testutils/_primer/primer_run_command.py63
1 files 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