如何自动修复通过合成报告的常见掉毛错误?


13

我开始在vim中使用syntastic插件来报告代码中的lint错误。javascript

我还将eslintsyntastic集成在一起,它向我展示了一些不错的错误,并警告了万一它们出现在我的.eslintrc文件中的所有规则中。

有什么方法可以解决一些常见的错误,例如,用键盘敲击会丢失分号,空格等?

编辑:

我发现eslint有一个选择

  --fix Automatically fix problems

可以用于此类情况。我需要运行此命令让eslint解决这些问题

eslint --fix -c myconfig file.js

我想知道如何与vim集成?


5
1.您不需要该插件即可进行语法检查。2.自动修复错误是一个非常糟糕的主意。
romainl

1
不是所有的错误我都在谈论错误,例如=周围的空格,if块周围的空格,缩进等。这些是与代码样式相关的错误,而不是实际的错误。
WitVault

1
简短的答案是肯定的,当然可以。您需要定义一个自定义函数来解析快速修复程序中的行,以查找要修复的特定错误,并根据这些错误执行命令。您也可以轻松地使用quickfix将您带到每个错误的位置。然后,您将功能映射到按键。map <C-j> call Function()<CR>但这将是一个非常自定义的量身定制的函数,您需要编写该函数以适合您的需求。罗曼(romainl)的观点是,如果您做错了什么,很容易造成弊大于利。建议注意
Tumbler41年

1
使用漂亮的打印机强制执行一致的格式。
lcd047

1
所有的IDE都支持某种自动格式化,在这里我不理解它的讨厌之处。我的公司使用的预提交钩子eslint --fix,我宁愿在编辑器级别使用它。
耶尔斯卡

Answers:


11

如评论中所述,请注意此修改对您的工作环境造成的后果(确切地知道您用来“修复”事物的eslint规则)。

回答您的问题:用语法将选项添加到eslint执行很简单。只需将其添加到您的.vimrc

" execute eslint with --fix flag
let g:syntastic_javascript_eslint_args = ['--fix']

但是由于在vim将缓冲区写入文件后在文件上执行eslint,因此vim不知道eslint所做的修复。因此,vim必须以某种方式再次加载文件(手动方式是简单地:e以正常/命令模式键入)。为此,我们可以将autoread选项与checktime一起使用:

" enable autoread to reload any files from files when checktime is called and
" the file is changed
set autoread

为了调用checktime,我们可以使用autocmd,每次将缓冲区写入文件时都会执行该命令。但是由于语法在同一事件上使用其自己的autocmd,因此BufWritePost我们必须在语法添加自己的autocmd之后再添加。我发现在以下情况添加autocmd时就是这种情况VimEnter

" add an autocmd after vim started to execute checktime for *.js files on write
au VimEnter *.js au BufWritePost *.js checktime

因此,将所有三个部分添加到您的.vimrcvim之后,应表现出预期的效果(lint和保存文件时自动更正:w)。


7

杰普兹(Jepz)答案中给出的解决方案对我而言并不完全有效。eslint--fix选项已正确调用。但是,可能是因为内部结构发生了变化,但似乎checktime在结束之前被调用了eslint --fix,因此文件重新加载无法正常工作,从而file has changed, are you sure you want to write to it?在下次保存时触发。

但是,通过深入研究问题,我发现了一个隐藏的挂钩,该挂钩似乎在Syntastic检查完成后触发,称为SyntasticCheckHooksource)。

这样,您就可以checktime在运行Syntastic检查后简单地调用。

这是我的最终代码:

set autoread

let g:syntastic_javascript_checkers = ['eslint']

" autofix with eslint
let g:syntastic_javascript_eslint_args = ['--fix']
function! SyntasticCheckHook(errors)
  checktime
endfunction

编辑:我个人已经改用ALE棉绒了,它本身支持自动修复。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.