10个版本
0.5.4 | 2021年5月30日 |
---|---|
0.5.3 | 2021年1月15日 |
0.5.2 | 2019年8月1日 |
0.5.1 | 2019年4月20日 |
0.1.0 | 2017年3月15日 |
#1984在开发工具中
每月889次下载
在9个crate(6个直接)中使用
15KB
369 行
⚠️ 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
,默认为""
)如果给定的字符串不为空,则在所有 rustc 调用中使用给定的路径作为 sysroot,而不是自动尝试检测 sysroottarget
(String
,默认为""
),如果给定的字符串不为空,则在所有 rustc 调用中使用给定的目标三元组。wait_to_build
(u64
)覆盖构建去抖持续时间(毫秒)。否则,此值将自动通过最新的构建持续时间推断。all_targets
(bool
,默认为true
)检查项目,就像您正在运行cargo check --all-targets
。即,检查所有目标和集成测试。crate_blacklist
([String]
,默认为 此列表)允许指定哪些包应该由 RLS 跳过。默认情况下,跳过那些体积相当大但用户可能不直接感兴趣的库,从而减少构建延迟。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
,默认为"opt-in"
)控制当可用时 clippy 诊断的积极性。有效的值是 (不区分大小写)"off"
禁用 clippy 规范。"on"
显示与不带参数调用的命令行 clippy 相同的诊断(clippy::all
,除非被覆盖)。"opt-in"
仅显示在代码中明确启用的规范 (允许/拒绝规范)。首先将#![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。
依赖项
~110–405KB