2009-05-07 16 views
6

Espero que esta sea una pregunta válida: ¿cómo funciona intellisense en VS2008? Estoy después de lo que se conoce sobre el algoritmo que utiliza para encontrar las sugerencias, el momento exacto en que aparece (el "" es sólo un motivo obvio), cómo su comportamiento puede ser modificado, si es posible, etc.¿Cómo funciona intellisense en Visual Studio?

Para poner esta pregunta en contexto: el problema principal que estoy tratando de resolver es cómo activar y desactivar Intellisense en partes de la pantalla del editor y cómo modificar dónde busca llenar el buzón de sugerencias.

Toda la información es bienvenida.

Respuesta

1

ha visto this hilo en MSDN?

+0

buen comienzo. Gracias. –

0

Eclipse también tiene esta característica y es un proyecto de código abierto. ¿Por qué no verifica cómo lo hace Eclipse al mirar el código?

+0

Estoy extendiendo VS para un lenguaje propio de dominio interno –

0

Esta pregunta es demasiado amplia. Dado que hay varios idiomas diferentes, el VS IDE es compatible con la versión extra de la tarjeta Y hay un número N de mejoras DSL e IDE que admiten intellisense alternativo, lo que implica una cantidad de respuestas. Si está hablando específicamente de C#, entonces vea las Herramientas | Opciones | Editor de texto | C# | Área Intellisense para ver las opciones disponibles de opciones de finalización. En cuanto al algoritmo [s] utilizado, estaría buscando los metadatos de ensamblajes, caché copioso de miembros tipo, lista MRU para último miembro elegido para tipo específico, etc. Si tiene una pregunta más específica, sugeriría tu aclaras

Véase el ejemplo de una conexión DSL (IronPython) y su aplicación here.

8

Sin embargo, es más divertido realizar una ingeniería inversa. Vamos a considerar el problema:

  • es necesario identificar las palabras de interés
  • que necesita para encontrar las opciones posibles
  • que necesita para presentarlos

Ahora, el primer paso que significa tiene que analizar el código Tienes las palabras clave C/C **, preescribes las diversas declaraciones de funciones y clases, y las cargas en algún tipo de estructura de datos. Luego analiza el código y almacena los nombres de clase, variable, etc. y los coloca en la misma estructura de datos.

El segundo paso significa que desea una estructura de datos que de manera eficiente puede buscar una palabra parcial y obtener todas las palabras que tienen ese prefijo. Puede hacer que con expresiones regulares, pero eso no es muy eficiente. Una estructura de datos eficiente para ese tipo de búsqueda es un trie, que se discute en here on SO.

Una vez que tenga la lista de posibilidades, solo tiene que presentarla. Es probable que desee mantener una referencia a la raíz del árbol de posibilidades para que pueda buscarlas en tiempo real a medida que alguien escribe más letras.

0

No he visto cualquier editor de texto en VS que limita donde IntelliSense muestra. Es todo lenguaje específico. Si su cursor está ubicado en un punto donde IntelliSense podría contribuir a un token válido, es cuando se usará.

Creo que hay alguna interacción con el sistema de proyecto que se está utilizando, pero eso es lo que yo sé. También creo que hay un sistema de proyecto de muestra en el SDK de Visual Studio, y eso podría darte una idea.

0

Para estos casos, a veces uso mi propia versión de InteliSense que desarrollé para AutoHotKey cuando deseo un comportamiento específico. El objetivo de este script es que se puede usar con cualquier editor, o básicamente cualquier control que acepte texto. Funciona al registrar el ingreso de texto y al interpretarlo en el archivo de sintaxis.

Quizás pueda usarlo como base para lo que desea lograr. Utilicé ISense de forma satisfactoria con varios idiomas que no tienen tal cosa, como Csound o incluso scripts por lotes. Será posible ampliarlo para admitir C# utilizando la monitorización de entrada en combinación con Reflection.

De todos modos, con AHK incluso puede controlar VS intelissense "tomando" la lista de elementos que presenta y la filtra, o cosas similares. Es posible que tenga algunos pequeños problemas con los límites del proceso, pero nada que no se pueda solucionar.

Intellusense ius en general, AFAIK, implementado utilizando diferentes métodos. Leí que Delphi es tan rápido que implementa isense recompilando el proyecto en cada token y esa es la razón por la que C++ Builder no tuvo sentido ya que compila muy lento.

0

En cuanto a cómo cambiar la pregunta, la respuesta corta es que no se puede. Intellisense en su mayor parte es proporcionado por la reflexión de los ensambles incluidos en su proyecto (y algunos otros trucos con C++). Lo que está obteniendo es el resultado del procesamiento VS a través de todos los ensamblajes que ha incluido y todos los ensamblajes del GAC.

Dicho esto, si usted quiere proporcionar resultados de IntelliSense explícitas de un proyecto que se está trabajando, mira en IVsContextualIntellisenseFilterProvider

Por último, para una cierta penetración en el detrás del proceso de escenas, comprobar this blog post

Cuestiones relacionadas