【问题标题】:Full Rust setup in VSCode/Atom IssueVSCode/Atom 问题中的完整 Rust 设置
【发布时间】:2020-01-16 13:37:13
【问题描述】:

这篇文章很长,抱歉。

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

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

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

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


两个问题:

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

我做了什么(出于许多其他事情):

  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 中生锈)

  2. 创建了一个新项目:cargo new test_proj 并将新的rand = "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. by 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 中编码,因为工具已经损坏/不够成熟生产性工作。如果我错了,请告诉我,这只是一个小标志的情况,每个人都忘记提及,在某些配置中丢失。

【问题讨论】:

  • 首先:这可能更适合users.rust-lang.org 的用户论坛,因为恕我直言,它不适合stackoverflow。其次,要么使用不同的IDE(例如pycharm),要么根本不依赖IDE,如果它给你带来问题(3天,我已经放弃了)。第三:您确定您在Cargo.toml 中添加了依赖关系吗?第三,VSC 代码的配置问题有多个错误来源。请尝试全新安装 VSC(最好在 VM 中)
  • 我同意 Rust 论坛,但它的配置很差,并且每个帖子不允许超过一张图片。

标签: visual-studio-code rust rls


【解决方案1】:

短版

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

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 的所有参数。


自动完成功能不起作用(仅适用于 std,不适用于您添加的额外 crate)。

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

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

另外,我听说过关于使用 IntelliJ + Rust plugin 的赞誉,但我自己还没有使用过。

【讨论】:

    【解决方案2】:

    我发现了一部分:从 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 获得良好的自动完成功能?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 2018-07-31
      • 1970-01-01
      • 2017-07-18
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多