繁体   English   中英

如何编写 Lint 规则来防止 Python 中的全局变量突变?

[英]How can I write a Lint rule to prevent Global Variable Mutation in Python?

全局变量是邪恶的,我们都知道(全局变量,我的意思是模块级变量)。 我想编写一个自定义 lint 规则来保护它的更新。 例如,

GLOBAL_DICT = {
    'a': 1,
    'b': 2,
}


def func():
    var_1 = GLOBAL_DICT.get('a')  # Should be a valid case
    GLOBAL_DICT.update({  # Should be an invalid case, and Lint should catch this
        'c': 3,
    })


func()

访问(读取)模块级变量是我们常用的模式,但是更新模块级(全局)变量是不安全的操作。 我尝试使用ast库和libCST库来获取此更新。 但我找不到任何检测全局变量突变的方法。 我能想到的唯一方法是对可变数据结构的更新操作列表进行硬编码,例如用于list数据结构的.extend().append()等; .update().pop()等用于dict数据结构。 并且在遍历树(AST 或 CST)时,如果它们是可变类型,则存储所有全局变量的列表,并且如果在其中一个上调用上述方法之一,则 lint 规则可以将其调用。 但这看起来不像是一个完整的证明解决方案。

你能告诉我如何为此实施自定义 lint 规则的想法吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM