You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

是否需更换Nightly Rust版本?RLS编译失败的版本切换解决方案咨询

解决RLS编译时expect_none方法不存在的问题

这个方案完全可行!你碰到的问题本质是RLS的旧依赖还在使用已经被Nightly Rust移除的expect_none方法,换个兼容的旧Nightly版本就能搞定,下面是一步步的详细操作:

1. 选对兼容的Nightly版本

RLS已经停止官方维护(现在官方主推rust-analyzer),它的依赖包(比如你遇到的rustc-ap-rustc_span-705.0.0)是绑定到特定Rust Nightly版本的。expect_none大概在2022年年中被从Nightly移除,所以你得选一个还保留这个方法的旧版本,比如nightly-2022-05-01就很合适。

要是想更精准,如果你是从源码编译RLS,可以去看它仓库里的rust-toolchain文件,里面会明确标注它要求的Rust版本。

2. 安装指定的Nightly版本

rustup直接装这个版本就行:

rustup install nightly-2022-05-01

3. 用这个版本编译RLS

有两种方式用上刚装的版本:

方式一:让当前目录默认用这个版本

在RLS的源码目录下执行这条命令,之后该目录下的所有cargo命令都会自动用这个Nightly版本:

rustup override set nightly-2022-05-01

之后直接跑你原来的编译命令就行:

cargo build --release -Z unstable-options

方式二:编译时临时指定版本

不想改目录默认设置的话,直接在编译命令里加版本标识:

cargo +nightly-2022-05-01 build --release -Z unstable-options

4. 验证结果

执行完编译命令后,如果expect_none的错误消失了,说明版本匹配成功,等着编译完成就好。

额外提一句

  • 要是你是克隆RLS源码编译,建议拉取它最后一个稳定标签(比如v1.61.0),避免最新源码的改动带来其他兼容问题。
  • 长期来看,还是建议换成rust-analyzer,它是现在Rust官方主推的语言服务器,功能比RLS完善太多,还一直在更新维护。

内容的提问来源于stack exchange,提问作者Jw C

火山引擎 最新活动