5. Why you need VVV
• Humans make human errors and are lazy
• Good practices must be enforced
automatically, continuously
• “Disadvantages: Initial setup time required”
Tuesday, May 15, 2012
6. VVV
• Per project configuration files for coding
conventions and linting rules
• Easy set-up: Automatically install required
software
• Integration with version control
• Support multiple languages (Python,
Javascript, CSS, restructured text... more to
come)
Tuesday, May 15, 2012
7. Benefits
• No bad code slips thru the commits
• Enforce coding conventions across project
members easily (esp. in open-ended OSS
projects)
• Permanent increase in software code
quality
Tuesday, May 15, 2012
8. Automatic enforcement
[~/code/vvv/demo]% git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#! new file: demo.py
#! new file: moomodule.py
#
[~/code/vvv/demo]% git commit -m "New cool stuff I typed in eyes
folder in 3 seconds"
/Users/moo/code/vvv/demo/demo.py
/Users/moo/code/vvv/demo/demo.py validation output:
************* Module demo
E1101: 8,0: Instance of 'str' has no 'cutHumanInHalf' member
To fix validation errors:
-----------------------------
Python source code did not pass Pylint validator. Please fix
issues or disable warnings in .py file itself or validation-
options.yaml file.
Let's fix these issues, ok? ^_^
/Users/moo/code/vvv/demo/moomodule.py
VVV validatoin and linting failed
Tuesday, May 15, 2012
9. Mark-up errors
.foo {
backgrnd: yellow;
}
Running vvv against .
/Users/moo/code/vvv/demo/demo.py validation output:
{vextwarning=false, output=text, lang=en, warning=2,
medium=all, profile=css3}
W3C CSS Validator results for file:/Users/moo/code/vvv/
demo/foobar.css
Sorry! We found the following errors (1)
URI : file:/Users/moo/code/vvv/demo/foobar.css
Line : 2 .foo
Property backgrnd doesn't exist :
yellow
Tuesday, May 15, 2012
10. Coding conventions
C0103: 2,4:MagicalObject.doSomething: Invalid name
"doSomething" (should match [a-z_][a-z0-9_]{2,30}$)
(PEP-8 for Pythoneers)
Tuesday, May 15, 2012
11. Generic text validation
• Line length
• Catch bad tabs and indentation
• Catch bad character sets (ISO-8859-1,
anyone?)
• Catch spooky stuff like ALT+spacebar No
Break Space character
Tuesday, May 15, 2012
13. Install VVV on your
computer
# Python 3 + virtualenv
cd ~
virtualenv-3.2 vvv-venv
. ~/vvv-venv/bin/activate
pip install vvv
Tuesday, May 15, 2012
14. Add VVV configuration
in project root
• validation-options.yaml to tell which
validators to run with which options
• validation-files.yaml for file
whitelisting / blacklisting
Tuesday, May 15, 2012
15. validation-options.yaml
# Enforce max line length
linelength:
length: 250
# Python additional configuration
pylint:
host-python-env: true
python3k: true
configuration: |
[MESSAGES CONTROL]
# Disable:
# - Missing docstring
# :C0112: *Empty docstring*
# :R0903: *Too few public methods (%s/%s)*
# :R0904: *Too many public methods (%s/%s)*
disable = C0111, C0112, R0903, R0904
Tuesday, May 15, 2012
16. validation-files.yaml
# Don't match hidden dotted files/folders
# Don't match generated folders
# Don't match test data (which is bad
intentionally)
all: |
*
!RE:.*/..*|^..*
!**/build/**
!dist/**
!venv
!**/__pycache__
!*.egg-info
!tests/validators
!tests/test-installation-environment
Tuesday, May 15, 2012
17. Run VVV
source ~/vvv-venv/bin/activate
vvv .
...or...
~/vvv-venv/bin/vvv .
Tuesday, May 15, 2012
18. No painful manual
installations
• VVV will automatically download and install
a pile of software in ~/.vvv when run for the
first time
• VVV gives instructions how to install
dependencies which cannot be
automatically installed: java, node
• Installed on-demand: jshint, CSS validator,
pylint, etc.
Tuesday, May 15, 2012
20. Pre-commit hook
integration
# Run pre-commit hook installation
vvv-install-git-pre-commit-hook .
Breaking the law (Judas Priest, 1980)
git commit --no-verify -m "Those validator hooks
prevent me committing crappy code, damn it!"
https://www.youtube.com/watch?v=L397TWLwrUU
Tuesday, May 15, 2012
21. Continuous integration
(.travis.yml)
# Snake me baby!
language: python
python:
- "3.2"
# - We use logilab.astng trunk until this bug fix is
# released http://comments.gmane.org/gmane.comp.python.logilab/1193
install:
- "pip install hg+http://hg.logilab.org/logilab/astng/"
- pip install . --use-mirrors
# command to run validation against the code base
script: vvv .
Tuesday, May 15, 2012
22. VVV is here today
• Available on PyPi: http://pypi.python.org/
pypi/vvv
• Available on Github: https://github.com/
miohtama/vvv
Tuesday, May 15, 2012
23. Future
• Text-editor background linting when typing
(Sublime Edit 2)
• Expanded version control integration with
SVN, Bazaar and Mercurial
• Expanded language support: Java, PHP,
CoffeeScript
• Expanded user base: you report the bugs
Tuesday, May 15, 2012
24. Q&A
• Mikko Ohtamaa
• http://twitter.com/moo9000
• http://linkedin.com/in/ohtis
• http://opensourcehacker.com
Tuesday, May 15, 2012