summaryrefslogtreecommitdiff
path: root/pylint
diff options
context:
space:
mode:
authorDaniƫl van Noord <13665637+DanielNoord@users.noreply.github.com>2021-09-16 22:12:19 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-09-16 22:38:28 +0200
commit6d07d6f1a51c2e3e3e2db37f23c12ebdec094410 (patch)
treeeab8b8aea151845c8713e3233483db1f65682320 /pylint
parentf45ab4972bbf140d449a023bf1407237d21c5879 (diff)
downloadpylint-git-6d07d6f1a51c2e3e3e2db37f23c12ebdec094410.tar.gz
Add typing for ``json_reporter`` and sub-classes
Diffstat (limited to 'pylint')
-rw-r--r--pylint/interfaces.py7
-rw-r--r--pylint/reporters/base_reporter.py17
-rw-r--r--pylint/reporters/collecting_reporter.py8
-rw-r--r--pylint/reporters/json_reporter.py13
-rw-r--r--pylint/reporters/multi_reporter.py10
-rw-r--r--pylint/reporters/text.py7
-rw-r--r--pylint/testutils/reporter_for_tests.py17
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