protected override async Task RegisterCodeFixesAsync(DocumentEditorCodeFixContext context) { var syntaxRoot = await context.Document.GetSyntaxRootAsync(context.CancellationToken) .ConfigureAwait(false); foreach (var diagnostic in context.Diagnostics) { if (syntaxRoot.TryFindNodeOrAncestor <ClassDeclarationSyntax>(diagnostic, out var classDeclaration) && diagnostic.Properties.TryGetValue(nameof(AttributeListSyntax), out var attribute)) { context.RegisterCodeFix( $"Add {attribute}.", (e, _) => e.ReplaceNode( classDeclaration, x => x.WithLeadingElasticLineFeed().AddAttributeLists(Parse.AttributeList(attribute).WithLeadingTrivia(SyntaxFactory.ElasticSpace).WithSimplifiedNames())), attribute, diagnostic); } } }
public static void AttributeList(string code) { var node = Parse.AttributeList(code); Assert.AreEqual(code + "\r\n", node.ToFullString()); }