rust-analyzer добавил диагностику E0220 для ассоциированных типов

rust-analyzer добавил диагностику E0220 для ассоциированных типов
Содержание статьи

9 ноября вышла еженедельная сборка rust-analyzer, которая показывает E0220, если анализатор не находит ассоциированный тип у параметра типа или у Self. Для читателей Mentoring.digital разберём, что означает это сообщение и куда смотреть в коде.

Как читать E0220

Трейт может объявить тип, который каждая реализация определяет по-своему. Например, в трейте Store объявлен type Record;. Если для параметра T: Store обратиться к T::Item, анализатор ищет Item среди типов, доступных по этому ограничению. В таком примере имя не совпадает с объявлением.

Новая проверка rust-analyzer указывает на ненайденную часть пути. Тесты изменения покрывают обращение через параметр типа и через Self. Код E0220 уже используется компилятором Rust. Теперь этот случай может быть виден и в диагностике редактора.

Где искать причину

Откройте трейт, на который ссылается ограничение, и сверьте имя типа с его объявлением. Если ассоциированный тип должен приходить из другого трейта, проверьте, указан ли этот трейт в ограничениях. После правки выполните cargo check в том же проекте.

Когда компилятор показывает E0220, а редактор молчит, проверьте версию rust-analyzer и включена ли его диагностика. Небольшой пример с объявлением трейта и местом ошибки удобно разобрать с наставником по диагностике ошибок в коде.

Похожие статьи по данной теме