From 82776b59d36b0177c5da7c6834aea1a1b9dfa944 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 12 Sep 2024 13:05:45 -0700 Subject: [PATCH] Include initial filter node when searching for nodes to order modifiers --- .../OrderModifiers/OrderModifiersTests.cs | 18 ++++++++++++++++++ ...AbstractOrderModifiersDiagnosticAnalyzer.cs | 8 +++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Analyzers/CSharp/Tests/OrderModifiers/OrderModifiersTests.cs b/src/Analyzers/CSharp/Tests/OrderModifiers/OrderModifiersTests.cs index 626e1f7038727..f3db59b1473d7 100644 --- a/src/Analyzers/CSharp/Tests/OrderModifiers/OrderModifiersTests.cs +++ b/src/Analyzers/CSharp/Tests/OrderModifiers/OrderModifiersTests.cs @@ -558,4 +558,22 @@ file abstract class C } """); } + + [Fact, WorkItem("https://github.com/dotnet/vscode-csharp/issues/7553")] + public async Task TestEmptySelection() + { + await TestInRegularAndScript1Async( + """ + namespace M; + [||]static internal class C + { + } + """, + """ + namespace M; + internal static class C + { + } + """, TestParameters.Default.WithIncludeDiagnosticsOutsideSelection(false)); + } } diff --git a/src/Analyzers/Core/Analyzers/OrderModifiers/AbstractOrderModifiersDiagnosticAnalyzer.cs b/src/Analyzers/Core/Analyzers/OrderModifiers/AbstractOrderModifiersDiagnosticAnalyzer.cs index 43f8f18668bcb..bb06e5be77d96 100644 --- a/src/Analyzers/Core/Analyzers/OrderModifiers/AbstractOrderModifiersDiagnosticAnalyzer.cs +++ b/src/Analyzers/Core/Analyzers/OrderModifiers/AbstractOrderModifiersDiagnosticAnalyzer.cs @@ -48,7 +48,13 @@ private void AnalyzeSyntaxTree(SyntaxTreeAnalysisContext context, CompilationOpt return; } - Recurse(context, preferredOrder, option.Notification, context.GetAnalysisRoot(findInTrivia: false)); + var analysisRoot = context.GetAnalysisRoot(findInTrivia: false); + + // Check the root node first to see if it has any modifiers that need reordering. + CheckModifiers(context, preferredOrder, option.Notification, analysisRoot); + + // Recurse to check the child nodes. + Recurse(context, preferredOrder, option.Notification, analysisRoot); } protected abstract void Recurse(