On Tue, Oct 20, 2015 at 11:38 AM, Michel RENON <re...@mr-consultant.net> wrote: > 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
Hi Michel, Your checker needs to define at least one message in order to be executed. For instance, adding a dummy msg such as msgs = {'E9999': ('a', 'b', 'c')} makes it run as expected. Hope this helps, Claudiu. _______________________________________________ code-quality mailing list code-quality@python.org https://mail.python.org/mailman/listinfo/code-quality