diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-29 19:45:38 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-29 19:45:38 +0100 |
| commit | 73b58b585b0e12b9baf263fdc55da2f2b501651f (patch) | |
| tree | 89a5323be4808f8c74db4507aa03c655fabcc7ae /src/main/java | |
| parent | 503786f64f2af7725b1b58408396000ede4b3cb4 (diff) | |
Generate empty TypeScript module for each namespace
Diffstat (limited to 'src/main/java')
5 files changed, 99 insertions, 11 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 ebc7166..f7745ff 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,9 +1,34 @@ 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.TypescriptIdentifier; +import org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.stream.Collectors; + public class TypescriptGenerator { + private final Path outputPath; private final TypescriptGeneratorConfig config; - public TypescriptGenerator(TypescriptGeneratorConfig config) { + public TypescriptGenerator(Path outputPath, TypescriptGeneratorConfig config) { + this.outputPath = outputPath; this.config = config; } + + public void write(TypescriptModule module) throws IOException { + var path = this.outputPath.resolve( + module.name().stream() + .map(name -> name.value()) + .collect(Collectors.joining(File.separator)) + ".ts" + ); + + TypescriptWriter.writeTo(path, writer -> writer.writeModule(module)); + } + + public TypescriptIdentifier generateModuleName(String namespaceNamePart) { + return new TypescriptIdentifier(namespaceNamePart); + } } 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 4026c14..6a93eea 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 @@ -4,7 +4,7 @@ import org.zwobble.json5.reader.Json5ObjectReader; public record TypescriptGeneratorConfig() { public static TypescriptGeneratorConfig parseLangsConfig(Json5ObjectReader langsJson) { - var output = langsJson.getObject("typescript"); + var output = langsJson.getObjectOrNone("typescript"); return new TypescriptGeneratorConfig(); } 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 1d190a5..df308ab 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,6 +6,7 @@ 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.TypescriptModule; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.json5.reader.Json5ObjectReader; @@ -47,22 +48,32 @@ public class TypescriptTypesGenerator implements Generator { var typescriptConfig = TypescriptGeneratorConfig.parseLangsConfig(langsJson); - var typescriptGenerator = new TypescriptGenerator(typescriptConfig); + var typescriptGenerator = new TypescriptGenerator(outputPath, typescriptConfig); - return new TypescriptTypesGenerator(outputPath, typescriptGenerator); + return new TypescriptTypesGenerator(typescriptGenerator); }; } - private final Path outputPath; private final TypescriptGenerator typescriptGenerator; - private TypescriptTypesGenerator(Path outputPath, TypescriptGenerator typescriptGenerator) { - this.outputPath = outputPath; + private TypescriptTypesGenerator(TypescriptGenerator typescriptGenerator) { this.typescriptGenerator = typescriptGenerator; } @Override public void generate(List<TypedNamespaceNode> namespaces, TypesInfo typesInfo) throws IOException { + for (var namespace : namespaces) { + var typescriptModule = generateNamespace(namespace); + this.typescriptGenerator.write(typescriptModule); + } + } + + private TypescriptModule generateNamespace(TypedNamespaceNode namespace) { + var typescriptModuleName = namespace.namespaceName().parts().stream() + .map(part -> this.typescriptGenerator.generateModuleName(part)) + .toList(); + + return new TypescriptModule(typescriptModuleName); } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptIdentifier.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptIdentifier.java new file mode 100644 index 0000000..a87c792 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptIdentifier.java @@ -0,0 +1,32 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast; + +// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier imports +// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier imports + +public record TypescriptIdentifier( + String value +) { + public static org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder arbitrary() { + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder(""); + } + + public record Builder( + String value + ) { + public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier build() { + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier(value); + } + + public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder withValue(String value) { + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder(value); + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder body + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier body +} diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptModule.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptModule.java index f66626b..cff3dd5 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptModule.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptModule.java @@ -5,14 +5,34 @@ package org.zwobble.hobgoblin.compiler.output.lang.typescript.ast; // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule imports // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule imports -public record TypescriptModule() { +public record TypescriptModule( + java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier> name +) { public static org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder(); + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder(java.util.List.of()); } - public record Builder() { + public record Builder( + java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier> name + ) { public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule build() { - return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule(); + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule(name); + } + + public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder withName(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier> name) { + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder(name); + } + + public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder addNameElement(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier nameElement) { + var name = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier>(this.name); + name.add(nameElement); + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder(name); + } + + public org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder addNameElement(org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier.Builder nameElement) { + var name = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptIdentifier>(this.name); + name.add(nameElement.build()); + return new org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder(name); } // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.typescript.ast.TypescriptModule.Builder body |
