我有一个显示红色错误曲线的Visual Studio扩展。我也喜欢提供其他颜色的曲线,例如黄色警告。
创建红色波浪线可以通过扩展ITagger类来完成:
internal sealed class MySquigglesTagger : ITagger<IErrorTag> {
public IEnumerable<ITagSpan<IErrorTag>> GetTags(NormalizedSnapshotSpanCollection spans) {
foreach (IMappingTagSpan<MyTokenTag> myTokenTag in this._aggregator.GetTags(spans))
SnapshotSpan tagSpan = myTokenTag.Span.GetSpans(this._sourceBuffer)[0];
yield return new TagSpan<IErrorTag>(tagSpan, new ErrorTag("Error", "some info about the error"));
}
}
}
我尝试过:
问题:如何制作绿色(或蓝色或黄色)花边装饰品?可悲的是,即使是神秘或复杂的解决方案也值得赞赏...
我的目标是VS2015和VS2017。
编辑:在输入此问题时,有人在MSDN论坛上回复说无法使用当前的API完成。在Visual Studio中制作黄色波浪线真的不可能吗?!
答案 0 :(得分:4)
PredefinedErrorTypeNames包含ErrorType
ErrorTag
属性支持的值。
你接近“警告”,但PredefinedErrorTypeNames.Warning
的值似乎是“编译器警告”。
答案 1 :(得分:1)
只需记录我自己的问题和答案即可。
创建具有以下内容的文件SquigglesTaggerProvider.cs
:
[Export(typeof(IViewTaggerProvider))]
[ContentType("Your Content Type")]
[TagType(typeof(ErrorTag))]
internal sealed class SquigglesTaggerProvider : IViewTaggerProvider {
[Import]
private IBufferTagAggregatorFactoryService _aggregatorFactory = null;
public ITagger<T> CreateTagger<T>(ITextView textView, ITextBuffer buffer) where T : ITag {
ITagger<T> sc() {
return new SquigglesTagger(buffer, this._aggregatorFactory) as ITagger<T>;
}
return buffer.Properties.GetOrCreateSingletonProperty(sc);
}
}
创建一个名为SquigglesTagger.cs
的文件,其内容如下:
internal sealed class SquigglesTagger : ITagger<IErrorTag> {
private readonly ITextBuffer _sourceBuffer;
private readonly ITagAggregator<AsmTokenTag> _aggregator;
internal SquigglesTagger(ITextBuffer buffer, IBufferTagAggregatorFactoryService aggregatorFactory) {
this._sourceBuffer = buffer;
ITagAggregator<AsmTokenTag> sc() {
return aggregatorFactory.CreateTagAggregator<AsmTokenTag>(buffer);
}
this._aggregator = buffer.Properties.GetOrCreateSingletonProperty(sc);
}
public IEnumerable<ITagSpan<IErrorTag>> GetTags(NormalizedSnapshotSpanCollection spans) {
foreach (IMappingTagSpan<MyTokenTag> myTokenTag in this._aggregator.GetTags(spans))
SnapshotSpan tagSpan = myTokenTag.Span.GetSpans(this._sourceBuffer)[0];
yield return new TagSpan<IErrorTag>(tagSpan, new ErrorTag(PredefinedErrorTypeNames.SyntaxError, "some info about the error"));
}
}
}
PredefinedErrorTypeNames
预定义了不同的错误。
public const string SyntaxError = "syntax error";
public const string CompilerError = "compiler error";
public const string OtherError = "other error";
public const string Warning = "compiler warning";
public const string Suggestion = "suggestion";
该代码来自我的存储库here。