From ef2b780c394d10f1b05103295d4b61d80051d0e1 Mon Sep 17 00:00:00 2001 From: Liam Date: Tue, 17 Oct 2023 00:16:32 -0400 Subject: [PATCH] ... and add a field name validator --- SchemaValidator/SchemaValidator.cs | 1 + .../Validators/FieldNameValidator.cs | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 SchemaValidator/Validation/Validators/FieldNameValidator.cs diff --git a/SchemaValidator/SchemaValidator.cs b/SchemaValidator/SchemaValidator.cs index 1499b6f..3b518ce 100644 --- a/SchemaValidator/SchemaValidator.cs +++ b/SchemaValidator/SchemaValidator.cs @@ -36,6 +36,7 @@ public class SchemaValidator new ColumnCountValidator(gameData), new IconTypeValidator(gameData), new NamedInnerNamedOuterValidator(gameData), + new FieldNameValidator(gameData), new ModelIdTypeValidator(gameData), new ColorTypeValidator(gameData), new IconPathExistsValidator(gameData), diff --git a/SchemaValidator/Validation/Validators/FieldNameValidator.cs b/SchemaValidator/Validation/Validators/FieldNameValidator.cs new file mode 100644 index 0000000..98cfaac --- /dev/null +++ b/SchemaValidator/Validation/Validators/FieldNameValidator.cs @@ -0,0 +1,43 @@ +using System.Text.RegularExpressions; +using Lumina; +using Lumina.Data.Files.Excel; +using SchemaValidator.New; +using SchemaValidator.Util; + +namespace SchemaValidator.Validation.Validators; + +public partial class FieldNameValidator : Validator +{ + public override string ValidatorName() => "FieldNameValidator"; + private string _sheetName = ""; + + [GeneratedRegex("^[a-zA-Z_][a-zA-Z0-9_]*$", RegexOptions.Compiled)] + private static partial Regex _nameRegex(); + + public override ValidationResults Validate(ExcelHeaderFile exh, Sheet sheet) + { + _sheetName = sheet.Name; + + // I just don't have the brainpower to recurse right now + var flat = SchemaUtil.Flatten(exh, sheet); + + var results = new ValidationResults(); + foreach (var fieldName in flat.Select(d => d.Field.Name).Distinct()) + { + if (string.IsNullOrEmpty(fieldName)) + { + results.Add(ValidationResult.Error(_sheetName, ValidatorName(), "Field name is empty.")); + continue; + } + + if (!_nameRegex().IsMatch(fieldName)) + results.Results.Add(ValidationResult.Error(_sheetName, ValidatorName(), $"Field name {fieldName} is not a valid name.")); + } + + if (results.Results.Count == 0) + return ValidationResults.Success(sheet.Name, ValidatorName()); + return results; + } + + public FieldNameValidator(GameData gameData) : base(gameData) { } +} \ No newline at end of file