爱意满满的作品展示区。
Nostalgiaaaa

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

  •  
  •   Nostalgiaaaa · May 13, 2020 · 2460 views
    This topic created in 2199 days ago, the information mentioned may be changed or developed.

    平常摸鱼看了不少团队无法统一代码风格团 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 replies    2020-05-15 18:27:04 +08:00
    triangle111
        1
    triangle111  
       May 13, 2020
    python 也有 ast, 我一直以为 ast 是 js 才有的。。。
    Nostalgiaaaa
        2
    Nostalgiaaaa  
    OP
       May 13, 2020
    @triangle111
    大部分语言都有,理论上都可以做类似的代码规范检查
    no1xsyzy
        3
    no1xsyzy  
       May 15, 2020
    @triangle111 #1 直接把讨论 lowB 化了还行……
    AST 就是个 PL 的概念,除了超一维的语言和花指令写不出 AST 以外,哪个语言没有 AST ?
    Lisp 都被人吐槽 “不就是手撸 AST”
    Nostalgiaaaa
        4
    Nostalgiaaaa  
    OP
       May 15, 2020
    @no1xsyzy 这个不知道还是挺正常的,大学我记得也没专门介绍过这个东西。本科教材还是差点意思。
    no1xsyzy
        5
    no1xsyzy  
       May 15, 2020
    @Nostalgiaaaa #4 我跑题了……
    我主要是觉得:知道 AST 是什么,却不知道 AST 是个超脱于特定语言的概念挺神奇的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4189 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 10:11 · PVG 18:11 · LAX 03:11 · JFK 06:11
    ♥ Do have faith in what you're doing.