2

現在のバッファでシェル コマンドを呼び出すだけでなく、より洗練された方法で Cppcheck を Emacs と統合することは可能ですか? Emacs が Cppcheck のメッセージを解析し、Cppcheck のメッセージのターゲットを訪問するためにcompile使用するなど、コンパイラからのメッセージとして処理できるようにしたいと考えています (動作方法と同様) 。C-x `

Cppcheck の出力例を次に示します。

$ cppcheck --enable=all test.cpp 
Checking test.cpp...
[test.cpp:4]: (error) Possible null pointer dereference: p - otherwise it is redundant to check if p is null at line 5
[test.cpp:38]: (style) The scope of the variable 'i' can be reduced
[test.cpp:38]: (style) Variable 'i' is assigned a value that is never used
[test.cpp:23]: (error) Possible null pointer dereference: p
[test.cpp:33]: (error) Possible null pointer dereference: p
Checking usage of global functions..
[test.cpp:36]: (style) The function 'f' is never used
[test.cpp:1]: (style) The function 'f1' is never used
[test.cpp:9]: (style) The function 'f2' is never used
[test.cpp:26]: (style) The function 'f3' is never used
4

5 に答える 5

3

うーん...これは実際には本当に簡単だと思います。Mx compile のように 'compile' を使用し、コンパイル コマンドとして次のように入力します。

cppcheck --template='{file}:{line}:{severity}:{message}' --quiet <filename>

filename は、cppcheck を実行するファイルの名前です。これにより、cppcheck の出力がコンパイルバッファーが解析できる形式に変換され、たとえば g++ コンパイルで得られるすべての機能が得られます。--quiet はおそらく必要ありませんが、気にするのはエラーだけなので、それを使用しています。

于 2012-10-23T20:55:55.997 に答える
2

Emacsに同梱されているflymakeを使用できます。

基本的な考え方は、cppcheckを実行し、出力をflymakeが使用できる形式にマッサージするflymakeコマンドを作成することです。c++その後、モードバッファでflymakeを有効にすると、その場でエラーが強調表示されます。

これは、を使用してPythonバッファを操作するflymakeの例ですpyflakes

flymakeは一般に、この形式の出力を期待します filename:line_number: class: message

ここfilenameで、はファイルの名前number、は行番号、classはメッセージのタイプに似たerror、またはwarningメッセージのタイプを示すmessage文字列、は実際のエラーを示す文字列です。cppcheck出力はこれに近いように見えます。おそらく、の出力をこの形式に変換する小さなラッパーを作成してcppcheckから、フックを追加してc++モードのflymakeをオンにする必要があります。

Cを使用すると、ターゲットの下でwithのようなものを追加して実行すると、必要なことが実行gcc -Wall -o nul -S ${CHK_SOURCES}されます。c++モードでも同様だと思います。Makefilecheck-syntaxflymake-mode

厄介な詳細については、http://flymake.sourceforge.net/をチェックしてください。

于 2012-06-29T10:00:17.063 に答える
2

より洗練された方法で Cppcheck を Emacs と統合することは可能ですか?

はい、可能です。フライメイクを使用。cppcheck でまだ誰もこれを行っていないことに驚いています。

問題ありません。自分で行うことができます。flymake ツールの新しいフレーバーとして cppcheck を追加します。これを行うには、既存の例に従います。やることはさほど複雑ではないのですが、寒くなってくると何をすればいいのか分からなくなってしまいます。(新しいツールを flymake に統合する方法を説明したガイド ドキュメントを見たことがありません)。既存の実用的な例に従うことでそれが解決されます。

これは PHP CodeSniffer を flymake ツールとして追加する 7k ファイルです。http://www.emacswiki.org/emacs/flyphpcs.el

その7kのほとんどはコメントです...

これを変更して、任意のツールを flymake に追加できるはずです。主な手順は次のとおりです。

  1. ターゲット ファイルの拡張子 (例: .cpp) を、flymake を実行する 1 組の関数 (init とクリーンアップ) に関連付けます。

  2. flymake がバッファをスキャンするたびに、コマンド ラインを生成する関数を定義します。この fn は、バッファをバックアップするファイルの名前を取得し、コマンド ラインを生成します。あなたの場合、適切なすべてのコマンドラインパラメーターを指定して cppcheck を実行します。コマンド ラインを生成する fn は、#1 で参照されている init fn によって呼び出されます。

  3. ツールによって生成されたエラー メッセージに一致する正規表現を定義し、その正規表現を flymake リストに追加します。これにより、flymake は、実行したツールの出力からエラー メッセージを抽出できます。出力を解析することにより、flymake は行番号を取得し、バッファー内の壊れた行を強調表示できます。

于 2012-06-29T21:35:42.817 に答える
1

答えに基づいて、flymake は良さそうです。

cppcheck パーサーを作成できますが、cppcheck --template オプションを使用する方が簡単に思えます。

cppcheck --template="{file}:{line}:{severity}:{message}" foo.cpp

flymake パターンと一致する可能性があります。それはただの考えです。

于 2012-07-05T19:11:41.983 に答える