Emacs ENSIME - инкрементная компиляция - PullRequest
0 голосов
/ 29 июня 2018

Я довольно новичок в ENSIME. Я пытаюсь сделать инкрементальную компиляцию в Emacs, компилируя один файл один за другим с SBT. Допустим, у меня есть файл a.scala, который импортирует класс в файл b.scala. Если я попытаюсь скомпилировать только a.scala, используя C-c C-b C, он, очевидно, будет жаловаться, поскольку b.scala не скомпилировано. Если я пытаюсь скомпилировать b.scala, все еще используя C-c C-b C, он корректно компилируется, но после этого я все равно не могу скомпилировать a.scala.

Я попытался использовать одну и ту же процедуру компиляции b.scala и a.scala с использованием IntelliJ, и она отлично работает. Чего мне не хватает?

1 Ответ

0 голосов
/ 03 июля 2018

Взглянув на код для ensime-sbt, не похоже, что целевой путь к классу включен во входной путь к классу. Таким образом, пока ensimeCompileOnly видит зависимости JAR, он не видит никаких скомпилированных одноранговых классов (я наблюдаю это с использованием sbt 1.x.x). В идеале это было бы, и я не думаю, что есть веская причина поступить иначе.

Посмотрите на CompatExtras.scala, где определен compileOnlyTask. Также, возможно, откройте тикет на ensime-sbt и попробуйте открыть обсуждение. Если то, что реализовано, идеально, тогда документация может быть обновлена, чтобы отразить это.

Хочу отметить, что в Ensime сегодня нет специального сопровождающего. Некоторые из нас прячутся, чтобы помочь слияниям время от времени объединяться. Самый высокий шанс исправить это - быть активным. Я бы начал с обновления тестов, найденных в ./src/sbt-test-0.13/sbt-ensime/compile-only/test, чтобы они имели зависимости проекта (вы заметите, что между Foo, Baz и FooTest их нет). Возможно, вы могли бы использовать FooTest для ссылки на Foo, наблюдать за неудачей теста и действовать соответствующим образом.

...