


9 ноября вышла еженедельная сборка rust-analyzer, которая показывает E0220, если анализатор не находит ассоциированный тип у параметра типа или у Self. Для читателей Mentoring.digital разберём, что означает это сообщение и куда смотреть в коде.
Трейт может объявить тип, который каждая реализация определяет по-своему. Например, в трейте Store объявлен type Record;. Если для параметра T: Store обратиться к T::Item, анализатор ищет Item среди типов, доступных по этому ограничению. В таком примере имя не совпадает с объявлением.
Новая проверка rust-analyzer указывает на ненайденную часть пути. Тесты изменения покрывают обращение через параметр типа и через Self. Код E0220 уже используется компилятором Rust. Теперь этот случай может быть виден и в диагностике редактора.
Откройте трейт, на который ссылается ограничение, и сверьте имя типа с его объявлением. Если ассоциированный тип должен приходить из другого трейта, проверьте, указан ли этот трейт в ограничениях. После правки выполните cargo check в том же проекте.
Когда компилятор показывает E0220, а редактор молчит, проверьте версию rust-analyzer и включена ли его диагностика. Небольшой пример с объявлением трейта и местом ошибки удобно разобрать с наставником по диагностике ошибок в коде.