dlint是一个鼓励最佳编码实践并帮助确保我们编写安全的python代码的工具。

dlint的Python项目详细描述


dlint

Build StatusPython VersionsPyPI Version

dlint是一个鼓励最佳编码实践并帮助确保我们 编写安全的python代码。

The most important thing I have done as a programmer in recent years is to aggressively pursue static code analysis. Even more valuable than the hundreds of serious bugs I have prevented with it is the change in mindset about the way I view software reliability and code quality.

For a static analysis project to succeed, developers must feel they benefit from and enjoy using it.

文档:请参见docs

安装

$ python -m pip install dlint

指定要为特定python版本安装的python2python3

并再次检查其安装是否正确:

$ python -m flake8 -h
Usage: flake8 [options] file file ...

...

Installed plugins: dlint: 0.7.0, mccabe: 0.5.3, pycodestyle: 2.2.0, pyflakes: 1.3.0

注意dlint: 0.7.0

使用

dlint使用flake8来执行其linting功能。这样我们就可以 利用许多有用的flake8功能,而不必重新发明轮子。

cli

让我们做一个简单的检查:

$ cat test.py
#!/usr/bin/env python

print("TEST1")

exec('print("TEST2")')
$ python -m flake8 --select=DUO test.py
test.py:5:1: DUO105 use of "exec" not allowed

--select=DUO标志告诉flake8只运行dlint lint规则。

从这里,我们可以轻松地对python代码目录运行dlint:

$ python -m flake8 --select=DUO /path/to/code

要微调您的绒线,请查看flake8帮助:

$ python -m flake8 --help

内联编辑器

dlint结果也可以内联地包含在编辑器中,以获得快速反馈。 这通常需要一个编辑器插件或扩展。这里是一些开始 常用编辑器要点:

积分

dlint可以很容易地集成到ci管道中,或者任何真正的东西中。

特拉维西

在配置文件中包含dlint:

language: python
install:
    - python -m pip install dlint
script:
    - python -m flake8 --select=DUO /path/to/code

圆圈

在配置文件中包含dlint:

version: 2
jobs:
    build:
        docker:
            - image: circleci/python
        steps:
            - checkout
            - run: python -m pip install dlint
            - run: python -m flake8 --select=DUO /path/to/code

Gitlab

在配置文件中包含dlint:

stages:
    - test
test:
    image: python
    before_script:
        - python -m pip install dlint
    script:
        - python -m flake8 --select=DUO /path/to/code

锅炉

Arcanist中包含dlint 通过^{}的绒布工艺 配置文件:

{
    "linters": {
        "sample": {
            "type": "flake8"
        }
    }
}

dlint规则在安装后将通过flake8自动运行,因此 标准配置将起作用。你也可以利用更多的颗粒 对起毛过程的控制:

{
    "linters": {
        "sample": {
            "type": "flake8"
        },
        "bin": ["python2.7", "python2"],
        "flags": ["-m", "flake8", "--select", "DUO"]
    }
}

自定义插件

dlint的自定义插件构建在simple naming convention, 依赖于Python modules。 要制作dlint自定义插件,请使用以下约定:

  • python模块名必须以dlint_plugin_开头。
  • linter类名必须以Dlint开头。
  • linter类应该从dlint.linters.base.BaseLinter继承。
    • 如果出于某种原因您希望避免这种情况,那么必须实现 get_results函数正确,并且继承自ast.NodeVisitor

有关详细信息,请参见example plugin

开发

首先,安装开发包:

$ python -m pip install -r requirements.txt
$ python -m pip install -r requirements-dev.txt
$ python -m pip install -e .

测试

$ pytest

起毛

$ flake8

覆盖范围

$ pytest --cov

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
utf 8在Java中编码法语字符?   Spring安全web应用程序中的javaajax请求   使用AWS Elastic Beanstalk记录java应用程序   java My方法运行了两次,而它们应该只运行一次并映射。get()正在影响所有条目   java基于特定接口的bean通过HttpInvoker导出bean   java xlsx文件在http请求中发送时已损坏/为空(0字节)   java修剪字符串中的所有“空格”   java如何为二维数组生成列和行和方法?   java在使用配置类时使用@PreAuthorize或@Secured with Jersey   java SmartGWT不能与Maven和Jetty Chrome Ubuntu x64一起使用   java在Google App Engine中,对于一个包含许多延迟任务的任务队列,最佳的存储桶大小是多少?   javajaxb:从XML子树解组?   java如何使媒体播放器在按设备后退按钮从片段返回活动时停止   从java进程中跳过批处理中的暂停命令   java Vaadin Designer不是可编辑的自定义组件   java递归打印数组中等于给定和的所有子集   java上传覆盖率。ec文件到sonar Android   java如何在游戏中添加按钮,使两者都可见?