Что означает ошибка rust-analyzer «не удалось разрешить макрос`$ crate:: format_args`» и как мне это исправить?

#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