diff options
author | Daniƫl van Noord <13665637+DanielNoord@users.noreply.github.com> | 2021-09-16 22:12:19 +0200 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-09-16 22:38:28 +0200 |
commit | 6d07d6f1a51c2e3e3e2db37f23c12ebdec094410 (patch) | |
tree | eab8b8aea151845c8713e3233483db1f65682320 /pylint | |
parent | f45ab4972bbf140d449a023bf1407237d21c5879 (diff) | |
download | pylint-git-6d07d6f1a51c2e3e3e2db37f23c12ebdec094410.tar.gz |
Add typing for ``json_reporter`` and sub-classes
Diffstat (limited to 'pylint')
-rw-r--r-- | pylint/interfaces.py | 7 | ||||
-rw-r--r-- | pylint/reporters/base_reporter.py | 17 | ||||
-rw-r--r-- | pylint/reporters/collecting_reporter.py | 8 | ||||
-rw-r--r-- | pylint/reporters/json_reporter.py | 13 | ||||
-rw-r--r-- | pylint/reporters/multi_reporter.py | 10 | ||||
-rw-r--r-- | pylint/reporters/text.py | 7 | ||||
-rw-r--r-- | pylint/testutils/reporter_for_tests.py | 17 |
7 files changed, 55 insertions, 24 deletions
diff --git a/pylint/interfaces.py b/pylint/interfaces.py index 8480f9d74..e657e7115 100644 --- a/pylint/interfaces.py +++ b/pylint/interfaces.py @@ -18,10 +18,13 @@ """Interfaces for Pylint objects""" from collections import namedtuple -from typing import Tuple +from typing import TYPE_CHECKING, Tuple from astroid import nodes +if TYPE_CHECKING: + from pylint.reporters.ureports.nodes import Section + Confidence = namedtuple("Confidence", ["name", "description"]) # Warning Certainties HIGH = Confidence("HIGH", "No false positive possible.") @@ -99,7 +102,7 @@ class IReporter(Interface): def handle_message(self, msg) -> None: """Handle the given message object.""" - def display_reports(self, layout): + def display_reports(self, layout: "Section") -> None: """display results encapsulated in the layout tree""" diff --git a/pylint/reporters/base_reporter.py b/pylint/reporters/base_reporter.py index e74ffdd89..9bd9e80e6 100644 --- a/pylint/reporters/base_reporter.py +++ b/pylint/reporters/base_reporter.py @@ -3,11 +3,15 @@ import os import sys -from typing import List, Optional +from typing import TYPE_CHECKING, List, Optional from pylint.message import Message +from pylint.reporters.ureports.nodes import Text from pylint.typing import CheckerStats +if TYPE_CHECKING: + from pylint.reporters.ureports.nodes import Section + class BaseReporter: """base class for reporters @@ -39,18 +43,21 @@ class BaseReporter: """write a line in the output buffer""" print(string, file=self.out) - def display_reports(self, layout): + def display_reports(self, layout: "Section") -> None: """display results encapsulated in the layout tree""" self.section = 0 if layout.report_id: - layout.children[0].children[0].data += f" ({layout.report_id})" + if isinstance(layout.children[0].children[0], Text): + layout.children[0].children[0].data += f" ({layout.report_id})" + else: + raise ValueError(f"Incorrect child for {layout.children[0].children}") self._display(layout) - def _display(self, layout): + def _display(self, layout: "Section") -> None: """display the layout""" raise NotImplementedError() - def display_messages(self, layout): + def display_messages(self, layout: Optional["Section"]) -> None: """Hook for displaying the messages of the reporter This will be called whenever the underlying messages diff --git a/pylint/reporters/collecting_reporter.py b/pylint/reporters/collecting_reporter.py index 145c3c81b..fbd9eb46b 100644 --- a/pylint/reporters/collecting_reporter.py +++ b/pylint/reporters/collecting_reporter.py @@ -1,7 +1,12 @@ # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE +from typing import TYPE_CHECKING + from pylint.reporters.base_reporter import BaseReporter +if TYPE_CHECKING: + from pylint.reporters.ureports.nodes import Section + class CollectingReporter(BaseReporter): """collects messages""" @@ -15,4 +20,5 @@ class CollectingReporter(BaseReporter): def reset(self) -> None: self.messages = [] - _display = None + def _display(self, layout: "Section") -> None: + pass diff --git a/pylint/reporters/json_reporter.py b/pylint/reporters/json_reporter.py index 12aab69db..87949c1c4 100644 --- a/pylint/reporters/json_reporter.py +++ b/pylint/reporters/json_reporter.py @@ -13,10 +13,15 @@ """JSON reporter""" import json +from typing import TYPE_CHECKING, Optional from pylint.interfaces import IReporter from pylint.reporters.base_reporter import BaseReporter +if TYPE_CHECKING: + from pylint.lint.pylinter import PyLinter + from pylint.reporters.ureports.nodes import Section + class JSONReporter(BaseReporter): """Report messages and layouts in JSON.""" @@ -25,7 +30,7 @@ class JSONReporter(BaseReporter): name = "json" extension = "json" - def display_messages(self, layout): + def display_messages(self, layout: Optional["Section"]) -> None: """Launch layouts display""" json_dumpable = [ { @@ -43,13 +48,13 @@ class JSONReporter(BaseReporter): ] print(json.dumps(json_dumpable, indent=4), file=self.out) - def display_reports(self, layout): + def display_reports(self, layout: "Section") -> None: """Don't do anything in this reporter.""" - def _display(self, layout): + def _display(self, layout: "Section") -> None: """Do nothing.""" -def register(linter): +def register(linter: "PyLinter") -> None: """Register the reporter classes with the linter.""" linter.register_reporter(JSONReporter) diff --git a/pylint/reporters/multi_reporter.py b/pylint/reporters/multi_reporter.py index 445e9b32e..b3b67d87a 100644 --- a/pylint/reporters/multi_reporter.py +++ b/pylint/reporters/multi_reporter.py @@ -3,14 +3,16 @@ import os -from typing import IO, Any, AnyStr, Callable, List, Optional +from typing import IO, TYPE_CHECKING, Any, AnyStr, Callable, List, Optional from pylint.interfaces import IReporter from pylint.message import Message from pylint.reporters.base_reporter import BaseReporter -from pylint.reporters.ureports.nodes import BaseLayout from pylint.typing import CheckerStats +if TYPE_CHECKING: + from pylint.reporters.ureports.nodes import Section + AnyFile = IO[AnyStr] PyLinter = Any @@ -78,12 +80,12 @@ class MultiReporter: for rep in self._sub_reporters: rep.writeln(string) - def display_reports(self, layout: BaseLayout) -> None: + def display_reports(self, layout: "Section") -> None: """display results encapsulated in the layout tree""" for rep in self._sub_reporters: rep.display_reports(layout) - def display_messages(self, layout: BaseLayout) -> None: + def display_messages(self, layout: Optional["Section"]) -> None: """hook for displaying the messages of the reporter""" for rep in self._sub_reporters: rep.display_messages(layout) diff --git a/pylint/reporters/text.py b/pylint/reporters/text.py index 53eef21d2..e941ba60d 100644 --- a/pylint/reporters/text.py +++ b/pylint/reporters/text.py @@ -26,7 +26,7 @@ import os import sys import warnings -from typing import Optional +from typing import TYPE_CHECKING, Optional from pylint import utils from pylint.interfaces import IReporter @@ -34,6 +34,9 @@ from pylint.message import Message from pylint.reporters import BaseReporter from pylint.reporters.ureports.text_writer import TextWriter +if TYPE_CHECKING: + from pylint.reporters.ureports.nodes import Section + TITLE_UNDERLINES = ["", "=", "-", "."] ANSI_PREFIX = "\033[" @@ -155,7 +158,7 @@ class TextReporter(BaseReporter): self.writeln("************* ") self.write_message(msg) - def _display(self, layout): + def _display(self, layout: "Section") -> None: """launch layouts display""" print(file=self.out) TextWriter().format(layout, self.out) diff --git a/pylint/testutils/reporter_for_tests.py b/pylint/testutils/reporter_for_tests.py index 9527544a0..480f1ed2d 100644 --- a/pylint/testutils/reporter_for_tests.py +++ b/pylint/testutils/reporter_for_tests.py @@ -3,12 +3,15 @@ from io import StringIO from os import getcwd, linesep, sep -from typing import Dict, List, Optional +from typing import TYPE_CHECKING, Dict, List, Optional from pylint import interfaces from pylint.message import Message from pylint.reporters import BaseReporter +if TYPE_CHECKING: + from pylint.reporters.ureports.nodes import Section + class GenericTestReporter(BaseReporter): """reporter storing plain text messages""" @@ -56,25 +59,27 @@ class GenericTestReporter(BaseReporter): # pylint: enable=unused-argument - def display_reports(self, layout): + def display_reports(self, layout: "Section") -> None: """ignore layouts""" - _display = None + def _display(self, layout: "Section") -> None: + pass class MinimalTestReporter(BaseReporter): def on_set_current_module(self, module: str, filepath: Optional[str]) -> None: self.messages = [] - _display = None + def _display(self, layout: "Section") -> None: + pass class FunctionalTestReporter(BaseReporter): def on_set_current_module(self, module: str, filepath: Optional[str]) -> None: self.messages = [] - def display_reports(self, layout): + def display_reports(self, layout: "Section") -> None: """Ignore layouts and don't call self._display().""" - def _display(self, layout): + def _display(self, layout: "Section") -> None: pass |