summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-29 19:45:38 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-29 19:45:38 +0100
commit73b58b585b0e12b9baf263fdc55da2f2b501651f (patch)
tree89a5323be4808f8c74db4507aa03c655fabcc7ae /src/main/java/org
parent503786f64f2af7725b1b58408396000ede4b3cb4 (diff)
Generate empty TypeScript module for each namespace
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGenerator.java27
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescript/TypescriptGeneratorConfig.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/typescripttypes/TypescriptTypesGenerator.java21
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptIdentifier.java32
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/typescript/ast/TypescriptModule.java28
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