1

这是一个很长的帖子,对不起。

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

浪费了 3 天,在线搜索,尝试不同的教程/视频 - 没有任何效果 + 大部分材料来自 2017 年。我尝试过 Matrix 聊天,但没有人知道该怎么做。Git 也没有解决方案,因为人们一直在建议非常随机的事情,例如“将 toml 文件中的这个变量更改为其他内容,然后再返回”

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

试过stable, beta, nightly(for racer) 刚刚再次进行了全新安装:

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

Rust is installed now. Great!

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

  2. 创建了一个新项目:cargo new test_projrand = "0.6"在 [dependencies] 中添加了新项目并使用了 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.由 Rust (rls)

  4. 我还安装了与 Python、C++ 和 Java 一起使用的“代码运行器”扩展,以在编辑器中运行代码。


所以现在我只有主函数,它在编辑器中运行得很好:

在此处输入图像描述

在此处输入图像描述


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

在此处输入图像描述

在此处输入图像描述


但现在它停止工作:

在此处输入图像描述


好的,我将完成代码并尝试运行它,现在我们不能再运行它了,因为 crate 丢失了:

在此处输入图像描述


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

在此处输入图像描述

在此处输入图像描述

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


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

在此处输入图像描述

所以它确实工作得很好。

很抱歉发了这么长的帖子,但我现在已经浪费了 3 天,但它仍然无法启动和运行。有没有人设法设置这个?

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

基本上,在两个具有调试功能的编辑器(VSCode 和 Atom)中,与 Intellij Rust 不同,它们都不适合我,而且我无法在 Rust 中编码,因为工具已经损坏/不够成熟,无法用于生产性工作。如果我错了,请告诉我,这只是一个小标志的情况,每个人都忘记提及,在某些配置中丢失。

4

2 回答 2

4

精简版

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

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


长版

编辑器看不到任何 crate,因此您无法从编辑器运行代码。

Rust: cargo build任务不起作用,因为您打开的目录不是“Rust 项目”(Cargo 包),它是一个包含另一个目录的目录,这是一个 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


自动完成不起作用(仅适用于标准,不适用于您添加的额外箱子)。

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

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

或者,我听说过关于使用 IntelliJ + Rust 插件的赞美,但我自己还没有使用过。

于 2020-01-16T16:23:09.793 回答
1

我已经弄清楚了一部分:从 VSCode 中运行代码的问题。我不得不为 rust 修改默认的 code-runner 命令:

原始命令:

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

变成:

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

现在它可以工作了,我可以快速运行我的代码。

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

或者,我听说过关于使用 IntelliJ + Rust 插件的赞美,但我自己还没有使用它。

正如我在上一篇文章 IntelliJ 中提到的,免费版没有我所看到的调试器。我需要它。

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

于 2020-01-16T19:49:43.067 回答