Rust

RTK に issue 立ててプルリク作った話

TL;DR — RTK に立てた issue が1週間放置されたので自分でプルリクを出した。run_in_terminal の未認識バグを修正し、重複関数を統合。ローカル確認では mise と linuxbrew の PATH 競合に引っかかったが解決し、PR #1800 を提出した。

前の記事で「引き続き更新を待つかぁ」と書いたやつの続き。

1週間待ったけど動きがなかった

Issue #1425 を立てたあと、1週間ほど本体の動向を見ていた。メンテナさんも忙しいだろうし、そんなもんかと思っていたけど、なかなか動きがない…

うん。待つの飽きた。

「どうせなら自分でプルリクを出してしまえ」

リファクタしてからプルリクを作る

ローカルには fix(hooks): VS Code Copilot Chat... というコミットがすでにあった。ただそのまま出すのは品質的に不安だったので、upstream/develop ベースでブランチを切り直して cherry-pick し、ついでに既存のコードベースのお作法を調査してリファクタも入れた。

変更の内容は3つ:

  1. detect_format()"run_in_terminal" を追加 VS Code Copilot Chat が渡す tool_name の値で、これが認識されないとフックが PassThrough になっていた。根本的なバグ修正。

  2. handle_vscode()handle_copilot_cli()handle_copilot_rewrite() に統合 ほぼ同じロジックが2関数に分散していたので1つにまとめた。

  3. VS Code 向けのレスポンスを allow/ask + updatedInput から deny + suggestion に変更 前の記事で書いた「承認ループ」の回避。Copilot Chat は updatedInput を承認後に無視するので、Copilot CLI と同じ deny + reason 方式に統一した(詳細は #1425)。

mise + linuxbrew 環境で cargo install したバイナリが VSCode に認識されない問題

TL;DRmise で Rust を管理している環境では .cargo/env が no-op になる。.profileexport PATH="$HOME/.cargo/bin:$PATH" と無条件に書くのが確実。

前の記事RTK のバグ報告のために深夜にせこせこやってたんですよ。

で、cargo install --path . してローカルのバイナリで確認しようとしたら、Claude Code が旧バイナリを使い続ける。小一時間ハマってイライラしたので記録しておく。

症状

cargo install --path .   # ローカル fix 済みバイナリをインストール
which rtk                # → /home/linuxbrew/.linuxbrew/bin/rtk  ← 旧バイナリ

~/.cargo/bin/rtk のはずが、linuxbrew の rtk が勝っている。

なにやっても変わらねぇ…

調査

PATH の順序

1  ~/.local/share/mise/shims
2  /home/linuxbrew/.linuxbrew/bin   ← ここで rtk を拾う
...
7  ~/.cargo/bin

linuxbrew が .cargo/bin より前にいるんでよくある単純な PATH 順の問題だろうと甘く見てました。はい。

そこからはまりまくった。

.bashrc に追記しても効かない

Claude さんのおすすめにより、.bashrc 末尾に . "$HOME/.cargo/env" を追記して VSCode を再起動、結果変わらず。そりゃそうだろ。前調べた時って非インタラクティブじゃなかったっけ?