【问题标题】:Removing editor tags with Visual Studio SDK使用 Visual Studio SDK 删除编辑器标签
【发布时间】:2011-06-17 10:51:42
【问题描述】:

是否可以删除已应用的编辑器标签?我只有found a way to add new tags,但这不允许我覆盖或删除现有标签。

作为旁注,我的场景如下:我正在尝试向 C# 语言添加一个新关键字。我的第一步是防止关键字被 ReSharper 指示为错误。我相信 ReSharper 在无效关键字上添加了 ErrorTag,这是我要删除/覆盖的关键字。

【问题讨论】:

  • 向语言添加新关键字?这怎么可能?
  • @A.R.:也许不是。 :) 思路是在编译前拦截构建事件并翻译源码,调整后编译调整后的源码。
  • 嗯...有趣。危险,但非常有趣。你有没有研究过 PostSharp 之类的东西? (sharpcrafters.com) 也是如此,但可能并不完全符合您的要求。无论如何,我喜欢一个好的技术挑战,所以让我知道它是怎么回事。
  • @A.R.:是的,我使用 PostSharp。据我所知,PostSharp 并没有调整实际的源代码,而是调整 MSIL 代码,所以它在后期工作。这种方法的想法是更早地调整它,就像一个非常高级的宏。
  • 是的,我不认为它会成功。大鼠。 “领域特定语言”怎么样?这可能比简单使用关键字更进一步,但更接近您的目标。

标签: c# visual-studio-2010 tags visual-studio-sdk


【解决方案1】:

似乎因为编辑器标签是通过类上的属性设置的,所以您将无法从您拥有的扩展中删除标签,在本例中为 ReSharper。我认为,如果您想实现所描述的目标,您只需要处理错误指示。

来自 MSDN:

[Export(typeof(ITaggerProvider))]
[ContentType("text")]
[TagType(typeof(TestTag))]
internal class TestTaggerProvider : ITaggerProvider

您可以在 IDE 中实际执行标记的“TestTaggerProvider”类上看到“TagType”属性。

【讨论】:

  • 类的属性?标签应用于文本跨度。
  • 是的,但是你需要类的属性,在扩展中提供要应用于文本的标签。
  • 我不能阻止 ReSharper 添加这些标签,除非我当然禁用 ReSharper。我相信(还没有尝试过)我至少可以找到 ReSharper 使用 ITagAggregator 添加的标签。如果我有办法删除它们... :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2020-12-08
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多