首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReSharper 6插件:添加HighlightingInfos

ReSharper 6插件:添加HighlightingInfos
EN

Stack Overflow用户
提问于 2011-12-12 10:59:38
回答 1查看 178关注 0票数 2

我目前正在编写一个ReSharper 6插件,它应该将Warnings添加到我的IDE中。这些数据是从带有LineNumber和其他数据的XML文件中读取的。

到目前为止,我已经用ErrorStripeRequest.STRIPE_AND_ERRORSIDaemonStageProcess创建了一个IDaemonStageProcess。到目前为止,这是可行的,并且会被执行。

问题是: Warnigns没有添加到我的IDE中。

如何得到正确的TextRange和DocumentRange?

在我的Execute()中,我有这样的内容:

代码语言:javascript
复制
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

此外,我还有一个自定义突出显示类:

代码语言:javascript
复制
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;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-12 15:48:18

TextRange构造函数实际上接受一个偏移量,这可能不是您想要的结果。您需要做的是在daemonProcess.Document上调用几个方法。也就是说,如果您调用GetLineStartOffset()GetLineEndOffsetNoLineBreak(),这将使您获得行的开始和结束。可以将普通int强制转换为所需的参数类型。然后,您可以使用这些结果创建一个TextRange (使用同时使用startOffsetendOffset的构造函数),并随后创建一个DocumentRange

希望这能解决问题。如果有进一步的帮助,请告诉我。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8473255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档