Получение IVsTextLines из пути к файлу
Я написал базовое расширение LanguageService для Visual Studio 2008 для собственного скриптового языка моей студии. Он прекрасно работает, и я реализовал базовую таблицу символов для отслеживания определений сценариев и вызовов, позволяющих использовать функции определения goto.
Проблема, с которой я столкнулся, состоит в том, что я знаю только, как анализировать текущее активное представление, и я хотел бы просканировать содержимое всего решения, чтобы пользователь мог перейти к определению сценария, определенного в файле, который ему еще предстоит открыть и разобрать. Я выяснил, как создать список всех файлов в решении, но теперь мне нужно создать новый пакет Microsoft.VisualStudio.Package.Источник, который требует Microsoft.VisualStudio.TextManager.Interop.IVsTextLines, и я понятия не имею, как создать новый на основе файла, который я имею.
Возможно, я неправильно понимаю проблему, и кто-то может указать мне на лучший способ заставить файл анализироваться LanguageService.
С уважением, Колин
1 ответ
Обдумывая, я обнаружил, что причина, по которой Visual Studio нужен новый источник, заключается в том, что он хранит их внутренний список, и они похожи на представление текстового файла, хранящегося в редакторе.
Я пришел к выводу, что закрытые файлы не нуждаются в IVsTextLines или для ввода во внутренний список исходных файлов VS, потому что я не выполняю никаких операций непосредственно над ними, все, что меня волнует в этом случае, - это создание таблицы символов и их соответствующих TextSpan. Поэтому вместо этого я создал новый API для моего парсера, который просто взял строку и построил мой AST вместо того, чтобы извлекать текст из ParseRequest, и беспокоился только о конкретных типах символов, которые мне нужно было записать. Затем я вставил это в BackgroundWorker.
Так что, думаю, я неправильно понял проблему. Хотя это кажется странным, я не могу просто вызвать файл для открытия в списке источников.
Интересно, что я задал этот вопрос Microsoft на их форумах поддержки, и они посоветовали мне купить некоторые услуги и план поддержки, чтобы они могли ответить на мой вопрос.