gpt4 book ai didi

c++ - 如何获得标准分类类型的 IClassifier?

转载 作者:行者123 更新时间:2023-12-01 14:45:50 25 4
gpt4 key购买 nike

我有一个 MS Visual Studio 编辑器的扩展,它为 C++ 添加了一些语法突出显示。

我想确保所提供的 SnapshotSpan 具有标准分类类型(“评论”)。有几种方法可以做到这一点:

1。我可以手动解析 C++ 代码以查找注释范围。这是我想使用的最后一个选项:)

2。我可以使用 hack:

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)

多田!我有关于文本缓冲区中评论的信息。如您所知,这是一个 hack,我想避免这种情况 :)

3。我可以尝试(以某种方式)获取标准分类类型的分类器(例如,“评论”)。


所以我的问题是:是否可以通过分类类型名称获取 IClassifier?

最佳答案

您可以导入 IClassifierAggregatorService :

[Import]
internal IClassifierAggregatorService classifierAggregatorService = null;

然后遍历 ClassificationSpan检查每个分类范围是否属于 "comment" 类型:

IClassifier classifier = classifierAggregatorService.GetClassifier(textBuffer);
IList<ClassificationSpan> classificationSpanList = _classifier.GetClassificationSpans(span);
foreach (ClassificationSpan classificationSpan in classificationSpanList)
{
if (classificationSpan.ClassificationType.IsOfType("comment"))
{
// ...
}
}

作为获取 IClassifierAggregatorService 的替代方法, 你可以得到一个 ITagAggregator<IClassificationTag>来自 IBufferTagAggregatorFactoryService .如果您想根据以前的分类添加分类(请参阅 this answer),这尤其有用。

关于c++ - 如何获得标准分类类型的 IClassifier?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com