Pylint rc file for GRASS: Difference between revisions

From GRASS-Wiki
Jump to navigation Jump to search
m (moved Pylint rc file to Pylint rc file for GRASS: more describing name)
(noting the config file in the source code)
 
(18 intermediate revisions by 4 users not shown)
Line 1: Line 1:
''Note that content of this page maybe outdated. There is a Pylint configuration file directly in the source code ([http://trac.osgeo.org/grass/browser/grass/trunk/tools/pylintrc.txt <tt>tools/pylintrc.txt</tt>]). There is an cofiguration file for <tt>pep8</tt> tool, too ([http://trac.osgeo.org/grass/browser/grass/trunk/tools/pep8config.txt <tt>tools/pep8config.txt</tt>]).''
[http://www.pylint.org/ 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).
__TOC__
== How to use rc file ==
You can specify rc file by <tt>--rcfile</tt> 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 <tt>.pylintrc</tt> 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 [http://trac.osgeo.org/grass/browser/grass/trunk/tools/pylintrc.txt <tt>tools/pylintrc.txt</tt>] 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):
<source lang="bash">
git clone git://gist.github.com/3089272.git gist-3089272
</source>
The content is (not fully synchronized): https://gist.github.com/3089272
<source lang="ini">
<source lang="ini">
[MASTER]
[MASTER]
Line 70: Line 101:


# Tells whether we should check for unused import in __init__ files.
# Tells whether we should check for unused import in __init__ files.
init-import=no
init-import=yes


# A regular expression matching the beginning of the name of dummy variables
# A regular expression matching the beginning of the name of dummy variables
# (i.e. not used).
# (i.e. not used).
dummy-variables-rgx=_|dummy
dummy-variables-rgx=dummy


# List of additional names supposed to be defined in builtins. Remember that
# List of additional names supposed to be defined in builtins. Remember that
# you should avoid to define new builtins when possible.
# you should avoid to define new builtins when possible.
additional-builtins=
# underscore added as a dirty solution for undefined variable warning
additional-builtins=_




Line 99: Line 131:


# Regular expression which should only match correct function names
# Regular expression which should only match correct function names
function-rgx=[a-z_][a-z0-9_]{2,30}$
function-rgx=[a-z_][a-zA-Z0-9_]{2,30}$


# Regular expression which should only match correct method names
# Regular expression which should only match correct method names
method-rgx=[a-z_][a-z0-9_]{2,30}$
method-rgx=[a-zA-Z_][a-zA-Z0-9_]{2,30}$


# Regular expression which should only match correct instance attribute names
# Regular expression which should only match correct instance attribute names
attr-rgx=[a-z_][a-z0-9_]{2,30}$
attr-rgx=[a-z_][a-zA-Z0-9_]{2,30}$


# Regular expression which should only match correct argument names
# Regular expression which should only match correct argument names
argument-rgx=[a-z_][a-z0-9_]{2,30}$
argument-rgx=[a-z_][a-zA-Z0-9_]{2,30}$


# Regular expression which should only match correct variable names
# Regular expression which should only match correct variable names
variable-rgx=[a-z_][a-z0-9_]{2,30}$
variable-rgx=[a-z_][a-zA-Z0-9_]{2,30}$|[a-z]


# Regular expression which should only match correct list comprehension /
# Regular expression which should only match correct list comprehension /
Line 118: Line 150:


# Good variable names which should always be accepted, separated by a comma
# Good variable names which should always be accepted, separated by a comma
good-names=i,j,k,ex,Run,_
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 variable names which should always be refused, separated by a comma
Line 131: Line 163:


# List of note tags to take in consideration, separated by a comma.
# List of note tags to take in consideration, separated by a comma.
notes=FIXME,XXX,TODO
# 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]
[TYPECHECK]
Line 250: Line 284:
overgeneral-exceptions=Exception
overgeneral-exceptions=Exception
</source>
</source>
== Notes ==
You can enable and disable a warning for particular block of code:
<source lang="python">
# 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
</source>
Or you can disable warning for particular class, function or line. Note that in all cases comment must be on that particular line!
<source lang="python">
class RHoughParametres:  # pylint: disable=R0903
    """! Small crate class."""
    def __init__(self):
        self.linesNumber = 10
        self.maxGap = 5
        self.minSegmentLength = 40
</source>
Do not use <tt>pylint: disable</tt> 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
{{Python}}

Latest revision as of 08:01, 13 July 2013

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