CodeAction GetAction(Document document, SemanticModel model, SyntaxNode root, SyntaxNode node, MethodDeclarationSyntax method) { return CodeActionFactory.Create(node.Span, DiagnosticSeverity.Info, GettextCatalog.GetString("Extract anonymous method"), t2 => { var identifier = SyntaxFactory.IdentifierName(NameGenerator.EnsureUniqueness("Method", model.LookupSymbols(node.SpanStart).Select(s => s.Name))); var surroundingMemberDeclaration = node.GetAncestor<MemberDeclarationSyntax>(); var rootWithTrackedMember = root.TrackNodes(node, surroundingMemberDeclaration); var newRoot = rootWithTrackedMember.ReplaceNode(rootWithTrackedMember.GetCurrentNode(node), identifier); newRoot = newRoot .InsertNodesBefore(newRoot.GetCurrentNode(surroundingMemberDeclaration), new[] { method.WithTrailingTrivia(surroundingMemberDeclaration.GetTrailingTrivia()) }); return Task.FromResult(document.WithSyntaxRoot(newRoot)); }); }