summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-30 08:45:03 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-30 08:45:03 +0100
commitb6976dcf7696daf01d4a5b698617fc190dfc8d65 (patch)
tree9d114dc4b4995c5202bb4e4e52029ef971d3c9ce /src/main/java
parent9b28d4cf266853936760e78cfc02a22c0d61d476 (diff)
Generate TypeScript class for each struct definition
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java37
2 files changed, 39 insertions, 2 deletions
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()
+ );
}
}