IntelliJ Scala插件2026.3发布:增强Scala 3分析与Twirl支持
大家好!
Scala 插件 2026.3 现已发布!此版本带来了更准确的 Scala 3 代码分析、为 Play Framework 开发者大幅重构的 Twirl 支持,以及更高效的基于编译器的代码高亮,可减少冗余的后台工作。你还会发现构建工具支持、调试和日常编辑方面的改进。让我们详细看看有哪些新内容。
Scala 3
此版本新增对 Scala 3.10 的支持,并改进了内置的 Scala 3 代码分析,减少误报错误,使推断类型更准确。
当重载涉及不同或泛型接收者类型、方法类型参数或隐式转换时,扩展方法现在能更准确地解析。我们还修正了右结合扩展运算符的解析。代码补全、导航和快速文档现在能更清晰地区分具有不同接收者类型的扩展方法,代码补全列表中的重复项也更少。
在选择 given 实例时,上下文参数解析现在能更好地利用方法参数和显式类型参数。这避免了泛型代码中的误报歧义和缺失隐式参数错误,包括类型参数列表与值参数列表交替出现的调用。
类型推断现在能更准确地处理 transparent trait,避免集合类型被推断得过于受限。我们还改进了涉及高阶类型参数及其边界的推断。对于匿名类,我们修正了插件推断出编译器不会推断的结构化类型的情况。
[LOADING...][LOADING...]
改进的 Play Framework Twirl 支持
我们大幅重构了 Play Framework 的 Twirl 模板支持,首先进行了完整的架构重写。随后,我们对解析、代码补全、格式化、查找用法和引用解析进行了大量改进。这些更新共同显著减少了误报错误,同时让模板的编辑、导航和重构更加可靠。
查找用法现在能在你修改某个模板之前,可靠地定位渲染该模板的 Scala 代码。重命名模板会自动更新项目中对该模板的引用,让你在重组 Play 应用时保持调用点一致。
此次重写还减少了嵌入的 HTML、CSS、JavaScript 和 JSON 中的误报错误。结合格式化和补全增强功能,处理多语言模板现在轻松得多——干扰工作的误导性诊断信息也更少。
[LOADING...][LOADING...] [LOADING...]
构建工具改进:sbt、Scala CLI 和 BSP
在 Scala 插件 2024.3 中,我们引入了独立的 main 和 test 模块,以更好地反映 sbt 的项目结构。在 2026.3 中,这是唯一受支持的布局,禁用该布局的选项已被移除。该布局支持更准确的依赖处理,并可为 main 和 test 源分别设置不同的编译器选项。
导入 sbt 2.x 项目也得到了改进,特别是在编译器插件路径解析方面。此外,构建脚本分析现在能正确处理 .value 和 / 表达式,避免有效的设置被编辑器标记为未解析错误。
在性能方面,我们解决了 Scala 3.8 项目导入缓慢的问题,以及一个 BSP 导入性能回归问题。
当 Scala 3 宏实现发生变化时,IDE 构建现在会在必要时自动重新编译依赖它的代码。这确保宏实现更改后,已编译代码不再保留过期的宏展开结果。
sbt 构建定义和 Scala CLI //> using dep 指令中的依赖坐标补全功能已恢复。添加库时,代码补全建议可帮助你快速找到正确的坐标,并将其插入构建文件或脚本中。
最后,Scala CLI 脚本现在受益于改进的 shebang 解析、高亮和格式化。一项检查会检测首行为 shebang 的本地脚本是否缺少执行权限,并提供快速修复使其可执行,让你能在直接运行脚本之前解决该问题。
[LOADING...][LOADING...]
调试改进
现在,你可以在普通方法中的单行条件 return 语句(例如 if (done) return result)上设置断点,并在调试时停在这些语句处。我们还解决了在 Future 回调内部以及 Scala 3 顶层方法中定义的 for 推导式内部断点被跳过的问题。
检查暂停程序中的状态也顺畅得多。我们解决了表达式补全和监视求值期间的 UI 卡顿,修复了对象展开卡在正在收集数据的问题,并修正了 lazy val 声明的初始化操作的问题。
[LOADING...] 在单行条件 return 的断点处暂停。
更高效的基于编译器的代码高亮
基于编译器的代码高亮现在通过复用有效诊断信息来避免不必要的重新编译,即使文件在编译期间已关闭也是如此。切换标签页或重新打开已经检查过的文件时,会显示已存储的结果。此外,输入触发的后台工作更少,多个文件中待处理的检查现在会合并为一次编译运行。
在编译失败的模块中于文件之间导航时,只要项目未发生变化,就不再触发重复的编译尝试。此外,如果另一个模块中的错误阻塞了高亮,编辑器会解释原因,并提供指向阻塞错误的链接。
最后,我们解决了几个边缘情况问题。多模块 BSP 编译不再意外跳过所有目标;编译期间发生编辑时,诊断信息不再偏移到错误的行;如果编译运行被取消,高亮错误也不再被隐藏。 [LOADING...] 识别阻塞基于编译器高亮的模块。
编辑器中的较小改进
为了更快速地查看推断信息,X-Ray 模式现在会显示无参数方法的推断类型参数。
转到 Code | Desugar Scala Code,可以检查将隐式和语法细节显式展开后的 Scala 代码。对于已编译的 Scala 3 类,新的并排视图可让你比较编译器的解释与插件的解释。这在探索严重依赖隐式参数或复杂语言构造的代码时尤其有用,因为这些代码的展开形式仅从源代码中很难辨认。
我们还解决了关键的格式化问题。我们修复了一个 bug:在缩进语法中格式化返回元组的有效 Scala 3 lambda 会导致代码无法编译。我们更新了与 Scalafmt 的集成,并修正了部分选择和空 case 主体的范围格式化。
兼容性变更与移除
在升级现有环境之前,请先查看以下变更:
- Ammonite: 我们已移除专用的脚本支持,包括 Ammonite 运行配置和
$file/$ivy辅助功能。你仍然可以在外部运行 Ammonite 脚本。 - Fastpass: 项目导入不再提供 Fastpass 集成。
- sbt 模块布局: 项目现在使用独立的 main 和 test 模块,即使之前禁用了此模式也是如此。用于禁用独立模块的设置已被移除。
- IntelliJ Scala Bundle: 实验性独立发行版已停用。请分别安装 IntelliJ IDEA 和 Scala 插件。
致插件开发者
Scala 插件本身现在使用 Scala 3 编写。这一内部迁移不需要你更改在 IntelliJ IDEA 中打开的项目。你可以继续使用这些项目现有的 Scala 版本和构建配置。
如果你开发的 IntelliJ IDEA 插件需要针对 Scala 插件 API 进行编译,请针对目标 Scala 插件 2026.3 构建重新编译,并验证其与更新后的 API 签名和捆绑依赖的兼容性。API 与依赖兼容性指南提供了迁移说明。
IntelliJ IDEA 2026.3 也带来了新功能、性能改进和可用性更新。请在我们的新功能和已修复文章中了解这些变化。
一如既往,我们欢迎你的反馈!请在 YouTrack 上报告你发现的任何问题,也欢迎在 Discord 上提问或分享你的想法。
祝你开发愉快!
JetBrains Scala 团队