Pylint rc file for GRASS
Note that content of this page maybe outdated. There is a Pylint configuration file directly in the source code (tools/pylintrc.txt). There is an cofiguration file for pep8 tool, too (tools/pep8config.txt).
Pylint is static code analyser for Python. You can use it for detecting errors in your source codes or to help follow coding standards. However, default Pylint configuration is not compatible with GRASS Python coding style. The rc file is on this page (use copy and paste).
How to use rc file
You can specify rc file by --rcfile Pylint's command line option:
pylint --rcfile=grass_pylintrc module_or_package
If you are using Python editor which allows Pylint analysis but does not allow to specify Pylint's command line parameters (e.g. Spyder) you can create or replace .pylintrc file in your home directory.
# for GNU/Linux cd ~ mv .pylintrc .pylintrc_old mv grass_pylintrc .pylintrc
Note that you can also use Pylint for error checking only:
pylint --errors-only module_or_package
Pylint rc file
Note that there is a tools/pylintrc.txt file directly in the source code.
This version is not suitable for wxGUI but can be used for Python scripts.
Get a copy of the file with (not fully synchronized):
git clone git://gist.github.com/3089272.git gist-3089272
The content is (not fully synchronized): https://gist.github.com/3089272
[MASTER]
# Specify a configuration file.
#rcfile=
# Python code to execute, usually for sys.path manipulation such as
# pygtk.require().
#init-hook=
# Profiled execution.
profile=no
# Add files or directories to the blacklist. They should be base names, not
# paths.
ignore=CVS
# Pickle collected data for later comparisons.
persistent=yes
# List of plugins (as comma separated values of python modules names) to load,
# usually to register additional checkers.
load-plugins=
[MESSAGES CONTROL]
# Enable the message, report, category or checker with the given id(s). You can
# either give multiple identifier separated by comma (,) or put this option
# multiple time.
#enable=
# Disable the message, report, category or checker with the given id(s). You
# can either give multiple identifier separated by comma (,) or put this option
# multiple time (only on the command line, not in the configuration file where
# it should appear only once).
#disable=
[REPORTS]
# Set the output format. Available formats are text, parseable, colorized, msvs
# (visual studio) and html
output-format=text
# Include message's id in output
include-ids=no
# 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 whether 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
# respectively contain the number of errors / warnings messages and the total
# number of statements analyzed. This is used by the global evaluation report
# (RP0004).
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 (RP0004).
comment=no
[VARIABLES]
# Tells whether we should check for unused import in __init__ files.
init-import=yes
# A regular expression matching the beginning of the name of 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.
# underscore added as a dirty solution for undefined variable warning
additional-builtins=_
[BASIC]
# Required attributes for module, separated by a comma
required-attributes=
# List of builtins function names that should not be used, separated by a comma
bad-functions=map,filter,apply,input
# 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-Z0-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-zA-Z_][a-zA-Z0-9_]{2,30}$
# 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-zA-Z0-9_]{2,30}$
# Regular expression which should only match correct variable names
variable-rgx=[a-z_][a-zA-Z0-9_]{2,30}$|[a-z]
# 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,_,x,y,z,N,E,S,W,id
# Bad variable names which should always be refused, separated by a comma
bad-names=foo,bar,baz,toto,tutu,tata
# Regular expression which should only match functions or classes name which do
# not require a docstring
no-docstring-rgx=__.*__
[MISCELLANEOUS]
# List of note tags to take in consideration, separated by a comma.
# Warning about both: ad hoc uppercase and Doxygen TODO notes
notes=FIXME,TODO,\\todo,@todo
# general regexp for convention, warning etc. would be great
[TYPECHECK]
# Tells whether 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
# List of classes names for which member attributes should not be checked
# (useful for classes with attributes dynamically set).
ignored-classes=SQLObject
# When zope mode is activated, add a predefined set of Zope acquired attributes
# to generated-members.
zope=no
# List of members which are set dynamically and missed by pylint inference
# system, and so shouldn't trigger E0201 when accessed. Python regular
# expressions are accepted.
generated-members=REQUEST,acl_users,aq_parent
[FORMAT]
# Maximum number of characters on a single line.
max-line-length=80
# 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=' '
[SIMILARITIES]
# Minimum lines number of a similarity.
min-similarity-lines=4
# Ignore comments when computing similarities.
ignore-comments=yes
# Ignore docstrings when computing similarities.
ignore-docstrings=yes
[DESIGN]
# Maximum number of arguments for function / method
max-args=5
# Argument names that match this expression will be ignored. Default to name
# with leading underscore
ignored-argument-names=_.*
# Maximum number of locals for function / method body
max-locals=15
# Maximum number of return / yield for function / method body
max-returns=6
# Maximum number of branch for function / method body
max-branchs=12
# Maximum number of statements in function / method body
max-statements=50
# Maximum number of parents for a class (see R0901).
max-parents=7
# Maximum number of attributes for a class (see R0902).
max-attributes=7
# Minimum number of public methods for a class (see R0903).
min-public-methods=2
# Maximum number of public methods for a class (see R0904).
max-public-methods=20
[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 RP0402 must not be disabled)
import-graph=
# Create a graph of external dependencies in the given file (report RP0402 must
# not be disabled)
ext-import-graph=
# Create a graph of internal dependencies in the given file (report RP0402 must
# not be disabled)
int-import-graph=
[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
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg=cls
[EXCEPTIONS]
# Exceptions that will emit a warning when being caught. Defaults to
# "Exception"
overgeneral-exceptions=Exception
Notes
You can enable and disable a warning for particular block of code:
# enum class without __init__ method and with too few public methods
# pylint: disable=W0232,R0903
class LineMeaning:
"""! This class provides save enum for meaning of line."""
LEFT = 0
RIGHT = 1
CENTER = 2
# pylint: enable=W0232,R0903
Or you can disable warning for particular class, function or line. Note that in all cases comment must be on that particular line!
class RHoughParametres: # pylint: disable=R0903
"""! Small crate class."""
def __init__(self):
self.linesNumber = 10
self.maxGap = 5
self.minSegmentLength = 40
Do not use pylint: disable comment too often!
Pylint installation
Installation on Ubuntu (10.04):
# latest version sudo apt-get install pip # only if you don't have pip sudo pip install pylint # alternatively version from repository sudo apt-get install pylint
Installation on Fedora:
yum install pylint python-pip
External links
- Pylint official website, http://www.pylint.org/
- [Python-projects] Pylint and gettext. How to reconcile? http://lists.logilab.org/pipermail/python-projects/2006-April/000714.html
- Pylint plugin to find non-i18n/gettext strings, http://www.technomancy.org/python/pylint-i18n-lint-checker/
- How do I integrate Pylint with Geany so that I can use Geany as a python IDE? http://stackoverflow.com/questions/6138416/how-do-i-integrate-pylint-with-geany-so-that-i-can-use-geany-as-a-python-ide/6138606#6138606