From bbd84bea3e34e503ccd49c59fe7d7a3727c6adfa Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 2 Jul 2026 11:35:41 +0100 Subject: Split lang config from generator config --- .../zwobble/hobgoblin/compiler/config/ProjectConfig.java | 14 ++++++++------ .../output/generators/java/JavaGeneratorConfig.java | 5 ++++- .../JavaPreciselyMatchersGenerator.java | 13 ++++++++++--- .../output/generators/javatypes/JavaTypesGenerator.java | 12 +++++++++--- .../output/generators/rusttypes/RustTypesGenerator.java | 2 +- 5 files changed, 32 insertions(+), 14 deletions(-) (limited to 'src/main') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java index 132a89d..835b496 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/config/ProjectConfig.java @@ -30,21 +30,23 @@ public record ProjectConfig( } private static ProjectConfig fromJson5(Path projectRoot, Json5ObjectReader document) { - var outputsJson = document.getArrayOfObjects("outputs").orElseThrow(); + var outputsJson = document.getObject("outputs").orElseThrow(); + var generatorsJson = outputsJson.getArrayOfObjects("generators").orElseThrow(); + var langsJson = outputsJson.getObject("langs"); var outputs = new ArrayList(); - for (var outputJson : outputsJson) { - var generatorName = outputJson.getString("generator"); + for (var generatorJson : generatorsJson) { + var generatorName = generatorJson.getString("generator"); var output = switch (generatorName.value()) { case JavaTypesGenerator.NAME -> - JavaTypesGenerator.parseOutputConfig(projectRoot, outputJson); + JavaTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson); case JavaPreciselyMatchersGenerator.NAME -> - JavaPreciselyMatchersGenerator.parseOutputConfig(projectRoot, outputJson); + JavaPreciselyMatchersGenerator.parseGeneratorConfig(projectRoot, generatorJson, langsJson); case RustTypesGenerator.NAME -> - RustTypesGenerator.parseOutputConfig(projectRoot, outputJson); + RustTypesGenerator.parseGeneratorConfig(projectRoot, generatorJson); default -> throw new UnknownGeneratorError( diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java index 4b216a3..f22e8ff 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java @@ -14,7 +14,10 @@ public record JavaGeneratorConfig( Map namespaceConfigs, Map nativeTypeConfigs ) { - public static JavaGeneratorConfig parseOutputConfig(Json5ObjectReader output) { + public static JavaGeneratorConfig parseLangsConfig(Optional langsJson) { + // TODO: better error if missing + var output = langsJson.orElseThrow().getObject("java").orElseThrow(); + var packageName = output.getString("packageName").value(); var namespaceConfigs = parseNamespaceConfigs(output); var nativeTypeConfigs = parseNativeTypeConfigs(output); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java index fe2caa6..b693ef3 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java @@ -15,17 +15,24 @@ import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import static org.zwobble.hobgoblin.compiler.util.Casing.lowerCamelCaseToUpperCamelCase; public class JavaPreciselyMatchersGenerator implements Generator { public static final String NAME = "java-precisely-matchers"; - public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) { + public static OutputConfig parseGeneratorConfig( + Path projectRoot, + Json5ObjectReader generatorJson, + Optional langsJson + ) { return () -> { - var relativeOutputPath = output.getString("path").value(); + var relativeOutputPath = generatorJson.getString("path").value(); var outputPath = projectRoot.resolve(relativeOutputPath); - var javaConfig = JavaGeneratorConfig.parseOutputConfig(output); + + var javaConfig = JavaGeneratorConfig.parseLangsConfig(langsJson); + var javaGenerator = new JavaGenerator(javaConfig); return new JavaPreciselyMatchersGenerator(outputPath, javaGenerator); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index d74322f..b601224 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -24,11 +24,17 @@ public class JavaTypesGenerator implements Generator { private static final JavaIdentifier BUILDER_TYPE_NAME = JavaIdentifier.of("Builder"); private static final JavaIdentifier BUILD_METHOD_NAME = JavaIdentifier.of("build"); - public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) { + public static OutputConfig parseGeneratorConfig( + Path projectRoot, + Json5ObjectReader generatorJson, + Optional langsJson + ) { return () -> { - var relativeOutputPath = output.getString("path").value(); + var relativeOutputPath = generatorJson.getString("path").value(); var outputPath = projectRoot.resolve(relativeOutputPath); - var javaConfig = JavaGeneratorConfig.parseOutputConfig(output); + + var javaConfig = JavaGeneratorConfig.parseLangsConfig(langsJson); + var javaGenerator = new JavaGenerator(javaConfig); return new JavaTypesGenerator(outputPath, javaConfig, javaGenerator); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java index 3847433..4593d38 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java @@ -21,7 +21,7 @@ import java.util.stream.Collectors; public class RustTypesGenerator implements Generator { public static final String NAME = "rust-types"; - public static OutputConfig parseOutputConfig(Path projectRoot, Json5ObjectReader output) { + public static OutputConfig parseGeneratorConfig(Path projectRoot, Json5ObjectReader output) { return () -> { var relativeOutputPath = output.getString("path").value(); var outputPath = projectRoot.resolve(relativeOutputPath); -- cgit v1.2.3