syntasticを介して報告される一般的なリンティングエラーを自動修正する方法は?


13

コードでlintエラーを報告するために、vimでsyntasticプラグインを使用し始めました。javascript

また、eslintsyntasticに統合し、.eslintrcファイルに記述されたルールに従ってエラーが存在する場合の警告を表示します。

キーストロークでセミコロンの欠落、スペースの欠落など、いくつかの一般的なエラーを修正する方法はありますか?

編集:

eslintにはオプションがあることがわかりました

  --fix Automatically fix problems

このような場合に使用できます。eslintにこれらの問題を解決させるには、このコマンドを実行する必要があります

eslint --fix -c myconfig file.js

私はそれがどのようにvimと統合できるのか知りたいですか?


5
1.構文チェックにそのプラグインは必要ありません。2.自動修正エラーは非常に悪い考えです。
ロメインル

1
=の周りのスペース、ブロックの周りのスペース、インデントなどのエラーについて話しているすべてのエラーではありません。これらは、実際のエラーではなく、コードスタイルに関連するエラーです。
WitVault

1
簡単な答えはイエスです、もちろんできます。カスタム関数を定義して、修正したい特定のエラーを探すクイックフィックスの行を解析し、それらのエラーに基づいてコマンドを実行する必要があります。クイックフィックスを使用して、各エラーの場所に簡単に移動することもできます。次に、機能をキーストロークにマップします。map <C-j> call Function()<CR>しかし、これは非常にカスタム化された機能であり、ニーズに合わせて作成する必要があります。そしてロマンルのポイントは、あなたが何か間違ったことをした場合、あなたは簡単に善よりも多くの害を及ぼすことになってしまうということです。注意をお勧めします
Tumbler41

1
きれいなプリンターを使用して、一貫したフォーマットを強制します。
lcd047

1
IDEはすべて何らかの自動フォーマットをサポートしていますが、ここでの嫌悪感は理解できません。私の会社では、にpre-commitフックを使用していますが、eslint --fixこれはむしろエディターレベルで行う必要があります。
ジェルスカ

回答:


11

コメントで述べたように、この変更が作業環境に与える影響を認識してください(物事を「修正」するためにどのeslintルールを使用するかを正確に知ってください)。

質問に答えるには、構文を使用してeslintの実行にオプションを追加するのは簡単です。にこれを追加するだけ.vimrcです:

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

ただし、vimがバッファをファイルに書き込んだ後にeslintがファイルに対して実行されるため、vimはeslintが行う修正については知りません。そのため、どういうわけかvimはファイルを再度ロードする必要があります(手動の方法は:e、通常モードまたはコマンドモードで入力するだけです)。これを行うには、我々が使用することができる自動読取りと一緒にオプションを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に3つの部分すべてを追加した後は、期待どおりに動作するはずです(ファイル保存時のリントおよび自動修正: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リンティングに切り替えました。これはネイティブで自動修正をサポートします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.