intellij-idea - 为什么 IntelliJ IDEA 中的 SBT 项目会中断并需要重新创建?
问题描述
将 SBT 与 IntelliJ IDEA 一起使用时,项目通常会进入一个糟糕的状态,编译器错误会出现在不应出现的地方,而它们不会出现在终端中。
一个项目将在终端中没有问题,但在我删除目录并单击“从现有源创建新项目”sbt compile
之前,它将在 IntelliJ IDEA 中完全搞砸。.idea
在 IntelliJ 中配置 SBT 项目以使用 SBT shell 根本没有帮助。
首先,为什么会发生这种情况?哪些因素会导致问题:
- SBT 中的错误
- IntelliJ IDEA 的核心或插件系统中的错误
- IntelliJ IDEA SBT 插件中的错误
- SBT 1.2 或更早版本的基本设计
- IntelliJ IDEA 或其插件系统的基本设计
最后,如何避免这种破损?
解决方案
据我所知,Intellij IDEA 创建了自己的内存结构来表示已解析文件的实际状态,直至启用您从 IDE 获得的所有有用功能(参考、用法、文档、编译器错误的曲线, ...)。
这个模型不是 sbt 构建的输出。该插件允许 IDE 基于 sbt 构建文件创建此类内存表示,并且最近使用 sbt 引擎本身(您需要在首选项中启用它)。
sbt 仍然不允许保留 IDE 可以使用的输出的内存表示,因此 IDEA 的代码“图片”有时会与实际的编译输出不同,可能是因为语言和插件中的一些高级特性(宏倾向于例如)在 IDEA 数据结构中没有正确表示。
通常当您更改构建文件中的某些内容时,IDEA 会自动刷新构建状态,或提示您执行此操作(当构建文件编辑器处于焦点时)。这应该足以将构建与 IDE“对齐”。
然而,在许多情况下,复杂的代码库会在 IDE 中永久显示错误错误。
就在我们说话的时候,正在努力解决这种情况
- 一个 scala LSP 实现正在制作中,它实际上将与底层构建工具连接,为任何兼容的编辑器(任何 LSP 客户端)提供有用的信息
- 作为 LSP 工作的补充,正在探索BSP(构建服务器协议),其定义应允许不同的兼容构建工具(sbt、mill、cbt...)更好地与底层编译器和不同的编辑器集成
您可以在Scala 博客公告中找到更多信息
推荐阅读
- guice - 是否可以使用 Guice 注入任意类型的实现?
- jquery - JSON 对象值与 HTML 表单值不同
- jquery - Onclick用jQuery替换div中的项目信息
- cookies - Safari 在请求 es2015 模块文件时不包含 cookie
- python - 我在从 Python 中实现 R 的 Transfer Entropy 包时遇到问题
- docker - Jenkins - 如何运行 - docker system prune - 在管道中
- excel - 如何将此公式从 Numbers 转换为 Excel:INDIRECT(ADDRESS(MATCH($I;Sheet2::Table 1::B);3;4;TRUE;"Sheet2::Table 1"))?
- .net - 设置Entity framework 5中所有实体的表名
- java - Java Swing 图形口吃
- react-native - 如何在函数中修改组件的属性?