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