Resharper插件突出显示在某些类型上失败

时间:2016-07-19 00:00:34

标签: c# vb.net visual-studio plugins resharper

我目前正在尝试扩展现有的Resharper插件,其中包含一些自定义语言的语法突出显示,当前语言关键字突出显示是使用创建自定义CSharpDaemonStageBase的{​​{1}}实现的。

通过重写CSharpIncrementalDaemonStageProcessBase来实现突出显示:

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)); } (理论上)可以是visual studio中的任何预定义颜色,并且该节点应根据visual studio选项突出显示。不幸的是,其中一些Id似乎不起作用,并且没有任何突出显示。

这些是我可以确认的一些正确注册的MEF / resharper插件(这些工作正常):

  • “HTML元素名称”
  • “HTML属性名称”
  • “HTML属性值”
  • “关键字”
  • “注释”
  • “字符串”
  • “操作员”
  • “编号”

这些值似乎都产生了有效的突出显示结果,但是我想突出显示一些类/接口引用节点,而我无法在突出显示的内容中找到结果。我试过并希望使用的一些变体:

  • “用户类型”
  • “用户类型(接口)”
  • “用户类型 - 类”
  • “用户类型 - 接口”
  • “班级名称”(在某处读到这是VS2015的新名称,仍然没有骰子)
  • “接口名称”

据我所知,我应该能够返回在visual studio中映射到有效颜色的任何字符串值,但由于某些原因,这些都不起作用。我认识的人建议在VS / MEF中可能存在问题。

1 个答案:

答案 0 :(得分:1)

高亮ID实际上是ReSharper荧光笔ID,而不是Visual Studio文本分类ID - 它们不可互换。换句话说,ReSharper使用的所有属性ID首先使用RegisterHighlighterAttribute的实例向ReSharper注册。在安装过程中,这些荧光笔(具有前景色和背景色等)在Visual Studio中注册为文本分类,这就是它们在字体和字体中出现的方式。颜色对话框。

与某些要点重叠,即“关键字”,“字符串”,“数字”,“注释”,“文本”等等 - 这些ReSharper ID直接映射到众所周知的Visual Studio分类。但是,在ReSharper API中使用时,您使用的是ReSharper ID。

例如,相同的代码用于Project Rider,即基于IntelliJ的C#IDE,它在后端使用ReSharper。但是在这里,ReSharper高亮ID被映射到IntelliJ属性以便在IntelliJ编辑器中着色。同样,在dotPeek中显示代码时,ReSharper突出显示ID将映射到属性中定义的颜色。

您可以将现有的ReSharper亮点用于各种标识符类型,例如“ReSharper类标识符”或“ReSharper接口标识符”。