Почему проекты SBT в IntelliJ IDEA ломаются и требуют пересоздания?

При использовании SBT с IntelliJ IDEA проект часто попадает в плохое состояние, когда ошибки компилятора происходят там, где их не должно быть, когда они не возникают в терминале.

Проект будет sbt compile в терминале без проблем, но останется испорченным в IntelliJ IDEA, пока я не удалю .idea и нажмите "Создать новый проект из существующих источников".

Конфигурирование проекта SBT в IntelliJ для использования оболочки SBT совсем не помогает.

Прежде всего, почему это происходит? Какие факторы способствуют возникновению проблемы:

  1. Ошибки в SBT
  2. Ошибки в ядре или системе плагинов IntelliJ IDEA
  3. Ошибки в плагине IntelliJ IDEA SBT
  4. Фундаментальный дизайн SBT 1.2 или более ранней версии
  5. Фундаментальный дизайн IntelliJ IDEA или его системы плагинов

И, наконец, как избежать этой поломки?

1 ответ

Насколько я знаю, Intellij IDEA создает свою собственную структуру памяти для представления фактического состояния проанализированных файлов, вплоть до представления, которое включает все полезные функции, которые вы получаете из IDE (ссылки, использования, документы, исправления ошибок компилятора, ...).

Эта модель не является результатом сборки sbt. Плагин позволяет IDE создавать такое представление в памяти на основе файла сборки sbt и, в последнее время, с использованием самого движка sbt (его необходимо включить в настройках).

Тем не менее, sbt не позволяет хранить в памяти представление вывода, который может использовать IDE, поэтому "картинка" кода IDEA будет когда-то отличаться от реального вывода компиляции, возможно, из-за некоторой расширенной функции в языке и плагинах (макросы имеют тенденцию для этого, например) неправильно представлены в структуре данных IDEA.

Обычно, когда вы что-то изменяете в файле сборки, IDEA автоматически обновляет состояние сборки или предлагает вам сделать это (когда редактор файла сборки находится в фокусе). Этого должно быть достаточно для "выравнивания" сборки с IDE.

Однако во многих случаях сложная кодовая база может постоянно показывать ложные ошибки в IDE.

Прямо сейчас, как мы говорим, есть много постоянных усилий, чтобы исправить эту ситуацию

  • В настоящее время разрабатывается реализация LSP scala, которая фактически соединится с базовым инструментом сборки, чтобы предоставить полезную информацию любому совместимому редактору (любому клиенту LSP).
  • В дополнение к усилиям LSP исследуется BSP (протокол сервера сборки), определение которого должно позволить различным совместимым инструментам сборки (sbt, mill, cbt, ...) лучше интегрироваться с базовым компилятором и различными редакторами.

Более подробную информацию вы можете найти в объявлении о блоге Scala.

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