2011-01-13 15 views
0

Ich habe eine grundlegende LanguageService-Erweiterung für Visual Studio 2008 für die proprietäre Skriptsprache meines Studios geschrieben. Es funktioniert tadellos, und ich habe eine grundlegende Symboltabelle implementiert, um Skriptdefinitionen und -aufrufe zu verfolgen, die goto Definition Funktionalität erlauben.Abrufen eines IVsTextLines aus dem Dateipfad

Das Problem, das ich habe, ist, dass ich nur die aktuelle aktive Ansicht analysieren kann, und ich möchte den gesamten Inhalt der Lösung scannen, so dass der Benutzer die Definition eines Skripts in einer Datei definiert erhalten kann sie müssen sich noch öffnen und haben geparst. Ich habe herausgefunden, wie man eine Liste aller Dateien in der Lösung erzeugt, aber jetzt muss ich ein neues Microsoft.VisualStudio.Package erstellen. Quelle, die ein Microsoft.VisualStudio.TextManager.Interop erfordert. IVsTextLines und ich habe keine Ahnung, wie man eine neue basierend auf der Datei erstellt, die ich habe.

Vielleicht gehe ich über das Problem den falschen Weg und jemand kann mich auf eine bessere Möglichkeit, eine Datei durch den LanguageService analysiert werden.

Grüße, Colin

Antwort

0

Stochern fand ich, dass der Grund, Visual Studio eine neue Quelle muss, ist, dass es eine interne Liste von ihnen zu halten, und sie sind wie der Blick in die vom Herausgeber gehalten Textdatei .

Ich kam zu der Schlussfolgerung, dass Dateien, die geschlossen sind, keine IVsTextLines oder in die VS interne Liste der Quelldateien eingegeben werden müssen, weil ich keine Operationen direkt an ihnen mache, alles was mich interessiert, ist in diesem Fall um eine Tabelle mit Symbolen und ihrem entsprechenden TextSpan zu erstellen. Stattdessen habe ich eine neue API für meinen Parser erstellt, die nur einen String aufgenommen und meinen AST erstellt hat, anstatt den Text von einem ParseRequest zu nehmen, und sich nur um bestimmte Arten von Symbolen sorgen musste, die ich aufzeichnen musste. Ich habe das dann in einen BackgroundWorker geschoben.

Also ich denke, ich ging das Problem in die falsche Richtung. Obwohl es merkwürdig erscheint, kann ich nicht einfach eine Datei auslösen, die in der Quellliste geöffnet wird.

Interessanterweise habe ich diese Frage an Microsoft in ihren Supportforen gestellt und sie rieten mir, dass ich einen Service- und Supportplan für sie kaufen musste, um meine Frage zu beantworten.

Verwandte Themen