VSCode/Atom 期中的完整 Rust 设置

Full Rust setup in VSCode/Atom Issue

这是一篇长文post,抱歉。

我一直在尝试使用 Rust 启动一个项目,但是 运行 遇到了一个问题:它在 VSCode/Atom 中的 Linux 上无法正常工作。

浪费了 3 天时间,在线搜索,尝试不同的 tutorials/videos - 没有任何效果 + 大多数 material 来自 2017 年。我尝试过 Matrix 聊天,但没人知道该怎么做。 Git 也没有解决方案,因为人们一直在建议非常 运行dom 的东西,比如 "change this variable in toml file to something else, and back again"

Git: https://github.com/rust-lang/rls-vscode/issues/513

我安装了(并在过去 3 天里多次重新安装了 rust),它在终端上工作得很好,但在编辑器中却不行。


两期:

  1. 编辑器看不到任何 crate,因此您无法从编辑器中 运行 您的代码。
  2. 自动完成不起作用(仅适用于标准,不适用于您添加的额外板条箱)。

我做了什么(除了很多其他事情):

  1. 安装 Rust(在 Manjaro 和 Debian 计算机上):curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

已尝试 stablebetanightly(针对 racer) 刚刚再次进行全新安装:

stable installed - rustc 1.40.0 (73528e339 2019-12-16)

Rust is installed now. Great!

  1. 在 VSCode 中安装了 Rust (rls) rust-lang.rust 扩展(在 Atom 中安装了 rust)

  2. 创建了一个新项目:cargo new test_proj 并向 [dependencies] 添加了新的 rand = "0.6" 并使用了 cargo build。它确实构建了 rand

  3. 添加 "rust-client.enableMultiProjectSetup": true 到设置文件以避免警告:A Cargo.toml file must be at the root of the workspace in order to support all features. Alternatively set rust-client.enableMultiProjectSetup=true in settings. by Rust (rls)

  4. 我还安装了 'code runner' 扩展,我使用 Python、C++ 和 Java,到 运行 编辑器中的代码.


所以现在我只有主要功能了,运行编辑器还不错:


现在我添加 运行d,它似乎可以工作,并且会自动完成一些...


但现在它停止工作了:


好的,我会完成代码并尝试 运行ning 它,现在我们不能 运行 它了,因为箱子不见了:


好的,让我们试试 Ctrl + Shift + B 并尝试 cargo build:

出于某种奇怪的原因,它正在查找 /media/Work/Work/rust_code 而不是 /media/Work/Work/rust_code/test_proj/


最后一件事:让我们在终端中尝试 运行ning:

所以它确实工作得很好。

抱歉这么久了post,但是我已经浪费了3天了,它仍然无法启动和运行ning。有人设法设置了吗?

它必须是 Atom 或 VSCode 因为我在那里设置了所有其他 languages/projects + VSCode 列在官方 Rust 网站上,所以我认为它应该可以工作.

基本上,在两个具有调试功能的编辑器(VSCode 和 Atom)中,与 Intellij Rust 不同,两者都不适合我,我只是不能在 Rust 中编码,因为工具实际上是broken/not 足够成熟,可以从事富有成效的工作。如果我错了请告诉我,这只是一个小标志的情况,每个人都忘记提及,在某些配置中丢失。

精简版

假设我正确理解了这个问题。然后各种构建问题归结为您尝试构建项目的不同方式,并尝试在不同的目录中这样做。

TL;DR: 您在 VSCode 中打开的目录是 rust_code 目录。关闭它并打开 rust_code/test_proj。现在 Rust: cargo build(或 Rust: cargo run)应该可以工作了。


长版

Editors don't see any crates, so you can't run your code from the editor.

Rust: cargo build 任务不工作,因为您打开的目录不是 "Rust project"(货物包),它是一个包含另一个目录的目录,这是一个 Rust 项目。

看看你的截图显示了这个,看看最上面一行是怎么写的 rust_code/test_proj:

当你执行任务时,Cargo 抱怨 rust_code/Cargo.toml 不存在,这是真的,因为它位于 rust_code/test_proj/Cargo.toml

如果您查看此屏幕截图的输出,您会发现情况是这样的:


此处您正在手动执行 cargo run。但重要的区别在于您位于 rust_code/test_proj 目录中。


最后简单地执行 rustc main.rs 失败了,因为您没有传递所需的参数。所以 rustc 对你的依赖关系一无所知。

尝试执行 cargo build -v 然后您可以看到 Cargo 传递给 rustc.

的所有参数


Autocomplete does not work (only works on std, not on extra crates you add).

尝试打开一个包含 Cargo.toml 的目录,然后代码补全应该适用于依赖项。如果我不这样做,那么我会收到以下通知,并且代码完成仅适用于您所说的标准库。也就是说,RLS 有时很奇怪。

如果我不得不猜测,那么我认为 RLS 会编译代码,并在某个阶段提取所需的信息。因此,如果代码无法编译,那么代码完成可能会受到影响。但这是 100% 有根据的猜测。

或者,我听说过使用 IntelliJ + Rust plugin,但我自己还没有使用它。

我已经弄清楚了一部分:运行在 VSCode 中使用您的代码的问题。我必须修改默认代码-运行 rust 的 ner 命令:

原命令:

"rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt",

更改为:

"rust": "if [ $(basename $dir) = 'examples' ]; then cargo run --example $fileNameWithoutExt; else cargo run; fi",

现在可以使用了,我可以运行 快速编写代码。

第 2 部分:不幸的是,自动完成仍然非常糟糕。我正在使用 RLS。有这个东西racer。是不是更好的选择?

Alternatively, I have heard praise about using IntelliJ + the Rust plugin, but I haven't used it myself yet.

正如我在之前的 post 中提到的,IntelliJ 免费版据我所知没有调试器。我需要它。

我想知道人们如何从 Rust 获得良好的自动完成功能?