为Neomake适配Psalm输出:正确errorformat配置求助
搞定Psalm + Neomake的Errorformat配置
我来帮你解决这个配置问题!首先咱们先拆解一下Psalm的输出结构,再看看你原来的格式哪里出了问题。
首先,你提到控制台里的Psalm输出是这样的(去掉了:lopen里的双竖线):
ERROR: UndefinedClass - application/libraries/PluginManager/PluginBase.php:58:13 - Class or interface LimeSurvey\PluginManager\XML does not exist
而:lopen里的输出多了||前缀,这应该是Neomake在展示错误列表时自动加上的,不是Psalm本身的输出,但咱们的errorformat可以兼容两种情况。
你原来的格式||\ ERROR:\ %m\ -\ %f:%l:%c问题出在顺序和匹配范围:
%m被你放在了错误类型的位置,它会把UndefinedClass当成错误消息,后面的文件路径、行号列号以及真正的错误消息就无法被正确捕获了;- 你没有匹配到最后那部分真正的错误消息内容。
正确的Errorformat配置
针对你的场景,推荐用下面的配置(兼容带||和不带||的输出):
let g:neomake_psalm_errorformat = [ \ '|| ERROR: %s - %f:%l:%c - %m', \ 'ERROR: %s - %f:%l:%c - %m', \ ]
咱们来拆解一下每个部分的作用:
|| ERROR:/ERROR::匹配输出开头的标识(分别对应:lopen列表和控制台的输出);%s:捕获错误类型(比如UndefinedClass);%f:%l:%c:分别匹配文件路径、行号、列号;%m:捕获最后的错误描述内容(这才是你需要的错误消息)。
测试方法
你可以在Vim里先手动测试这个格式:
- 把Psalm的输出保存到一个临时文件,比如
psalm_errors.txt; - 在Vim里执行
:set errorformat=||\ ERROR:\ %s\ -\ %f:%l:%c\ -\ %m,ERROR:\ %s\ -\ %f:%l:%c\ -\ %m; - 执行
:caddfile psalm_errors.txt,然后打开:copen看看错误列表是否正确解析了文件、行号、列号和错误消息。
如果一切正常,再把上面的g:neomake_psalm_errorformat配置加到你的vimrc或者init.vim里就可以了。
内容的提问来源于stack exchange,提问作者Olle Hårstedt
相关产品推荐
相关产品推荐

