1
0
Files
PPTX/openspec/changes/archive/2026-03-03-enhance-visible-condition-rendering/tasks.md
lanyuanxiaoyao 16ca9d77cd feat: 增强模板条件渲染表达式支持
使用 simpleeval 库替换原有的简单正则匹配,支持复杂的条件表达式评估。新增 ConditionEvaluator 类处理条件逻辑,支持比较运算、逻辑运算、成员测试、数学计算和内置函数,同时保持向后兼容性。
2026-03-03 17:28:23 +08:00

56 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. 依赖和环境准备
- [x] 1.1 确认 simpleeval 已安装(已在探索阶段完成)
- [x] 1.2 验证 simpleeval 版本和功能可用性
## 2. 核心实现
- [x] 2.1 创建 core/condition_evaluator.py 文件
- [x] 2.2 实现 ConditionEvaluator 类的基本结构
- [x] 2.3 实现 _get_evaluator 方法,配置 EvalWithCompoundTypes
- [x] 2.4 实现 _extract_expression 方法,提取表达式内容
- [x] 2.5 实现 evaluate_condition 方法,集成 simpleeval
- [x] 2.6 实现错误处理,映射 simpleeval 异常到 YAMLError
- [x] 2.7 添加表达式长度限制MAX_EXPRESSION_LENGTH = 500
- [x] 2.8 配置白名单函数len, bool, abs, min, max
## 3. 集成到 Template 类
- [x] 3.1 在 Template.__init__ 中初始化 ConditionEvaluator
- [x] 3.2 修改 Template.evaluate_condition 方法,委托给 ConditionEvaluator
- [x] 3.3 移除旧的正则匹配实现代码
- [x] 3.4 确保 Template.render 方法正确调用新的 evaluate_condition
## 4. 测试实现
- [x] 4.1 创建 tests/unit/test_condition_evaluator.py 文件
- [x] 4.2 测试比较运算符(==, !=, >, <, >=, <=
- [x] 4.3 测试逻辑运算符and, or, not
- [x] 4.4 测试成员测试in, not in
- [x] 4.5 测试列表和元组字面量
- [x] 4.6 测试数学运算(+, -, *, /, %, **
- [x] 4.7 测试内置函数int, float, str, len, bool, abs, min, max
- [x] 4.8 测试复杂逻辑组合表达式
- [x] 4.9 测试错误处理(变量未定义、函数未定义、语法错误)
- [x] 4.10 测试安全限制(表达式过长、禁止的特性)
- [x] 4.11 更新 tests/unit/test_template.py 中的条件渲染测试
- [x] 4.12 添加集成测试,验证完整的模板渲染流程
## 5. 文档更新
- [x] 5.1 更新 README.md 的条件渲染章节
- [x] 5.2 添加新的表达式语法示例到 README.md
- [x] 5.3 添加支持的操作符和函数列表到 README.md
- [x] 5.4 更新 README_DEV.md说明 ConditionEvaluator 架构
- [x] 5.5 更新 README_DEV.md说明 simpleeval 集成和安全策略
- [x] 5.6 创建或更新示例文件,展示新的条件表达式能力
## 6. 验证和清理
- [x] 6.1 运行完整测试套件,确保所有测试通过
- [x] 6.2 手动测试各种表达式场景
- [x] 6.3 验证错误信息的清晰度和有用性
- [x] 6.4 检查代码风格和注释完整性
- [x] 6.5 清理 temp 目录中的临时文件(保留有用的示例)
- [x] 6.6 确认没有遗留的调试代码或注释