Ausrücken des Inhalts des entfernten Blocks
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);
}
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