third_party.pylibs.pylint.src/doc/contribute.rst

150 lines
5.0 KiB
ReStructuredText
Raw Normal View History

2013-04-06 19:45:15 +00:00
.. -*- coding: utf-8 -*-
============
Contribute
============
Bug reports, feedback
---------------------
You think you have found a bug in Pylint? Well, this may be the case
2013-04-29 13:31:03 +00:00
since Pylint is under development.
2013-04-06 19:45:15 +00:00
2013-04-29 13:31:03 +00:00
Please take the time to check if it is already in the issue tracker at
https://bitbucket.org/logilab/pylint
2013-04-06 19:45:15 +00:00
2013-04-29 13:31:03 +00:00
If you can not find it in the tracker, create a new issue there or discuss your
problem on the code-quality@python.org mailing list.
The code-quality mailing list is also a nice place to provide feedback about
Pylint, since it is shared with other tools that aim at improving the quality of
python code.
Note that if you don't find something you have expected in Pylint's
issue tracker, it may be because it is an issue with one of its dependencies, namely
2013-06-17 13:06:48 +00:00
astroid and logilab-common:
2013-04-06 19:45:15 +00:00
2013-06-17 13:06:48 +00:00
* https://bitbucket.org/logilab/astroid
2013-04-06 19:45:15 +00:00
* http://www.logilab.org/project/logilab-common
Mailing lists
-------------
2013-04-29 13:31:03 +00:00
Use the code-quality@python.org mailing list for anything related
2013-04-06 19:45:15 +00:00
to Pylint. This is in most cases better than sending an email directly
to the author, since others will benefit from the exchange, and you'll
2013-04-29 13:31:03 +00:00
be more likely answered by someone subscribed to the list.
2013-04-06 19:45:15 +00:00
You can subscribe to this mailing list at
2013-05-07 07:30:59 +00:00
http://mail.python.org/mailman/listinfo/code-quality
2013-04-06 19:45:15 +00:00
Archives are available at
2013-05-07 07:30:59 +00:00
http://mail.python.org/pipermail/code-quality/
2013-04-06 19:45:15 +00:00
2013-04-29 13:31:03 +00:00
Archives before April 2013 are available at
http://lists.logilab.org/pipermail/python-projects/
2013-04-06 19:45:15 +00:00
2013-04-29 13:31:03 +00:00
Forge
-----
2013-04-06 19:45:15 +00:00
2014-11-12 20:26:04 +00:00
Pylint is developed using the mercurial_ distributed version control system.
2013-04-06 19:45:15 +00:00
2013-04-29 13:31:03 +00:00
You can clone Pylint and its dependencies from ::
2013-04-06 19:45:15 +00:00
hg clone https://bitbucket.org/logilab/pylint
2013-06-17 13:06:48 +00:00
hg clone https://bitbucket.org/logilab/astroid
hg clone http://hg.logilab.org/logilab/common
2013-04-06 19:45:15 +00:00
.. _mercurial: http://www.selenic.com/mercurial/
2013-07-17 09:20:20 +00:00
Got a change for Pylint? Below are a few steps you should take to make sure
your patch gets accepted.
2013-04-06 19:45:15 +00:00
2013-04-29 13:31:03 +00:00
- Test your code
2013-07-17 09:20:20 +00:00
- Pylint keeps a set of unit tests in the /test directory. The
`test_func.py` module uses external files to have some kind of easy
2014-11-12 20:26:04 +00:00
functional testing. To get your patch accepted you must write (or change)
2013-07-17 09:20:20 +00:00
a test input file in the `test/input` directory and message file in the
`test/messages` directory. Then run `python test_func.py` to ensure that
your test is green.
2013-07-17 09:20:20 +00:00
- You should also run all the tests to ensure that your change isn't
breaking one.
2013-04-06 19:45:15 +00:00
2013-07-17 09:20:20 +00:00
- Add a short entry to the ChangeLog describing the change, except for internal
implementation only changes
2013-04-29 13:31:03 +00:00
- Write a comprehensive commit message
2013-07-17 09:20:20 +00:00
- Relate your change to an issue in the tracker if such an issue exists (see
`this page`_ of Bitbucket documentation for more information on this)
- Send a pull request from Bitbucket (more on this here_)
.. _`this page`: https://confluence.atlassian.com/display/BITBUCKET/Resolve+issues+automatically+when+users+push+code
.. _here: https://confluence.atlassian.com/display/BITBUCKET/Work+with+pull+requests
2013-04-06 19:45:15 +00:00
Unit test setup
---------------
To run the pylint unit tests within your checkout (without having to install
anything), you need to set PYTHONPATH so that pylint, astroid and the
logilab-common are available. Assume you have those packages in ~/src. If
you have a normal clone of logilab-common, it will not be properly
structured to allow import of logilab.common. To remedy this, create the
necessary structure::
cd ~/src
mkdir logilab
mv logilab-common logilab/common
touch logilab/__init__.py
Now, set PYTHONPATH to your src directory::
export PYTHONPATH=~/src
You now have access to the astroid, logilab.common and pylint packages
without installing them. You can run all the unit tests like so::
cd ~/src/pylint/test
for f in *.py ; do
echo $f
python -S $f
done
The -S flag keeps distutils from interfering with sys.path. YMMV.
2013-07-17 09:20:20 +00:00
2014-11-12 20:26:04 +00:00
Adding new functional tests
2013-07-17 09:20:20 +00:00
----------------------------
Pylint comes with an easy way to write functional tests for new checks:
* put a Python file in the `test/input` directory, whose name starts with
`func_` and should also contains the symbolic name of the tested check
* add the expected message file in the `test/messages` directory, using the
same name but a `.txt` extension instead of `.py`
The message file should use the default text output format (without reports) and lines should be
sorted. E.g on Unix system, you may generate it using::
pylint -rn input/func_mycheck.py | sort > pylint messages/func_mycheck.txt
Also, here are a few naming convention which are used:
2013-09-25 09:25:22 +00:00
* Python files starting with 'func_noerror' don't have any message file
2013-07-17 09:20:20 +00:00
associated as they are expected to provide no output at all
* You may provide different input files (and associated output) depending on the
Python interpreter version:
* tests whose name ends with `_py<xy>.py` are used for Python >= x.y
* tests whose name ends with `_py<_xy>.py` are used for Python < x.y
* Similarly you may provide different message files for a single input, message
file whose name ends with '_py<xy>.txt' will be used for Python >= x.y, using
the nearest version possible