Resharper插件高亮显示在某些类型上失败

本文关键字:类型 失败 插件 高亮 显示 Resharper | 更新日期: 2023-09-27 17:57:37

我目前正在尝试扩展现有的Resharper插件,该插件包含一些自定义语言的语法高亮显示,而当前语言关键字高亮显示是通过创建自定义CSharpIncrementalDaemonStageProcessBaseCSharpDaemonStageBase实现的。

高亮显示是通过覆盖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/重新arper插件(这些插件工作正常):

  • "HTML元素名称"
  • "HTML属性名称"
  • "HTML属性值"
  • "关键字"
  • "注释"
  • "字符串"
  • "操作员"
  • "数字"

这些值似乎都会产生有效的高亮显示结果,但我想高亮显示一些类/接口引用节点,而且我在高亮显示的内容中找不到任何结果。我尝试过并想使用的一些变体:

  • "用户类型"
  • "用户类型(界面)"
  • "用户类型-类"
  • "用户类型-界面"
  • "类名"(读到这是VS2015的新名称,仍然没有骰子)
  • "接口名称"

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

Resharper插件高亮显示在某些类型上失败

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

与一些亮点(即"关键字"、"字符串"、"数字"、"注释"、"文本"等)有重叠,这些ReSharper ID直接映射到众所周知的Visual Studio分类。但是,当在ReSharper API中使用时,您使用的是ReSharper ID。

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

您可以将现有的ReSharper高亮显示用于各种标识符类型,例如"ReSharper类标识符"或"ReSharpper接口标识符"。