codevalidator
codevalidator copied to clipboard
Simple source code validator with file reformatting option (remove trailing WS, pretty print XML, ..)
============= codevalidator
Simple source code validator with file reformatting option (remove trailing WS, pretty print XML, ..).
For Python code formatting it can either use autopep8_ or the builtin copy of PythonTidy.
Requirements
- Python 2.7+
- lxml_ (for XML formatting)
- pep8_ (for Python checking)
- autopep8_ (for Python formatting)
- pyflakes_ (for static Python code checking)
- Jalopy_ (for Java code formatting)
- coffeelint (for CoffeeScript validation)
- PHP_CodeSniffer (for PHP style checking)
- Puppet (for Puppet manifest validation)
- sqlparse
- jshint (for JavaScript checking)
- PyYAML (for YAML checking)
- Ruby (for Ruby code checking)
- Rubygems (for Ruby code checking with rubocop)
- erb and ruby (for ERB template checking)
On Ubuntu you can install most packages easily::
sudo apt-get install python-lxml pep8 pyflakes nodejs npm python-sqlparse python-yaml ruby rubygems
sudo npm install -g jshint
sudo gem i rubocop
If you are using Jalopy, for better performance also install Nailgun::
sudo apt-get install nailgun
And start the nailgun server with::
java -cp /usr/share/java/nailgun-0.9.0.jar:/opt/jalopy/lib/jalopy-1.9.4.jar -server com.martiansoftware.nailgun.NGServer
Installation
There are at least two ways of installing codevalidator:
-
Alternative 1: Use the codevalidator source tree directly (i.e. clone the GIT repo and put codevalidator.py in your
PATH)::git clone https://github.com/hjacobs/codevalidator.git sudo ln -s codevalidator/codevalidator.py /usr/local/bin/codevalidator.py
-
Alternative 2: Install codevalidator from PyPI using PIP::
sudo pip install codevalidator
-
Alternative 3: Use Docker_ to get all dependencies and to run codevalidator without messing with your local system::
docker build -t codevalidator .
we can mount the current directory into "workdir" volume to validate the local directory recursively
docker run -v
pwd:/workdir -t codevalidator -rvv /workdir/
Getting Started
Validating test files with builtin default configuration::
./codevalidator.py test/*
Fixing test files (removing trailing whitespace, XML format)::
./codevalidator.py -f test/*
Using custom configuration file::
./codevalidator.py -c test/config.json test/*
Validate and fix a whole directory tree::
./codevalidator.py -c myconfig.json -rf /path/to/mydirectory
Validate a single PHP file and print detailed error messages (needs PHP_CodeSniffer with PSR standards installed!)::
./codevalidator.py -v test/test.php
Running in very verbose (debug) mode to see what is validated::
./codevalidator.py -vvrc test/config.json test
Using the filter mode to "fix" stdin and write to stdout::
echo 'print 1' | ./codevalidator.py --fix --filter foobar.py && echo success
If you are annoyed by the .XX.pre-cvfix backup files you can disable them either on the command line (--no-backup) or in the config file.
Configuration
Codevalidator uses a mapping of file name patterns to "rules" in order to know which validation rules should be applied for a certain file.
The script contains a more-or-less sane default configuration (see DEFAULT_CONFIG at the top of codevalidator.py).
You can overwrite the configuration by putting a .codevalidatorrc file in your home directory.
The file must be JSON and must have the same structure as DEFAULT_CONFIG.
Advanced Usages
You can use the --fix --filter combination to directly filter your current buffer in VIM::
:%!codevalidator.py --fix --filter %
The --fix --filter was also designed to be used with GIT filters_.
To apply a formatting rule once without changing you configuration file, you can use the -a option. Formatting a Python file once with the pythontidy rule looks like::
./codevalidator.py -a pythontidy myfile.py
Known Issues
- PythonTidy cannot parse
dict comprehensions_. As a workaround you can use list comprehensions and wrap it withdict.
.. _lxml: http://lxml.de/ .. _pep8: https://pypi.python.org/pypi/pep8 .. _autopep8: https://pypi.python.org/pypi/autopep8 .. _pyflakes: https://pypi.python.org/pypi/pyflakes .. _Jalopy: http://www.triemax.com/products/jalopy/ .. _dict comprehensions: http://www.python.org/dev/peps/pep-0274/ .. _GIT filters: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html .. _Docker: https://www.docker.com/