rtk-ai/rtk

feat(tool-modules): propagate pnpm_filter to all affected run() functions

Open

#516 ouverte le 11 mars 2026

Voir sur GitHub
 (1 commentaire) (0 réactions) (0 assignés)Rust (2 914 forks)batch import
area:clieffort-mediumenhancementhelp wantedpriority:medium

Métriques du dépôt

Stars
 (48 085 stars)
Métriques de merge PR
 (Merge moyen 11j 1h) (45 PRs mergées en 30 j)

Description

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);

Guide contributeur