I've done a little searching but have not found a lint check for the
evaluates to ['a', 'bc'] due to implicit string concatenation, but usually
it's intended to be ['a', 'b', 'c']. If it is meant to be ['a', 'bc'] it's
Guido recommends popular lint tools add a rule for this here:
If this check does not exist, I would be willing to create a flake8 plugin
and add it to PyCQA.
I'm building a Pylint plugin to check for common Django bugs.
I already watched all Pylint/Astroid talks I could find and read a good
amount of astroid/brain code, as well as code from existing Pylint plugins
like pylint-django. However, since Astroid docs are sparse, I would
appreciate some feedback on this plugin code.
Code is here: https://github.com/vintasoftware/django-bug-finder/
Relevant parts are the checkers.py
and the transforms.py
I've documented the non-trivial lines.
For now, the plugin is just a proof of concept, very early stage, no
unit-tests yet. I ran it against some large projects from my company; it
seems to be working. I've implemented only two checks:
- Check for not assigned queryset expressions. This is a common Django bug,
since most queryset operations return an updated queryset clone and don't
change the original one.
- Check for Celery task calls that pass a model instance or a queryset as
an argument. This is generally problematic because the model might suffer a
concurrent update before the task is executed.
For the checks to work properly, I had to fix the Astroid inference for
Managers and QuerySets in transforms.py
This part is especially tricky, so I would love some feedback on this. If
you know better ways to do what I'm doing there, please let me know.
*Flávio Juvenal*Partner & Developer
We design, develop and fix beautiful software.