Я использую анализатор ржавчины версии 0.2.408 в Visual Studio Code.
Я пишу приложение командной строки, которое включает центрирование текста в терминале. Это функция, которую я написал для этого:
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
: «не удалось разрешить макрос $crate::format_args
rust-analyzer (макро-ошибка)». Поиск этой ошибки ничего не дает. VSCode ссылается на руководство пользователя rust-analyzer, в котором сказано только: «Эта диагностика показана для ошибок раскрытия макросов». Перезапуск VSCode и переустановка rust-analyzer ничего не дали. Ошибка всегда возвращается и выделяет одну и ту же странную конкретную область. Единственный способ, который я нашел, чтобы избавиться от него, оставив установленным анализатор ржавчины, - это удалить тест.
Судя по тому, как ошибка связана с расширением макроса и как удаление теста решает проблему, я полагаю, что это вызвано макросом #[test]
, но странно, что rustc вообще не находит проблем с моим кодом, в то время как rust-analyzer сходит с ума об этой ошибке. До сих пор у меня был лучший опыт работы с rust-analyzer, чем с официальным расширением Rust VSCode, но я на грани возвращения, чтобы исправить эту проблему.
~5 часов потеряно ;/ на этом ;/////////////////
Это ошибка в rust-analyzer. На данный момент вы можете отключить предупреждение в своем settings.json
:
"rust-analyzer.diagnostics.disabled": [
"macro-error"
]
Ошибка была исправлена по ночам, так что вы можете установить ночной бинарник rust-analyzer с GitHub или просто подождать пару дней, пока исправление не появится в стабильной версии.
В качестве альтернативы вы можете перейти на версию rls 0.2.400
, потому что ошибка была вызвана фиксацией в версии 0.2.408
:
Extensions Icon -> rust-analyzer -> Manage (gear icon) -> Install Another Version
установка ночного анализатора ржавчины устранила проблему, но вам нужно иметь procMacro для True
в настройках для анализатора ржавчины
Три месяца спустя, и, кажется, есть ошибка с выпуском Nightly? Не уверен.
Я добавил unresolved-macro-call
в Диагностику: Отключенные настройки для rust-analyzer.
Я пробовал много вещей, читал открытую проблему на github и т. д., Которая помечена как решенная, но сохраняется здесь.
Для пользователей vscode откройте настройки (json) и отключите, добавив:
"rust-analyzer.procMacro.enable": false