/usr/share/doc/pylint-doc/examples/custom.py is in pylint-doc 1.8.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
| 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 | import astroid
from pylint.interfaces import IAstroidChecker
from pylint.checkers import BaseChecker
# 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))
 |