C#: Fix AutoFormat not expanding empty constructor bodies with initializers#7191
Merged
knutwannheden merged 1 commit intomainfrom Mar 28, 2026
Conversation
…lizers Roslyn's Formatter.Format does not expand empty constructor bodies to Allman style when a constructor initializer (`: base(...)`) is present (dotnet/roslyn#82974). This means MaybeAutoFormat produces `Foo() : base() { }` instead of multi-line braces. Work around this in MinimumViableSpacingVisitor by inserting newlines into empty method body blocks that have a constructor initializer and Space.Empty prefix/end, so the printed source has multi-line braces that Roslyn can then indent correctly.
AutoFormat not expanding empty constructor bodies with initializers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
MaybeAutoFormatin C# recipes produces incorrect output in two scenarios:Formatter.Formatdoes not expandConstructor() : base(){}to Allman-style multi-line braces (dotnet/roslyn#82974)PrivateAssets="all",AdhocWorkspacecannot discoverMicrosoft.CodeAnalysis.CSharp.WorkspacesviaAssembly.Load(the dependency entries are absent from.deps.json), making the entire Roslyn formatter a silent no-opSummary
MinimumViableSpacingVisitorby inserting newlines into empty constructor body blocks that have a constructor initializer andSpace.Emptyprefix/endAdhocWorkspaceassembly discovery by explicitly providing already-loaded Roslyn assemblies toMefHostServices.Create, bypassing theAssembly.LoadpathTest plan
AutoFormatEmptyConstructorBodyWithInitializerverifies Allman-style braces for constructors with initializersrecipes-csharpconsuming the SDK as a NuGet package