From 1ab92f34420bba4fa83da4ea518c862cab105273 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 30 Aug 2026 09:50:40 +0100 Subject: Generate fields for structs in typescript-types --- .../typescripttypes/TypescriptTypesGenerator.java | 41 +++++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) (limited to 'src/main/java') 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 878824a..c737d1c 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 @@ -6,15 +6,15 @@ 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.output.lang.typescript.ast.*; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.json5.reader.Json5ObjectReader; import java.io.IOException; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; public class TypescriptTypesGenerator implements Generator { private static final String NAME = "typescript-types"; @@ -104,9 +104,40 @@ public class TypescriptTypesGenerator implements Generator { } private TypescriptStatement generateStructDefinition(TypedStructDefinitionNode structDefinition) { + var typescriptTypeName = this.typescriptGenerator.generateTypeName(structDefinition.name()); + + var body = new ArrayList(); + + for (var field : structDefinition.fields().orElse(List.of())) { + body.add(new TypescriptClassFieldDeclaration( + this.typescriptGenerator.generateFieldName(field.name()), + Optional.of(this.typescriptGenerator.generateTypeExpression(field.type().value())), + Optional.empty() + )); + } + + body.add(new TypescriptClassConstructor( + structDefinition.fields().orElse(List.of()).stream() + .map(field -> new TypescriptParam( + this.typescriptGenerator.generateFieldName(field.name()), + Optional.of(this.typescriptGenerator.generateTypeExpression(field.type().value())) + )) + .toList(), + structDefinition.fields().orElse(List.of()).stream() + .map(field -> new TypescriptExpressionStatement(new TypescriptBinaryOperation( + TypescriptBinaryOperator.ASSIGN, + new TypescriptFieldAccess( + new TypescriptRef(TypescriptIdentifier.of("this")), + this.typescriptGenerator.generateFieldName(field.name()) + ), + new TypescriptRef(this.typescriptGenerator.generateFieldName(field.name())) + ))) + .toList() + )); + return new TypescriptClassDeclaration( - this.typescriptGenerator.generateTypeName(structDefinition.name()), - List.of(), + typescriptTypeName, + body, structDefinition.docComment() ); } -- cgit v1.2.3