对于 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);
}
如果这不起作用,请在设置 LanguageService 包时仔细检查 ProvideLanguageService 属性中的 CodeSense = true。LanguageService 中的很多很酷的事情都需要正确打开这些属性。有些甚至免费提供很酷的行为!
另一件需要注意的事情是,根据我的经验,着色器等某些行为在蜂巢中无法正常工作。我不认为这些给我带来了麻烦,但我在几年前实现了这些,所以我主要只是回顾旧代码。