我目前正在编写一个ReSharper 6插件,它应该将Warnings添加到我的IDE中。这些数据是从带有LineNumber和其他数据的XML文件中读取的。
到目前为止,我已经用ErrorStripeRequest.STRIPE_AND_ERRORS和IDaemonStageProcess创建了一个IDaemonStageProcess。到目前为止,这是可行的,并且会被执行。
问题是: Warnigns没有添加到我的IDE中。
如何得到正确的TextRange和DocumentRange?
在我的Execute()中,我有这样的内容:
var violations = new List<HighlightingInfo>();
foreach (var error in errorsFromXML)
{
// assignments here
int lineNumber = 172; // example
string ruleId;
string rule;
string error;
rule = ruleId + ":" + rule;
// I guess this is what's wrong
var lineNumber =
JetBrains.Util.dataStructures.TypedIntrinsics.Int32<DocLine>.Parse(
linumber.ToString());
int start = daemonProcess.Document.GetLineStartOffset(lineNumber);
int end = daemonProcess.Document.GetLineEndOffsetNoLineBreak(lineNumber);
var textRange = new JetBrains.Util.TextRange(start, end);
var range = new JetBrains.DocumentModel.DocumentRange(
daemonProcess.Document, textRange);
// range.ToString() => (DocumentRange (6.253 - 6.262) on <WrongThread>) // example
// and this should be fine again
var highlight = new TqsHighlight(rule, error);
violations.Add(new HighlightingInfo(range, highlight, Severity.WARNING, rule + id));
}
return violations; // returns various violations此外,我还有一个自定义突出显示类:
internal class TqsHighlight : IHighlighting
{
private readonly string error;
private readonly string rule;
public TqsHighlight(string rule, string error)
{
this.rule = rule;
this.error = error;
}
public bool IsValid()
{
return true;
}
public string ToolTip
{
get
{
return this.error;
}
}
public string ErrorStripeToolTip
{
get
{
return this.rule;
}
}
public int NavigationOffsetPatch
{
get
{
return 0;
}
}
}发布于 2011-12-12 15:48:18
TextRange构造函数实际上接受一个偏移量,这可能不是您想要的结果。您需要做的是在daemonProcess.Document上调用几个方法。也就是说,如果您调用GetLineStartOffset()和GetLineEndOffsetNoLineBreak(),这将使您获得行的开始和结束。可以将普通int强制转换为所需的参数类型。然后,您可以使用这些结果创建一个TextRange (使用同时使用startOffset和endOffset的构造函数),并随后创建一个DocumentRange。
希望这能解决问题。如果有进一步的帮助,请告诉我。
https://stackoverflow.com/questions/8473255
复制相似问题