blob: 99f6519a65cddd7c05fdabbf5358245d3e61490b [file] [log] [blame]
#summary How to use and set up pylint under eclipse for Melange
#labels Importance-Useful,Phase-QA,Contents-Review
= Getting started with pylint =
''How to get started with pylint and melange in eclipse''
==Prerequisites==
Melange must be checked out succesfully and set up correctly, read Melange [[GettingStarted]] guide for more. Also you will need to download [http://www.logilab.org/857 pylint] and its dependencies, [http://www.logilab.org/project/logilab-astng logilab-astng] and [http://www.logilab.org/project/logilab-common logilab-common].
==Install==
To get pylint working correctly you must first install its dependencies, in order to install its dependencies you may need to have administrator privileges depending on who installed python in your computer(you or the administrator) to avoid confusion this guide will proceed as if you where the administrator.
* Extract both pylint and its dependencies.
* Execute `python setup.py install` from logilab-common folder.
* Execute `python setup.py install` from logilab-astng folder.
* Execute `python setup.py install` from pylint folder.
===Putting pylint in your system path===
Now if you want to run pylint from your prefered shell you may want to put the executable in your system path. To do this you just put Python25Path/Scripts in your system path:
If you are using ''windows'' you will place Python25Path\Scripts under the PATH variable [http://vlaurie.com/computers2/Articles/environment.htm here] you can find a guide on how to set system variables on windows xp and go [http://banagale.com/changing-your-system-path-in-windows-vista.htm here] if you are using vista.
If you are using ''linux'' you will set {need to know where is the scripts directory!}
Now pylint should be fully installed.
==Making pylint work with pydev==
[http://pydev.sourceforge.net/ Pydev] is an eclipse plugin to work with python projects, the rest of this guide focus on making pylint work with pydev and Melange.
Now to get pylint working with pydev you need to [http://www.fabioz.com/pydev/manual_101_install.html install pydev] then you should configure pydev to run pylint every time pydev builds the workspace, [http://pydev.sourceforge.net/pylint.html here] is a guide on that, you may need to know that the lint.py file should be placed on /usr/local/lib/pythonX.Y/site-packages/pylint on linux and PythonInstallDir\Lib\site-packages\pylint on windows.
?-X.Y stands for the python version that you are running.
===Making pylint 'see' app engine and its dependencies===
Now that pylint is installed in your system and configured in eclipse the first thing you need to do is make pydev see app engine dependencies [http://www.youtube.com/watch?v=e1dtyQ6wqzc here] is a good youtube video on that.
Now that pydev is finding all app engine references in Melange, pylint may not be seeing app engine dependencies correctly. In order to solve that possible problem you have to install app engine dependencies in your sites_package directory the same way we did with pylint and its dependencies.
* Go to MelangeCheckoutDir\thirdparty\google_appengine\lib\
* Run `python yaml\setup.py install`
* Run `python webob\setup.py install` (needs [http://pypi.python.org/pypi/setuptools setup_tools] to install)
* Run `python django\setup.py install`
* Run `python antlr3\setup.py install`
==Pylint usage==
As this may be enough for most projects but Melange has special needs. Many aspects both in melange and app engine can't be identified by pylint so an instruction in the code can be marked as incorrect while is fully correct.
Example:
{{{
org = Organization.get_by_key_name('google/gsoc2009/%d' % i)
key=org.key()
}}}
In the previous section of code Organization is a model. The second line is marked as incorrect because pylint says the method Model.get_by_key_name() returns a list. If you look at the Model implementation in app engine folder you will see that the method get_by_key_name() returns a result of Model.get() that in fact can returns, sometimes, a list.
In order to avoid these problems the programmer should feel encouraged to place special comments in the code to make pylint ignore these lines of code, if that section of code is proved correct.
Example:
{{{
org = Organization.get_by_key_name('google/gsoc2009/%d' % i)
# pylint: disable-msg=E1103
key=org.key()
# pylint: enable-msg=E1103
}}}
In the previous section of code pylint would normally say that there is an error in the third line. However since we placed a special comment telling pylint to ignore that error checking in that line, no warning is issued.
By placing a comment like this before the wronged line:
{{{
# pylint: disable-msg=(Error Code)
}}}
The error with the declared error code is ignored for the rest of this module until it sees:
{{{
# pylint: enable-msg=(Error Code)
}}}
That re-enables that error checking trough the rest of the code.
There are some cases where pylint error skipping shouldn't be re-enabled like:
{{{
# pylint: disable-msg=W0311
}}}
This comment disable pylint checking for 4 spaces identing, as you can se [http://code.google.com/p/soc/wiki/PythonStyleGuide here] melange enforces the use of 2 spaces for identing so leaving this checking disabled can be intentional.
==The pylint rc-file==
As a final note, Melange has already included in MelangeCheckoutDir\scripts\pylint\ a file named pylintrc that is a configurations file for pylint it has almost all the problems that you might have with pylint on Melange solved. To make eclipse pass it to pylint on every build add the following line to the pydev>pylint>Pylint arguments under the preferences view in eclipse:
`--rcfile=Absolutepath_to_MelangeDir/scripts/pylint/pylintrc`