Подтвердить что ты не робот

Пользовательское расширение Intellisense

Я хочу написать дополнение к intellisense в Visual Studio.

Можно ли вообще продлить, из моего исследования я не нашел никаких образцов или документации по расширениям intellisense.

Как я могу заставить intellisense показать простое сообщение HelloWorld, подобное следующему (где во время выполнения для intellisense для String добавлен мир привет):

enter image description here

4b9b3361

Ответ 1

Итак, в Visual Studio 2010 и более поздних версиях API расширения, которые вы хотите использовать, находится в пространстве имен Microsoft.VisualStudio.Languages.IntelliSense. На высоком уровне вы хотите экспортировать MEF ICompletionSourceProvider, который предоставит нужные вам элементы. Есть два хороших сообщения в блоге here и здесь, которые демонстрируют базовую технику.

Есть две проблемы, с которыми вы столкнетесь, если хотите сделать свой скриншот реальностью. (Вот почему я попросил сценарий, так как мой совет здесь изменился.) Во-первых, этот метод юридически не позволяет добавить к существующему набору завершений, а скорее предоставить новый. В пользовательском интерфейсе это выглядит как две вкладки, такие как вкладки "Общие/Все" в редакторе Visual Basic. Это ограничение текущего API. Вы можете попробовать изменить один из существующих наборов завершений в AugmentCompletionSource, но я понятия не имею, будет ли это работать. Это определенно не поддерживается, в любом случае.

Во-вторых, очень сложно узнать, когда и где порекомендовать вещи. В вашем примере вы сказали "IntelliSense для string". К сожалению, в VS нет каких-либо API (в настоящее время), которые позволяют вам знать, что происходит до точки. Вы можете сделать несколько простых эвристик или попытаться реализовать какой-то синтаксический анализатор Good Enough ™ для вашего сценария, но теперь вам придется принять, что у вас не будет отличных результатов.

Проект Roslyn направлен на исправление второй проблемы, поэтому вам может быть полезно изучить еще немного. Поскольку мы ожидаем, что многие люди захотят расширить свое завершение, мы также думаем о том, чтобы предлагать другие API расширяемости, поэтому вам не нужно откатывать ICompletionSourceProvider с нуля, но такие API не находятся в текущем CTP.

[Отказ от ответственности: я член команды Roslyn, которая работает в IntelliSense.]

Ответ 2

Bro расширение, которое вы спрашиваете, это "intellicode".