Как расширить элементы IntelliSense?
Я хотел бы вручную расширить список IntelliSense различными элементами. Я хочу нести ответственность за действие, вызванное элементом (например, завершение кода и информация всплывающей подсказки). Неважно, какие предметы.
Возможно ли это с помощью надстройки VisualStudio, ReSharper/DXCore или любого другого плагина?
Фон:
Некоторые из вас могут знать FOP (функционально-ориентированное программирование). FOP потребует различных изменений для поведения intellisense и редактора.
Edit:
Еще один интересный пост.
Ответы
Ответ 1
Это, безусловно, можно сделать с помощью создания плагина ReSharper.
-
Начните с реализации ICodeCompletionItemsProvider
, который предоставит дополнительные элементы IntelliSense. Самый простой способ - наследовать от ItemsProviderOfSpecificContext<TContext>
(TContext
CSharpCodeCompletionContext
, если вы заинтересованы в завершении кода С#).
-
Ваш поставщик добавит дополнительные элементы в реализацию AddLookupItems()
. У вас есть возможность предоставить пользовательскую реализацию ILookupItem
здесь: метод Accept()
этого интерфейса вызывается, когда пользователь выбирает элемент во всплывающем окне завершения. Вот ваш шанс выполнить код, который вам нужен.
Обратите внимание, что эта информация относится к R # 6.1/7.0. Я не думаю, что в предыдущих версиях это сильно отличается. Очевидно, что для этого вам нужно включить ReSharper IntelliSense вместо Visual Studio IntelliSense.
Ответ 2
Пользовательский XML-редактор intelliSense для VS2010 может быть добавлен путем размещения настроенных xsd файлов в папке C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas
, но я думаю, вы ищете что-то еще.
Вы должны взглянуть на Создание и использование фрагментов кода IntelliSense и решить, является ли это то, что вы ищете. Этот question на programers.stockexchange также может быть полезен. Этот question также кажется схожим, что предполагает CSharpIntellisensePresenter (бесплатно).
Ответ 3
Возможно, вам могут помочь ReSharper Live Templates (ReSharper- > Live Templates...).