MPS 2020.1 ヘルプ

エラーを抑制する

MPS で高品質のコードを維持するための非常に効果的な方法の 1 つは、エラー、警告、または潜在的な問題をコード内で直接ハイライトする即時のコード分析です。他のコード品質報告ツールと同様に、ユーザーが誤検知をマークして繰り返し報告されないようにできることが不可欠です。MPS はエラーを抑制するために 2 つのメカニズムを提供し、それらがエディターおよびモデルチェッカーツールに表示されるのを防ぎます。

最初の言語開発者が利用できる一般的なものです。言語拡張を設計するとき、または既存の言語を新しい言語に埋め込むときに、既存の言語のチェッカーによってエラーと見なされるが実際には言語の組み合わせに関しては有効な場所がいくつか表示されることがあります。そのような場合、新しい言語のバインディングの概念によって ISuppressErrors インターフェースを実装することによって誤ったエラーを抑制することができます。型エラーはテンプレートでは避けられないことがあるため、この機能も役に立つ他の場所はジェネレータです。デフォルトでは、ある概念が ISuppressErrors インターフェースを実装する場合、このノードとそのすべての子孫に関するすべての言語の課題は隠されます。例:BaseLanguage のコメントは ISupressErrors を実装しています。さらに、ノードに ISuppressErrors を実装する概念の属性がある場合、そのようなノードでの課題も抑制されます。課題を選択的に抑制し、課題を抑制すべき特定の子孫とそのような課題の種類を定義することもできます。カスタマイズは、ISupressErrors インターフェースのブールメソッド suppress(ReportItem) をオーバーライドすることによって実装できます。

2 番目のメカニズムは、最初のメカニズムの特殊なケースとして実装されていますが、言語開発者向けではなく、言語のユーザー向けです。あるチェッカーが誤検知を発行することがわかっている場合、ユーザーは自分のモデル内のこれらの場所にマークを付けたいと思うかもしれません。言語開発者はそのような可能性を言語の一部にすることができますが、MPS には SuppressErrorsAttribute という ISuppressErrors ノード属性の便利なデフォルト実装があります。ICanSuppressErrors のインスタンスであるノードにのみ適用できます。

SuppressErrorsAttribute 属性とそれに対応するインテンションの使用例。

エディターには 3 つのエラーがあり、そのうちの 2 つは文字列リテラルに関するものです。

suppress1

BaseLanguage ステートメントは ICanSuppressErrors を実装しているため、ユーザーはインテンションを適用して、ステートメント内のあらゆる場所でのこのような種類のエラー(文字列リテラル)またはすべての型システムエラーを抑制できます。

suppress2

抑制されたエラーはハイライトされなくなりましたが、左ペインに新しく追加された十字アイコンがあります。

suppress3

ある種類のエラーを抑制した後、他の種類のエラーも抑制できます。

抑制属性は、対応するインテンションを適用するか、×印を押すことで削除できます。

suppress4

最終更新日 : 2020 年 6 月 18 日