MPS 2019.2ヘルプ

エラーを抑制する

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

最終更新日: 2019年8月30日