2016-07-19 55 views
0

我正在嘗試擴展現有Resharper插件,其中包含一些自定義語言的語法突出顯示,並且當前語言關鍵字突出顯示是使用CSharpDaemonStageBase創建的自定義CSharpIncrementalDaemonStageProcessBase實現的。Resharper插件突出顯示在某些類型上失敗

高亮是通過覆蓋VisitNode像這樣實現的:

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的選項得到強調。不幸的是,這些ID中的一些似乎不起作用,導致無論如何都沒有突出顯示。

這是幾個的那些我可以證實與MEF/ReSharper的插件是否正確註冊的(正確這些工作):

  • 「HTML元素名稱」
  • 「HTML屬性名稱」
  • 「HTML屬性值」
  • 「關鍵字」
  • 「評論」
  • 「字符串」
  • 「操作員」
  • 「數」

這些價值似乎都產生有效的突出成績,但我想強調一些類/接口參考節點,和我沒有什麼我能找到的東西結果被突出顯示。有些我已經試過,想利用變化:

  • 「用戶類型」
  • 「用戶類型(接口)」
  • 「用戶類型 - 類」
  • 「用戶類型 - 接口」
  • ‘類名’(讀的地方,這是對VS2015的新名稱,仍然沒有骰子)
  • ‘接口名稱’

據我可以告訴我應該能夠返回映射到Visual Studio中的有效顏色的任何字符串值,但出於某種原因沒有這些工作。我認識的人認爲這可能是VS/MEF中的問題。

回答

1

突出顯示的ID實際上是ReSharper熒光筆ID,而不是Visual Studio文本分類ID - 它們不可互換。換句話說,ReSharper使用的所有屬性ID首先使用ReSharper註冊,使用RegisterHighlighterAttribute的實例。在安裝過程中,這些熒光筆(具有前景色和背景色等)以Visual Studio的形式註冊爲文本分類,這就是它們在「顏色對話框中的字體」中的顯示方式。

這些ReSharper ID直接映射到衆所周知的Visual Studio分類上,它與某些高亮部分重疊,即「keyword」,「string」,「number」,「comment」,「text」等等。但是,在ReSharper API中使用時,您正在使用ReSharper ID。

例如,相同的代碼用於Project Rider,即基於IntelliJ的C#IDE,它在後端使用ReSharper。但是,在這裏,ReSharper突出顯示ID映射到IntelliJ屬性,以在IntelliJ編輯器中着色。同樣,在dotPeek中顯示代碼時,ReSharper突出顯示ID將映射到屬性中定義的顏色。

您可以針對各種標識符類型(例如「ReSharper類標識符」或「ReSharper接口標識符」)使用現有的ReSharper高亮部分。

+0

感謝您的澄清。恥辱我無法自動匹配用戶選擇的顏色。 – caesay

+0

您可以通過使用ReSharper亮點 - 「ReSharper類標識符」等 – citizenmatt

+0

那些不匹配 - 默認情況下,我的安裝中的「ReSharper類標識符」與C++高亮方案匹配,但不匹配C#。 – caesay

相關問題