我有一个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"));
}
}
}
字符串
我所尝试的:
1.我的直觉(错误地)告诉我,返回一个带有不同errorType的ErrorTag可能会产生一个不同类型的标签,但是无论你传递什么字符串,波浪线都是红色的。例如,new ErrorTag(“Warning”)给出红色波浪线。MSDN文档几乎不存在。参见ErrorTag。
1.在Tagging namespace中没有提到实现ITag的不同Tag类。我希望存在WarningTag或InfoTag。
1.在MSDN论坛上提问。
问题:如何创建绿色(或蓝色或黄色)波浪形装饰?可悲的是,即使是《双城之战》或错综复杂的解决方案也很受欢迎.
我的目标是VS2015和VS 2017。
编辑:在输入这个问题时,有人在MSDN论坛上回答说,这不能用当前的API来完成。在Visual Studio中真的不能制作黄色的波浪线吗?!
3条答案
按热度按时间bweufnob1#
PredefinedErrorTypeNames包含
ErrorTag
的ErrorType
属性的支持值。您已经接近“Warning”,但
PredefinedErrorTypeNames.Warning
的值似乎是“compiler warning”。uqdfh47h2#
只是为了记录我自己的问题和答案。
创建一个包含以下内容的文件
SquigglesTaggerProvider.cs
:字符串
创建一个名为
SquigglesTagger.cs
的文件,包含以下内容:型
PredefinedErrorTypeNames
具有不同的预定义错误。型
代码取自我的仓库here。
wfsdck303#
确切地说,波浪形装饰具有一个Brush,该Brush要么是Red SolidColorBrush,要么是由具有与IErrorTag.ErrorType匹配的NameAttribute名称的导出的EditorType定义确定的Brush,该EditorType定义具有与IErrorTag. ErrorType匹配的NameAttribute的对应导出的ErrorTypeDefinition。
它是来自编辑器定义.编辑器ResourceDictionaryFromDefinition的ResourceDictionary,用于确定画笔。如果您没有覆盖此方法,则导出的编辑器定义可以为SolidColorBrush设置ForegroundColor,也可以将ForegroundBrush设置为任何画笔实现。
这些导出可以在
ITagger<T>
实现上进行。字符串
x1c 0d1x的数据
PredefinedErrorTypeNames只是那些保证具有匹配的ErrorTypeDefinition/EditorTypeDefinition的名称。
型
请注意,建议在字体和颜色中不可见-还请检查下面的DisplayName更改,以了解如何在字体和颜色中找到这些。
型
在Vs 2022中有一个不包括在此列表中。ErrorType“编辑并继续”默认提供紫色画笔,它是字体和颜色中的“粗鲁编辑”。
如果你想在visual studio中编辑squiggle颜色,那么在编辑器定义上设置
[UserVisible(true)]
,如果你这样做了this.BackgroundCustomizable = false;
,就像我对ErrorEditorColor定义类所做的那样,假设背景没有被使用。如果你提供的是非SolidColorBrush,不要让用户可见。最后,ErrorType = PredefinedErrorTypeNames.HintedSuggestion有一个不同的装饰,其他的都是波浪形。