Некоторые советы и рекомендации по отладке проблем с RLS. Многие из этих проблем специфичны для расширения Visual Studio Code.
Где упоминаются настройки, ниже, мы обычно имеем в виду настройки Visual Studio Code.
Эти настройки могут быть установлены как для пользователя, так и для проекта, и
находятся в меню Файл > Параметры > Настройки
.
Единственный внешний компонент, который требует расширение Visual Studio Code, это Rustup. Он сам установит все остальное (RLS, даже Rust).
Вы можете установить Rustup с rustup.rs. Расширение должно предупредить вас, если он отсутствует. См. раздел расширения ниже для других проблем.
Вы можете увидеть ошибку вроде toolchain 'stable-x86_ Yöntem 64-unknown-linux-gnu' does not contain component 'rls' for target 'x86_64-unknown-linux-gnu'
,
однако мы гарантируем, что стабильные и бета версии компилятора содержат компонент rls
.
Это может быть проблема rustup.rs.
Пожалуйста, отправьте дополнительную информацию в указанную проблему, если вам это нужно.
Если вы столкнулись с этой ситуацией, вам может потребоваться переустановить компилятор.
$ rustup uninstall stable
$ rustup install stable
$ rustup component add rls
toolchain 'nightly-x86_64-unknown-linux-gnu' does not contain component 'rls' for target 'x86_64-unknown-linux-gnu'
.Это связано с тем, что ночная версия компилятора может не содержать компонента RLS. Это
случается иногда, когда RLS не может быть собран с текущим компилятором. Чтобы обойти
эту проблему, вы можете использовать RLS из бета или стабильных каналов, дождаться
новой ночной версии, которая содержит компонент RLS, или использовать более старую
ночную версию, которая включает компонент RLS. Чтобы сделать последнее, следуйте
эти инструкции,
затем избегайте rustup update
.
Запустите rustup update
из командной строки, чтобы убедиться, что Rust, RLS и
связанные данные все обновлены.
RLS в настоящее время может работать только с одним целевым объектом за раз. По умолчанию,
RLS работает с исполняемым файлом, если он единственный. Вы можете собрать библиотеку,
установив rust.build_lib
на true
(это часто самое полезное). Если у вас есть
несколько исполняемых файлов, вы можете указать один для работы с помощью rust.build_bin
.
Автоопределение для некоторых функций будет включено в следующем выпуске.
Cargo.toml
, в VSCode до открытия файла Rust (что запускает загрузку расширения Rust).### Информация для путейЕсли у вас есть путь, такой как foo::bar::baz
, RLS имеет информацию только
для последнего сегмента пути. Это означает, что вы можете перейти к определению
или получить информацию о типе только для baz
, а не для foo
или bar
.
Это ограничение в компиляторе Rust, но оно должно быть решено в будущем.
RLS в настоящее время работает только с основной частью крейта. Он не работает с папками тестов или примеров.
RLS может предоставить информацию о единичных тестах, вам нужно установить
rust.cfg_test
на true
(учтите, что это вызовет множество предупреждений
о "неиспользуемом коде", поэтому по умолчанию это отключено).
Устаревшие данные могут часто вызывать проблемы или замедлять работу RLS. Это
может быть полезно, чтобы запустить cargo clean
и/или удалить всю папку
target
для вашей крейты. Вам потребуется перезапустить расширение после этого,
чтобы получить правильное перестроение.
Также возможно (хотя и реже), что Rustup может оказаться в неблагоприятном
положении из-за устаревших данных. Вы можете переустановить Rustup и/или удалить
его кэш (в ~/.rustup
), чтобы попытаться решить эту проблему.
переменные окружения RLS_PATH
или RLS_ROOT
. Эти переменные могут вызвать
проблемы, поэтому удалите их из вашего окружения (это не потребуется с
следующим выпуском расширения).## Проблемы с расширением
Мы рекомендуем использовать наше расширение VSCode. Учтите, что есть другие расширения VSCode.
Убедитесь, что расширение и VSCode обновлены. Вы можете проверить последнюю
версию VSCode на их сайте. Вы можете увидеть
вашу версию в пункте меню Help > About
. VSCode должен сообщить вам, если оно
или ваше расширение не обновлены.
Расширение должно быть способно запускать Rustup. Если Rustup установлен, он
должен быть в вашем PATH. Учтите, что если вы запускаете VSCode из иконки или
запуска, PATH может отличаться от PATH в терминале. Вы можете проверить эту
проблему, запустив VSCode из терминала (code
должен работать).
Полезно определить, является ли проблема связана с вашим окружением или с проектом. Попробуйте запустить расширение VSCode с очень простым проектом. Используйте cargo new foo --bin
, чтобы создать новый проект под названием foo
, открыть папку foo
в VSCode. Добавьте локальную переменную и её использование, проверьте, предоставляет ли RLS тип переменной при наведении курсора и возможность перехода к её определению.
Если вышеуказанный тест работает, то, вероятно, у вас есть проблемы с проектом. Если нет, то проблема связана с окружением.Если проект имеет много зависимостей, инициализация индексации может занять длительное время. В целом, инициализация индексации должна занимать примерно столько же времени, сколько полная компиляция проекта (обычно немного меньше, но это зависит от конкретной ситуации).Если основной crate проекта большой, он, вероятно, не будет работать хорошо с RLS (слишком медленно). Что означает "большой" в данном контексте, зависит от скорости вашего компьютера и вашего терпения к задержкам.
Проекты с Cargo workspace в настоящее время не работают.
Проекты с не-Cargo системами сборки также не работают (с некоторыми усилиями вы можете сделать это работоспособным, обратитесь к nrc на Discord).
Редко возникают проблемы с моделью сборки RLS. Вы можете попробовать запустить cargo check
в командной строке, чтобы имитировать модель сборки вне IDE.
Некоторые crates могут иметь неожиданно большие данные. Большие данные могут замедлить RLS до такой степени, что он будет вынужден завершить работу (или казаться, что он завершил работу). Проверьте json-файлы в директории target/rls/deps/save-analysis
. Любое значение больше 1 мегабайта подозрительно. Вы можете проверить важность этих данных, удалив json-файл(ы) и перезапустив расширение (вы должны будете делать это каждый раз после полной сборки, например, после cargo clean
или обновления toolchain).
Если вы обнаружите такие большие данные, пожалуйста, сообщите об этом в этом репозитории. Мы можем попытаться оптимизировать данные или добавить crate в черный список.
rust-source
. Если Racer работает, но другие вещи не работают, стоит проверить компонент rust-analysis
(оба компонента доставляются с помощью Rustup).При использовании расширения VSCode вы можете просмотреть сообщения об ошибках и логи в окне Output, в разделе View > Output, в канале 'Rust Language Server', который можно выбрать из выпадающего меню справа от панели.
Чтобы увидеть больше информации в логах, установите RUST_LOG=rls=debug
в вашей среде. Вы также можете установить RUST_LOG=rls_analysis=debug
, чтобы увидеть логи, специфичные для анализа данных. В общем, эти логи будут выводиться в стандартный поток ошибок сервера.
Если вы видите аварийные завершения в логах, вы можете получить трассировку стека, установив RUST_BACKTRACE=1
.Вы также можете записывать логи в файл, установив rust-client.logToFile
на true
в расширении VSCode. Файл будет находиться в корне проекта; каждый раз, когда вы запускаете расширение, вы получаете новый файл.
Вы можете получить больше информации о VSCode и самом расширении, запустив VSCode с параметром --verbose
. Однако я редко нахожу это полезным. Вы также можете использовать отладчик VSCode для отладки расширения. Это может быть полезно, если расширение зависает.
Может быть полезно найти процесс rls
и прикрепить к нему отладчик. Однако с оптимизированной сборкой и отсутствием символов отладки это, скорее всего, не будет полезным.
Если вы получаете ошибку типа error while loading shared libraries
при запуске RLS, попробуйте следующее:
На Linux:
export LD_LIBRARY_PATH=$(rustc --print sysroot)/lib:$LD_LIBRARY_PATH
На MacOS (это может работать только, если SIP отключено (в зависимости от того, как вы запускаете RLS), вы можете изменить среду в клиенте):
export DYLD_LIBRARY_PATH=$(rustc --print sysroot)/lib:$DYLD_LIBRARY_PATH
(Это не должно происходить, если вы используете Rustup, только если вы собираете и запускаете из исходного кода).
Пожалуйста, не стесняйтесь открыть проблему, чтобы обсудить любую проблему.
Если вы используете Discord, вы можете задать вопрос в #dev-tools на сервере Rust lang. Вы можете упомянуть nrc.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )