From Dan Kenigsberg danken@redhat.com:
Dan Kenigsberg has uploaded a new change for review.
Change subject: introduce pylint check ......................................................................
introduce pylint check
pylint is a static code checker. yum-install pylint in your developement environment, and do `make pylint` to see if your new code has not introduced new errors.
Note that currently, pylint does not pass quietly on our code base. I had to disable three of its checks, and to have a blacklist of files. I hope that with time, we can eliminate the blacklist.
Further note that `make pylint` is very slow, and then was not added to `make check`. You have to run it excplicitly to enjoy it. But please do. I can find simple, but painful, glitches.
Change-Id: I85eca67784f82876b262b4452506e0f47486695b Signed-off-by: Dan Kenigsberg danken@redhat.com --- M Makefile.am D pylintrc 2 files changed, 51 insertions(+), 320 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/45/69345/1
diff --git a/Makefile.am b/Makefile.am index 1423f5e..6637ef7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -87,6 +87,57 @@ echo "Missing absolute_import in $$f"; exit 1; fi; \ done;
+pylint_blacklist = \ + lib/vdsm/network/ip/__init__.py \ + lib/vdsm/network/ip/address.py \ + lib/vdsm/network/tc/__init__.py \ + lib/vdsm/network/tc/filter.py \ + lib/vdsm/storage/__init__.py \ + lib/vdsm/storage/iscsi.py \ + lib/vdsm/storage/misc.py \ + lib/vdsm/storage/resourceManager.py \ + lib/vdsm/storage/task.py \ + lib/yajsonrpc/__init__.py \ + lib/yajsonrpc/stomp.py \ + tests/__init__.py \ + tests/check_imports.py \ + tests/executorTests.py \ + tests/functional/__init__ \ + tests/functional/networkTestsOVS.py \ + tests/functional/networkTests.py \ + tests/functional/utils.py \ + tests/integration/jsonRpcHelper.py \ + tests/jobsTests.py \ + tests/libvirtconnectionTests.py \ + tests/monkeypatchTests.py \ + tests/network/__init__.py \ + tests/network/ifacquire_test.py \ + tests/network/netfunctestlib.py \ + tests/network/vm_migrate_hook_test.py \ + tests/storage_monitor_test.py \ + tests/storage_resourcemanager_test.py \ + tests/storage_securable_test.py \ + tests/vmfakelib.py \ + tests/vmApiTests.py \ + vdsm/storage/__init__.py \ + vdsm/storage/image.py \ + vdsm/storage/monitor.py \ + vdsm/storage/sp.py \ + vdsm/storage/volume.py \ + vdsm/virt/vmdevices/storage.py \ + vdsm_hooks/checkimages/before_vm_start.py \ + $(NULL) + +.PHONY: pylint +pylint: + all_modules=`mktemp` && \ + blacklist=`mktemp` && \ + git ls-files | grep '.py$$' | sort > "$$all_modules" && \ + echo $(pylint_blacklist) | tr \ \n | sort > "$$blacklist" && \ + modules=$$(comm -2 -3 "$$all_modules" "$$blacklist") && \ + rm -f "$$all_modules" "$$blacklist" && \ + pylint -E --disable=import-error,no-name-in-module,no-member $$modules + .PHONY: flake8 flake8: tox tox -e flake8 diff --git a/pylintrc b/pylintrc deleted file mode 100644 index b236555..0000000 --- a/pylintrc +++ /dev/null @@ -1,320 +0,0 @@ -# lint Python modules using external checkers. -# -# This is the main checker controling the other ones and the reports -# generation. It is itself both a raw checker and an astng checker in order -# to: -# * handle message activation / deactivation at the module level -# * handle some basic but necessary stats'data (number of classes, methods...) -# -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Profiled execution. -profile=no - -# Add <file or directory> to the black list. It should be a base name, not a -# path. You may set this option multiple times. -ignore=.git - -# Pickle collected data for later comparisons. -persistent=yes - -# Set the cache size for astng objects. -cache-size=500 - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - - -[MESSAGES CONTROL] - -# Enable only checker(s) with the given id(s). This option conflict with the -# disable-checker option -#enable-checker= - -# Enable all checker(s) except those with the given id(s). This option conflict -# with the disable-checker option -#disable-checker= - -# Enable all messages in the listed categories. -#enable-msg-cat= - -# Disable all messages in the listed categories. -#disable-msg-cat= - -# Enable the message(s) with the given id(s). -#enable-msg= - -# Disable the message(s) with the given id(s). -disable-msg=C0323,W0142,C0301,C0103,C0111,E0213,C0302,C0203,W0703,R0201,W0613,W0612,W0622 - -# C0323: Operator not followed by a space -# W0142: Used * or ** magic -# C0301: Line too long (%s/%s) -# C0103: Invalid name "%s" (should match %s) -# C0111: Missing docstring -# E0213: Method should have "self" as first argument -# C0302: Too many lines in module (%s) -# C0203: Metaclass method should have "mcs" as first argument -# W0703: Catch "Exception" -# R0201: Method could be a function -# W0613: Unused argument %r -# W0612: Unused variable %r -# W0622: Redefining built-in %r - -# Disabled checks -disable=W0142 - -[REPORTS] - -# set the output format. Available formats are text, parseable, colorized and -# html -output-format=colorized - -# Include message's id in output -include-ids=yes - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells wether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note).You have access to the variables errors warning, statement which -# respectivly contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (R0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Add a comment according to your evaluation note. This is used by the global -# evaluation report (R0004). -comment=no - -# Enable the report(s) with the given id(s). -#enable-report= - -# Disable the report(s) with the given id(s). -#disable-report= - - -# checks for -# * unused variables / imports -# * undefined variables -# * redefinition of variable from builtins or from an outer scope -# * use of variable before assigment -# -[VARIABLES] - -# Tells wether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching names used for dummy variables (i.e. not used). -dummy-variables-rgx=_|dummy - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - - -# try to find bugs in the code using type inference -# -[TYPECHECK] - -# Tells wether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# When zope mode is activated, consider the acquired-members option to ignore -# access to some undefined attributes. -zope=no - -# List of members which are usually get through zope's acquisition mecanism and -# so shouldn't trigger E0201 when accessed (need zope=yes to be considered). -acquired-members=REQUEST,acl_users,aq_parent - - -# checks for : -# * doc strings -# * modules / classes / functions / methods / arguments / variables name -# * number of arguments, local variables, branchs, returns and statements in -# functions, methods -# * required module attributes -# * dangerous default values as arguments -# * redefinition of function / method / class -# * uses of the global statement -# -[BASIC] - -# Required attributes for module, separated by a comma -required-attributes= - -# Regular expression which should only match functions or classes name which do -# not require a docstring -no-docstring-rgx=__.*__ - -# Regular expression which should only match correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression which should only match correct module level names -const-rgx=(([A-Z_][A-Z1-9_]*)|(__.*__))$ - -# Regular expression which should only match correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression which should only match correct function names -function-rgx=[a-z_][a-zA-Z0-9_]{2,30}$ - -# Regular expression which should only match correct method names -# method-rgx=[a-z_][a-z0-9_]{2,30}$ (default) -method-rgx=_?([a-z]|__)[a-zA-Z0-9]*(__)?$ - -# Regular expression which should only match correct instance attribute names -attr-rgx=[a-z_][a-zA-Z0-9_]{2,30}$ - -# Regular expression which should only match correct argument names -# argument-rgx=[a-z_][a-z0-9_]{2,30}$ (default) -argument-rgx=([a-z_]+[a-zA-Z0-9]*$||(__.*__))$ - -# Regular expression which should only match correct variable names -# variable-rgx=[a-z_][a-z0-9_]{2,30}$ (default) -variable-rgx=([a-z_]+[a-zA-Z0-9]*$||(__.*__))$ - -# Regular expression which should only match correct list comprehension / -# generator expression variable names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_,e - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# List of builtins function names that should not be used, separated by a comma -bad-functions=apply,input,exec,eval - - -# checks for sign of poor/misdesign: -# * number of methods, attributes, local variables... -# * size, complexity of functions, methods -# -[DESIGN] - -# Maximum number of arguments for function / method -max-args=12 - -# Maximum number of locals for function / method body -max-locals=30 - -# Maximum number of return / yield for function / method body -max-returns=12 - -# Maximum number of branch for function / method body -max-branchs=30 - -# Maximum number of statements in function / method body -max-statements=60 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -max-attributes=20 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=0 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - - -# checks for -# * external modules dependencies -# * relative / wildcard imports -# * cyclic imports -# * uses of deprecated modules -# -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,string,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report R0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report R0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report R0402 must -# not be disabled) -int-import-graph= - - -# checks for : -# * methods without self as first argument -# * overridden methods signature -# * access only to existant members via self -# * attributes not defined in the __init__ method -# * supported interfaces implementation -# * unreachable code -# -[CLASSES] - -# List of interface methods to ignore, separated by a comma. This is used for -# instance to not check methods defines in Zope's Interface base class. -ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - - -# checks for similarities and duplicated code. This computation may be -# memory / CPU intensive, so you should disable it if you experiments some -# problems. -# -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=10 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - - -# checks for: -# * warning notes in the code like FIXME, XXX -# * PEP 263: source code with non ascii character but no encoding declaration -# -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -# checks for : -# * unauthorized constructions -# * strict indentation -# * line length -# * use of <> instead of != -# -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=79 - -# Maximum number of lines in a module -max-module-lines=1000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' '