Emacs ENSIME - 增量编译

Emacs ENSIME - incremental compile

我是 ENSIME 的新手。我正在尝试通过使用 SBT 逐个编译单个文件来在 Emacs 中进行增量编译。假设我有一个文件 a.scala,它在文件 b.scala 中导入了一个 class。如果我尝试使用 C-c C-b C 仅编译 a.scala,它显然会抱怨 b.scala 尚未编译。如果我尝试编译 b.scala 仍然使用 C-c C-b C 它会正确编译,但之后我仍然无法编译 a.scala.

我尝试使用使用 IntelliJ 编译 b.scalaa.scala 的相同过程,它工作正常。我错过了什么?

看一眼 ensime-sbt 的代码,目标 class-path 似乎不包含在输入 class-path 中。因此,虽然 ensimeCompileOnly 看到 JAR 依赖项,但它不会看到任何对等编译的 classes(我正在用 sbt 1.x.x 观察到这一点)。理想情况下,它会而且我认为没有充分的理由不这样做。

查看 CompatExtras.scala 定义 compileOnlyTask 的位置。另外,也许在 ensime-sbt 上开张票,并尝试展开讨论。如果实现的是理想的,那么可以更新文档以反映这一点。

请注意,Ensime 目前没有专门的维护人员。我们中的一些人潜伏着帮助偶尔合并贡献。解决此问题的最大可能性是积极主动。我将从更新 ./src/sbt-test-0.13/sbt-ensime/compile-only/test 中找到的测试开始,使其具有项目依赖性(您会注意到 Foo、Baz 和 FooTest 之间存在 none)。或许您可以让 FooTest 引用 Foo,并观察测试失败,然后进行相应处理。