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 run
和 cargo 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
我在 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 run
和 cargo 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