V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Nostalgiaaaa
V2EX  ›  分享创造

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

  •  
  •   Nostalgiaaaa · 2020-05-13 19:24:41 +08:00 · 1949 次点击
    这是一个创建于 1453 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平常摸鱼看了不少团队无法统一代码风格团 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 呗

    5 条回复    2020-05-15 18:27:04 +08:00
    triangle111
        1
    triangle111  
       2020-05-13 20:53:37 +08:00
    python 也有 ast, 我一直以为 ast 是 js 才有的。。。
    Nostalgiaaaa
        2
    Nostalgiaaaa  
    OP
       2020-05-13 21:23:42 +08:00
    @triangle111
    大部分语言都有,理论上都可以做类似的代码规范检查
    no1xsyzy
        3
    no1xsyzy  
       2020-05-15 13:37:54 +08:00
    @triangle111 #1 直接把讨论 lowB 化了还行……
    AST 就是个 PL 的概念,除了超一维的语言和花指令写不出 AST 以外,哪个语言没有 AST ?
    Lisp 都被人吐槽 “不就是手撸 AST”
    Nostalgiaaaa
        4
    Nostalgiaaaa  
    OP
       2020-05-15 15:59:53 +08:00
    @no1xsyzy 这个不知道还是挺正常的,大学我记得也没专门介绍过这个东西。本科教材还是差点意思。
    no1xsyzy
        5
    no1xsyzy  
       2020-05-15 18:27:04 +08:00
    @Nostalgiaaaa #4 我跑题了……
    我主要是觉得:知道 AST 是什么,却不知道 AST 是个超脱于特定语言的概念挺神奇的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1264 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:22 · PVG 01:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.