diff --git a/src/generators/Silk.NET.SilkTouch.Emitter/CSharpEmitter.cs b/src/generators/Silk.NET.SilkTouch.Emitter/CSharpEmitter.cs index 419af868dd..78cd6f3469 100644 --- a/src/generators/Silk.NET.SilkTouch.Emitter/CSharpEmitter.cs +++ b/src/generators/Silk.NET.SilkTouch.Emitter/CSharpEmitter.cs @@ -176,6 +176,27 @@ protected override FieldSymbol VisitField(FieldSymbol fieldSymbol) return fieldSymbol; } + protected override NamespaceSymbol VisitNamespace(NamespaceSymbol namespaceSymbol) + { + AssertClearState(); + + VisitIdentifier(namespaceSymbol.Identifier); + if (_syntax is not IdentifierNameSyntax namespaceIdentifierSyntax) + throw new InvalidOperationException("Namespace Identifier was not visited correctly"); + ClearState(); + + // TODO visit members + + _syntax = NamespaceDeclaration + ( + List(), TokenList(), namespaceIdentifierSyntax.WithTrailingTrivia(LineFeed), + List(), List(), List() + ) + .WithNamespaceKeyword(Token(SyntaxTriviaList.Empty, SyntaxKind.NamespaceKeyword, TriviaList(Space))) + .WithOpenBraceToken(Token(SyntaxTriviaList.Empty, SyntaxKind.OpenBraceToken, TriviaList(LineFeed))); + return namespaceSymbol; + } + protected override IdentifierSymbol VisitIdentifier(IdentifierSymbol identifierSymbol) { AssertClearState(); diff --git a/tests/Silk.NET.SilkTouch.Emitter.Tests/EmitterNamespaceTests.cs b/tests/Silk.NET.SilkTouch.Emitter.Tests/EmitterNamespaceTests.cs new file mode 100644 index 0000000000..160cd260d3 --- /dev/null +++ b/tests/Silk.NET.SilkTouch.Emitter.Tests/EmitterNamespaceTests.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Silk.NET.SilkTouch.Symbols; +using Xunit; + +namespace Silk.NET.SilkTouch.Emitter.Tests; + +public class EmitterNamespaceTests : EmitterTest +{ + [Fact] + public void NamespaceIntegration() + { + var syntax = Transform(new NamespaceSymbol(new IdentifierSymbol("Test"), ImmutableArray.Empty)); + + var result = syntax.ToFullString(); + Assert.Equal("namespace Test\n{\n}", result); + } + + [Fact] + public void NamespaceHasCorrectIdentifier() + { + var syntax = Transform + (new NamespaceSymbol(new IdentifierSymbol("Test"), ImmutableArray.Empty)) as + NamespaceDeclarationSyntax; + + Assert.NotNull(syntax); + + Assert.Equal("Test", Assert.IsType(syntax!.Name).Identifier.Text); + } +}