Для вопроса о списке ошибок AuthoringSink я использую это поведение в своей языковой службе. В ParseSource класс ParseRequest имеет AuthoringSink. Вы также можете создать новый ErrorListProvider, если хотите работать вне поведения синтаксического анализатора. Вот пример кода:
error_list = new ErrorListProvider(this.Site);
error_list.ProviderName = "MyLanguageService Errors";
error_list.ProviderGuid = new Guid(this.errorlistGUIDstring.);
}
ErrorTask task = new ErrorTask();
task.Document = filename;
task.CanDelete = true;
task.Category = TaskCategory.CodeSense;
task.Column = column;
task.Line = line;
task.Text = message;
task.ErrorCategory = TaskErrorCategory.Error;
task.Navigate += NavigateToParseError;
error_list.Tasks.Add(task);
Я надеюсь, что это было полезно.
OnCommand должен срабатывать каждый раз, когда есть команда, в вашем классе MySource вы можете сделать что-то вроде этого (из рабочего кода):
public override void OnCommand(IVsTextView textView, VsCommands2K command, char ch)
{
if (textView == null || this.LanguageService == null
|| !this.LanguageService.Preferences.EnableCodeSense)
return;
if (command == Microsoft.VisualStudio.VSConstants.VSStd2KCmdID.TYPECHAR)
{
if (char.IsLetterOrDigit(ch))
{
//do something cool
}
}
base.OnCommand(textView, command, ch);
}
Если это не сработает, дважды проверьте, что CodeSense = true в атрибуте ProvideLanguageService при настройке пакета LanguageService. Многое из того, что можно делать в LanguageService, требует, чтобы эти атрибуты были правильно включены. Некоторые даже дают крутые модели поведения бесплатно!
Еще одна вещь, с которой следует быть осторожным, это то, что некоторые функции, такие как раскрашивание, по моему опыту, не работают правильно в улье. Я не думаю, что это доставляло мне проблемы, но я реализовал их пару лет назад, поэтому я в основном просто оглядываюсь на старый код.
person
ColinCren
schedule
30.08.2012