c# .net vb.net visual-studio visual-studio-sdk

c# - ¿Cómo ampliar la información que proporciona Intellisense con el SDK de Visual Studio?



.net vb.net (1)

Hay algunos tipos de puntos de extensibilidad de IntelliSence que debe usar para cada uno de los siguientes casos:

  • La información sobre herramientas que se muestra cuando se QuickInfo elemento de texto se denomina QuickInfo herramientas, y usted mismo puede implementarlo a través de la herencia de la interfaz IQuickInfoSource y creando un IIntellisenseController correspondiente. Puede encontrar un recorrido completo en MSDN :

    • Ejemplo:

    • Asegúrese de que su IQuickInfoSourceProvider cargue su IQuickInfoSource antes del Visual-Studio predeterminado usando el atributo Order ; de lo contrario, no se QuickInfo la QuickInfo predeterminada:

      [Order(Before = "Default Quick Info Presenter")]

  • La información sobre herramientas que se muestra al escribir el nombre del método que muestra su firma se llama Signature Help y se puede implementar al heredar ISignatureHelpSource de una manera muy similar a la información QuickInfo herramienta. Se puede encontrar un tutorial completo en MSDN :

    • Ejemplo:

  • Code Snippets - que son irrelevantes para usted.

  • Statement Completions , que son irrelevantes para usted.

Tenga en cuenta que necesitará hacer un IClassifier en su proyecto para que se muestren las herramientas, con esto también puede modificar la vista para que las Exceptions se vean de manera diferente según lo desee. Guía en MSDN .

Obtener la información sobre los métodos por otro lado depende de usted. puede usar una fuente manual externa y usarla en su IQuickInfoSource o leerla de un documento de XML Comment correspondiente analizando la palabra de lectura de ITextStructureNavigator usando Roslyn sobre el documento de código que está navegando.

Lo siento si fue una pequeña respuesta abstracta, pero esta es una pregunta muy amplia y hay muchas maneras de implementar tal extensión.

PD: Me las arreglé para hacer una extensión similar en baja calidad para estudiar este campo, por lo que si tiene alguna pregunta sobre la implementación, no dude en preguntar.

En C # o Vb.Net, usando Visual Studio 2013 SDK, ¿cómo puedo agregar un elemento adicional en Intellisense cuando se muestra la información de un miembro?

Mi intención no es agregar un elemento de finalización / sugerencia, me gustaría agregar información adicional personalizada debajo de la información que se muestra para un miembro que puede lanzar una excepción como un método, función o propiedad (captador / definidor), no una palabra clave .

Leí un poco a los miembros de Microsoft.VisualStudio.Language.Intellisense espacio de nombres pero no tomé ninguna idea clara al respecto.

Mi objetivo, con la ayuda que podría obtener aquí, es encontrar la respuesta para desarrollar una extensión simple que agregue (documentada) información de excepción para los miembros, algo como esto:

Me gustaría traer de vuelta esta característica útil en Visual Studio para C #, y agregarla también para VB.Net, luego, si tengo éxito, la compartiré gratis con todos los suyos, como hice en el pasado con esta útil extensión:

Solo comento que porque cualquier ayuda podría ser recompensada para todos nosotros de esa manera.

Además de mi pregunta, y solo de manera adicional, si alguien pudiera comenzar a guiarme sobre cómo encontrar la manera de recuperar la documentación Xml de los miembros ( <exception cref="Exception name"> ) para hacer esto, o tal vez de una forma sencilla , Estaría muy agradecido.

EDITAR :

Acerca de la documentación Xml, tengo la idea de usar el navegador de objetos de Visual Studio para inspeccionar las excepciones del miembro que Intellisense listará en lugar de meterse con Reflection. para obtener información de excepción. Esa podría ser una forma mejor y viable de hacerlo una vez que pueda averiguar cómo automatizar el navegador de objetos desde el SDK, pero solo estoy comentando esto, tal vez esa sea una pregunta nueva una vez que esta pregunta pueda resolverse, porque en primer lugar Necesito resolver este paso, eso espero.