【问题标题】:How to extend the information that provides Intellisense using the Visual Studio SDK?如何使用 Visual Studio SDK 扩展提供 Intellisense 的信息?
【发布时间】:2016-02-01 09:21:06
【问题描述】:

在 C# 或 Vb.Net 中,使用 Visual Studio 2013 SDK,当显示成员的信息时,如何在 Intellisense 上添加附加元素?

我的意图不是添加完成/建议元素,我想在显示的成员信息下方添加自定义附加信息,这些信息可以引发方法、函数或属性(getter/setter)等异常,不是关键字。

我读了一点 Microsoft.VisualStudio.Language.Intellisense 命名空间的成员,但我没有对此有任何明确的想法。

我的目标是找到答案,开发一个简单的扩展程序,为成员添加(记录的)异常信息,如下所示:

我想在 Visual Studio for C# 中带回这个有用的功能,并将它也添加到 VB.Net,然后如果成功,我会像过去一样通过这个有用的扩展免费与大家分享:

我只是评论说,因为任何帮助都可以通过这种方式为我们所有人带来回报!。


除了我的问题之外,而且只有另外,如果有人可以开始指导我如何找出检索成员的 Xml 文档 (<exception cref="Exception name">) 的方法,或者可能是一种简单的方法,我会非常感谢。

编辑

关于 Xml 文档,我想到了使用 Visual Studio 对象浏览器 来检查将由 Intellisense 列出的成员的异常,而不是弄乱反射?获取异常信息。一旦我能弄清楚如何从 SDK 自动化对象浏览器,这可能是一种更好、更可行的方法,但我只是对此发表评论,也许一旦这个问题得到解决,这将是一个新问题,因为首先我需要解决这一步,希望如此。

【问题讨论】:

  • 这个问题和你的previous question有什么不同?
  • @Bjørn-Roger Kringsjå 感谢您的评论。在那个问题中,我询问是否存在从 IDE(例如隐藏的选项或命令)或现有的 3rd 方扩展启用该功能的引导方式。这个问题是不同的,这是特定的编程语言,开始尝试从头开始开发扩展以添加该功能。
  • 就个人而言,我不希望 Intellisense 中有完整、冗长的文档。当您键入方法名称时,参数和返回值是合适的。在对象浏览器中查找内容以查看评论和/或异常是非常不同的步骤(对我而言)。
  • 正如您之前的问题所述,即使在 VS2105 C# 中也不再具有此功能,因此我猜如前所述,您不太可能实现此功能。
  • @Karen Payne 和 Plutonix 感谢您的评论。请注意,许多 Visual Studio 专业扩展(非开源),例如 Telerik(Just Code)与 IntelliSense 交互以添加额外信息,然后,通过这个参数,我可以确认它可以扩展 Intellisense,不止于此,我在问题中链接了一个 IntelliSense 类来玩东西!但我不知道怎么做。

标签: c# .net vb.net visual-studio visual-studio-sdk


【解决方案1】:

对于以下每种情况,您需要使用几种类型的 IntelliSence 扩展点:

  • 悬停文本元素时显示的提示框叫做QuickInfo提示框,可以通过继承自己实现从IQuickInfoSource 接口并创建一个匹配的IIntellisenseController。完整的演练可以找到on MSDN

    • 例子:

    • 确保使用Order attribute 使您的IQuickInfoSourceProvider 加载您的IQuickInfoSource 之前默认Visual-Studio - 否则默认QuickInfo不会显示:

      [Order(Before = "Default Quick Info Presenter")]
      
  • 编写方法名称时显示的工具提示显示其签名称为Signature Help,可以通过继承ISignatureHelpSource以非常相似的方式实现QuickInfo 工具提示。完整的演练可以找到on MSDN

    • 例子:

  • Code Snippets - 这与你无关。

  • Statement Completions - 这与你无关。

请注意,您需要在项目中创建一个IClassifier 以显示工具提示,您还可以修改视图,以便根据您的需要以不同的方式查看ExceptionsGuide on MSDN.

另一方面,获取有关方法的信息取决于您。您可以使用外部手动资源并在您的IQuickInfoSource 中使用它,或者通过使用Roslyn 在您正在导航的代码文档上分析ITextStructureNavigator 的读取词,从匹配的XML Comment 文档中读取它。

很抱歉,如果这是一个有点抽象的答案,但这是一个非常广泛的问题,并且有很多方法可以实现这样的扩展。

PS:为了研究这个领域,我已经设法以低质量进行了类似的扩展,所以如果您对实现本身有任何以下问题,请随时提出。

【讨论】:

    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2012-06-29
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多