我在 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_args
rust-analyzer(macro-error)”。搜索此错误不会返回任何内容。VSCode 将我链接到rust-analyzer 用户手册,其中仅显示“此诊断显示为宏扩展错误”。重新启动 VSCode 并重新安装 rust-analyzer 什么也没做。错误总是回来,并突出显示相同的奇怪特定区域。我发现在安装 rust-analyzer 的同时摆脱它的唯一方法是删除测试。
从错误如何与宏扩展有关,以及删除测试如何解决问题来看,我想这是由#[test]
宏引起的,但奇怪的是 rustc 发现我的代码根本没有问题,而 rust-analyzer 吓坏了这个错误。到目前为止,我使用 rust-analyzer 的体验比使用官方 Rust VSCode 扩展更好,但我正处于切换回解决这个问题的边缘。