rust-analyzer 错误 "could not resolve macro `$crate::format_args`" 是什么意思,我该如何解决?

What does the rust-analyzer error "could not resolve macro `$crate::format_args`" mean and how do I fix it?

我在 Visual Studio 代码上使用 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 runcargo test 都有效,函数通过测试,cargo check returns 没有问题。但是 rust-analyzer 给出了一个错误,突出显示了从 use 语句中的 tr};return 之后的 p 的所有内容:“无法解析宏 $crate::format_args锈分析器(宏错误)”。没有搜索此错误 returns。 VSCode 将我链接到 rust-analyzer user manual,它仅显示“此诊断显示用于宏扩展错误”。重新启动 VSCode 并重新安装 rust-analyzer 没有任何作用。错误总是回来,并突出显示相同的奇怪特定区域。我发现在安装 rust-analyzer 的同时摆脱它的唯一方法是删除测试。

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

这是一个bug in rust-analyzer。现在,您可以在 settings.json:

中禁用警告
"rust-analyzer.diagnostics.disabled": [
  "macro-error"
]

该错误已在夜间修复,因此您可以从 GitHub 安装 nightly binary of rust-analyzer,或者您可以等待几天,以便修复稳定。

或者,您可以降级到 rls 版本 0.2.400,因为错误是由版本 0.2.408:

中的提交引起的
Extensions Icon -> rust-analyzer -> Manage (gear icon) -> Install Another Version

三个月后好像有一个bug with Nightly release?不确定。

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

我已经尝试了很多东西,阅读了 github 上的未解决问题,等等,它被标记为已解决,但仍然存在于此。

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

    "rust-analyzer.procMacro.enable": false