私はツールlints pythonの変更を行い、エラーと警告を生成しています。私はこれをEmacsのコンパイルモードで使えるようにしたいと思いますが、問題があります。ファイル名は最初に一度だけ出力され、行番号だけがエラーと警告とともに表示されます。ここに例があります:複数行のEmacsコンパイルモードの正規表現
Linting file.py
E0602: 37: Undefined variable 'foo'
C6003: 42: Unnecessary parens after 'print' keyword
2 new errors, 2 total errors in file.py.
これはpylintとよく似ていますが、output-format = parseableオプションはありません。私は、コンパイル・エラー - 正規表現 - 連想リストのドキュメントをチェックし、有望な何かを見つけた:
If FILE, LINE or COLUMN are nil or that index didn't match, that
information is not present on the matched line. In that case the
file name is assumed to be the same as the previous one in the
buffer, line number defaults to 1 and column defaults to
beginning of line's indentation.
だから私は、必要に応じてファイルの行と一致し、グループでそれを引き出すだろう正規表現、その後、残りの部分を書いてみました他の行と一致します。私はそれが最初に一致すると仮定した。
Linting file.py
E0602: 37: Undefined variable 'foo'
その後、それは継続して一致するだろう
C6003: 42: Unnecessary parens after 'print' keyword
ファイルなし。ファイルがないので、以前の試合のファイル名を使用する必要がありますか?私が使っている正規表現は次のとおりです。
(add-to-list 'compilation-error-regexp-alist 'special-lint)
(add-to-list 'compilation-error-regexp-alist-alist
'(special-lint
"\\(Linting \\(.*\\)\\n\\)?\\([[:upper:]][[:digit:]]+:\\s-+\\([[:digit:]]\\)+\\).*"
2 4 nil nil 3))
私は再ビルダーと手動でスクラッチバッファにチェックインしました。期待どおりに動作します。 2番目のグループはファイル名、4番目は行番号、3番目は強調表示したいものです。私はこれを試してみてくださいたびに、私はエラーを取得する:
signal(error ("No match 2 in highlight (2 compilation-error-face)"))
私は、コンパイルモジュールがそれを見て、私はそれを取り除くことを好むと「持っていると思います前に出力を変換する必要このための回避策を持っています純粋な "ソリューションです。私は何かアドバイスをお寄せいただき、私が行ったかもしれない間違いを指摘します。
EDITは
以下トーマスの擬似コードは非常によく働きました。彼は、後方検索をするとマッチデータが乱れる可能性があると言いました。しかしそれはsave-excursion
の前にsave-match-data
特別書式を追加することで解決しました。
私は今これで遊んでいて、それは有望に見えます。ありがとう。私はいくつかの問題を抱えています、そして、グループを台無しにする検索かもしれません。私はある方法か他の方法を見つけたときにあなたに知らせるでしょう。 –