aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-12-23 11:36:15 +0000
committerMichael Williamson <mike@zwobble.org>2024-12-23 11:36:15 +0000
commitac56c2e61c8d4c9af26d49f419b2193a798ae68f (patch)
tree96a94da71ee196e61f56af735dc7ab2813281f79 /src/main/java
parentf2ce971dc9389c2c964605a3f46a728108acf724 (diff)
Check fields for bin config are present
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/config/BinConfig.java4
-rw-r--r--src/main/java/org/shedlang/compiler/config/ProjectConfig.java7
-rw-r--r--src/main/java/org/shedlang/compiler/config/toml/TomlTableWithSource.java30
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;
+ }
}