プロジェクトで最新の nightly
を使おうとした時に、ソースコードのコンパイルは通っても、開発支援ツールのダウンロードやインストールに失敗することがあります。
探し方
まずは適当なディレクトリで $ cargo init
します。これはこの後の試行錯誤の時間を短くするためです。
$ cd /tmp
$ cargo init foo
$ cd foo/
後は rust-toolchain
を追加し、日付を徐々に古くしつつチェック用の一連のインストールコマンドを実行していきます。
※ rust-toolchain
についてはこの辺りをご参考に。
記事を書いている時点での最新の nightly
は nightly-2019-10-31
なので、そこから試していきます。
$ echo nightly-2019-10-31 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
Checking foo v0.1.0 (/private/tmp/foo)
Finished dev [unoptimized + debuginfo] target(s)in 0.35s
info: component 'rustfmt'for target 'x86_64-apple-darwin' is up to date
info: component 'rust-analysis'for target 'x86_64-apple-darwin' is up to date
info: component 'rust-src' is up to date
error: component 'rls'for target 'x86_64-apple-darwin' is unavailable for download for channel nightly-2019-10-31
失敗しました。次は nightly-2019-10-30
を試していきます。
$ echo nightly-2019-10-30 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
...(省略)...
error: component 'rls'for target 'x86_64-apple-darwin' is unavailable for download for channel nightly-2019-10-30
失敗しました。といった感じで、どんどん試していきます。
$ echo nightly-2019-10-29 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
info: syncing channel updates for'nightly-2019-10-29-x86_64-apple-darwin'
info: latest update on 2019-10-29, rust version 1.40.0-nightly (b497e1899 2019-10-28)
error: component 'clippy'for target 'x86_64-apple-darwin' is unavailable for download for channel nightly-2019-10-29
$ echo nightly-2019-10-28 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
...(省略)...
error: component 'rls'for target 'x86_64-apple-darwin' is unavailable for download for channel nightly-2019-10-28
$ echo nightly-2019-10-27 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
...(省略)...
error: component 'rls'for target 'x86_64-apple-darwin' is unavailable for download for channel nightly-2019-10-27
$ echo nightly-2019-10-26 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
...(省略)...
error: component 'rls'for target 'x86_64-apple-darwin' is unavailable for download for channel nightly-2019-10-26
$ echo nightly-2019-10-25 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
...(省略)...
error: component 'clippy'for target 'x86_64-apple-darwin' is unavailable for download for channel nightly-2019-10-25
$ echo nightly-2019-10-24 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
error: process didn't exit successfully: `rustc -vV` (exit code: 1)
--- stderr
error: 'rustc' is not installed for the toolchain 'nightly-2019-10-24-x86_64-apple-darwin'
To install, run `rustup component add rustc --toolchain nightly-2019-10-24-x86_64-apple-darwin`
nightly-2019-10-29
から nightly-2019-10-24
もだめでした。nightly-2019-10-23
を試します。
$ echo nightly-2019-10-23 > rust-toolchain; cargo check && rustup component add rustfmt rust-analysis rust-src rls-preview && cargo install racer --force
info: syncing channel updates for'nightly-2019-10-23-x86_64-apple-darwin'
info: latest update on 2019-10-23, rust version 1.40.0-nightly (d6e4028a0 2019-10-23)
info: downloading component 'cargo'
info: downloading component 'clippy'
...(省略)...
info: downloading component 'rls'
info: installing component 'rls'
Updating crates.io index
Installing racer v2.1.28
Compiling libc v0.2.65
...(省略)...
Compiling racer v2.1.28
Finished release [optimized] target(s)in 2m 54s
Replacing /Users/daichi/.cargo/bin/racer
Replaced package `racer v2.1.28` with `racer v2.1.28`(executable `racer`)
成功しました。というわけで、今回の場合は nightly-2019-10-23
がちゃんと動く最新の nightly
とわかりました。
その他
普段 https://github.com/autozimu/LanguageClient-neovimを使っていまして、その設定内では例えば rustup run nightly-2019-10-23 rls
が呼ばれるように書かなければならないのですが、<toolchain>
の部分 (nightly-2019-10-23
) は必ず指定しなければなりません。rust-toolchain
を書き換えるたびにこの設定を書き直すのは面倒だし忘れてしまいます。なので自分はこんなふうに書くようにしました。
letg:LanguageClient_serverCommands={ \'rust':['rustup','run', system("echo -n $(cat rust-toolchain)"),'rls'], \}