2

Warnings現在、IDEに追加する ReSharper 6 プラグインを作成しています。これらは、LineNumber およびその他のデータを含む XML ファイルから読み取られます。

これまでのところ、IDaemonStagewithErrorStripeRequest.STRIPE_AND_ERRORSIDaemonStageProcess. これは機能し、これまでのところ実行されます。

問題: 警告が 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;
        }
    }
}
4

1 に答える 1

2

コンストラクターはTextRange実際にはオフセットを取りますが、これはおそらくあなたが望むものではありません。代わりに、 でいくつかのメソッドを呼び出す必要がありますdaemonProcess.Document。つまり、電話をかけるGetLineStartOffset()GetLineEndOffsetNoLineBreak()、行の開始と終了が取得されます。int通常を必要なパラメーターの型にキャストできます。次に、これらの結果を使用して を作成しTextRange( と の両方を取るコンストラクターを使用startOffset) endOffset、続いて を作成できますDocumentRange

これで問題が解決することを願っています。さらにお役に立てることがあればお知らせください。

于 2011-12-12T15:48:18.200 に答える