Hi,

I'm trying to write a pylint checker and I have a problem.
Based on several examples found on internet, I wrote a checker skeleton.
It is loaded, but it never get called to check.
In the following example, the '__init__()' method is called, but other methods 'open()', 'visit_class()', 'visit_function()' and 'visit_callfunc()' are never called.

As the checker is loaded, it's not a problem in the pylint command.

Do you have any clues to solve that problem ?




Here are the 3 files (all stored in the same folder):
first, the checker : "fields_checker.py"
8<-----------------------------------------
import astroid
from pylint.interfaces import IAstroidChecker
from pylint.checkers import BaseChecker

class MyFieldsChecker(BaseChecker):
    """Checks for my fields
    """

    __implements__ = (IAstroidChecker,)

    name = 'my-fields-checker'
    msgs = {}

    def __init__(self, linter=None):
        BaseChecker.__init__(self, linter)
        print("MyFieldsChecker.__init__()")

    def open(self):
        print("MyFieldsChecker.open() ")

    def visit_attribute(self, node):
        print("MyFieldsChecker.visit_Attribute : {}".format(dir(node)))
        self.generic_visit(node)


    def visit_class (self, node):
        print("MyFieldsChecker.visit_class : {}".format(dir(node)))
        self.generic_visit(node)

    def visit_function(self, node):
        print("MyFieldsChecker.visit_function : {}".format(dir(node)))
        self.generic_visit(node)


    def visit_callfunc(self, node):

        print("MyFieldsChecker.visit_callfunc : {}".format(dir(node)))
        self.generic_visit(node)


def register(linter):
    """required method to auto register this checker """
    print("DEBUG register MyFieldsChecker")
    linter.register_checker(MyFieldsChecker(linter))
8<-----------------------------------------

then the pylint command, executed on Ubuntu 14.04 : "do.sh"
8<-----------------------------------------
PYTHONPATH=${PYTHONPATH}:$(pwd)
export PYTHONPATH

pylint --load-plugins=fields_checker -r n test.py
8<-----------------------------------------


and just fyi, the tested python file : "test.py"

8<-----------------------------------------
def method1(p, q, r):
    print p, q, r

method1('a', 'b', 'c')

class Test(object):

    def __init__(self):
        self.f1 = "a"


    _myfields = {
        'f2' : "azerty",
    }

t = Test()
8<-----------------------------------------

and the result :
8<-----------------------------------------
$ sh do.sh
DEBUG register MyFieldsChecker
MyFieldsChecker.__init__()
************* Module test
C:  1, 0: Missing module docstring (missing-docstring)
C:  3, 0: Invalid argument name "p" (invalid-name)
C:  3, 0: Invalid argument name "q" (invalid-name)
C:  3, 0: Invalid argument name "r" (invalid-name)
C:  3, 0: Missing function docstring (missing-docstring)
C: 12, 8: Invalid attribute name "f1" (invalid-name)
C:  9, 0: Missing class docstring (missing-docstring)
R:  9, 0: Too few public methods (0/2) (too-few-public-methods)
C: 21, 0: Invalid constant name "t" (invalid-name)
8<-----------------------------------------



Thanks,

Michel
_______________________________________________
code-quality mailing list
code-quality@python.org
https://mail.python.org/mailman/listinfo/code-quality

Reply via email to