Pregunta

Espero que esta sea una pregunta válida: ¿cómo funciona intellisense en VS2008? Estoy detrás de lo que se sabe sobre el algoritmo que utiliza para encontrar las sugerencias, cuando aparece exactamente (el ". & Quot; es solo un desencadenante obvio), cómo se puede modificar su comportamiento si es posible, etc.

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 para llenar el cuadro de sugerencias.

Toda la información es bienvenida.

¿Fue útil?

Solución

Eche un vistazo a este artículo DIY Intellisense en CodeProject.

Otros consejos

Sin embargo, es más divertido aplicarle ingeniería inversa. Consideremos el problema:

  • necesita identificar las palabras de interés
  • necesita encontrar las opciones posibles
  • necesitas presentarlos

Ahora, el primer paso significa que debe analizar el código. Tiene las palabras clave C / C **, analiza previamente las diversas declaraciones de funciones y clases, y las carga 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 pueda buscar eficientemente una palabra parcial y obtener todas las palabras que tienen ese prefijo. Puede hacer eso 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 analiza aquí en SO .

Una vez que tiene la lista de posibilidades, simplemente la presenta. Probablemente desee mantener una referencia a la raíz del árbol de posibilidades para poder buscarlas en tiempo real a medida que alguien escriba más letras.

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

Esta pregunta es demasiado amplia. Dado que hay varios idiomas diferentes, VS IDE admite de forma inmediata Y hay un número N de mejoras DSL e IDE que admiten inteligencia alternativa, esto implica una cantidad de respuestas. Si está hablando específicamente de C #, consulte las Herramientas | Opciones | Editor de texto | C # | Intellisense área para ver las opciones disponibles de opciones de finalización. En lo que respecta al algoritmo [s] utilizado, estaría buscando los metadatos de los ensamblajes, el almacenamiento en caché copioso de los miembros de tipo, la lista MRU para el último miembro elegido para un tipo específico, etc. Si tiene una pregunta más específica, sugeriría aclaras.

Vea el ejemplo de un DSL (ironpython) y su implementación aquí .

No he visto ningún editor de texto en VS que limite dónde aparece IntelliSense. Todo es específico del idioma. Si su cursor está ubicado en un punto donde IntelliSense podría contribuir a un token válido, entonces será cuando se use.

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

Para tales casos, a veces uso mi propia versión de InteliSense que desarrollé para AutoHotKey cuando quiero un comportamiento específico. El objetivo de este script es que puede usarse con cualquier editor, o básicamente con cualquier control que acepte texto. Funciona grabando el ingreso de texto e interpretándolo sobre el archivo de sintaxis.

Quizás pueda usarlo como base para lo que desea lograr. Usé ISense con éxito con varios idiomas que no tienen tal cosa, como Csound o incluso lotes guiones. Será posible extenderlo para admitir C # usando monitoreo de entrada en combinación con Reflection.

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

El intellisense 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 tenía isense ya que su compilación es muy lenta.

En cuanto a cómo cambiar la apariencia de la pregunta, la respuesta corta es que no puedes. Intellisense en su mayor parte se proporciona mediante la reflexión de los ensamblajes 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 desea proporcionar resultados de inteligencia explícitos de un proyecto en el que está trabajando, busque IVsContextualIntellisenseFilterProvider

Finalmente, para obtener información sobre el proceso detrás de escena, marque esta publicación de blog

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top