mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-19 23:21:12 +00:00
70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from astroid import nodes
|
|
|
|
from pylint.checkers import BaseChecker
|
|
|
|
if TYPE_CHECKING:
|
|
from pylint.lint import PyLinter
|
|
|
|
# Checkers should always inherit from `BaseChecker`.
|
|
|
|
|
|
class MyAstroidChecker(BaseChecker):
|
|
"""Add class member attributes to the class local's dictionary."""
|
|
|
|
# The name defines a custom section of the config for this checker.
|
|
name = "custom"
|
|
# This class variable declares the messages (i.e. the warnings and errors)
|
|
# that the checker can emit.
|
|
msgs = {
|
|
# Each message has a code, a message that the user will see,
|
|
# a unique symbol that identifies the message,
|
|
# and a detailed help message
|
|
# that will be included in the documentation.
|
|
"W0001": ("Message that will be emitted", "message-symbol", "Message help")
|
|
}
|
|
# This class variable declares the options
|
|
# that are configurable by the user.
|
|
options = (
|
|
# Each option definition has a name which is used on the command line
|
|
# and in config files, and a dictionary of arguments
|
|
# (similar to argparse.ArgumentParser.add_argument).
|
|
(
|
|
"store-locals-indicator",
|
|
{
|
|
"default": "properties",
|
|
"help": (
|
|
"The expression name that indicates that the locals should "
|
|
"be stored"
|
|
),
|
|
},
|
|
),
|
|
)
|
|
|
|
def visit_call(self, node: nodes.Call) -> None:
|
|
"""Called when a :class:`.nodes.Call` node is visited.
|
|
|
|
See :mod:`astroid` for the description of available nodes.
|
|
"""
|
|
if not (
|
|
isinstance(node.func, nodes.Attribute)
|
|
and isinstance(node.func.expr, nodes.Name)
|
|
and node.func.expr.name == self.linter.config.store_locals_indicator
|
|
and node.func.attrname == "create"
|
|
):
|
|
return
|
|
in_class = node.frame()
|
|
for param in node.args:
|
|
in_class.locals[param.name] = node
|
|
|
|
|
|
def register(linter: PyLinter) -> None:
|
|
"""This required method auto registers the checker during initialization.
|
|
|
|
:param linter: The linter to register the checker to.
|
|
"""
|
|
linter.register_checker(MyAstroidChecker(linter))
|