MPS 2023.3 ヘルプ

エラーを抑制する

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

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

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

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

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

suppress1.png

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

suppress2.png

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

suppress3.png

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

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

suppress4.png