我在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给出了一个错误,突出显示了从use语句中的tr};到return后面的p的所有内容:“无法解决宏$crate::format_args rust-analyzer(宏错误)”。搜索此错误不会返回任何内容。VSCode将我链接到rust-analyzer user manual,它只显示“对于宏扩展错误显示此诊断”。重新启动VSCode和重新安装防锈分析仪没有任何作用。错误总是会回来,并突出显示相同的奇怪的特定区域。我发现在安装了防锈分析仪的同时摆脱它的唯一方法就是删除测试。
从这个错误是如何与宏展开有关的,以及如何删除测试来修复这个问题,我想这是由#[test]宏引起的,但奇怪的是,rustc发现我的代码没有任何问题,而rust-analyzer却被这个错误吓坏了。到目前为止,我使用rust-analyzer比使用官方Rust VSCode扩展有更好的体验,但我即将切换回来解决这个问题。
发布于 2020-12-10 03:45:08
这是一个bug in rust-analyzer。现在,您可以在settings.json中禁用该警告
"rust-analyzer.diagnostics.disabled": [
"macro-error"
]bug是在晚上修复的,所以你可以从GitHub安装nightly binary of rust-analyzer,或者你可以只等几天,直到修复程序落在稳定的地方。
或者,您可以降级到rls版本0.2.400,因为该错误是由版本0.2.408中的提交引起的
Extensions Icon -> rust-analyzer -> Manage (gear icon) -> Install Another Version发布于 2021-03-26 15:01:04
三个月后,似乎有了bug with Nightly release?不确定。
我将unresolved-macro-call添加到诊断:已禁用防锈分析仪的设置。
https://stackoverflow.com/questions/65223576
复制相似问题