2012-05-05 52 views
25

Estoy queriendo escribir una adición a intellisense en Visual Studio.Extensión Intellisense personalizada

Es posible extenderlo en absoluto, de mi investigación no he encontrado ninguna muestra o documentación en extensiones intellisense.

¿Cómo puedo obtener IntelliSense para mostrar un mensaje HelloWorld sencilla como la siguiente (en el que se añade hola mundo en tiempo de ejecución a la IntelliSense para String):

enter image description here

+7

@oded ive acabamos de pasar un par de horas mirando a través de Google, ect MSDN y has sido capaz de encontrar nada en absoluto en la ampliación intellisense, ¿tiene alguna recomendación sobre dónde buscarlo? –

+0

Lo siento Luke, no creo que el [Visual Studio Extensibility forum] (http://social.msdn.microsoft.com/Forums/en-US/vsx/threads) sería un buen lugar para comenzar. Pero podría volver a formular la pregunta para no solicitar enlaces y, de hecho, ser una pregunta de programación sobre el tema. – Oded

+1

Además, un ejemplo de lo que le gustaría agregar a Intellisense sería de gran ayuda. Hay varias técnicas diferentes que pueden ser necesarias ... –

Respuesta

29

Así en Visual Studio 2010 y, posteriormente , las API de extensibilidad a las que desea acceder se encuentran en el espacio de nombres Microsoft.VisualStudio.Languages.IntelliSense. En un nivel alto, desea MEF exportar un ICompletionSourceProvider que proporcionará los elementos que necesita. Hay dos buenas publicaciones de blog here y here que demuestran la técnica básica.

Hay dos problemas con los que se encontrará si quisiera que su captura de pantalla sea una realidad. (Esta es la razón por la que solicité el escenario, ya que mi consejo aquí cambiaría). Primero, este método no permite legalmente agregarlo a un conjunto de finalización existente, sino proporcionar uno nuevo. En la interfaz de usuario esto aparece como dos pestañas, como las pestañas Común/Todas en el editor de Visual Basic. Esta es una limitación de la API actual. Puede tratar de modificar uno de los conjuntos de finalización existentes en su AugmentCompletionSource, pero no tengo idea de si eso funcionaría. Definitivamente no es compatible, en cualquier caso.

En segundo lugar, es realmente difícil saber cuándo y dónde recomendar las cosas. En su ejemplo, dijo "IntelliSense para string". Lamentablemente, no hay ninguna API (actualmente) en VS que le permita saber qué es lo que hay antes del punto. Podría hacer heurística simple o intentar implementar algún analizador que sea Good Enough ™ para su escenario, pero deberá aceptar por ahora que no obtendrá resultados perfectos.

El proyecto Roslyn tiene como objetivo solucionar el segundo problema, por lo que puede resultarle útil explorar un poco más. Como esperamos que muchas personas deseen extender la finalización, también estamos pensando en ofrecer otras API de extensibilidad para que no tenga que rodar ICompletionSourceProvider desde cero, pero tales API no están en el CTP actual.

[Negación:. Soy un miembro del equipo que trabaja en Roslyn IntelliSense]

+0

Gracias estoy bastante seguro de que esto es lo que estoy buscando. Es una pena que no lo hagas. tener acceso a cosas antes del., que API tiene que estar allí en algún lugar para que el intellisense VS normal funcione, por lo que es triste que no sea público.He usado roslyn cosas antes, así que voy a echar un vistazo a algo con eso para averiguar cuál es el tema –

+0

@ Jason, he intentado agregar otro intellisense para javascript '[Ordenar (Antes =" Alto ")] \t [exportación (typeof (ICompletionSourceProvider)), ContentType ("JavaScript"), Nombre ("EnhancedJavaScriptCompletion")] \t interna JavaScriptCompletionSourceProvider clase sellada: ICompletionSourceProvider \t { } ' pero nevers pasos en el depurador, aunque los puntos de interrupción parece que el código está cargado. ¿Puedes ayudarme? – Adaptabi

+1

@DotNetWise: debe crear una nueva pregunta para que otros puedan responder la pregunta. ;-) –

Cuestiones relacionadas