Языковая служба: есть ли способ принудительного разбора?
Я работаю над языковой службой и хотел бы, чтобы синтаксический анализ после ввода кода пользователем выполнялся быстрее.
Прямо сейчас я полагаюсь на ParseReason.Check
а также OnIdle
механизм, который задокументирован в MSDN, но его часто вызывают долгое время после того, как пользователь набрал код. Иногда это помогает переместить курсор на другую строку, чтобы вызвать его быстрее.
То, что я хотел бы сделать, это принудительно проанализировать файл после того, как я обнаружу, что пользователь ввел в него файл. Я могу определить, когда пользователь печатает, но я не знаю, как вызвать парсер ParseRequest
,
2 ответа
Я столкнулся с подобной проблемой, я хотел сканировать файлы, не открытые в VS. Лучшее, что я мог сделать, это абстрагировать мою функцию синтаксического анализа, чтобы она вызывалась VS, но также вызывалась другой внутренней функцией для моего расширения всякий раз, когда я хотел, не проходя через VS, и это сохраняло бы мои результаты анализа в тех же структурах, что и прямой вызов VS на ParseRequest.
Мне было бы интересно узнать, если вы найдете лучший способ сделать это, хотя.
Вы можете попробовать позвонить BeginParse()
на ваше Source
реализация. Это создает ParseRequest
с Check
разбирать причину. Я выключил OnIdle
таймер в моей языковой службе и проверил его, и он, кажется, работает.
Если ваш код, который обнаруживает нажатия клавиш пользователя, имеет доступ к экземпляру вашего LanguageService
реализация, то вы можете использовать service.GetSource(...).BeginParse()
, Если у него есть доступ к Source
само по себе, тогда это еще проще.