跳转至

校验规则套件与 Runner

当项目需要把一组资源、场景或运行时对象纳入同一套质量检查时,可以用资源化套件组织规则,再由 Runner 聚合成 GFValidationReport

规则不会按约定调用项目脚本方法;只有显式设置的 Callable 或子类重写的 _validate() 会参与校验,因此框架不会把业务字段、节点命名或资源类型写死进标准库。

套件示例

var rule := GFValidationRule.new().configure(
    &"node_name_required",
    func(target: Variant, report: GFValidationReport, _context: Dictionary) -> Variant:
        var node := target as Node
        if node != null and String(node.name).is_empty():
            report.add_error(&"empty_name", "Node name is empty.")
        return null,
    { "target_kind": GFValidationRule.TargetKind.NODE }
)

var suite := GFValidationSuite.new()
suite.suite_id = &"scene_health"
suite.include_paths = PackedStringArray(["res://levels"])
suite.scene_extensions = PackedStringArray(["tscn"])
suite.add_rule(rule)

var report := GFValidationRunner.new().run_suite(suite)
var junit_xml := GFValidationJUnitExporter.export_report(report, {
    "suite_name": "Scene Health",
})

运行边界

GFValidationSuite 只保存规则、include/exclude 路径、支持扩展名和是否把 warning 当 error。GFValidationRunner 可以直接校验对象数组,也可以加载路径;遇到 PackedScene 时默认会额外实例化根节点给 Node 规则检查。

路径扫描只按扩展名和显式排除规则工作,不推断项目资源目录职责。collect_paths() 默认限制 max_scan_depth = 32max_collected_paths = 10000;需要深度扫描时可以显式调高,设为 0 表示不限制。

GFValidationJUnitExporter 只把报告转成 CI 友好的 XML 字符串,构建是否失败、报告保存到哪里、如何展示问题都留给项目或流水线决定。