- 优先查看相关文件和上下文,理解代码风格和项目结构。
- 修改代码前,先查看 git 历史(如
git log/git blame/git diff)了解这段代码之前为什么这样改,理解其意图和约束,再决定是否改动。 - 改动前评估影响范围:确认本次改动是否会影响其他调用方、配置或测试,避免引入副作用。
- 每次修改后必须执行以下检查,确保没有错误和警告:
cargo check(需配合环境变量将警告视为错误,根据系统提示词中OS:选择对应语法):- Windows (pwsh):
$env:RUSTFLAGS = "-D warnings"; cargo check 2>&1(注意&&无法连接变量赋值语句,必须用;) - Linux/macOS (bash/zsh):
export RUSTFLAGS="-D warnings" && cargo check 2>&1(export是内建命令,可用&&链式调用)
- Windows (pwsh):
cargo clippy -- -D warningscargo fmt -- --check(如格式化检查失败,先cargo fmt再重新检查)
- 任何命令出现错误或未处理的警告都需要修复,并重新执行全部检查,直到全部通过,才认为本次修改完成。
- 注意:即使检查出的问题不是本次改动引入的,也需要一并修复,而不是仅修复自己的代码。
- 修改涉及行为或逻辑时,必须运行测试验证,不能只通过编译检查。
- 运行测试的命令:
- Windows (pwsh):
cargo test 2>&1 - Linux/macOS (bash/zsh):
cargo test 2>&1
- Windows (pwsh):
- 执行测试时,除当前正在修改的测试外,必须同时运行全局测试(默认
cargo test即运行全部测试),确保本次改动不会引发其他测试失败。 - 若只想运行单个测试,用:
cargo test <测试名筛选词> 2>&1(筛选词会匹配所有包含该词的测试)。 - 测试失败时:
- 先修复失败测试对应的问题;
- 修复后必须重新运行全部测试(
cargo test),确认其他测试也全部通过; - 若全局测试出现与本次改动无关的既有失败,需判断是否由本次改动引入:若为既有问题,需记录并尽量避免扩大影响范围;若为本次改动引入,必须修复直到全部通过。
每次修改后,按以下顺序执行,全部通过才算完成:
cargo check(按OS:选择对应语法,将警告视为错误)cargo clippy -- -D warningscargo fmt -- --checkcargo test(涉及逻辑/行为改动时,运行全部测试确认无回归)
TUI(含 ratatui 渲染)运行期间,绝对禁止任何日志直接写入 stdout/stderr 终端。 任何调试输出、告警、错误信息一旦 print! / println! / eprint! / eprintln! 到终端,就会污染 TUI 的 alternate screen,导致界面错乱、布局被破坏、出现乱码(如 [box_row_line] width mismatch 刷屏)。
硬性约束:
- 所有日志/调试信息一律通过
tracing::debug!/tracing::info!/tracing::warn!/tracing::error!输出——tracing 已全局配置为写入fish-coding-agent.log文件,不会污染终端。 - 严禁在
src/session/render/、src/ui/、src/event/等 TUI 渲染/事件路径中新增任何println!/eprintln!/eprint!/print!或直接写std::stdout/stderr的输出代码。 - 如需在渲染路径中输出调试信息,改用
tracing::warn!(或按级别用debug!)。 - 修改前先
git log/git blame检查:历史上一旦出现eprintln!混入渲染路径,就是本次这类「日志入侵 TUI」问题的复发,务必阻止。 - 新增代码时,若不确定当前上下文是否在 TUI 渲染期间,一律走
tracing,绝不直接写终端。 - 测试代码(
#[cfg(test)]内)中的eprintln!不受此限制,但不得影响生产渲染路径。