我目前正在尝试扩展现有的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插件(这些工作正常):
这些值似乎都产生了有效的突出显示结果,但是我想突出显示一些类/接口引用节点,而我无法在突出显示的内容中找到结果。我试过并希望使用的一些变体:
据我所知,我应该能够返回在visual studio中映射到有效颜色的任何字符串值,但由于某些原因,这些都不起作用。我认识的人建议在VS / MEF中可能存在问题。
答案 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接口标识符”。