跳转至

场景根节点契约检查

GFSceneContractTools 用于在编辑器工具、导入预检、CI 或测试里检查场景根节点是否满足调用方声明的通用契约。它只处理根节点类型、脚本继承、分组、名称和资源路径,不规定项目的实体/组件目录、玩法字段或初始化方法。

核心模型

var report := GFSceneContractTools.check_scene_directory("res://game/scenes", {
    "base_class": "Node2D",
    "base_script": preload("res://game/contracts/base_scene_root.gd"),
    "required_groups": PackedStringArray(["loadable_scene"]),
    "name_suffix": "Root",
}, {
    "recursive": true,
    "include_patterns": PackedStringArray(["**/*.tscn"]),
})

if not report["ok"]:
    push_error(report["summary"])

校验套件

需要接入 GFValidationSuite 时,可用 make_validation_rule() 生成普通 GFValidationRule。默认规则只作用于 Node,适合配合 GFValidationRunnerPackedScene 自动实例化根节点后再检查。

var suite := GFValidationSuite.new()
suite.include_paths = PackedStringArray(["res://game/scenes"])
suite.add_rule(GFSceneContractTools.make_validation_rule({
    "required_groups": PackedStringArray(["loadable_scene"]),
    "path_suffix": ".tscn",
}))

var validation_report := GFValidationRunner.new().run_suite(suite)

脚本结构

如果要检查根脚本的公开方法、属性或信号,把 script_structure 传给契约即可;该字段复用 GFScriptStructureTools.check_script_structure(),因此仍然保持“声明什么才检查什么”的边界。

var scene_report := GFSceneContractTools.check_scene_path("res://game/scenes/menu.tscn", {
    "script_structure": {
        "required_methods": PackedStringArray(["open", "close"]),
        "required_signals": PackedStringArray(["closed"]),
    },
})

使用边界

这类检查适合发现资源库里“看起来像某类场景但根节点缺少必要形状”的问题。具体哪些分组、脚本基类、命名或路径模式有效,仍由项目层声明;GF 不内置任何业务场景分类。