dlint
1.0.0

DLINT是鼓励最佳编码实践并帮助确保Python代码安全的工具。
近年来,我作为程序员所做的最重要的事情是积极进行静态代码分析。比我预防的数百个严重的错误更有价值的是关于我查看软件可靠性和代码质量的方式的变化。
- 约翰·卡马克(John Carmack),2011年
为了获得成功的静态分析项目,开发人员必须感到自己从中受益并喜欢使用它。
- 从Google建立静态分析工具的经验教训
有关文档和规则列表,请参见文档。
$ python -m pip install dlint并仔细检查是否正确安装了它:
$ python -m flake8 -h
Usage: flake8 [options] file file ...
...
Installed plugins: dlint: 0.16.0, mccabe: 0.5.3, pycodestyle: 2.2.0, pyflakes: 1.3.0注意dlint: 0.16.0 。
DLINT在flake8上构建以执行其覆盖。这提供了许多有用的功能,而无需重新发明轮子。
让我们进行简单的检查:
$ cat << EOF > test.py
print("TEST1")
exec('print("TEST2")')
EOF $ python test.py
TEST1
TEST2$ python -m flake8 --select=DUO test.py
test.py:2:1: DUO105 use of " exec " is insecure/docs/linters/DUO105.md 。DUO ? DLINT最初是由二人实验室团队开发的。 --select=DUO旗告诉flake8仅运行DLINT LINT规则。
从这里开始,我们可以轻松地根据Python代码目录运行DLINT:
$ python -m flake8 --select=DUO /path/to/code要微调您的覆盖物,请查看flake8帮助:
$ python -m flake8 --helpDLINT结果也可以在您的编辑器中插入,以获取快速反馈。这通常需要编辑插件或扩展程序。以下是常见编辑的一些起点:
DLINT可以很容易地集成到CI管道中,或者真正的任何东西。
有关更多信息和示例,请参见“如何将DLINT集成到XYZ中?”。
DLINT的自定义插件建立在简单的命名约定上,并依靠Python模块。要制作DLINT自定义插件,请使用以下约定:
dlint_plugin_开头。Dlint开头。dlint.linters.base.BaseLinter继承。get_results函数并从ast.NodeVisitor继承。有关更多详细信息,请参见示例插件。
首先,安装开发软件包:
$ python -m pip install -r requirements.txt
$ python -m pip install -r requirements-dev.txt
$ python -m pip install -e . $ pytest$ flake8$ pytest --cov$ pytest -k test_benchmark_run --benchmark-py-file /path/to/file.py tests/test_benchmark/或单独获得衬里的基准结果:
$ pytest -k test_benchmark_individual --benchmark-py-file /path/to/file.py tests/test_benchmark/或与单个衬里竞争:
$ pytest -k test_benchmark_individual[DUO138-BadReCatastrophicUseLinter] --benchmark-py-file /path/to/file.py tests/test_benchmark/