Skip to content

Commit a1eb53f

Browse files
committed
Improve 'Unknown key' parse error message
1 parent 1c34667 commit a1eb53f

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

Sources/AppBundle/config/parseConfig.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,13 @@ indirect enum TomlBacktrace: CustomStringConvertible, Equatable {
336336
}
337337
}
338338

339+
var isRootKey: Bool {
340+
return switch self {
341+
case .rootKey: true
342+
default: false
343+
}
344+
}
345+
339346
static func + (lhs: TomlBacktrace, rhs: TomlBacktrace) -> TomlBacktrace {
340347
if case .emptyRoot = lhs {
341348
if case .key(let newRoot) = rhs {
@@ -372,7 +379,7 @@ extension TOMLTable {
372379
}
373380

374381
func unknownKeyError(_ backtrace: TomlBacktrace) -> TomlParseError {
375-
.semantic(backtrace, "Unknown key")
382+
.semantic(backtrace, backtrace.isRootKey ? "Unknown top-level key" : "Unknown key")
376383
}
377384

378385
func expectedActualTypeError(expected: TOMLType, actual: TOMLType, _ backtrace: TomlBacktrace) -> TomlParseError {

Sources/AppBundleTests/config/ConfigTest.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ final class ConfigTest: XCTestCase {
105105
assertEquals(config.preservedWorkspaceNames.sorted(), ["1", "2", "3", "4"])
106106
}
107107

108-
func testUnknownKeyParseError() {
108+
func testUnknownTopLevelKeyParseError() {
109109
let (config, errors) = parseConfig(
110110
"""
111111
unknownKey = true
@@ -114,7 +114,22 @@ final class ConfigTest: XCTestCase {
114114
)
115115
assertEquals(
116116
errors.descriptions,
117-
["unknownKey: Unknown key"],
117+
["unknownKey: Unknown top-level key"],
118+
)
119+
assertEquals(config.enableNormalizationFlattenContainers, false)
120+
}
121+
122+
func testUnknownKeyParseError() {
123+
let (config, errors) = parseConfig(
124+
"""
125+
enable-normalization-flatten-containers = false
126+
[gaps]
127+
unknownKey = true
128+
""",
129+
)
130+
assertEquals(
131+
errors.descriptions,
132+
["gaps.unknownKey: Unknown key"],
118133
)
119134
assertEquals(config.enableNormalizationFlattenContainers, false)
120135
}

0 commit comments

Comments
 (0)