summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
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()
+ );
}
}