Языковая служба: есть ли способ принудительного разбора?

Я работаю над языковой службой и хотел бы, чтобы синтаксический анализ после ввода кода пользователем выполнялся быстрее.

Прямо сейчас я полагаюсь на ParseReason.Check а также OnIdle механизм, который задокументирован в MSDN, но его часто вызывают долгое время после того, как пользователь набрал код. Иногда это помогает переместить курсор на другую строку, чтобы вызвать его быстрее.

То, что я хотел бы сделать, это принудительно проанализировать файл после того, как я обнаружу, что пользователь ввел в него файл. Я могу определить, когда пользователь печатает, но я не знаю, как вызвать парсер ParseRequest,

2 ответа

Я столкнулся с подобной проблемой, я хотел сканировать файлы, не открытые в VS. Лучшее, что я мог сделать, это абстрагировать мою функцию синтаксического анализа, чтобы она вызывалась VS, но также вызывалась другой внутренней функцией для моего расширения всякий раз, когда я хотел, не проходя через VS, и это сохраняло бы мои результаты анализа в тех же структурах, что и прямой вызов VS на ParseRequest.

Мне было бы интересно узнать, если вы найдете лучший способ сделать это, хотя.

Вы можете попробовать позвонить BeginParse() на ваше Source реализация. Это создает ParseRequest с Check разбирать причину. Я выключил OnIdle таймер в моей языковой службе и проверил его, и он, кажется, работает.

Если ваш код, который обнаруживает нажатия клавиш пользователя, имеет доступ к экземпляру вашего LanguageService реализация, то вы можете использовать service.GetSource(...).BeginParse(), Если у него есть доступ к Source само по себе, тогда это еще проще.

Другие вопросы по тегам