1
Fork 0
mirror of https://github.com/xivdev/EXDSchema.git synced 2025-06-06 16:17:46 +00:00
EXDSchema/SchemaValidator/Validation/Validators/NamedInnerNamedOuterValidator.cs

56 lines
No EOL
1.4 KiB
C#

using Lumina;
using Lumina.Data.Files.Excel;
using SchemaValidator.New;
namespace SchemaValidator.Validation.Validators;
public class NamedInnerNamedOuterValidator : Validator
{
public override string ValidatorName() => "NamedInnerNamedOuterValidator";
private string _sheetName = "";
public override ValidationResults Validate(ExcelHeaderFile exh, Sheet sheet)
{
_sheetName = sheet.Name;
var results = new ValidationResults();
foreach (var field in sheet.Fields)
{
CheckNames(results, null, field);
}
if (results.Results.Count == 0)
return ValidationResults.Success(sheet.Name, ValidatorName());
return results;
}
public NamedInnerNamedOuterValidator(GameData gameData) : base(gameData) { }
private void CheckNames(ValidationResults results, Field? parentField, Field field)
{
if (parentField != null)
{
if (parentField.Fields.Count == 1 && !string.IsNullOrEmpty(parentField.Name) && !string.IsNullOrEmpty(field.Name) && field.Type == FieldType.Scalar)
{
var msg = $"Parent field {parentField.Name} has a single named field {field.Name}.";
results.Results.Add(ValidationResult.Warning(_sheetName, ValidatorName(), msg));
}
}
if (field.Type != FieldType.Array)
{
// Single field
return;
}
if (field.Type == FieldType.Array)
{
if (field.Fields != null)
{
foreach (var nestedField in field.Fields)
{
CheckNames(results, field, nestedField);
}
}
}
}
}