2017-05-20 5 views
3

を私はResultResultExtErrorと​​をエクスポートerror_chain! {}errors.rsファイルを、持っていると考えて、error_chainからの検索結果を検出していません。錆IDEは、私はSTDを使用しています::結果::結果

私がuse self::errors::*の場合、IntelliJはデフォルトのResultstd::result::Result、私は思う)を使用していると考えています。しかし、もし私がuse self::errors::{Result, ...}を使って明示的にタイプをインポートすると、全てがうんざりしてしまいます。

標準結果には2つのタイプのパラメータがありますが、error_chainには1つしかないことがわかります。

どちらの場合でも、まだコンパイルされます。

標準のRust IntelliJプラグインバージョン0.1.0.1991を使用しています。

ヘルプ!マクロが何をしているのかを理解するプラグインを得る方法を誰かが知っていますか?

+0

これは、IDEが独自の意味分析を展開するときに起こると思います。/ –

+0

おそらく、JetBrainsにバグを報告するべきです。 –

+0

これは[既知の問題](https://github.com/intellij-rust/intellij-rust/issues/1243)です:) –

答えて

4

IntelliJ-Rustプラグインは、独自のコードパーサーを使用します。コードナビゲーション、フォーマット、リファクタリング、検査、クイックドキュメント、マーカーなどのIntelliJプラットフォームのすべての機能を活用できますが、すべての言語機能を実装する必要があります(これはRustの簡単なタスクではありません) Rustコンパイラパーサ対IDEパーサの詳細な説明はthis reddit postです)。

おそらくマクロ展開は、プラグインパーサーが現在サポートしていない最大の言語機能です。つまり、プラグインはこのerror_chain!呼び出しを見て、その定義に解決できますが、実際のコードに展開しないので、stdlibのものをシャドウする新しいResult構造体についてはわかりません。残念なことに、場合によっては、このような誤った正のエラーメッセージが発生します。

私はこのエラー注釈を検査に変換しました。次のプラグインバージョンでは、それを完全にオフにすることも、特定のコードブロックにすることもできます。マクロ展開に関する作業も進行中です。

関連する問題