Module rulebook-pylint.rulebook_pylint.required_generics_name
Functions
def register(linter: PyLinter)
-
Expand source code
def register(linter: 'PyLinter') -> None: linter.register_checker(RequiredGenericsNameChecker(linter))
Classes
class RequiredGenericsNameChecker (linter: PyLinter)
-
Expand source code
class RequiredGenericsNameChecker(RulebookChecker): """See detail: https://hanggrian.github.io/rulebook/rules/#required-generics-name""" MSG: str = 'required-generics-name' name: str = 'required-generics-name' msgs: dict[str, MessageDefinitionTuple] = Messages.of(MSG) options: Options = ( ( 'rulebook-required-generics-names', { 'default': ('E', 'K', 'N', 'T', 'V'), 'type': 'csv', 'metavar': '<comma-separated names>', 'help': 'A set of common generics.', }, ), ) _allow_generics_names: list[str] def open(self) -> None: self._allow_generics_names = self.linter.config.rulebook_required_generics_names def visit_assign(self, node: Assign) -> None: # only target TypeVar declaration if not isinstance(node.value, Call): return call: Call = node.value if not isinstance(call.func, Name) or call.func.name != 'TypeVar': return # get assigned property target: AssignName | None = get_assignname(node) if not target: return # checks for violation if target.name in self._allow_generics_names: return self.add_message( self.MSG, node=target, args=', '.join(self._allow_generics_names), )
See detail: https://hanggrian.github.io/rulebook/rules/#required-generics-name
Checker instances should have the linter as argument.
Ancestors
- rulebook_pylint.checkers.RulebookChecker
- pylint.checkers.base_checker.BaseChecker
- pylint.config.arguments_provider._ArgumentsProvider
Class variables
var MSG : str
-
The type of the None singleton.
var msgs : dict[str, tuple[str, str, str] | tuple[str, str, str, pylint.typing.ExtraMessageOptions]]
-
The type of the None singleton.
var name : str
-
The type of the None singleton.
var options : tuple[tuple[str, dict[str, str | bool | int | re.Pattern[str] | Iterable[str | int | re.Pattern[str]] | type['_CallbackAction'] | Callable[[Any], Any] | Callable[[Any, Any, Any, Any], Any] | None]], ...]
-
The type of the None singleton.
Methods
def open(self) ‑> None
-
Expand source code
def open(self) -> None: self._allow_generics_names = self.linter.config.rulebook_required_generics_names
Called before visiting project (i.e. set of modules).
def visit_assign(self, node: astroid.nodes.node_classes.Assign) ‑> None
-
Expand source code
def visit_assign(self, node: Assign) -> None: # only target TypeVar declaration if not isinstance(node.value, Call): return call: Call = node.value if not isinstance(call.func, Name) or call.func.name != 'TypeVar': return # get assigned property target: AssignName | None = get_assignname(node) if not target: return # checks for violation if target.name in self._allow_generics_names: return self.add_message( self.MSG, node=target, args=', '.join(self._allow_generics_names), )