make 'then' blocks transparent by default (#654)

This commit is contained in:
Jesse Plamondon-Willard 2019-08-06 05:14:02 -04:00
parent 5679df8d66
commit 6036fbf050
No known key found for this signature in database
GPG Key ID: CF8B1456B3E29F49
3 changed files with 16 additions and 14 deletions

View File

@ -85,9 +85,7 @@ Error messages may contain special tokens:
The child errors themselves may be marked `$transparent`, etc. If an error has no child errors,
this override is ignored.
Caveats:
* To override an error from a `then` block, the `@errorMessages` must be inside the `then` block
instead of adjacent.
Validation errors for `then` blocks are transparent by default, unless overridden.
</dd>
</dl>

View File

@ -213,7 +213,7 @@ namespace StardewModdingAPI.Web.Controllers
private IEnumerable<JsonValidatorErrorModel> GetErrorModels(ValidationError error)
{
// skip through transparent errors
if (this.GetOverrideError(error) == this.TransparentToken && error.ChildErrors.Any())
if (this.IsTransparentError(error))
{
foreach (var model in error.ChildErrors.SelectMany(this.GetErrorModels))
yield return model;
@ -240,7 +240,7 @@ namespace StardewModdingAPI.Web.Controllers
return message;
// skip through transparent errors
while (this.GetOverrideError(error) == this.TransparentToken && error.ChildErrors.Count == 1)
if (this.IsTransparentError(error))
error = error.ChildErrors[0];
// get friendly representation of main error
@ -266,6 +266,19 @@ namespace StardewModdingAPI.Web.Controllers
return message;
}
/// <summary>Get whether a validation error should be omitted in favor of its child errors in user-facing error messages.</summary>
/// <param name="error">The error to check.</param>
private bool IsTransparentError(ValidationError error)
{
if (!error.ChildErrors.Any())
return false;
string @override = this.GetOverrideError(error);
return
@override == this.TransparentToken
|| (error.ErrorType == ErrorType.Then && @override == null);
}
/// <summary>Get an override error from the JSON schema, if any.</summary>
/// <param name="error">The schema validation error.</param>
private string GetOverrideError(ValidationError error)

View File

@ -273,9 +273,6 @@
"required": [ "FromFile" ],
"propertyNames": {
"enum": [ "Action", "Target", "LogName", "Enabled", "When", "FromFile" ]
},
"@errorMessages": {
"then": "$transparent"
}
}
},
@ -289,9 +286,6 @@
"required": [ "FromFile" ],
"propertyNames": {
"enum": [ "Action", "Target", "LogName", "Enabled", "When", "FromFile", "FromArea", "ToArea", "PatchMode" ]
},
"@errorMessages": {
"then": "$transparent"
}
}
},
@ -304,9 +298,6 @@
"then": {
"propertyNames": {
"enum": [ "Action", "Target", "LogName", "Enabled", "When", "Fields", "Entries", "MoveEntries" ]
},
"@errorMessages": {
"then": "$transparent"
}
}
},