Overview

Library of PyLint/ASTNG plugins to help understanding dynamic
constructions / C extensions which are not grasped by the static
analyzer.

This is a community effort to support the Python's standard library as
well as usual external libraries.


What's the purpose of those plugins, and how could I write one?
---------------------------------------------------------------

Writing your own plugins should be rather easy. Have a look at the existing
plugins in the pylint-brain/brain folder, and make sure to read the following
blog post: http://www.logilab.org/blogentry/78354


Shouldn't this be used by default by PyLint/ASTNG?
--------------------------------------------------

Definitely yes, except for big libraries / frameworks (for example web
frameworks) that should probably manage their own plugin.


So why a separated repository?
------------------------------

The main repository for this project is hosted on bitbucket
(https://bitbucket.org/sthenault/pylint-brain/) so it may have it's own
release cycle, and to make it easier for any volunteer to contribute.


So this be used by default by PyLint/ASTNG, yes or no?
------------------------------------------------------

Yes. I guess ASTNG will be released with a snapshot of this project's
plugins, that could be easily overridden by external releases or
development versions.


PyLint fellows, please help by reporting false positives that could be
fixed and by helping to solve them by expanding the knowledge base
provided by this project: the PyLint Brain :)


How to get started with development?
------------------------------------

This is how to use virtualenv to install pylint with pylint-brain::

    $ mkdir pylintdev
    $ cd pylintdev
    $ virtualenv --no-site-packages .
    $ source bin/activate
    $ pip install pylint
    
Fork pylint-brain on bitbucket and check it out::

    $ hg clone https://bitbucket.org/yourusername/pylint-brain

Note: Don't forget to insert your user name into the "hg clone" command, or
you will get an "HTTP Error 404: Not Found".

Rename the old brain folder::

    $ mv lib/python2.7/site-packages/logilab/astng/brain lib/python2.7/site-packages/logilab/astng/brain-old

Make a soft link to your the new brain folder::

    $ ln -s $PWD/pylint-brain/brain/ lib/python2.7/site-packages/logilab/astng/brain

Now check that things are working as expected::

    $ python
    >>> from logilab import astng
    >>> import py2stdlib

Now you can add your own code to::

    pylint-brain/brain/

For example if you fix a problem with mechanize, you can add a file::

    py2mechanize.py

to fix a problem that occurs in mechanize.