From 740d19f0b759aa62871c957e42c59039fded44ef Mon Sep 17 00:00:00 2001 From: Aoran Zeng Date: Sun, 22 Feb 2026 22:33:35 +0800 Subject: [PATCH] =?UTF-8?q?`chef`=20=E8=AE=BE=E7=BD=AE=20scope=20=E8=83=BD?= =?UTF-8?q?=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/chef.c | 57 ++++++++++++++++++++++++++++++++++++ src/recipe/recipe-template.c | 7 ++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/framework/chef.c b/src/framework/chef.c index 8efd54e..ab9e607 100644 --- a/src/framework/chef.c +++ b/src/framework/chef.c @@ -285,6 +285,63 @@ chef_deny_english (Target_t *target) } +/** + * @brief 设置该 target 的作用域能力 + */ +void +chef_set_scope_cap (Target_t *target, Scope_t scope, ScopeCapability_t cap) +{ + xy_cant_be_null (target); + + /* 我们在这里固定好索引的位置,而不是直接用 enum 的值,防止以后顺序或者新增枚举值 */ + if (scope == ProjectScope) + { + target->scope_caps[0] = cap; + } + else if (scope == UserScope) + { + target->scope_caps[1] = cap; + } + else if (scope == SystemScope) + { + target->scope_caps[2] = cap; + } + else + { + chsrc_panic ("无效的 scope 参数"); + } +} + + +/** + * @brief 设置该 target 的默认作用域 + * + * @note 该函数必须在 chef_set_scope_cap() 之后调用,以确保默认作用域的能力已经被明确了 + */ +void +chef_set_default_scope (Target_t *target, Scope_t scope) +{ + xy_cant_be_null (target); + target->default_scope = scope; + + ScopeCapability_t cap = ScopeCap_Unknown; + + if (scope == ProjectScope) + cap = target->scope_caps[0]; + else if (scope == UserScope) + cap = target->scope_caps[1]; + else if (scope == SystemScope) + cap = target->scope_caps[2]; + + /* 防止 chef 们写错 */ + if (cap != ScopeCap_Able_And_Implemented) + { + chsrc_panic ("该作用域未被明确支持,无法设置为默认作用域"); + } +} + + + void chef_allow_local_mode (Target_t *target, Capability_t cap, const char *explain_zh, const char *explain_en) { diff --git a/src/recipe/recipe-template.c b/src/recipe/recipe-template.c index 442e030..cdbaa71 100644 --- a/src/recipe/recipe-template.c +++ b/src/recipe/recipe-template.c @@ -6,7 +6,7 @@ * Contributors : Mikachu2333 * | * Created On : <2024-08-09> - * Last Modified : <2025-08-22> + * Last Modified : <2026-02-22> * ------------------------------------------------------------- * 本文件作为一个通用模板: * @@ -72,6 +72,11 @@ void chef_allow_local_mode (this, PartiallyCan, "具体说明是否支持项目级换源...", "Tell users the local mode support"); + chef_set_scope_cap (this, ProjectScope, ScopeCap_Able_And_Implemented); + chef_set_scope_cap (this, UserScope, ScopeCap_Able_But_NotImplemented); + chef_set_scope_cap (this, SystemScope, ScopeCap_Unable); + chef_set_default_scope (this, UserScope); + // chef_allow_english(this); // 项目是否支持英文 chef_deny_english(this);