volta uninstall node@x.x.x がしたい
いつまで経っても volta uninstall node@x.x.x
コマンドが実装されなくて issue や Discord を見に行ったけど作れない理由がはっきりしないのでコードを読んでみる。Rust は書いたことはおろか読んだことも無いのだけれど。あわよくば実装 & PR して議論の土台にしてもらう。
作れないことは別にないはず。だって rm -rf するだけやし。多分パッケージのキャッシュの削除とかまで一緒にやろうとしてエターナってるんじゃないかと (知らんけど)
まず volta install node@x.x.x
コマンドがどうなっているかを見ると
- コマンドの引数から
Node
struct を作って
-
install
を呼び出している
きれいな実装だねぇ。
volta install
の流れはわかったので volta uninstall
の実装を見る。
今は volta uninstall node@x.x.x
を実行するとエラーが出る仕様。呼ばれるのはここ。
node や yarn の uninstall は ErrorKind::Unimplemented
が出るようになっている。package の uninstall は package::uninstall
が呼ばれている。
コメントに
/// This is implemented on Spec, instead of Resolved, because there is currently no need to
/// resolve the specific version before uninstalling a tool.
と書いてあるが、今やりたいのは volta uninstall node@x.x.x
というバージョンを指定した uninstall なので Spec::uninstall
は使えない。これとは別に Tool::uninstall
を定義しようと思う。(Tool
というのが Spec::resolve
の戻り値型で、コメント中の "Resolved" のことだと思う)
Tool に uninstall 関数を宣言して
impl Tool for Node {}
に実装を書いた
これを PR にして issue に貼って、これではダメですかという感じで議論の材料にしてみることにした。