5

makeprg と errorformat を VIM と jslint で動作させようとしていますが、私の人生に適したエラー形式を取得できないようです...次のような結果を生成する jslint の nodejs バージョンを使用しています。

1 116,9: The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.
    for (var k in o)

私は基本的に、行番号、列、およびエラーを一致させ、ファイル名に現在のファイルを使用したいと考えています。誰でもこれを行う方法を知っていますか?

明確にするために、このコマンドを機能させるためのエラーフォーマットを探しています。現在、私の .vimrc ファイルには

augroup js
    set makeprg=jslint\ %
    set errorformat=%E%>%l,%c:%m,%Z
augroup END

これは機能していません(jslintは正常に機能しますが、エラーフォーマットが間違っています)...

4

5 に答える 5

8

古いスレッドですが、私のように、これに出くわした人のために:

npm (v0.1.2) を介してインストールされた node-jslint の現在のバージョンの場合、エラー出力は次のようになります。

filename.js
 #1 Missing 'use strict' statement.
    y = x // Line 2, Pos 3
 #2 Expected 'y' at column 5, not column 3.
    y = x // Line 2, Pos 3

次のefmを使用してエラーを解析しています:

autocmd FileType javascript set efm=%-P%f,
                    \%E%>\ #%n\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c,
                    \%-G%f\ is\ OK.,%-Q
于 2012-01-03T01:22:10.680 に答える
6

非常に古いスレッドですが、これは@duleの優れた回答のフォローアップです。これは実際には微調整にすぎませんが、他の人にも役立つ可能性があります(TFMを使用して問題を解決するのに時間がかかったので、共有してみませんか?):

setlocal makeprg=jslint\ %
setlocal errorformat=%-P%f,
                    \%A%>%\\s%\\?#%*\\d\ %m,%Z%.%#Line\ %l\\,\ Pos\ %c,
                    \%-G%f\ is\ OK.,%-Q

3行目には2つの違いがあります。最初に、単一のスペースの最初のハードコードされた一致を、0または1つのスペースに一致するパターンに置き換えます(つまり、スペースをオプションにします)。次の出力があるため、これを行う必要がありましたjslint

... First 8 errors trimmed
 #9 Expected '$' at column 9, not column 7.
    $('img#placeholder').attr('src', pic); // Line 15, Pos 7
#10 Expected '$' at column 9, not column 7.
    $('img#placeholder').attr('alt', desc) // Line 16, Pos 7

よく見るとわかります。エラー1〜9の場合、行の先頭にスペースがあります。10 ... nの場合、スペースはありません。小さなことですが、エラー10以上ではクイックフィックスウィンドウが正しく機能しないことを意味します。うーん。(ところで、私は「特定のJSファイルで9つ以上のエラーを起こさないでください」という答えを検討しましたが、それは少し「犬の尻尾を振る」ように見えました。また、今では数時間前よりも多くのことを知っています。scanf。)

2つ目の違いは、その番号を無視するパターンで%Eマッチャー%Aを置き換えたことです。%nこれは本質的に美的理由によるものです。@duleの方法で実行すると、クイックフィックスウィンドウに次の出力が表示されます。

showPic.js|5 col 7 error   1| Expected 'event' at column 9, not column 7.
showPic.js|9 col 7 error   2| Expected 'var' at column 9, not column 7.

私はそこでエラーの数を数えたくありません、そして私はそれらがすべてエラーであるというリマインダーを必要としません-私はそれを知っています。したがって%A、を使用すると、次のような単純な出力が得られます。

showPic.js|5 col 7| Expected 'event' at column 9, not column 7.
showPic.js|9 col 7| Expected 'var' at column 9, not column 7.
于 2012-04-15T15:18:28.880 に答える
2

私は実際に、makeprg今日の前半に JSLint を貼り付けたばかりで、当然のことながら、クイックフィックスのサポートが必要でした。

JSLint のエラーを GCC のような形式で出力するnode-jslintのブランチを作成しました。はefm: %f:%l:%c:%m. node.js を使用できる場合は、node-jslint を使用することをお勧めします (特に node.js/CommonJS プロジェクトで作業している場合)。

元の問題については、必要ないと思います%>。それを削除しても解決しない場合は、次のことを試してください。

set efm=%l,%c: %m
于 2010-09-15T17:03:17.383 に答える
1

そのバージョンについては 100% 確信が持てません。ダウンロードしたものを使用し、jslint.js ソースを変更して、適切に出力するようにしました。私の行は次のようになります。

var i=0;i<JSLINT.errors.length;i+=1){var e=JSLINT.errors[i];if(e){print(a[0]+':'+e.line+':'+e.reason);

フォーマットが機能するようになるのに役立つことを願っています。

于 2010-09-14T22:33:17.073 に答える
0

私はこれまでこのオプションを使用したことがありませんが、ヘルプの例は%m、パターンの最後に余分なものが必要であることを示しているようです。または、コンマをエスケープする必要があるだけかもしれません:

set errorformat=%E%>%l\\,%c:%m,%Z%m

更新:実際には、エラー文字列に 2 つの数字があり1、その後にスペースがあり、116. おそらくこれはうまくいくでしょう:

set errorformat=%E%>%n\\ %l\\,%c:%m,%Z%m
于 2010-09-14T22:59:43.937 に答える