做了一个快速开发 Python 代码规范检查的工具,来几个老哥用用试试看?

2020-05-13 19:24:41 +08:00
 Nostalgiaaaa

平常摸鱼看了不少团队无法统一代码风格团 or 自己提了方案没人执行 or 每次 review 都要强调某些规则。搜索了下还是有现成的解决方案的,比如自己写 pylint 的插件。

在写插件过程中,感觉 ast 树和 pylint 的插件 demo 都不是很好理解。于是自己整合了一下,能让即使不懂 ast 和 pylint 的原理也能开发插件,examples 里就可以看见简单的使用方法。

地址:github

from flint import Rule
from flint import Msg


rule = Rule(name="orm_rule", priority=-1)
msg = Msg()
msg.add_msg(error_code="W0011", display="raw_sql 函数不可以随处调用", symbol="raw_sql_cant_use")
msg.add_msg(error_code="W0012", display="sql 拼接不可以使用 format 函数", symbol="sql_cant_use_format")
rule.bind_msg(msg)


@rule.bind_def()
def visit_call(self, node):
    path = self.current_file
    if "examples/code" in path and "raw_sql" in node.as_string():
        self.add_message(
            'raw_sql_cant_use', node=node
        )

简单的定义个函数,写一点规则。就能防止像示例代码中写的一样在 view 层直接调用数据库。根据 ast 的原理,基本所有你想定义的规范都可以实现。花个一小时,就能搞一套公司通用的规范。跟 ci 和 pre-commit 一结合,强制减少 review 工作量和代码不规范的情况。

觉得有用的老哥可以顺手点个 star 呗

1971 次点击
所在节点    分享创造
5 条回复
triangle111
2020-05-13 20:53:37 +08:00
python 也有 ast, 我一直以为 ast 是 js 才有的。。。
Nostalgiaaaa
2020-05-13 21:23:42 +08:00
@triangle111
大部分语言都有,理论上都可以做类似的代码规范检查
no1xsyzy
2020-05-15 13:37:54 +08:00
@triangle111 #1 直接把讨论 lowB 化了还行……
AST 就是个 PL 的概念,除了超一维的语言和花指令写不出 AST 以外,哪个语言没有 AST ?
Lisp 都被人吐槽 “不就是手撸 AST”
Nostalgiaaaa
2020-05-15 15:59:53 +08:00
@no1xsyzy 这个不知道还是挺正常的,大学我记得也没专门介绍过这个东西。本科教材还是差点意思。
no1xsyzy
2020-05-15 18:27:04 +08:00
@Nostalgiaaaa #4 我跑题了……
我主要是觉得:知道 AST 是什么,却不知道 AST 是个超脱于特定语言的概念挺神奇的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671356

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX