Skip to content

Commit 2d0f17f

Browse files
committed
feat: store keyword location on all errors
1 parent 5c9b4aa commit 2d0f17f

22 files changed

+88
-35
lines changed

Sources/Applicators/anyOf.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ func anyOf(context: Context, anyOf: Any, instance: Any, schema: [String: Any]) t
77
return AnySequence([
88
ValidationError(
99
"\(instance) does not meet anyOf validation rules.",
10-
instanceLocation: context.instanceLocation
10+
instanceLocation: context.instanceLocation,
11+
keywordLocation: context.keywordLocation
1112
),
1213
])
1314
}

Sources/Applicators/contains.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ func contains(context: Context, contains: Any, instance: Any, schema: [String: A
3131
return AnySequence([
3232
ValidationError(
3333
"\(instance) does not match contains + maxContains \(max)",
34-
instanceLocation: context.instanceLocation
34+
instanceLocation: context.instanceLocation,
35+
keywordLocation: context.keywordLocation
3536
)
3637
])
3738
}
@@ -43,7 +44,8 @@ func contains(context: Context, contains: Any, instance: Any, schema: [String: A
4344
return AnySequence([
4445
ValidationError(
4546
"'\(instance) does not match contains",
46-
instanceLocation: context.instanceLocation
47+
instanceLocation: context.instanceLocation,
48+
keywordLocation: context.keywordLocation
4749
)
4850
])
4951
}

Sources/Applicators/dependencies.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ func dependencies(context: Context, dependencies: Any, instance: Any, schema: [S
1616
results.append(AnySequence([
1717
ValidationError(
1818
"'\(key)' is a dependency for '\(property)'",
19-
instanceLocation: context.instanceLocation
19+
instanceLocation: context.instanceLocation,
20+
keywordLocation: context.keywordLocation
2021
),
2122
]))
2223
}

Sources/Applicators/not.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ func not(context: Context, not: Any, instance: Any, schema: [String: Any]) throw
66
return AnySequence([
77
ValidationError(
88
"'\(instance)' does not match 'not' validation.",
9-
instanceLocation: context.instanceLocation
9+
instanceLocation: context.instanceLocation,
10+
keywordLocation: context.keywordLocation
1011
)
1112
])
1213
}

Sources/Applicators/oneOf.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ func oneOf(context: Context, oneOf: Any, instance: Any, schema: [String: Any]) t
77
return AnySequence([
88
ValidationError(
99
"Only one value from `oneOf` should be met",
10-
instanceLocation: context.instanceLocation
10+
instanceLocation: context.instanceLocation,
11+
keywordLocation: context.keywordLocation
1112
),
1213
])
1314
}

Sources/Applicators/patternProperties.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ func patternProperties(context: Context, patternProperties: Any, instance: Any,
2828
return AnySequence([
2929
ValidationError(
3030
"[Schema] '\(pattern)' is not a valid regex pattern for patternProperties",
31-
instanceLocation: context.instanceLocation
31+
instanceLocation: context.instanceLocation,
32+
keywordLocation: context.keywordLocation
3233
),
3334
])
3435
}

Sources/Validation/const.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ func const(context: Context, const: Any, instance: Any, schema: [String: Any]) -
99
return AnySequence([
1010
ValidationError(
1111
"'\(instance)' is not equal to const '\(const)'",
12-
instanceLocation: context.instanceLocation
12+
instanceLocation: context.instanceLocation,
13+
keywordLocation: context.keywordLocation
1314
)
1415
])
1516
}

Sources/Validation/minMaxItems.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ func validateArrayLength(_ context: Context, _ rhs: Int, comparitor: @escaping (
55
return AnySequence([
66
ValidationError(
77
error,
8-
instanceLocation: context.instanceLocation
8+
instanceLocation: context.instanceLocation,
9+
keywordLocation: context.keywordLocation
910
)
1011
])
1112
}

Sources/Validation/minMaxLength.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ func validateLength(_ context: Context, _ comparitor: @escaping ((Int, Int) -> (
33
if let value = value as? String {
44
if !comparitor(value.count, length) {
55
return AnySequence([
6-
ValidationError(error, instanceLocation: context.instanceLocation),
6+
ValidationError(
7+
error,
8+
instanceLocation: context.instanceLocation,
9+
keywordLocation: context.keywordLocation
10+
),
711
])
812
}
913
}

Sources/Validation/minMaxNumber.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,22 @@ func validateNumericLength(_ context: Context, _ length: Double, comparitor: @es
44
if exclusive ?? false {
55
if !exclusiveComparitor(value, length) {
66
return AnySequence([
7-
ValidationError(error, instanceLocation: context.instanceLocation),
7+
ValidationError(
8+
error,
9+
instanceLocation: context.instanceLocation,
10+
keywordLocation: context.keywordLocation
11+
)
812
])
913
}
1014
}
1115

1216
if !comparitor(value, length) {
1317
return AnySequence([
14-
ValidationError(error, instanceLocation: context.instanceLocation),
18+
ValidationError(
19+
error,
20+
instanceLocation: context.instanceLocation,
21+
keywordLocation: context.keywordLocation
22+
)
1523
])
1624
}
1725
}

0 commit comments

Comments
 (0)