2016-07-19 1 views
0

現在、カスタム言語の構文強調表示を含む既存のResharperプラグインを拡張しようとしていますが、CSharpIncrementalDaemonStageProcessBaseというカスタムを作成するCSharpDaemonStageBaseで現在の言語キーワードの強調表示が実装されています。Resharperプラグインのハイライト表示が特定の種類で失敗する

public override void VisitNode(ITreeNode node, IHighlightingConsumer context) { 
    base.VisitNode(node, context); 

    DocumentRange highlightingRange = node.GetHighlightingRange(); 
    string highlightId = ... 
    if (highlightId != null) 
     context.AddHighlighting(new ICustomAttributeIdHighlighting_Impl(highlightId, highlightingRange)); 
    } 

highlightIdは(理論的に)Visual Studioで任意の事前定義された色であることができ、ノードは、Visual Studioのオプションに応じて強調表示された取得する必要があり:

強調表示はそうのようなVisitNodeをオーバーライドすることによって達成されます。残念ながら、これらのIdのいくつかはうまく機能していないようで、何も強調表示されません。

  • 「HTML要素名」
  • 「HTML属性名」
  • これら

    は、(適切にこれらの作品)私が正しくMEF/ReSharperのプラグインに登録されている確認できるもののほんの一部です
  • "HTML属性値" "キーワード"
  • は、 "コメント"
  • "文字列"
  • 「演算子」
  • 「数」

これらの値は、すべてのように見えるの有効なハイライトの結果を生成し、しかし、私はいくつかのクラス/インタフェース参照ノードを強調表示したい、と私は何も私は物事に結果を見つけることができません強調表示されます。私が試したし、使用したいバリエーションのいくつか:

  • 「ユーザータイプ」
  • 「ユーザータイプ(インターフェース)」
  • 「ユーザータイプ - クラス」
  • 「ユーザータイプ - インタフェース」
  • 『クラス名』(これはVS2015、まだサイコロのための新しい名前だったことをどこかで読ん)
  • 『インタフェース名』

私の知る限りでは、ビジュアルスタジオの有効な色にマッピングされた文字列値を返すことができるはずですが、なんらかの理由でこれらの作業はありません。私が知っている誰かが、それがVS/MEFの問題かもしれないと示唆しました。

答えて

1

ハイライトIDは実際にはReSharperハイライトIDであり、Visual Studioのテキスト分類IDではありません。これらは互換性がありません。つまり、ReSharperで使用されるすべての属性IDは、最初にRegisterHighlighterAttributeのインスタンスを使用してReSharperに登録されます。インストール中に、これらのハイライター(フォアグラウンドと背景色など)は、テキストの分類としてVisual Studioに登録されます。これはフォント&色ダイアログにどのように表示されるかです。

"キーワード"、 "文字列"、 "数字"、 "コメント"、 "テキスト"などのハイライトと重複しています。これらのReSharper IDは、よく知られているVisual Studio分類に直接マッピングされます。ただし、ReSharper APIで使用する場合は、ReSharper IDを使用しています。

たとえば、バックエンドでReSharperを使用するIntelliJに基づくC#IDEのProject Riderには、同じコードが使用されています。しかしここでは、ReSharperのハイライトIDは、IntelliJエディターでの色付けのためにIntelliJ属性にマップされています。同様に、dotPeekにコードを表示すると、ReSharperのハイライトIDは属性で定義された色にマッピングされます。

「ReSharper Class Identifier」や「ReSharper Interface Identifier」など、さまざまな識別子タイプに既存のReSharperハイライトを使用できます。

+0

ご清聴ありがとうございます。恥知らず私はユーザーの選択した色に自動的に一致することはできません。 – caesay

+0

ReSharperハイライト - 「ReSharper Class Identifier」などを使用することができます。 – citizenmatt

+0

これらは一致しません - 私のインストールではデフォルトで「ReSharper Class Identifier」がC++ハイライトスキームと一致しますが、C#ではまったく一致しません。 – caesay

関連する問題