如何让Sublimelinter+flake8忽略processing-py全局关键字的未定义报错
我之前也碰到过这个糟心的问题——Processing.py那些自带的全局函数和变量,比如loadPixels()、width,在flake8眼里全是未定义的错误,总加#noqa又太麻烦,关检查器更得不偿失。分享几个我亲测有效的解决办法,既能忽略Processing的全局关键字报错,又能保留对自己代码的未定义名称检查:
方法1:给flake8配置自定义内置全局变量
这是最简单直接的方式,我们可以告诉flake8哪些名称是Processing自带的全局项,不用把它们当成未定义错误。
你可以在项目根目录创建一个.flake8配置文件,内容如下:
[flake8] # 这里列出你常用的Processing全局函数/变量,按需补充 builtins = loadPixels,updatePixels,width,height,fill,stroke,ellipse,rect,background
保存后,flake8就会把这些名称识别为内置全局,不再触发F821错误,而你自己代码里真正的未定义变量依然会被正常提示。
方法2:使用类型提示存根文件
如果你习惯用类型提示,也可以创建一个Processing.py的存根文件,让flake8识别这些全局项的定义。
在项目里创建一个processing.pyi文件,内容示例:
# 定义Processing的全局函数 def loadPixels() -> None: ... def updatePixels() -> None: ... def fill(r: int, g: int, b: int) -> None: ... def stroke(r: int, g: int, b: int) -> None: ... # 定义Processing的全局变量 width: int height: int
把你用到的Processing全局项都补充进去,flake8读取这个存根文件后,就不会再误报它们的未定义错误。
方法3:在SublimeLinter中直接配置flake8参数
如果你不想单独创建配置文件,也可以直接在SublimeLinter的设置里给flake8传参数:
打开Sublime Text的Preferences > Package Settings > SublimeLinter > Settings,在用户设置里添加:
{ "linters": { "flake8": { "args": [ "--builtins=loadPixels,width,height,updatePixels,fill" ] } } }
这个效果和方法1一样,都是把指定的名称标记为内置全局,区别只是配置的位置不同。
个人比较推荐方法1或3,操作简单,不需要维护额外的存根文件,按需添加你常用的Processing全局项就好,完美兼顾代码检查和Processing的特殊语法。
内容的提问来源于stack exchange,提问作者DomoDomo

