使用 simpleeval 库替换原有的简单正则匹配,支持复杂的条件表达式评估。新增 ConditionEvaluator 类处理条件逻辑,支持比较运算、逻辑运算、成员测试、数学计算和内置函数,同时保持向后兼容性。
2.2 KiB
2.2 KiB
Why
当前的 visible 条件渲染功能仅支持简单的非空检查({var != ''}),无法满足实际使用中的复杂条件判断需求。用户需要根据多个变量、逻辑组合、数值比较等条件来控制元素显示,但现有实现过于受限。通过引入成熟的表达式评估库 simpleeval,可以提供强大且安全的条件表达式能力,显著提升模板系统的灵活性。
What Changes
- 引入 simpleeval 库作为条件表达式评估引擎
- 扩展 visible 字段支持的表达式类型:
- 比较运算符:
==,!=,>,<,>=,<= - 逻辑运算符:
and,or,not - 成员测试:
in,not in - 列表/元组字面量:
status in ['draft', 'review'] - 数学运算:
+,-,*,/,%,** - 内置函数:
int(),float(),str(),len(),bool()
- 比较运算符:
- 增强错误处理,提供详细的错误信息和调试提示
- 添加表达式安全限制(最大长度、禁止危险操作)
- BREAKING: 移除旧版本的简单正则匹配实现,统一使用 simpleeval
Capabilities
New Capabilities
enhanced-condition-evaluation: 基于 simpleeval 的增强条件表达式评估能力,支持复杂的逻辑判断、数学运算和成员测试
Modified Capabilities
template-system: 修改模板系统的条件渲染实现,从简单正则匹配升级为完整的表达式评估
Impact
-
代码影响:
core/template.py: 重写evaluate_condition方法loaders/yaml_loader.py: 可能需要更新验证逻辑- 测试文件:需要大幅扩展测试用例覆盖新的表达式类型
-
依赖影响:
- 新增依赖:simpleeval (轻量级,无额外依赖)
- 需要更新
pyproject.toml
-
用户影响:
- BREAKING: 旧的简单实现被移除,但由于旧语法
{var != ''}在新实现中仍然有效,实际兼容性影响较小 - 用户需要学习新的表达式语法(但与 Python 表达式一致,学习成本低)
- 错误信息更详细,调试更容易
- BREAKING: 旧的简单实现被移除,但由于旧语法
-
文档影响:
- README.md: 需要更新条件渲染章节,添加新的表达式示例
- README_DEV.md: 需要说明 simpleeval 集成和安全策略
- 需要添加完整的表达式语法参考文档