Языковая служба: есть ли способ принудительного разбора? - PullRequest
2 голосов
/ 28 февраля 2012

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

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

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

Ответы [ 2 ]

0 голосов
/ 28 февраля 2014

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

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

0 голосов
/ 29 февраля 2012

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

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

...