I tried this on my large project (Open edX), and it generally worked great, but was one crash:

  File "../more/cached_pylint.py", line 252, in <module>
    sys.exit(main())
  File "../more/cached_pylint.py", line 248, in main
    run = CachedRun(sys.argv[1:], exit=False)
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/lint.py", line 1332, in __init__
    linter.check(args)
  File "../more/cached_pylint.py", line 137, in check
    PyLinter.check(self, files_or_modules)
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/lint.py", line 747, in check
    self._do_check(files_or_modules)
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/lint.py", line 869, in _do_check
    self.check_astroid_module(ast_node, walker, rawcheckers, tokencheckers)
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/lint.py", line 946, in check_astroid_module
    walker.walk(ast_node)
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/utils.py", line 874, in walk
    self.walk(child)
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/utils.py", line 871, in walk
    cb(astroid)
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/checkers/variables.py", line 904, in visit_from
    self._check_module_attrs(node, module, name.split('.'))
File "/edx/app/edxapp/venvs/edxapp/local/lib/python2.7/site-packages/pylint/checkers/variables.py", line 974, in _check_module_attrs
    module = next(module.getattr(name)[0].infer())
StopIteration

Any clue what might be causing that?

--Ned.

On 11/5/15 6:24 AM, Ned Batchelder wrote:
On 11/5/15 5:21 AM, Noam Yorav-Raphael wrote:
Hi,

Take a look at cached_pylint.py at https://gist.github.com/noamraph/c933b32deb8304ac7ccd

It records module dependencies, and when a module passes with no warnings, it records it together with the sha1 of the contents of each of its dependencies, so when run again it could pass without checking it.

Dependencies are recorded by using infer and by using ImportsChecker, so if module A imports something from module B that was actually defined in module C, both B and C will be recorded as dependencies of A.

We have a medium sized code repository that took two minutes for each check. Now pylint only checks the modified modules, and it takes two seconds.

This sounds like a great feature. Have you considered contributing it as a pull request into pylint?

--Ned.

I tested it with pylint 1.4.3.

Hope this helps someone,

Noam

_______________________________________________
code-quality mailing list
code-quality@python.org
https://mail.python.org/mailman/listinfo/code-quality

Reply via email to