2011-01-13 102 views
0

我已經爲我的工作室的專有腳本語言編寫了Visual Studio 2008的基本LanguageService擴展。它工作得很好,我已經實現了一個基本的符號表來跟蹤腳本定義和調用,以實現定義功能。從文件路徑獲取IVsTextLines

我遇到的問題是我只知道如何解析當前的活動視圖,而且我想掃描整個解決方案的內容,以便用戶可以定義文件中定義的腳本他們還沒有打開並解析。我已經想出瞭如何生成解決方案中所有文件的列表,但現在我需要創建一個新的Microsoft.VisualStudio.Package。 來源需要Microsoft.VisualStudio.TextManager.Interop。 IVsTextLines我不知道如何創建一個新的基於我的文件。

也許我會以錯誤的方式解決問題,並且有人可以指引我使用LanguageService解析文件的更好方法。

問候, 科林

回答

0

閒逛我發現,Visual Studio中需要一個新的來源的原因是,它是保持他們的內部列表,他們就像被編輯所持的觀點到文本文件。

我得出的結論是,關閉的文件不需要IVsTextLines或輸入到VS內部源文件列表中,因爲我沒有直接對它們進行任何操作,在這種情況下我所關心的只是構建符號表及其相應的TextSpan。所以相反,我爲我的解析器創建了一個新的API,它接受了一個字符串並構建了我的AST,而不是從ParseRequest中獲取文本,只是擔心我需要記錄的特定類型的符號。然後我將其推送到BackgroundWorker中。

所以我想我是以錯誤的方式去解決問題。雖然它看起來很奇怪,但我不能只是觸發一個文件打開到源列表中。

有趣的是,我在微軟的支持論壇上問過這個問題,他們建議我不得不購買一些服務和支持計劃,以便他們回答我的問題。