[英]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.