Полная настройка Rust в VSCode / Atom Issue

Это длинный пост, извините.

Я пытался запустить проект на Rust, но столкнулся с проблемой: он просто некорректно работает в Linux в VSCode/Atom.

Потратил 3 дня на поиск в Интернете, пробовал разные учебники / видео - ничего не помогло + большая часть материала из 2017 года. Я пробовал чат Matrix, но никто не знал, что делать. У Git тоже нет решения, так как люди продолжают предлагать очень случайные вещи, например, "заменить эту переменную в файле toml на что-то другое и обратно"

Git: https://github.com/rust-lang/rls-vscode/issues/513

Я установил (и переустановил Rust много раз за последние 3 дня), и он отлично работает с терминала, но не в редакторе.


Две проблемы:

  1. Редакторы не видят ящиков, поэтому вы не можете запустить свой код из редактора.
  2. Автозаполнение не работает (работает только на std, но не на дополнительных ящиках, которые вы добавляете).

Что я сделал (из многих других вещей):

  1. установить Rust (на компьютерах Manjaro и Debian): curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Пытался stable, beta, nightly (за racer) Только что снова сделал чистую установку:

stable installed - rustc 1.40.0 (73528e339 2019-12-16)

Rust is installed now. Great!

  1. Установлен Rust (rls) rust-lang.rust расширение в VSCode (и ржавчина в Atom)

  2. Создал новый проект: cargo new test_proj и добавил новые rand = "0.6"to [dependencies] и сборка б / у груза. Он построилrand

  3. Добавлено "rust-client.enableMultiProjectSetup": true в файл настроек, чтобы избежать предупреждения: A Cargo.toml file must be at the root of the workspace in order to support all features. Alternatively set rust-client.enableMultiProjectSetup=true in settings. автор: Rust (rls)

  4. Я также устанавливаю расширение code runner, которое использую с Python, C++ и Java, чтобы запускать код из редактора.


Итак, теперь у меня есть только основная функция, и она отлично работает в редакторе:


Теперь я добавляю rand, и, похоже, он работает и выполняет НЕКОТОРЫЕ автозаполнение...


Но теперь перестает работать:


Хорошо, я закончу код и попробую запустить его, и теперь мы больше не можем запускать его, так как ящик отсутствует:


Хорошо, попробуем Ctrl + Shift + B и попробуем сборку груза:

По какой-то странной причине он ищет в / media / Work / Work / rust_code, а не в / media / Work / Work / rust_code / test_proj /


И последнее: давайте попробуем запустить в терминале:

Так что он работает нормально.

Извините за длинный пост, но я потратил 3 дня зря, а он все еще не может его запустить. Кому-нибудь вообще удалось это настроить?

Это должен быть Atom или VSCode, так как у меня там установлены все другие языки / проекты + VSCode указан на официальном сайте Rust, поэтому я полагаю, что он должен работать.

По сути, из двух редакторов (VSCode и Atom), которые имеют возможности отладки, в отличие от Intellij Rust, оба не работают для меня, и я просто не могу писать код на Rust, поскольку инструменты буквально сломаны / недостаточно зрелы для продуктивной работы. Пожалуйста, дайте мне знать, если я ошибаюсь, и это просто один маленький флаг, который все забывают упомянуть, отсутствует в какой-то конфигурации.

2 ответа

Решение

Я выяснил одну часть: проблемы с запуском вашего кода из VSCode. Мне пришлось изменить команду запуска кода по умолчанию для ржавчины:

Исходная команда:

"rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt",

Изменился на:

"rust": "if [ $(basename $dir) = 'examples' ]; then cargo run --example $fileNameWithoutExt; else cargo run; fi",

И теперь это работает, и я могу быстро запустить свой код.

Часть 2: Автозаполнение по-прежнему очень плохо, к сожалению. Я использую RLS. есть эта вещьracer. Это лучший выбор?

С другой стороны, я слышал похвалы об использовании IntelliJ + плагина Rust, но сам еще не использовал его.

Как я уже упоминал в своем предыдущем посте, бесплатная версия IntelliJ не имеет отладчика из того, что я вижу. Мне это надо.

Мне интересно, как люди получают хорошее автозаполнение из Rust?

Укороченная версия

Если я правильно понимаю проблему. Затем различные проблемы сборки сводятся к тому, что вы пытаетесь собрать проект по-разному и пытаетесь сделать это в разных каталогах.

TL; DR: каталог, который вы открыли в VSCode, являетсяrust_codeкаталог. Закройте и вместо этого откройтеrust_code/test_proj. ТеперьRust: cargo build (или Rust: cargo run) должно сработать.


Длинная версия

Редакторы не видят ящиков, поэтому вы не можете запустить свой код из редактора.

В Rust: cargo build задача не работает, потому что каталог, который вы открыли, не является "проектом Rust" (пакет Cargo), это каталог, содержащий другой каталог, который является проектом Rust.

Глядя на свой скриншот, это видно, посмотрите, как в верхней строке написано rust_code/test_proj:

Когда вы выполняете задание, Cargo жалуется, что rust_code/Cargo.toml не существует, что верно, поскольку он находится в rust_code/test_proj/Cargo.toml

Если вы посмотрите на вывод этого снимка экрана, вы увидите, что это так:


Здесь вы выполняете cargo runвручную. Но главное отличие в том, что вы внутриrust_code/test_proj каталог.


Наконец, просто выполняя rustc main.rsне работает, поскольку вы не передаете необходимые аргументы. Такrustc ничего не знает о ваших зависимостях.

Попробуйте выполнить cargo build -v тогда вы можете увидеть все аргументы, которые Cargo передает rustc.


Автозаполнение не работает (работает только на std, но не на дополнительных ящиках, которые вы добавляете).

Попробуйте открыть каталог, содержащий Cargo.toml, то автозавершение кода должно работать для зависимостей. Если нет, то я получаю следующее уведомление, а завершение кода работает только для стандартной библиотеки, как вы сказали. При этом RLS иногда бывает странным.

Если бы мне пришлось угадывать, то я думаю, что RLS компилирует код и на каком-то этапе извлекает необходимую информацию. Таким образом, если код не компилируется, это может повлиять на завершение кода. Но это 100% обоснованное предположение.

Кроме того, я слышал похвалы об использовании IntelliJ + плагина Rust, но сам еще не использовал его.

Другие вопросы по тегам