平常摸鱼看了不少团队无法统一代码风格团 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 呗
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.