Rust-analyzer не видит workspace в VSCode: ошибка "failed to discover workspace"
Причина проблемы
Ошибка "failed to discover workspace" в rust-analyzer обычно возникает, когда расширение не может найти корневой Cargo.toml или определить структуру workspace. Это может быть вызвано несколькими причинами: неправильной структурой папок, отсутствием файла Cargo.toml в корне открытой директории, поврежденным кэшем или конфликтом с другими расширениями.
Решение шаг за шагом
1. Проверьте структуру проекта
Убедитесь, что вы открываете в VSCode именно ту папку, где находится Cargo.toml. Не папку уровнем выше, не подпапку src — а именно корневую директорию проекта.
Правильная структура:
my_project/
├── Cargo.toml <-- rust-analyzer ищет именно этот файл
├── src/
│ └── main.rs
└── target/
2. Принудительно укажите workspace в настройках VSCode
Откройте настройки VSCode (Ctrl+Shift+P → "Preferences: Open Settings (JSON)") и добавьте:
{
"rust-analyzer.linkedProjects": [
"Cargo.toml"
]
}
Если у вас монорепозиторий или несколько проектов, укажите пути к каждому Cargo.toml:
{
"rust-analyzer.linkedProjects": [
"./project-a/Cargo.toml",
"./project-b/Cargo.toml"
]
}
3. Очистите кэш rust-analyzer
Выполните следующие действия:
- Нажмите
Ctrl+Shift+P→ "Rust Analyzer: Restart server" - Если не помогло: "Rust Analyzer: Clear internal cache"
- Закройте VSCode, удалите папки
.rust-analyzerиtargetв проекте, затем откройте заново
4. Проверьте наличие Cargo.toml в корне
Иногда из-за ошибок файловой системы VSCode может не видеть файл. Создайте новый проект через терминал VSCode:
cd ~/projects
cargo new test_project --bin
code test_project
Если с новым проектом всё работает — проблема в вашем текущем проекте (возможно, бинарный файл Cargo.toml поврежден или имеет неправильную кодировку).
5. Обновите rust-analyzer и инструменты
Убедитесь, что у вас последняя версия:
rustup update
cargo install --locked rust-analyzer
Затем в VSCode: Ctrl+Shift+P → "Extensions: Show Extensions" → найдите rust-analyzer → кнопка "Update" (если доступна).
6. Проверьте конфликт с другими расширениями
Отключите временно все другие расширения, особенно:
- Rust (официальное от Microsoft) — конфликтует с rust-analyzer
- Rust Syntax — может мешать
- Code Runner — иногда создает проблемы
Оставьте только rust-analyzer и перезагрузите VSCode.
Пример рабочей конфигурации
Полный рабочий settings.json для VSCode с Rust:
{
"rust-analyzer.checkOnSave": true,
"rust-analyzer.cargo.allFeatures": true,
"rust-analyzer.linkedProjects": [
"Cargo.toml"
],
"rust-analyzer.inlayHints.typeHints": true,
"rust-analyzer.inlayHints.parameterHints": true,
"[rust]": {
"editor.formatOnSave": true
}
}
<<Альтернативный подход: использование workspace Cargo
Если вы работаете с несколькими проектами Rust одновременно (например, библиотека и исполняемый файл), лучшим решением будет использование официального механизма workspace в Cargo. Создайте в корневой папке файл Cargo.toml с секцией [workspace]:
[workspace]
members = [
"project-a",
"project-b",
]
resolver = "2"
Затем откройте в VSCode именно эту корневую папку с workspace-файлом. Rust-analyzer автоматически обнаружит все вложенные проекты. Это особенно удобно, если вы разрабатываете несколько взаимосвязанных крейтов.
Быстрая диагностика через терминал
Запустите в терминале VSCode:
rust-analyzer --version
cargo metadata --no-deps
Если cargo metadata выдает ошибку — проблема в структуре проекта, а не в расширении. Если команда rust-analyzer не найдена — установите её через rustup component add rust-analyzer.
Для пользователей Windows
На Windows часто помогает:
- Запуск VSCode от имени администратора
- Проверка, что путь к проекту не содержит кириллицы или пробелов
- Отключение антивируса, который может блокировать rust-analyzer
Также убедитесь, что у вас установлен Microsoft Visual C++ Redistributable — без него rust-analyzer может работать нестабильно.
Ответов пока нет.
Войдите чтобы оставить ответ