Frage

Ich schreibe eine Roslyn-Diagnose mit Code-Fix.Wenn es einen Try-Block mit einem leeren Catch-Block gibt, möchte ich die Option bereitstellen, den Catch-Block zu entfernen und den Try-Block durch seinen Inhalt zu ersetzen.Mein Problem ist das Herausrücken des Inhalts des Try-Blocks.Ich habe versucht, den Formatierer zu verwenden, aber die Zeilen sind immer noch eine Ebene zu weit eingerückt.Hier ist mein Code:

private async Task<Document> RemoveTryCatchBlockAsync(Document document, TryStatementSyntax tryBlock, CancellationToken cancellationToken)
{
    var oldRoot = await document.GetSyntaxRootAsync(cancellationToken);
    var newRoot = oldRoot.ReplaceNode(tryBlock, tryBlock.Block.ChildNodes());
    Formatter.Format(newRoot, MSBuildWorkspace.Create());

    // Return document with transformed tree. 
    return document.WithSyntaxRoot(newRoot);
}
War es hilfreich?

Lösung

Roslyn ist sehr unveränderlich, Ihr Formatter Der ursprüngliche Knoten wird nicht geändert, sondern Sie erhalten einen neuen, formatierten Knoten.

Versuchen Sie stattdessen Folgendes:

var formattedRoot = Formatter.Format(newRoot, MSBuildWorkspace.Create());
return document.WithSyntaxRoot(formattedRoot);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top