diff options
Diffstat (limited to 'examples/custom.py')
-rw-r--r-- | examples/custom.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/examples/custom.py b/examples/custom.py new file mode 100644 index 000000000..bd9797e2a --- /dev/null +++ b/examples/custom.py @@ -0,0 +1,73 @@ +from astroid import nodes + +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: nodes.Call) -> None: + """Called when a :class:`.nodes.Call` node is visited. + + See :mod:`astroid` for the description of available nodes. + + :param node: The node to check. + """ + if not ( + isinstance(node.func, nodes.Attribute) + and isinstance(node.func.expr, nodes.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)) |