rtk-ai/rtk
在 GitHub 查看feat(tool-modules): propagate pnpm_filter to all affected run() functions
Open
#516 建立於 2026年3月11日
area:clieffort-mediumenhancementhelp wantedpriority:medium
倉庫指標
- Star
- (48,085 star)
- PR 合併指標
- (平均合併 11天 1小時) (30 天內合併 45 個 PR)
描述
Part of #512 — pnpm workspace filter support. Depends on #515 (utils).
Phase 4: Tool module signature updates
Each module gets pnpm_filter: Option<&str> added to its run() signature. The change is mechanical: replace command construction with filtered variant.
src/prettier_cmd.rs
pub fn run(args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()> {
let mut cmd = package_manager_filtered_exec("prettier", pnpm_filter);
// ...
}
src/format_cmd.rs
pub fn run(args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()> {
let mut cmd = match formatter.as_str() {
"prettier" => package_manager_filtered_exec("prettier", pnpm_filter),
"biome" => package_manager_filtered_exec("biome", pnpm_filter),
// ...
};
}
src/vitest_cmd.rs
pub fn run(cmd: VitestCommand, args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()> {
match cmd {
VitestCommand::Run => run_vitest(args, verbose, pnpm_filter),
}
}
fn run_vitest(args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()> {
let mut cmd = package_manager_filtered_exec("vitest", pnpm_filter);
// ...
}
src/lint_cmd.rs
pub fn run(args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()> {
let mut cmd = if is_python_linter(linter) {
Command::new(linter)
} else {
package_manager_filtered_exec(linter, pnpm_filter)
};
// ...
}
src/tsc_cmd.rs
Custom logic (doesn't use package_manager_exec):
pub fn run(args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()> {
let mut cmd = if let Some(workspace) = pnpm_filter {
let mut c = Command::new("pnpm");
c.arg("--filter").arg(workspace).arg("exec").arg("--").arg("tsc");
c
} else {
// existing which tsc / npx tsc fallback logic
};
// ...
}
src/playwright_cmd.rs
Custom logic (doesn't use package_manager_exec):
pub fn run(args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()> {
let mut cmd = if let Some(workspace) = pnpm_filter {
let mut c = std::process::Command::new("pnpm");
c.arg("--filter").arg(workspace).arg("exec").arg("--").arg("playwright");
c
} else {
// existing detect_package_manager() logic
};
// ...
}
src/pnpm_cmd.rs
4 Command::new("pnpm") sites — inject --filter workspace before subcommand args:
pub fn run(cmd: PnpmCommand, args: &[String], verbose: u8, pnpm_filter: Option<&str>) -> Result<()>
pub fn run_passthrough(args: &[OsString], verbose: u8, pnpm_filter: Option<&str>) -> Result<()>
For run_list, run_outdated, run_install:
let mut cmd = Command::new("pnpm");
if let Some(workspace) = pnpm_filter {
cmd.arg("--filter").arg(workspace);
}
cmd.arg("list"); // or "outdated" / "install"
For run_passthrough:
let mut cmd = Command::new("pnpm");
if let Some(workspace) = pnpm_filter {
cmd.arg("--filter").arg(workspace);
}
cmd.args(args);