Domanda

Ho scritto un'estensione LanguageService base per Visual Studio 2008 per il linguaggio di scripting proprietario del mio studio. Funziona perfettamente bene, e ho realizzato una tabella di simboli di base per tenere traccia delle definizioni di script e le chiamate che consentono di goto funzionalità definizione.

Il problema che ho incontrato è che so solo come analizzare la vista corrente attiva, e mi piacerebbe per eseguire la scansione il contenuto dell'intera soluzione in modo che l'utente possa goto la definizione di uno script definito in un file di essi devono ancora aprire e aver analizzato. Sorgente che richiede una Microsoft.VisualStudio.TextManager.Interop. Ho capito come generare un elenco di tutti i file nella soluzione, ma ora ho bisogno di creare un nuovo Microsoft.VisualStudio.Package. IVsTextLines e non ho idea di come creare uno nuovo in base al largo del file che ho.

Forse sto andando circa il problema nel modo sbagliato e qualcuno mi può puntare verso un modo migliore per causare un file di essere analizzato dal LanguageService.

Saluti, Colin

È stato utile?

Soluzione

rovistando ho trovato che il motivo per Visual Studio ha bisogno di una nuova sorgente è che si tratta di mantenere un elenco interno di loro, e sono come la vista nel file di testo tenuto dal curatore.

Sono venuto alla conclusione che i file che sono chiuse fanno IVsTextLines non hanno bisogno o per essere inseriti nella lista interna VS di file sorgente, perché io non sto facendo alcuna operazione direttamente su di loro, tutte le cure I in merito, in questo caso è quello di costruire una tabella di simboli e la loro TextSpan corrispondente. Così, invece ho creato una nuova API per il mio parser che appena preso in una stringa e costruito la mia AST invece di afferrare il testo da un ParseRequest, e preoccupato solo determinati tipi di simboli di cui avevo bisogno per registrare. Ho poi spinto questo in un BackgroundWorker.

Quindi credo che stavo andando circa il problema nel modo sbagliato. Anche se sembra strano non posso semplicemente innescare un file da aprire nella lista di origine.

È interessante notare che ho fatto questa domanda a Microsoft sul loro forum di supporto e mi hanno avvisato che ho dovuto acquistare alcuni piano di servizio e supporto per loro di rispondere alla mia domanda.

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