Flake_check

最近在项目组打算组织了一次规模较大的code review,也是借这个机会检查自己程序上的问题。当然程序会有不同层次上的问题,比如模块的解耦,功能的设计,再到测试用例的添加和 代码书写的规范。今天主要要介绍的就是一款代码书写规范方面的模块: flake8

flake8包含了下面三种模块:

PyFlakes
pep8
Net Batchelder's McCabe script

PyFlakes中包含了一些code style方面的规范,pep8是python官方的编程规范,McCabe是一个代码复杂度方面的检查脚本

flake8的安装:

pip install flake8 / easy_install flake8

flake8对项目/文件的检查 假设有module命名为A,其中包含a.py文件,那么可以在项目级别做代码规范检查:

flake A

也可以在文件级别做代码规范检查:

flake8 A/a.py

flake8的配置 flake8支持两种级别的设置:

1. Global级别: 修改 ~/.config/flake8 
2. Project级别:在Project的根目录增加一项tox.ini文件,在其中增加配置

    [flake8]
    max-line-length = 200 # 修改默认的单行字数长度

(较为常用,因为通常由于权限原因,我们并不能做Global级别的设置,同时Project级别的设置也是可以满足要求的)

通过这些设置,可以避免一些不需要的报警,比如单行字数限制为80通常会引起较多的code报警

flake8报警类型:

以E**/W**开头:pep8的error和warning
以F**开头:PyFlakes的代码检查
    code    sample message
    F401    module imported but unused
    F402    import module from line N shadowed by loop variable
    F403    ‘from module import *’ used; unable to detect undefined names
    F404    future import(s) name after other statements

    F811    redefinition of unused name from line N
    F812    list comprehension redefines name from line N
    F821    undefined name name
    F822    undefined name name in __all__
    F823    local variable name ... referenced before assignment
    F831    duplicate argument name in function definition
    F841    local variable name is assigned to but never used
以C9**开头:McCabe的代码复杂度检查
以N8**开头:命名检查

flake8与Git关联 在.git/hooks/pre-commit中添加设置

import sys
from flake8.hooks import git_hook

一些常见的代码格式问题:

单行长度
class / def 间的空行数
[l.append(x) for x in x_list] 中的空格数
单行中加注释与代码间的空格间距
。。。

以上只是一些简单的应用,与flake8有相似功能的模块还有更出名的pylint,flake8本身的功能并不复杂,但对于规范代码书写上的要求,的确需要更多 提高,这方面我还做得不足,需要更加注意和重视。