03 · Refactor — Rename Across Files
重命名函数是多文件重构的范式。本案例构造一个小项目:load_config
出现在 4 个文件里,让 DSCC 全部改成
load_settings,不碰无关代码。
演示能力
grep_search在改之前先枚举调用点。edit_file(replace_all或精确行替换)跨多个文件修改。WorkspaceWrite权限模式。
准备
在空目录里:
git init refactor-demo && cd refactor-demo
cargo init --lib
mkdir -p src/bin
cat > src/config.rs <<'RS'
pub fn load_config() -> String { "default".into() }
RS
cat > src/lib.rs <<'RS'
pub mod config;
pub use config::load_config;
pub fn describe() -> String {
format!("cfg={}", load_config())
}
RS
cat > src/bin/app.rs <<'RS'
use refactor_demo::load_config;
fn main() { println!("{}", load_config()); }
RS
cat > tests/smoke.rs <<'RS'
use refactor_demo::load_config;
#[test] fn it_loads() { assert_eq!(load_config(), "default"); }
RS
git add -A && git commit -m "initial"
运行命令
dscc --model claude-sonnet-4-6 \
--permission-mode workspace-write \
prompt "$(cat ../dscc_cli/docs/cookbook/03-refactor-rename/PROMPT.md)"
真实运行产物见 report_dscc.md,最终 diff 见 diff.patch。
注:模型会用
git grep自查,因此无人值守运行请用--permission-mode danger-full-access或用PreToolUse钩子自动放行git *。
预期行为
模型通常会:
grep_search搜load_config,列出 4 个文件。- 对每个文件一次
edit_file(或replace_all: true)。 - 可能再跑一次
bashcargo check确认构建。
不应出现无关改动。
验收
git grep load_config无匹配。git grep load_settings出现 4 处(定义 + 3 个调用)。cargo build通过。git diff --stat只动了那 4 个文件。
权限选择依据见 guides/permissions.md。