diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-12-23 11:36:15 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-12-23 11:36:15 +0000 |
| commit | ac56c2e61c8d4c9af26d49f419b2193a798ae68f (patch) | |
| tree | 96a94da71ee196e61f56af735dc7ab2813281f79 /src/main/java | |
| parent | f2ce971dc9389c2c964605a3f46a728108acf724 (diff) | |
Check fields for bin config are present
Diffstat (limited to 'src/main/java')
3 files changed, 29 insertions, 12 deletions
diff --git a/src/main/java/org/shedlang/compiler/config/BinConfig.java b/src/main/java/org/shedlang/compiler/config/BinConfig.java index f0d733a2..382cffc2 100644 --- a/src/main/java/org/shedlang/compiler/config/BinConfig.java +++ b/src/main/java/org/shedlang/compiler/config/BinConfig.java @@ -1,11 +1,11 @@ package org.shedlang.compiler.config; +import org.shedlang.compiler.config.toml.TomlTableWithSource; import org.shedlang.compiler.parser.StringParser; import org.shedlang.compiler.types.NamespaceName; -import org.tomlj.TomlTable; public record BinConfig(String name, NamespaceName mainNamespace) { - public static BinConfig fromToml(TomlTable table) { + public static BinConfig fromToml(TomlTableWithSource table) { var name = table.getString("name"); var mainNamespaceString = table.getString("main-namespace"); diff --git a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java index 817ae31f..ef84af2b 100644 --- a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java +++ b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java @@ -1,12 +1,7 @@ package org.shedlang.compiler.config; -import org.shedlang.compiler.config.errors.TomlSyntaxConfigError; -import org.shedlang.compiler.config.toml.TomlPath; import org.shedlang.compiler.config.toml.TomlTableWithSource; -import org.shedlang.compiler.sources.Source; import org.shedlang.compiler.sources.Sources; -import org.tomlj.Toml; -import org.tomlj.TomlParseResult; import java.io.IOException; import java.nio.file.Files; @@ -48,7 +43,7 @@ public record ProjectConfig( .flatMap(shed -> shed.getArrayOfTables("bins")) .orElseGet(() -> List.of()) .stream() - .map(bin -> BinConfig.fromToml(bin.table())) + .map(bin -> BinConfig.fromToml(bin)) .toList(); } diff --git a/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java b/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java index c9d102c4..e11925f6 100644 --- a/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java +++ b/src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java @@ -1,5 +1,6 @@ package org.shedlang.compiler.config.toml; +import org.shedlang.compiler.config.errors.ConfigError; import org.shedlang.compiler.config.errors.TomlSyntaxConfigError; import org.shedlang.compiler.config.errors.UnexpectedTypeConfigError; import org.shedlang.compiler.sources.Source; @@ -8,6 +9,7 @@ import org.tomlj.TomlArray; import org.tomlj.TomlPosition; import org.tomlj.TomlTable; +import java.text.MessageFormat; import java.util.List; import java.util.Optional; import java.util.stream.IntStream; @@ -15,6 +17,7 @@ import java.util.stream.IntStream; public record TomlTableWithSource( TomlTable table, TomlPath path, + TomlPosition position, Source fullSource ) { public static TomlTableWithSource parse(Source source) { @@ -25,7 +28,12 @@ public record TomlTableWithSource( throw TomlSyntaxConfigError.fromTomljError(error, source); } - return new TomlTableWithSource(result, TomlPath.TOP, source); + return new TomlTableWithSource( + result, + TomlPath.TOP, + TomlPosition.positionAt(1, 1), + source + ); } public Optional<TomlTableWithSource> getTable(String key) { @@ -38,9 +46,9 @@ public record TomlTableWithSource( private Optional<TomlTableWithSource> tomlValueToTable( TomlPath valuePath, Object value, - TomlPosition position + TomlPosition valuePosition ) { - if (value == null || position == null) { + if (value == null || valuePosition == null) { return Optional.empty(); } @@ -48,6 +56,7 @@ public record TomlTableWithSource( return Optional.of(new TomlTableWithSource( valueTable, valuePath, + valuePosition, fullSource )); } @@ -56,7 +65,7 @@ public record TomlTableWithSource( valuePath, "a table", value.getClass(), - TomlSource.sourceAtTomlPosition(fullSource, position) + TomlSource.sourceAtTomlPosition(fullSource, valuePosition) ); } @@ -96,4 +105,17 @@ public record TomlTableWithSource( .toList() ); } + + public String getString(String key) { + var value = table.getString(key); + + if (value == null) { + throw new ConfigError( + MessageFormat.format("{0} is missing {1}", path, key), + TomlSource.sourceAtTomlPosition(fullSource, position) + ); + } + + return value; + } } |
