14个不稳定版本 (6个破坏性更新)
使用旧的Rust 2015
0.8.0 | 2019年4月21日 |
---|---|
0.7.1 | 2019年2月3日 |
0.7.0 | 2018年11月8日 |
0.6.0 | 2018年7月29日 |
0.4.4 | 2017年7月9日 |
#2293 in 开发工具
每月下载量233
在cargo-src中使用
57KB
1.5K SLoC
⚠️ RLS不再受支持
RLS已被弃用,不再受支持。它已被rust-analyzer取代。建议用户卸载RLS,并按照rust-analyzer手册中的说明为您的编辑器安装它。
Rust语言服务器(RLS)
RLS提供了一个在后台运行的服务器,为IDE、编辑器和其他工具提供关于Rust程序的信息。它支持诸如“转到定义”、“符号搜索”、“重新格式化”和“代码完成”等功能,并支持重命名和重构。
架构的高级概述可以在这里找到。
RLS从编译器和Racer获取源数据。尽可能使用编译器提供的数据,这些数据是精确和完整的。在不可能的情况下(例如,对于代码完成,并且构建速度太慢时),它使用Racer。
由于Rust编译器尚未支持端到端的增量编译,我们无法提供完美的体验。然而,通过优化我们对编译器的使用并回退到Racer,我们可以为小型到中型crate提供相当不错的体验。随着RLS和编译器的演变,我们将为更大和更大的crate提供更好的体验。
RLS被设计为前端无关。我们希望它将被不同的编辑器和IDE广泛采用。为了促进开发,我们为Visual Studio Code提供了一个RLS前端的参考实现。
设置
步骤1:安装rustup
您可以在许多平台上安装rustup。这将帮助我们快速安装RLS及其依赖项。
如果您已经安装了rustup,请更新以确保您拥有最新的rustup和编译器
rustup update
如果您打算使用VSCode扩展,您可以跳过步骤2。
步骤 2:安装 RLS
安装 rustup 后,运行以下命令
rustup component add rls rust-analysis rust-src
错误:组件 'rls' 不可下载(nightly)
rustc 内部的开发节奏非常快。依赖于 nightly 内部的下游项目,尤其是 clippy,可能会相当频繁地出现问题。
当出现这种问题时,nightly 版本将缺少 rls。与不发布当天版本的其他选项相比,这是一个权衡,但它避免了阻塞不需要 clippy/rls 的人的 rust nightly 版本。
为了缓解我们遇到的问题
- 如果更新缺少您当前拥有的任何组件,rustup 将会警告。这意味着您不再会意外地更新到没有 rls 的版本。一旦 rls 再次可用,它就会更新。
- rls 和 clippy 在稳定通道上可用。这意味着大多数首次安装的开发者应该使用稳定版。
- 但是,如果您需要最新的 nightly rls,可以使用 https://rust-lang.github.io/rustup-components-history/ 找到并安装特定日期的 nightly 版本,例如
rustup install nightly-2018-12-06
。
也请参阅 #641。
运行
RLS 被构建为与许多 IDE 和编辑器一起工作,我们主要使用 VSCode 来测试 RLS。最简单的方法是使用 发布的扩展。
当您在状态栏底部看到这个旋转指示器时,您就会知道它正在运行
RLS:正在运行 ◐
一旦您看到
RLS
那么您就有了一整套可用功能。您可以跳转到定义、查找所有引用、重命名、跳转到类型等。还可以使用 Racer 提供的启发式方法获得补全。随着您键入,您的代码将被检查,并且在发生错误时将报告错误波浪线。您可以将鼠标悬停在波浪线上以查看错误文本。
配置
RLS 可以根据每个项目进行配置;使用 Visual Studio Code 扩展,这将通过工作区设置文件 settings.json
完成。
其他编辑器将有自己的方式来发送 workspace/DidChangeConfiguration 方法。选项嵌套在 rust
对象中,因此您的 LSP 客户端可能会发送 {"settings":{"rust":{"unstable_features":true}}}
作为参数。
此文件中的条目将影响 RLS 的操作方式和构建项目的方式。
目前我们接受以下选项
unstable_features
(bool
,默认值为false
) 启用不稳定功能。目前没有任何选项需要此标志。sysroot
(String
,默认值为""
) 如果提供的字符串不为空,则在尝试自动检测 sysroot 的同时,使用提供的路径作为所有 rustc 调用的 sysroottarget
(String
,默认为""
)如果给定的字符串不为空,则使用给定的目标三元组进行所有rustc调用。wait_to_build
(u64
)覆盖构建延迟时间(毫秒)。否则,它将自动由最新的构建持续时间推断。all_targets
(bool
,默认为true
)检查项目,就像您正在运行cargo check --all-targets
一样。即,检查所有目标和集成测试。crate_blacklist
([String]
,默认为此列表)允许指定RLS应该跳过的哪些crate。默认情况下,跳过那些体积较大但用户可能不太感兴趣的库,从而减少构建延迟。build_on_save
(bool
,默认为false
)切换RLS是否执行连续分析,或仅在文件保存后执行。features
([String]
,默认为空)列出要启用的Cargo功能。all_features
(bool
,默认为false
)启用所有Cargo功能。no_default_features
(bool
,默认为false
)禁用默认的Cargo功能。racer_completion
(bool
,默认为true
)启用使用racer(目前,这是我们的唯一代码补全后端)进行代码补全。还启用悬停工具提示和转到定义,当保存分析数据不可用时,将回退到racer。clippy_preference
(String
,默认为""
)控制clippy诊断的积极性。有效值是(不区分大小写)""
禁用clippy检查。""
显示与不带参数调用的命令行clippy相同的诊断(clippy::all
,除非被覆盖)。""
仅显示在代码中显式启用的lint。首先,在每个您想要lint的crate的根部添加#![warn[(clippy::all)]]
。
以及以下不稳定选项
build_lib
(bool
,默认为false
) 检查项目,相当于在 cargo 中传递了--lib
参数。与build_bin
互斥,并且优先于build_bin
。build_bin
(String
,默认为空字符串""
) 检查项目,相当于在 cargo 中传递了-- bin <build_bin>
参数。与build_lib
互斥。cfg_test
(bool
,默认为false
) 检查项目,相当于运行了cargo test
而不是cargo build
。即编译(但不运行)测试代码。full_docs
(bool
,默认为false
) 指示 rustc 使用完整源文档填充保存分析数据。当设置为false
时,只有第一段会被记录。这个选项目前对悬停提示的影响很小。当源提取失败时,才会使用保存分析文档。此选项对标准库没有影响。show_hover_context
(bool
,默认为true
) 当可用时,在悬停提示中显示额外的上下文。这通常是局部变量声明。当设置为 false 时,内容仅在按住某些编辑器的ctrl
键时才可用。
故障排除
有关调试和故障排除的提示,请参阅 debugging.md。
贡献
您可以在本存储库中的 contributing.md 中了解更多关于如何为此项目做出贡献的信息。
如果您想在编辑器中实现 RLS 支持,请参阅 clients.md。
依赖关系
~155–440KB