某些类型的 Resharper 插件突出显示失败
Resharper plugin highlighting fails on certain types
我目前正在尝试扩展现有的 Resharper 插件,该插件包含针对自定义语言的一些语法高亮显示,当前语言关键字高亮显示是使用创建自定义 CSharpIncrementalDaemonStageProcessBase
的 CSharpDaemonStageBase
实现的。
突出显示是通过重写 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 Element Name"
- "HTML Attribute Name"
- "HTML Attribute Value"
- "Keyword"
- "Comment"
- "String"
- "Operator"
- "Number"
这些值似乎都产生了有效的突出显示结果,但是我想突出显示一些 class/interface 参考节点,但我无法在突出显示的内容中找到任何结果。我尝试过并想使用的一些变体:
- "User Types"
- "User Types(Interfaces)"
- "User Types - Classes"
- "User Types - Interfaces"
- "class name"(在某处读到这是 VS2015 的新名称,仍然没有骰子)
- "interface name"
据我所知,我应该能够 return 映射到 visual studio 中有效颜色的任何字符串值,但由于某些原因 none 这些工作。我认识的人建议这可能是 VS / MEF 中的问题。
高亮 ID 实际上是 ReSharper 高亮 ID,而不是 Visual Studio 文本分类 ID - 它们不可互换。换句话说,ReSharper 使用的所有属性 ID 首先使用 RegisterHighlighterAttribute
的实例向 ReSharper 注册。在安装过程中,这些荧光笔(带有前景色和背景色等)在 Visual Studio 中注册为文本分类,这就是它们在“字体和颜色”对话框中的显示方式。
与一些亮点有重叠,即 "keyword"、"string"、"number"、"comment"、"text" 等等 - 这些 ReSharper ID直接映射到众所周知的 Visual Studio 分类。但是,在 ReSharper API 中使用时,您使用的是 ReSharper ID。
例如,Project Rider 使用相同的代码,基于 IntelliJ 的 C# IDE,在后端使用 ReSharper。但在这里,ReSharper 突出显示 ID 映射到 IntelliJ 属性,以便在 IntelliJ 编辑器中着色。同样,在 dotPeek 中显示代码时,ReSharper 突出显示 ID 映射到属性中定义的颜色。
您可以将现有的 ReSharper 亮点用于各种标识符类型,例如 "ReSharper Class Identifier" 或 "ReSharper Interface Identifier"。
我目前正在尝试扩展现有的 Resharper 插件,该插件包含针对自定义语言的一些语法高亮显示,当前语言关键字高亮显示是使用创建自定义 CSharpIncrementalDaemonStageProcessBase
的 CSharpDaemonStageBase
实现的。
突出显示是通过重写 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 Element Name"
- "HTML Attribute Name"
- "HTML Attribute Value"
- "Keyword"
- "Comment"
- "String"
- "Operator"
- "Number"
这些值似乎都产生了有效的突出显示结果,但是我想突出显示一些 class/interface 参考节点,但我无法在突出显示的内容中找到任何结果。我尝试过并想使用的一些变体:
- "User Types"
- "User Types(Interfaces)"
- "User Types - Classes"
- "User Types - Interfaces"
- "class name"(在某处读到这是 VS2015 的新名称,仍然没有骰子)
- "interface name"
据我所知,我应该能够 return 映射到 visual studio 中有效颜色的任何字符串值,但由于某些原因 none 这些工作。我认识的人建议这可能是 VS / MEF 中的问题。
高亮 ID 实际上是 ReSharper 高亮 ID,而不是 Visual Studio 文本分类 ID - 它们不可互换。换句话说,ReSharper 使用的所有属性 ID 首先使用 RegisterHighlighterAttribute
的实例向 ReSharper 注册。在安装过程中,这些荧光笔(带有前景色和背景色等)在 Visual Studio 中注册为文本分类,这就是它们在“字体和颜色”对话框中的显示方式。
与一些亮点有重叠,即 "keyword"、"string"、"number"、"comment"、"text" 等等 - 这些 ReSharper ID直接映射到众所周知的 Visual Studio 分类。但是,在 ReSharper API 中使用时,您使用的是 ReSharper ID。
例如,Project Rider 使用相同的代码,基于 IntelliJ 的 C# IDE,在后端使用 ReSharper。但在这里,ReSharper 突出显示 ID 映射到 IntelliJ 属性,以便在 IntelliJ 编辑器中着色。同样,在 dotPeek 中显示代码时,ReSharper 突出显示 ID 映射到属性中定义的颜色。
您可以将现有的 ReSharper 亮点用于各种标识符类型,例如 "ReSharper Class Identifier" 或 "ReSharper Interface Identifier"。