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