rust-analyzer 未能发现 vscode 中的工作区

wow*_*ine 101 rust visual-studio-code vscode-extensions rust-analyzer

我开始学习 Rust 语言,但我遇到了rust-analyzervscode 扩展的问题。

这张图片没有为我提供有关问题根源的任何附加信息。我尝试查找与我的错误相关的文章,但失败了。请帮忙!

UPD1。

目录截图:

在此输入图像描述

Cargo.toml内容截图:

在此输入图像描述

guessing_game 目录是使用cargo new guessing_game命令创建的

sam*_*ray 105

我猜你的项目中没有文件Cargo.toml?需要rust-analyzer检测Cargo.toml工作空间。

您可以使用以下命令创建一个新的 Rust 项目cargo

cargo new your-project
Run Code Online (Sandbox Code Playgroud)

cargo将帮助您自动创建文件,或者您可以为现有项目Cargo.toml手动创建文件。Cargo.toml

如果这个问题不断出现,也许你可以检查这个Github 问题来寻求帮助。

编辑:

您应该像这样打开您的项目,而不是打开guessing_game. 只需尝试以下步骤:

  1. cargo new guessing_game_v2;
  2. 然后在 VSCode 中,选择“文件”->“打开文件夹..”-> 选择新guessing_game_v2文件夹
  3. 并检查它是否有效?

在此输入图像描述

您应该确保您的文件Cargo.toml位于工作区的根目录中。

  • 为了避免必须将 `Cargo.toml` 放在工作区根目录中,只需使用 `rust-analyzer.linkedProjects` 设置来指定 `Cargo.toml` 文件的路径(一个或多个)。像这样:`“rust-analyzer.linkedProjects”:[“./guessing_game/Cargo.toml”]`。假设您的工作空间根目录是“guessing_game”的父级,这应该可以正常工作。 (11认同)
  • 我想我找到了你的问题,你应该打开 `guessing_game` 文件夹,并在根项目中创建 `Cargo.toml` (4认同)
  • 这是错误的。为什么你应该有一个cargo.toml。使用 vscode 的方法是打开所有项目的顶级文件夹。里面会有很多 Cargo.toml 和其他东西。这就是所有扩展必须工作的方式。每个 lang 项目打开一个 vscode 是疯狂的。我们怎样才能避免这个错误呢? (3认同)

Luk*_*oen 11

我有同样的错误并解决如下:

背景

  • 我已经安装了 VSCode 扩展rust-lang.rust-analyzer
  • 我的项目位于根项目文件夹的子文件夹中。IE
projects
  > guessing_game
    > src
      main.rs
    > target
      > debug
        guessing_game
    Cargo.lock
    Cargo.toml
rust-toolchain
Run Code Online (Sandbox Code Playgroud)
  • 我使用 VSCode Remote Explorer 通过 SSH 访问代码
  • 但我有同样的错误rust-analyzer failed to discover workspace

解决方案

我执行了以下操作来解决该问题:

  • 将 VSCode 更新到最新版本:1.75.1(通用)
  • 卸载了已弃用的 VSCode 扩展rust-lang.rust
  • 更新为替换 VSCode 扩展 Rust Analyzer rust-lang.rust-analyzerv0.3.1426
  • 更新至 VSCode 扩展 Remote Extension ms-vscode-remote.vscode-remote-extensionpackv0.24.0
  • 更新到 VSCode 扩展 CodeLLDB vadimcn.vscode-lldbv1.8.1
  • 更新了项目根目录中的 rust-toolchain 文件,使其内容具有最新版本的 Rust:
[toolchain]
channel = "nightly-2023-03-05"
components = ["rust-src"]
Run Code Online (Sandbox Code Playgroud)
  • rustup update
  • 删除了projects/guessing_game/Cargo.lock文件和projects/guessing_game/target文件夹
  • 在项目根目录下添加Cargo.toml文件,内容如下(保留项目目录下已有的Cargo.toml文件):
[workspace]

members = [
    "projects/guessing_game",
]
Run Code Online (Sandbox Code Playgroud)
  • cargo build从项目根目录(projects/ 目录上面的文件夹)运行。新的文件夹结构现在是:
projects
  > guessing_game
    > src
      main.rs
    Cargo.toml
> target
  > debug
    guessing_game
Cargo.toml
rust-toolchain
Run Code Online (Sandbox Code Playgroud)
  • 上述每个操作后重新启动 VSCode
  • 不再出现锈迹分析仪错误


Ant*_*tiz 7

抱歉,如果这听起来含糊不清,但这只是因为它发生得太快了。我正在查看vscode 的底部窗格。

认为因为我也有 Prettier,所以弹出一个对话框说它不支持.rs,无论如何我不确定接下来发生了什么,但是命令调色板弹出并提示:

我将此文件类型设为默认rust-analyzer

然后繁荣rustfmt开始工作。

然后我说嗯,让我们检查一下settings.json

令我高兴的是我发现了这个......

 "[rust]": {
    "editor.defaultFormatter": "rust-lang.rust-analyzer"
  }
Run Code Online (Sandbox Code Playgroud)

真心希望这能帮助任何想成为锈类动物的人!


Nor*_*g33 5

我遇到了同样的问题,刚刚解决了它 istalling rust-src,只需在终端中输入

sudo apt install rust-src
Run Code Online (Sandbox Code Playgroud)

然后重新加载vscode

  • 是的,我在 arch 上遇到了同样的问题,用 `pacman -S rust-src` 解决了 (2认同)

aer*_*ric 5

对我来说,指定rust-analyzer.linkedProjects在工作空间中工作。

"rust-analyzer.linkedProjects": [
    "{absolute_path}/Cargo.toml"
]
Run Code Online (Sandbox Code Playgroud)

我认为有太多Cargo.toml文件混淆了,rust-analyzer因此它无法找出要链接的项目。看来你也可以Cargo.toml同时指定几个,它也有效,可能需要重新启动服务器。

我的工作空间的图片