我在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
都标记红色,并显示:"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 插件要好,但为了解决这个问题,我正在考虑切换回官方插件。