2012-05-05 4 views
25

Chcę napisać dodatek do intellisense w Visual Studio.Niestandardowe rozszerzenie Intellisense

Czy można w ogóle rozszerzyć, z moich badań nie znalazłem żadnych próbek ani dokumentacji na temat rozszerzeń intellisense.

Jak mogę uzyskać intellisense pokazać prostą wiadomość HelloWorld jak poniżej (gdzie hello world dodaje w czasie wykonywania do intellisense dla String):

enter image description here

+7

@oded ive właśnie spędziliśmy kilka godzin przeglądając google, msdn ect i przystań w stanie znaleźć coś w ogóle na rozszerzenie intellisense, czy masz jakieś zalecenia, gdzie go szukać? –

+0

Przepraszam Luke, nie sądzę, że [forum Visual Studio Extensibility] (http://social.msdn.microsoft.com/Forums/en-US/vsx/threads) byłoby dobrym początkiem. Ale możesz "przeformułować" pytanie, aby nie pytać o linki i faktycznie być pytaniem na temat programowania. – Oded

+1

Również przykład tego, co chciałbyś dodać do Intellisense, bardzo by pomógł. Jest wiele różnych technik, które mogą być potrzebne ... –

Odpowiedz

29

Więc w Visual Studio 2010 i później , interfejsy API rozszerzeń, których chcesz używać, znajdują się w przestrzeni nazw Microsoft.VisualStudio.Languages.IntelliSense. Na wysokim poziomie chcesz eksportować MEF ICompletionSourceProvider, który zapewni potrzebne elementy. Istnieją dwa dobre posty na blogu: here i here, które demonstrują podstawową technikę.

Są dwa problemy, które napotkasz, jeśli chcesz, aby zrzut ekranu stał się rzeczywistością. (Dlatego właśnie poprosiłem o scenariusz, ponieważ moja rada ulegnie zmianie.) Po pierwsze, ta metoda nie pozwala prawnie dołączyć do istniejącego zestawu kompletacji, a raczej zapewnić nowy. W interfejsie użytkownika są to dwie karty, takie jak karty Wspólne/Wszystkie w edytorze Visual Basic. To jest ograniczenie bieżącego interfejsu API. Możesz spróbować zmodyfikować jeden z istniejących zestawów ukończeń w swoim AugmentCompletionSource, ale nie mam pojęcia, czy to zadziała. W każdym razie jest to z pewnością nieobsługiwane.

Po drugie, naprawdę ciężko jest wiedzieć, kiedy i gdzie polecać rzeczy. W twoim przykładzie powiedziałeś "IntelliSense dla string". Niestety, nie ma żadnych interfejsów API (obecnie) w VS, które informują o tym, co jest przed kropką. Możesz wykonać prostą heurystykę lub spróbować zaimplementować parser Good Enough ™ do swojego scenariusza, ale na razie musisz zaakceptować, że nie osiągniesz doskonałych rezultatów.

Celem projektu Roslyn jest poprawienie drugiego numeru, więc może się okazać, że warto będzie zbadać nieco dalej. Ponieważ spodziewamy się, że wiele osób będzie chciało przedłużyć jego ukończenie, rozważamy również oferowanie innych interfejsów API rozszerzalności, aby nie trzeba było od razu rzucać ICompletionSourceProvider, ale takie interfejsy API nie znajdują się w bieżącym CTP.

[Zastrzeżenie:. Jestem członkiem zespołu, który pracuje na Roslyn IntelliSense]

+0

Dzięki im jestem pewna, że ​​to jest to co po, Jest to prawdziwy wstyd, że nie mieć dostęp do rzeczy przed., że API musi tam być gdzieś do regularnego intellisense VS do pracy, więc jego smutek nie jest publiczny.Używam rzeczy Roslyn wcześniej, więc zajmiemy się czymś z tym, aby dowiedzieć się, co to jest podmiot –

+0

@Jason, Próbowałem dodać kolejną intellisense dla javascript '[Zamówienie (przed =" High ")] \t [eksportowego (typeof (ICompletionSourceProvider)), ContentType ("Javascript") Nazwa ("EnhancedJavaScriptCompletion")] \t wewnętrzne szczelnie klasy JavaScriptCompletionSourceProvider: ICompletionSourceProvider \t { } ' ale Nevers wchodzi do debugera chociaż przerwań wygląda na załadowany kod. Czy możesz mi pomóc? – Adaptabi

+1

@DotNetWise: powinieneś utworzyć nowe pytanie, aby inni mogli odpowiedzieć na pytanie. ;-) –