diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-30 09:16:55 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-30 09:16:55 +0100 |
| commit | 93fdddf21b33fb95f249348d6fe8d38f6564243c (patch) | |
| tree | 6028c4d4cc8ae48c35aa7cb4cc57023765565d9a /src/main/java | |
| parent | d8771a35c842daab25d6e02df99855ef1e41b740 (diff) | |
Support generating TypeScript type expressions for simple types
Diffstat (limited to 'src/main/java')
4 files changed, 73 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 bf14e2e..7092a52 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 @@ -1,8 +1,11 @@ package org.zwobble.hobgoblin.compiler.output.generators.typescript; import org.zwobble.hobgoblin.compiler.output.lang.typescript.TypescriptWriter; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression; import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier; import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptRef; +import org.zwobble.hobgoblin.compiler.types.*; import java.io.File; import java.io.IOException; @@ -35,4 +38,39 @@ public class TypescriptGenerator { public TypescriptIdentifier generateTypeName(String name) { return new TypescriptIdentifier(name); } + + public TypescriptIdentifier generateFieldName(String name) { + return new TypescriptIdentifier(name); + } + + public TypescriptExpression generateTypeExpression(Type value) { + return switch (value) { + case ConstructedNativeType _ -> { + throw new UnsupportedOperationException("TODO"); + } + + case ConstructedStructType _ -> { + throw new UnsupportedOperationException("TODO"); + } + + case SimpleType simpleType -> { + if (simpleType instanceof SimpleNativeType simpleNativeType) { + var nativeTypeConfig = this.config.nativeTypeConfig(simpleNativeType); + if (nativeTypeConfig.isPresent()) { + yield nativeTypeConfig.get().typeExpression(); + } + } + + yield new TypescriptRef(this.generateTypeName(simpleType.name())); + } + + case TypeLevelValueType _ -> { + throw new UnsupportedOperationException("TODO"); + } + + case TypeParam _ -> { + throw new UnsupportedOperationException("TODO"); + } + }; + } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java index 6a93eea..f49edda 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java @@ -1,11 +1,27 @@ package org.zwobble.hobgoblin.compiler.output.generators.typescript; +import org.zwobble.hobgoblin.compiler.builtins.NativeTypes; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.TypescriptTypes; +import org.zwobble.hobgoblin.compiler.types.SimpleNativeType; import org.zwobble.json5.reader.Json5ObjectReader; -public record TypescriptGeneratorConfig() { +import java.util.Map; +import java.util.Optional; + +public record TypescriptGeneratorConfig( + Map<SimpleNativeType, TypescriptNativeTypeConfig> nativeTypeConfigs +) { public static TypescriptGeneratorConfig parseLangsConfig(Json5ObjectReader langsJson) { var output = langsJson.getObjectOrNone("typescript"); - return new TypescriptGeneratorConfig(); + return new TypescriptGeneratorConfig(DEFAULT_NATIVE_TYPE_CONFIGS); + } + + private static final Map<SimpleNativeType, TypescriptNativeTypeConfig> DEFAULT_NATIVE_TYPE_CONFIGS = Map.ofEntries( + Map.entry(NativeTypes.INT_32, new TypescriptNativeTypeConfig(TypescriptTypes.NUMBER)) + ); + + public Optional<TypescriptNativeTypeConfig> nativeTypeConfig(SimpleNativeType type) { + return Optional.ofNullable(this.nativeTypeConfigs.get(type)); } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptNativeTypeConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptNativeTypeConfig.java new file mode 100644 index 0000000..35b72f9 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptNativeTypeConfig.java @@ -0,0 +1,6 @@ +package org.zwobble.hobgoblin.compiler.output.generators.typescript; + +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptExpression; + +public record TypescriptNativeTypeConfig(TypescriptExpression typeExpression) { +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java new file mode 100644 index 0000000..308a297 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/TypescriptTypes.java @@ -0,0 +1,11 @@ +package org.zwobble.hobgoblin.compiler.output.lang.typescript; + +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptRef; + +public class TypescriptTypes { + private TypescriptTypes() { + } + + public static final TypescriptRef NUMBER = new TypescriptRef(TypescriptIdentifier.of("number")); +} |
