Как расширить информацию, предоставляющую Intellisense, используя SDK Visual Studio?

В С# или Vb.Net, используя SDK Visual Studio 2013, как я мог добавить дополнительный элемент в Intellisense, когда отображается информация о члене?

Мое намерение не добавлять элемент завершения/предложения, я хотел бы добавить дополнительную дополнительную информацию под информацией, которая показана для члена, который может генерировать исключение, например метод, функцию или свойство (getter/setter), а не ключевое слово.

Я немного почитал членов пространства Microsoft.VisualStudio.Language.Intellisense, но я не понял ничего идея об этом.

Моя цель, с помощью которой я могу получить здесь, - найти ответ на разработку простого расширения, которое добавит (документирует) информацию об исключении для членов, примерно так:

введите описание изображения здесь

Мне интересно вернуть эту полезную функцию в Visual Studio для С# и добавить ее также для VB.Net, а затем, если она удастся, я поделюсь ею бесплатно со всеми вашими, как в прошлом с этим полезным расширением:

Просто я прокомментирую это, потому что любая помощь может быть вознаграждена для всех нас таким образом!


В дополнение к моему вопросу и только дополнительно, если кто-то может начать наставлять меня о том, как найти способ получить документацию Xml для членов (<exception cref="Exception name">), чтобы сделать это, или, может быть, простой способ, я бы будем очень благодарны.

ИЗМЕНИТЬ

В документации Xml я получаю идею использовать Visual Studio object browser для проверки исключений члена, которые будут перечислены Intellisense вместо того, чтобы возиться с Reflection? получить информацию об исключениях. Это может быть лучшим и жизнеспособным способом сделать это, как только я смогу выяснить, как автоматизировать браузер объектов из SDK, но я просто комментирую это, может быть, это будет новый вопрос, как только этот вопрос можно будет решить, потому что сначала я нужно решить этот шаг, надеюсь.

Ответы

Ответ 1

Существует несколько типов точек расширяемости IntelliSence, которые необходимо использовать для каждого из следующих случаев:

  • Инструментальная подсказка, показанная при наведении текстового элемента, называется QuickInfo инструментом и может быть реализована самостоятельно через наследование из IQuickInfoSource и создавая соответствующий IIntellisenseController. Полный проход можно найти в MSDN:

    • Пример:

      QuickInfo Tool-Tip

    • Обязательно сделайте IQuickInfoSourceProvider загружать IQuickInfoSource до по умолчанию Visual-Studio один с помощью атрибута Order - в противном случае значение по умолчанию QuickInfo не будет показано:

      [Order(Before = "Default Quick Info Presenter")]
      
  • Инструмент, показанный при записи имени метода, который показывает его подпись, называется Signature Help и может быть реализован путем наследования ISignatureHelpSource очень похоже на инструмент QuickInfo. Полное прохождение можно найти в MSDN:

    • Пример:

      Справка по подписи

  • Code Snippets - которые не имеют отношения к вам.

  • Statement Completions - которые вам не подходят.

Обратите внимание, что вам нужно будет сделать IClassifier в вашем проекте для подсказок, которые будут отображаться, с помощью этого вы также можете изменить представление, чтобы Exceptions отображалось по-другому, как вы пожелаете. Руководство по MSDN.

Получение информации о методах, с другой стороны, зависит от вас. вы можете использовать внешний ручной источник и использовать его в своем IQuickInfoSource или прочитать его из соответствующего документа XML Comment, проанализировав прочитанное слово ITextStructureNavigator, используя Roslyn над документом кода, который вы просматриваете.

Извините, если это был небольшой абстрактный ответ, но это очень широкий вопрос, и есть много способов реализовать такое расширение.

P.S.: Мне удалось сделать подобное расширение в низком качестве, чтобы изучить это поле, поэтому, если у вас есть какие-либо следующие вопросы о самой реализации, не стесняйтесь спрашивать.