From b6976dcf7696daf01d4a5b698617fc190dfc8d65 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 30 Aug 2026 08:45:03 +0100 Subject: Generate TypeScript class for each struct definition --- .../generators/typescript/TypescriptGenerator.java | 4 +++ .../typescripttypes/TypescriptTypesGenerator.java | 37 ++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java index f7745ff..bf14e2e 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java @@ -31,4 +31,8 @@ public class TypescriptGenerator { public TypescriptIdentifier generateModuleName(String namespaceNamePart) { return new TypescriptIdentifier(namespaceNamePart); } + + public TypescriptIdentifier generateTypeName(String name) { + return new TypescriptIdentifier(name); + } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java index aef1653..a6263bf 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java @@ -1,12 +1,14 @@ package org.zwobble.hobgoblin.compiler.output.generators.typescripttypes; -import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; +import org.zwobble.hobgoblin.compiler.ast.typed.*; import org.zwobble.hobgoblin.compiler.config.OutputConfig; import org.zwobble.hobgoblin.compiler.output.generators.Generator; import org.zwobble.hobgoblin.compiler.output.generators.GeneratorDefinition; import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGenerator; import org.zwobble.hobgoblin.compiler.output.generators.typescript.TypescriptGeneratorConfig; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptClassDeclaration; import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptStatement; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.json5.reader.Json5ObjectReader; @@ -74,6 +76,37 @@ public class TypescriptTypesGenerator implements Generator { .map(part -> this.typescriptGenerator.generateModuleName(part)) .toList(); - return new TypescriptModule(typescriptModuleName, List.of()); + var statements = namespace.body().stream() + .map(statement -> generateNamespaceStatement(statement)) + .toList(); + + return new TypescriptModule(typescriptModuleName, statements); + } + + private TypescriptStatement generateNamespaceStatement(TypedNamespaceStatementNode statement) { + switch (statement) { + case TypedEnumDefinitionNode _ -> { + throw new UnsupportedOperationException("TODO"); + } + + case TypedNativeTypeDefinitionNode _ -> { + throw new UnsupportedOperationException("TODO"); + } + + case TypedStructDefinitionNode structDefinition -> { + return generateStructDefinition(structDefinition); + } + + case TypedSumDefinitionNode _ -> { + throw new UnsupportedOperationException("TODO"); + } + } + } + + private TypescriptStatement generateStructDefinition(TypedStructDefinitionNode structDefinition) { + return new TypescriptClassDeclaration( + this.typescriptGenerator.generateTypeName(structDefinition.name()), + List.of() + ); } } -- cgit v1.2.3