private static async Task<Document> GetTransformedDocumentAsync(Document document, Diagnostic diagnostic, CancellationToken cancellationToken) { var syntaxRoot = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var baseFieldDeclaration = (BaseFieldDeclarationSyntax)syntaxRoot.FindNode(diagnostic.Location.SourceSpan); List<BaseFieldDeclarationSyntax> newFieldDeclarations = SplitDeclaration(baseFieldDeclaration); if (newFieldDeclarations != null) { var editor = new SyntaxEditor(syntaxRoot, document.Project.Solution.Workspace); editor.InsertAfter(baseFieldDeclaration, newFieldDeclarations); editor.RemoveNode(baseFieldDeclaration); return document.WithSyntaxRoot(editor.GetChangedRoot().WithoutFormatting()); } return document; }
public static void ApplyChanges(SyntaxNode invokationSyntax, SyntaxEditor editor, IReadOnlyCollection<Fields> invokedMethodsOfMocks) { var setups = MakeSetups(invokedMethodsOfMocks); var verifiers = MakeVerifiers(invokedMethodsOfMocks); editor.InsertBefore(invokationSyntax, setups.Select( (x, i) => setups.Length - 1 == i ? x.WithLeadingTrivia(SyntaxFactory.TriviaList(SyntaxFactory.ElasticMarker)) .WithTrailingTrivia(SyntaxFactory.TriviaList(SyntaxFactory.CarriageReturnLineFeed, SyntaxFactory.CarriageReturnLineFeed)) : x.WithLeadingTrivia(SyntaxFactory.TriviaList(SyntaxFactory.ElasticMarker)))); //todo will try to understand how to add a new line before editor.InsertAfter(invokationSyntax, verifiers.Select(x => x.WithLeadingTrivia(SyntaxFactory.ElasticMarker))); }