Skip to content

Commit 4de65c5

Browse files
committed
Implement fix all provider for ElementOrderCodeFixProvider
1 parent 5b0ba8b commit 4de65c5

1 file changed

Lines changed: 43 additions & 7 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/ElementOrderCodeFixProvider.cs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class ElementOrderCodeFixProvider : CodeFixProvider
3434
/// <inheritdoc/>
3535
public override FixAllProvider GetFixAllProvider()
3636
{
37-
return CustomFixAllProviders.BatchFixer;
37+
return FixAll.Instance;
3838
}
3939

4040
/// <inheritdoc/>
@@ -58,21 +58,31 @@ private static async Task<Document> GetTransformedDocumentAsync(Document documen
5858
return document;
5959
}
6060

61+
syntaxRoot = UpdateSyntaxRoot(memberDeclaration, syntaxRoot);
62+
63+
return document.WithSyntaxRoot(syntaxRoot);
64+
}
65+
66+
private static SyntaxNode UpdateSyntaxRoot(MemberDeclarationSyntax memberDeclaration, SyntaxNode syntaxRoot)
67+
{
6168
var parentDeclaration = memberDeclaration.Parent;
69+
6270
if (parentDeclaration is TypeDeclarationSyntax)
6371
{
64-
syntaxRoot = HandleTypeDeclaration(memberDeclaration, (TypeDeclarationSyntax)parentDeclaration, syntaxRoot);
72+
return HandleTypeDeclaration(memberDeclaration, (TypeDeclarationSyntax)parentDeclaration, syntaxRoot);
6573
}
66-
else if (parentDeclaration is NamespaceDeclarationSyntax)
74+
75+
if (parentDeclaration is NamespaceDeclarationSyntax)
6776
{
68-
syntaxRoot = HandleNamespaceDeclaration(memberDeclaration, (NamespaceDeclarationSyntax)parentDeclaration, syntaxRoot);
77+
return HandleNamespaceDeclaration(memberDeclaration, (NamespaceDeclarationSyntax)parentDeclaration, syntaxRoot);
6978
}
70-
else if (parentDeclaration is CompilationUnitSyntax)
79+
80+
if (parentDeclaration is CompilationUnitSyntax)
7181
{
72-
syntaxRoot = HandleCompilationUnitDeclaration(memberDeclaration, (CompilationUnitSyntax)parentDeclaration, syntaxRoot);
82+
return HandleCompilationUnitDeclaration(memberDeclaration, (CompilationUnitSyntax)parentDeclaration, syntaxRoot);
7383
}
7484

75-
return document.WithSyntaxRoot(syntaxRoot);
85+
return syntaxRoot;
7686
}
7787

7888
private static SyntaxNode HandleTypeDeclaration(MemberDeclarationSyntax memberDeclaration, TypeDeclarationSyntax typeDeclarationNode, SyntaxNode syntaxRoot)
@@ -122,5 +132,31 @@ private static SyntaxNode MoveMember(SyntaxNode root, MemberDeclarationSyntax fi
122132
var fieldToMoveTracked = root.GetCurrentNodes(field).Last();
123133
return root.RemoveNode(fieldToMoveTracked, SyntaxRemoveOptions.KeepNoTrivia);
124134
}
135+
136+
private class FixAll : DocumentBasedFixAllProvider
137+
{
138+
public static FixAllProvider Instance { get; } = new FixAll();
139+
140+
protected override string CodeActionTitle => OrderingResources.ElementOrderCodeFix;
141+
142+
protected override async Task<SyntaxNode> FixAllInDocumentAsync(FixAllContext fixAllContext, Document document)
143+
{
144+
var diagnostics = await fixAllContext.GetDocumentDiagnosticsAsync(document).ConfigureAwait(false);
145+
var syntaxRoot = await document.GetSyntaxRootAsync().ConfigureAwait(false);
146+
147+
foreach (var diagnostic in diagnostics)
148+
{
149+
var memberDeclaration = syntaxRoot.FindNode(diagnostic.Location.SourceSpan).FirstAncestorOrSelf<MemberDeclarationSyntax>();
150+
if (memberDeclaration == null)
151+
{
152+
continue;
153+
}
154+
155+
syntaxRoot = UpdateSyntaxRoot(memberDeclaration, syntaxRoot);
156+
}
157+
158+
return syntaxRoot;
159+
}
160+
}
125161
}
126162
}

0 commit comments

Comments
 (0)