[code-quality] Question about pylint plugin

Michel RENON renon at mr-consultant.net
Tue Oct 20 04:38:47 EDT 2015


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


More information about the code-quality mailing list