1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# For details: https://github.com/pylint-dev/pylint/blob/main/LICENSE
# Copyright (c) https://github.com/pylint-dev/pylint/blob/main/CONTRIBUTORS.txt
"""A collection of typing utilities."""
from __future__ import annotations
import argparse
from pathlib import Path
from typing import (
TYPE_CHECKING,
Any,
Callable,
Dict,
Iterable,
Literal,
NamedTuple,
Optional,
Pattern,
Protocol,
Tuple,
Type,
TypedDict,
Union,
)
if TYPE_CHECKING:
from pylint.config.callback_actions import _CallbackAction
from pylint.pyreverse.inspector import Project
from pylint.reporters.ureports.nodes import Section
from pylint.utils import LinterStats
class FileItem(NamedTuple):
"""Represents data about a file handled by pylint.
Each file item has:
- name: full name of the module
- filepath: path of the file
- modname: module name
"""
name: str
filepath: str
modpath: str
class ModuleDescriptionDict(TypedDict):
"""Represents data about a checked module."""
path: str
name: str
isarg: bool
basepath: str
basename: str
class ErrorDescriptionDict(TypedDict):
"""Represents data about errors collected during checking of a module."""
key: Literal["fatal"]
mod: str
ex: ImportError | SyntaxError
class MessageLocationTuple(NamedTuple):
"""Tuple with information about the location of a to-be-displayed message."""
abspath: str
path: str
module: str
obj: str
line: int
column: int
end_line: int | None = None
end_column: int | None = None
class ManagedMessage(NamedTuple):
"""Tuple with information about a managed message of the linter."""
name: str | None
msgid: str
symbol: str
line: int | None
is_disabled: bool
MessageTypesFullName = Literal[
"convention", "error", "fatal", "info", "refactor", "statement", "warning"
]
"""All possible message categories."""
OptionDict = Dict[
str,
Union[
None,
str,
bool,
int,
Pattern[str],
Iterable[Union[str, int, Pattern[str]]],
Type["_CallbackAction"],
Callable[[Any], Any],
Callable[[Any, Any, Any, Any], Any],
],
]
Options = Tuple[Tuple[str, OptionDict], ...]
ReportsCallable = Callable[["Section", "LinterStats", Optional["LinterStats"]], None]
"""Callable to create a report."""
class ExtraMessageOptions(TypedDict, total=False):
"""All allowed keys in the extra options for message definitions."""
scope: str
old_names: list[tuple[str, str]]
maxversion: tuple[int, int]
minversion: tuple[int, int]
shared: bool
default_enabled: bool
MessageDefinitionTuple = Union[
Tuple[str, str, str],
Tuple[str, str, str, ExtraMessageOptions],
]
DirectoryNamespaceDict = Dict[Path, Tuple[argparse.Namespace, "DirectoryNamespaceDict"]]
class GetProjectCallable(Protocol):
def __call__(self, module: str, name: str | None = "No Name") -> Project:
... # pragma: no cover
|