Skip to content

Don't emit a namespace closing brace for file-scoped namespaces in single-file output#729

Merged
tannergooding merged 1 commit into
dotnet:mainfrom
tannergooding:fix-file-scoped-namespace-brace
Jul 13, 2026
Merged

Don't emit a namespace closing brace for file-scoped namespaces in single-file output#729
tannergooding merged 1 commit into
dotnet:mainfrom
tannergooding:fix-file-scoped-namespace-brace

Conversation

@tannergooding

Copy link
Copy Markdown
Member

Fixes #555.

When generating a single output file with generate-file-scoped-namespaces, the output ended with a stray closing brace:

namespace Zinc.Internal.Sokol;

public static unsafe partial class Log
{
    ...
}
}   // <- extra

File-scoped namespaces emit no opening {, but CloseOutputBuilder's single-file finalization in PInvokeGenerator.Close.cs wrote the namespace closing } unconditionally after all output builders (every other close path already guards on !GenerateFileScopedNamespaces). Guard the primary and test-stream braces the same way.

Block-scoped output is unchanged (verified: the {/} pair still balances), and no golden output changed.

Added FileScopedNamespaceTest with two cases — a method-class function (the reported scenario) and a struct — exercising both single-file close paths. Build 0 warning / 0 error; full suite green (3715 passed / 0 failed).

Note

This PR description and the code change were drafted by Copilot on my behalf.


Follow-up (out of scope): when a method-class is emitted after a non-method-class type in the same file-scoped single file, the method-class body is over-indented by one level. Tracking separately.

…ngle-file output

When generating a single output file, the namespace closing brace was written
unconditionally after all output builders. File-scoped namespaces emit no opening
brace, so this produced a stray trailing brace and invalid C#. Skip the closing
brace (for both the primary and test streams) when file-scoped namespaces are used.

Fixes dotnet#555

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@tannergooding tannergooding merged commit 5671f97 into dotnet:main Jul 13, 2026
14 checks passed
@tannergooding tannergooding deleted the fix-file-scoped-namespace-brace branch July 13, 2026 05:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Passing generate-file-scoped-namespaces results in extra curly brace being added to end of file

1 participant