RustでWeb開発をしていたある日、朝起きてコードを書こうと思ったら次のようなエラーが出ていました。
proc macro 'main' not expanded: Cannot create expander for ....
エラーの内容
自分はVSCodeにrust-analyzerを入れてRustのコードを書いています。
上記のエラーは手続きマクロ(procedural macro, proc macro)をrust-analyzerがうまく展開してくれないことに起因しているようです。
プログラムは問題なく動くのでおそらくrust-analyzer上での問題だと考えられます。
特にコードや設定を何も変えずに突如として出てきたエラーなので非常に困惑しました。。。
ネットで調べた解決策
ネットで調べると次のようなものが出てくると思います。
VSCodeのダウンロードし直し
VSCodeをuniversal版でダウンロードし直せって言ってます。でも自分は元からuniversal版だったのであまり関係ないかなと。
rust-analyzerをプレリリース版にスイッチ
rust-analyzerをプレリリース版にしろって言ってます。でも自分は元からプレリリース版(v0.4.1415
)だったのでこちらもあまり関係ないかなと。
ちなみにプレリリース版へのアップデートですが、VSCodeの [拡張機能] > [プレリリースバージョンへの切り替え]で簡単にできます。
その他
無理やりな解決策
そもそもrust-analyzerがなんか勘違いしてるっぽいので、rust-analyzerにこのエラーを無視させればいいわけです。
なので、設定からrust-analyzer.diagnostics.disabled
にunresolved-proc-macro
を追加して無視します。
ただ個人的には単純にエラーを無視しているだけで根本的な解決はしていないので、他の方法を取りたいです。
自分の解決方法
なんかrustupをupdateしたらエラーが解決しました。このコマンドによりRustは最新版に更新されます。
$rustup update
(これで解決した理由が分かったら追記)