mirror of
https://fuchsia.googlesource.com/third_party/github.com/pylint-dev/pylint
synced 2024-09-21 07:58:04 +00:00
2d525d6824
Change with isort triggered change with black.
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
import astroid
|
|
|
|
from pylint.checkers import BaseChecker
|
|
from pylint.interfaces import IAstroidChecker
|
|
|
|
|
|
# This is our checker class.
|
|
# Checkers should always inherit from `BaseChecker`.
|
|
class MyAstroidChecker(BaseChecker):
|
|
"""Add class member attributes to the class locals dictionary."""
|
|
|
|
# This class variable defines the type of checker that we are implementing.
|
|
# In this case, we are implementing an AST checker.
|
|
__implements__ = IAstroidChecker
|
|
|
|
# The name defines a custom section of the config for this checker.
|
|
name = "custom"
|
|
# The priority indicates the order that pylint will run the checkers.
|
|
priority = -1
|
|
# This class variable declares the messages (ie 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 those to those 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):
|
|
"""Called when a :class:`.astroid.node_classes.Call` node is visited.
|
|
|
|
See :mod:`astroid` for the description of available nodes.
|
|
|
|
:param node: The node to check.
|
|
:type node: astroid.node_classes.Call
|
|
"""
|
|
if not (
|
|
isinstance(node.func, astroid.Attribute)
|
|
and isinstance(node.func.expr, astroid.Name)
|
|
and node.func.expr.name == self.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):
|
|
"""This required method auto registers the checker.
|
|
|
|
:param linter: The linter to register the checker to.
|
|
:type linter: pylint.lint.PyLinter
|
|
"""
|
|
linter.register_checker(MyAstroidChecker(linter))
|