Плагин ReSharper 6: Добавление HighlightingInfos - PullRequest
2 голосов
/ 12 декабря 2011

В настоящее время я пишу плагин ReSharper 6, который должен добавить Warnings в мою IDE. Они читаются из файла XML с номером строки и другими данными.

Пока что я создал IDaemonStage с ErrorStripeRequest.STRIPE_AND_ERRORS и 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

Также у меня есть класс Highlight:

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;
        }
    }
}

1 Ответ

2 голосов
/ 12 декабря 2011

Конструктор TextRange фактически принимает смещение, что, вероятно, не то, что вы хотите.Вместо этого вам нужно вызвать несколько методов на daemonProcess.Document.А именно, если вы позвоните GetLineStartOffset() и GetLineEndOffsetNoLineBreak(), это даст вам начало и конец линии.Вы можете привести обычный int к требуемому типу параметра.Затем вы можете использовать эти результаты для создания TextRange (используйте конструктор, который принимает оба значения startOffset и endOffset), а затем DocumentRange.

Надеюсь, что это решит проблему.Дайте мне знать, если я могу помочь вам.

...