我有一个 MS Visual Studio 编辑器的扩展,它为 C++ 添加了一些语法高亮。
我想确保提供的 SnapshotSpan 具有标准分类类型(“评论”)。做这件事有很多种方法:
1 . 我可以手动解析 C++ 代码以查找注释范围。这是我想使用的最后一个选项:)
2 . 我可以使用黑客:
this.colorer = buffer.Properties.PropertyList // <-- buffer is a ITextBuffer
.Select(p => p.Value as IClassifier) // Get all classifiers someone put into the properies of the current text buffer
.Where(i => i != null)
.Where(i => i.GetType().FullName == "Microsoft.VisualC.CppColorer") // <-- Hack
.FirstOrDefault();
现在我可以通过以下方式使用这个着色器(这是 C++ 分类器的内部 Microsoft 实现):
this.colorer.GetClassificationSpans(span)
.Where(s => s.ClassificationType.Classification == FormatNames.Comment ||
s.ClassificationType.Classification == FormatNames.XmlDocComment)
多田!我有关于文本缓冲区中注释的信息。如您所知,这是一种黑客行为,我想避免这种情况:)
3 . 我可以尝试(以某种方式)获取标准分类类型的分类器(例如,用于“评论”)。
所以我的问题是:这是否可以通过分类类型名称获取 IClassifier ?