Вопрос по visual-studio – Пользовательское расширение Intellisense

27

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

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

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

enter image description here

Также очень помог бы пример того, что вы хотели бы добавить в Intellisense. Существует ряд различных методов, которые могут потребоваться ... Jason Malinowski
@JasonMalinowski Я добавил немного более подробно о том, что я делаю, это информация, которую вы ищете? У меня возникли некоторые проблемы с формулировкой этого вопроса, так как я понятия не имею, с чего начать с кода программы, поэтому любые советы по формулировке этого лучше бы получили высокую оценку Luke McGregor
@oded ive только что провел несколько часов, просматривая Google, MSDN и т. д., и вообще не смог ничего найти по расширению intellisense. У вас есть какие-либо рекомендации о том, где его искать? Luke McGregor
Извините, Люк, я неVisual Studio Extensibility forum было бы хорошим отправным пунктом. Но тыcould Перефразируйте вопрос, чтобы не просить ссылки и на самом деле быть вопросом программирования по теме. Oded

Ваш Ответ

1   ответ
30

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

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

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

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

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

@DotNetWise: вы должны создать новый вопрос, чтобы другие могли ответить на этот вопрос. ;-)
@JasonMalinowski Я разместил вопрос здесьstackoverflow.com/questions/15657525/…
Ссылка на Roslyn ведет на один из блогов, на которые вы ссылаетесь выше. Я предполагаю, что вы хотите дать ссылку наmsdn.microsoft.com/en-us/vstudio/roslyn.aspx?
Спасибо, я уверен, что это то, что им нужно, это настоящий позор, что у вас нет доступа к материалам до того, что API должен быть где-то там, чтобы обычная VS intellisense работала, так что это печально, что это не публично. Я раньше использовал материал Roslyn, так что я попробую кое-что с этим разобраться, что это за предмет Luke McGregor
@ Джейсон, я пытался добавить еще один intellisense для JavaScript[Order(Before = "High")] [Export(typeof(ICompletionSourceProvider)), ContentType("JavaScript"), Name("EnhancedJavaScriptCompletion")] internal sealed class JavaScriptCompletionSourceProvider : ICompletionSourceProvider { }   но он не шагает в отладчик, хотя точки останова выглядят так, как будто код загружен. Не могли бы вы мне помочь?

Похожие вопросы