0

将 SBT 与 IntelliJ IDEA 一起使用时,项目通常会进入一个糟糕的状态,编译器错误会出现在不应出现的地方,而它们不会出现在终端中。

一个项目将在终端中没有问题,但在我删除目录并单击“从现有源创建新项目”sbt compile之前,它将在 IntelliJ IDEA 中完全搞砸。.idea

在 IntelliJ 中配置 SBT 项目以使用 SBT shell 根本没有帮助。

首先,为什么会发生这种情况?哪些因素会导致问题:

  1. SBT 中的错误
  2. IntelliJ IDEA 的核心或插件系统中的错误
  3. IntelliJ IDEA SBT 插件中的错误
  4. SBT 1.2 或更早版本的基本设计
  5. IntelliJ IDEA 或其插件系统的基本设计

最后,如何避免这种破损?

4

1 回答 1

0

据我所知,Intellij IDEA 创建了自己的内存结构来表示已解析文件的实际状态,直至启用您从 IDE 获得的所有有用功能(参考、用法、文档、编译器错误的曲线, ...)。

这个模型不是 sbt 构建的输出。该插件允许 IDE 基于 sbt 构建文件创建此类内存表示,并且最近使用 sbt 引擎本身(您需要在首选项中启用它)。

sbt 仍然不允许保留 IDE 可以使用的输出的内存表示,因此 IDEA 的代码“图片”有时会与实际的编译输出不同,可能是因为语言和插件中的一些高级特性(宏倾向于例如)在 IDEA 数据结构中没有正确表示。

通常当您更改构建文件中的某些内容时,IDEA 会自动刷新构建状态,或提示您执行此操作(当构建文件编辑器处于焦点时)。这应该足以将构建与 IDE“对齐”。

然而,在许多情况下,复杂的代码库会在 IDE 中永久显示错误错误。

就在我们说话的时候,正在努力解决这种情况

  • 一个 scala LSP 实现正在制作中,它实际上将与底层构建工具连接,为任何兼容的编辑器(任何 LSP 客户端)提供有用的信息
  • 作为 LSP 工作的补充,正在探索BSP(构建服务器协议),其定义应允许不同的兼容构建工具(sbt、mill、cbt...)更好地与底层编译器和不同的编辑器集成

您可以在Scala 博客公告中找到更多信息

于 2018-10-11T08:11:20.707 回答