Python/Django programmers,
What code review tools do you use? Do you run them automatically
when checking in new code? Do you recommend them?
Details:
I'm working on a large Python/Django Web app (1,000 files, 200,000
lines of code, 3.5 years) and spend a good chunk of my time
reviewing
code written by other team members. I'd like to automate many of
the
checks that I currently do manually:
- Coding standards violations
-- Lack of logging
-- Missing docstrings
-- Hardcoded literals instead of named constants or utility
functions
-- Standard columns in all DB tables (create_user, create_date,
update_user, update_date, status, etc.)
-- etc.
- Architecture violations
-- Doing things in the UI layer vs the business logic layer
-- Respect the MVC boundaries
-- etc.
- Logic errors
- Defensive coding
-- Unchecked assumptions
-- Missing else clauses on if statements
-- Missing exception handlers
-- Exception handlers that suppress errors
-- etc.
- Security and data validation
-- Vulnerability to injection attacks (SQL, JS, etc.)
-- Data validation and security enforcement in browser vs. server
-- etc.
- Massive inefficiencies
-- Cursor loop vs more specific DB SELECT
-- Caching opportunities
-- etc.
- Reuse opportunities
- Lack of test cases
- DB migration issues
-- Non-idempotent migrations
-- Edited migrations
-- Migrations that call non-migration code that might change
- User experience
-- Show clear error messages in all cases of user error
- etc.
What tools do you recommend to automate such checks? I'm currently
most interested in Python/Django, as well as JavaScript/CSS/HTML.
Some automation tools I've found include:
- Gerrit
https://www.gerritcodereview.com/
- BitBucket Server (was Stash)
https://www.atlassian.com/software/bitbucket/server/
Such automation tools support a workflow of human interactions for
manual code reviews (comments, replies, todos, etc.). They also
call
code review tools like the following to scan the code automatically:
- Sonar (multiple languages via plugins)
http://www.sonarqube.org/
- JSHint (JavaScript)
http://jshint.com/
- JSLint (JavaScript)
http://www.jslint.com/
- TSLint (TypeScript)
https://palantir.github.io/tslint/
- PMD (mostly Java/JS, some Python)
https://pmd.github.io/
- Checkstyle (Java, not Python)
http://checkstyle.sourceforge.net/
- FindBugs (Java, not Python)
http://findbugs.sourceforge.net/
- CodeNarc (Groovy and Java, not Python)
http://codenarc.sourceforge.net/
I've also done a quick Google for Python/Django-specific tools:
-
http://google.com/search?q=python+code+checkers
-
http://google.com/search?q=django+code+checkers
and found:
- code-checker
https://pypi.python.org/pypi/code-checker/
- PyChecker
https://pypi.python.org/pypi/PyChecker
- Pyflakes
https://pypi.python.org/pypi/pyflakes
- PyLint
https://pypi.python.org/pypi/pylint
- pep8
https://pypi.python.org/pypi/pep8
- Flake8 (wraps Pyflakes, pep8 and others)
https://pypi.python.org/pypi/flake8
- Django Lint
https://chris-lamb.co.uk/projects/django-lint
- QuantifiedCode
https://www.quantifiedcode.com/
My IDE is PyCharm, which has the ability to check some things, but
I haven't yet investigated or configured it much.
What do you recommend? Any good or bad experiences to share?
Thanks!