gpt4 book ai didi

c# - 如何在 Visual Studio 编辑器中的特定行/列/长度上创建标签?

转载 作者:太空宇宙 更新时间:2023-11-03 14:42:03 24 4
gpt4 key购买 nike

我想在 Visual Studio 编辑器中创建标签,以根据代码中的行/列/长度位置插入各种字形、装饰、文本高亮等。

我一直在仔细阅读文档演练页面(https://learn.microsoft.com/en-us/visualstudio/extensibility/walkthrough-creating-a-margin-glyph?view=vs-2017 和相关页面)。尽管有点复杂且难以理解,但 API 似乎非常注重提供分析代码的方法:它能够将您的代码拆分为跨度、分类等。

但是,我有“相反”的需求:我已经通过我的外部分析引擎完成了分析。我已经有一组结果显示在编辑器中,每个结果都有行/列/长度。喜欢:

  • 函数“foo”,位于第345行,第1列,长度为3,其他字段包含要显示的信息,

  • 变量“my_var”,位于第349行第13列,长度为6,其他字段包含要显示的信息,

是否可以直接根据行/列/长度位置在 Visual Studio 编辑器中创建标签?任何提示,任何指向更详细文档或教程的指针都将不胜感激。

最佳答案

Lance 的链接非常有助于理解另一种创建不同于 MS 文档示例的标签的方法。

确实,我不分析 span 中包含的文本,分析已经在外部完成了。我得到一些“缺陷”位置列表。

我将它们放入 defectsLocation 字典中(defectsLocation[文件名][行] = 位置数据(...)

这是我做的:

internal class MyDefectTagger : ITagger<MyDefectTag>
{
private IClassifier m_classifier;
private ITextBuffer m_buffer;

internal MyDefectTagger(IClassifier classifier, ITextBuffer buffer)
{
m_classifier = classifier;
m_buffer = buffer;
}

IEnumerable<ITagSpan<MyDefectTag>>
ITagger<MyDefectTag>.GetTags(NormalizedSnapshotSpanCollection spans)
{
if (MyModel.Instance == null || MyModel.Instance.defectsLocation == null)
{
yield return null;
}

var filename = GetFileName(m_buffer);

if (!MyModel.Instance.defectsLocation.ContainsKey(filename))
{
yield return null;
}

foreach (SnapshotSpan span in spans)
{
ITextSnapshot textSnapshot = span.Snapshot;

foreach (ITextSnapshotLine textSnapshotLine in textSnapshot.Lines)
{
var line = textSnapshotLine.LineNumber + 1; // Lines start at 1 in VS Editor

if (MyModel.Instance.defectsLocation[filename].ContainsKey(line) &&
!MyModel.Instance.defectsLocation[filename][line].rendered)
{
var rendered = MyModel.Instance.defectsLocation[filename][line].rendered;
yield return new TagSpan<MyDefectTag>(
new SnapshotSpan(textSnapshotLine.Start, 0),
new MyDefectTag()
);
}
}
}
}
}

关于c# - 如何在 Visual Studio 编辑器中的特定行/列/长度上创建标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56339051/

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