20

我在 Visual Studio Code 上使用 rust-analyzer 版本 0.2.408。

我正在编写一个命令行应用程序,涉及在终端中居中文本。这是我为此编写的函数:

use console::{Alignment, pad_str};

fn get_padded_row(row: &str, width: u16, symbol: Option<char>) -> String {
    let symbol = symbol.unwrap_or(' ');
    return pad_str(row, width as usize, Alignment::Center, None)
        .to_string()
        .replace(' ', &symbol.to_string());
}

此功能运行良好,并且没有错误。然后我写了一个测试:

#[cfg(test)]
mod tests {
    use crate::get_padded_row;

    #[test]
    fn row_padding_dashes() {
        let padded_row = get_padded_row("hello", 15, Some('-'));
        assert_eq!(
            padded_row, "-----hello-----".to_string(),
            "`get_padded_row` was not correct, got `{}`", padded_row
        );
    }
}

该代码仍然可以正常工作。两者都cargo run可以cargo test工作,该函数通过了测试,并且cargo check没有返回任何问题。但是 rust-analyzer 给出了一个错误,突出显示了从tr};语句use中到p右侧的所有内容return:“could not resolve macro $crate::format_argsrust-analyzer(macro-error)”。搜索此错误不会返回任何内容。VSCode 将我链接到rust-analyzer 用户手册,其中仅显示“此诊断显示为宏扩展错误”。重新启动 VSCode 并重新安装 rust-analyzer 什么也没做。错误总是回来,并突出显示相同的奇怪特定区域。我发现在安装 rust-analyzer 的同时摆脱它的唯一方法是删除测试。

从错误如何与宏扩展有关,以及删除测试如何解决问题来看,我想这是由#[test]宏引起的,但奇怪的是 rustc 发现我的代码根本没有问题,而 rust-analyzer 吓坏了这个错误。到目前为止,我使用 rust-analyzer 的体验比使用官方 Rust VSCode 扩展更好,但我正处于切换回解决这个问题的边缘。

4

3 回答 3

28

这是rust-analyzer 中的一个错误。现在,您可以禁用以下警告settings.json

"rust-analyzer.diagnostics.disabled": [
  "macro-error"
]

该错误已在每晚修复,因此您可以从 GitHub 安装rust-analyzer 的每晚二进制文件,或者您可以等待几天让修复程序登陆稳定版。

或者,您可以降级到 rls version 0.2.400,因为该错误是由 version 中的提交引起的0.2.408

Extensions Icon -> rust-analyzer -> Manage (gear icon) -> Install Another Version
于 2020-12-09T19:45:07.540 回答
5

三个月后,Nightly 发布似乎有一个错误?不确定。

我添加unresolved-macro-call到诊断:锈分析器的禁用设置。

于 2021-03-26T07:01:03.517 回答
0

我已经尝试了很多事情,阅读了 github 上的未解决问题等,这些问题被标记为已解决,但在这里仍然存在。

对于 vscode 用户,打开设置(json)并通过添加禁用:

    "rust-analyzer.procMacro.enable": false
于 2022-01-19T11:26:26.357 回答