2016-07-19 38 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

相关问题