Domanda

Spero che questa sia una domanda valida: come funziona l'intellisense in VS2008? Sto cercando ciò che è noto sull'algoritmo che usa per trovare i suggerimenti, quando appare esattamente (il "quot.." È solo un innesco ovvio), come il suo comportamento può essere modificato se possibile, ecc.

Per mettere questa domanda nel contesto: il problema principale che sto cercando di risolvere è come attivare e disattivare l'intellisense in porzioni della schermata dell'editor e come modificare dove cerca per popolare il riquadro dei suggerimenti.

Tutte le informazioni sono benvenute.

È stato utile?

Soluzione

Dai un'occhiata a questo articolo DIY Intellisense su CodeProject.

Altri suggerimenti

Tuttavia è più divertente decodificarlo. Consideriamo il problema:

  • devi identificare le parole di interesse
  • devi trovare le opzioni possibili
  • devi presentarli

Ora, il primo passo significa che devi analizzare il codice. Hai le parole chiave C / C **, prepari le varie dichiarazioni di funzioni e classi e le carichi in una sorta di struttura di dati. Quindi si analizza il codice e si memorizzano i nomi di classe, variabile, ecc. E li si inserisce nella stessa struttura di dati.

Il secondo passo significa che si desidera una struttura di dati in grado di cercare in modo efficiente una parola parziale e ottenere tutte le parole che hanno quel prefisso. Puoi farlo con espressioni regolari, ma non è molto efficiente. Una struttura dati efficiente per quel tipo di ricerca è un trie, che viene discusso qui su SO .

Una volta che hai l'elenco delle possibilità, lo presenti e basta. Probabilmente vuoi mantenere un riferimento alla radice dell'albero delle possibilità in modo da poterle cercare in tempo reale mentre qualcuno digita più lettere.

Anche Eclipse ha questa funzione ed è un progetto open source. Perché non dai un'occhiata a come funziona Eclipse guardando il codice?

Questa domanda è troppo ampia. Dato che esistono diverse lingue che VS IDE supporta immediatamente E ci sono N miglioramenti di DSL e IDE che supportano intellisense alternativo, questo implica un numero di risposte. Se stai parlando di C # in particolare, vedi Strumenti | Opzioni | Editor di testo | C # | Area Intellisense per visualizzare le opzioni disponibili di opzioni di completamento. Per quanto riguarda gli algoritmi utilizzati, dovresti cercare i metadati degli assembly, la copiata memorizzazione nella cache dei membri del tipo, l'elenco MRU per l'ultimo membro scelto per il tipo specifico, ecc. Se hai una domanda più specifica, suggerirei chiarisci.

Guarda l'esempio di un DSL (ironpython) e la sua implementazione qui .

Non ho visto nessun editor di testo in VS che limiti dove appare IntelliSense. È tutto specifico della lingua. Se il cursore si trova in un punto in cui IntelliSense potrebbe contribuire a un token valido, allora verrà utilizzato.

Credo che ci sia qualche interazione con il sistema del progetto in uso, ma per quanto ne so. Credo anche che ci sia un sistema di progetto di esempio in Visual Studio SDK e che potrebbe darti un'idea.

Per tali casi a volte utilizzo la mia versione di InteliSense che ho sviluppato per AutoHotKey quando voglio un comportamento specifico. Il punto di questo script è che può essere utilizzato con qualsiasi editor o sostanzialmente con qualsiasi controllo che accetti il ??testo. Funziona registrando il testo inserito e interpretandolo nel file di sintassi.

Puoi forse usarlo come base per ciò che vuoi ottenere. Ho usato ISense con successo con diverse lingue che non hanno tale cosa, come Csound o anche batch script. Sarà possibile estenderlo per supportare C # usando il monitoraggio degli input in combinazione con Reflection.

Ad ogni modo, con AHK puoi persino controllare l'intelissenza VS prendendo " prendendo " l'elenco di elementi che presenta e lo filtra, o cose simili. Potresti avere alcuni piccoli problemi con i limiti del processo ma nulla che non può essere risolto.

L'intellisense ius in genere, AFAIK, implementato usando metodi diversi. Ho letto che Delphi è così veloce che implementa isense ricompilando il progetto su ogni token e questo è il motivo per cui C ++ Builder non ha avuto isense poiché la sua compilazione è molto lenta.

Per quanto riguarda il modo in cui cambiare dove appare la domanda, la risposta breve è, non puoi. Intellisense è in gran parte fornito dalla riflessione degli assiemi inclusi nel progetto (e da alcuni altri trucchi con C ++). Quello che ottieni è il risultato dell'elaborazione VS attraverso tutti gli assembly che hai incluso e tutti gli assembly dal GAC.

Detto questo, se si desidera fornire risultati espliciti di intellisense da un progetto su cui si sta lavorando, esaminare IVsContextualIntellisenseFilterProvider

Infine, per avere un'idea del processo dietro le quinte, controlla questo post sul blog

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top