LSP API 现已面向所有 IntelliJ IDEA 用户和插件开发者开放
LSP 可用性的关键变化
最重要的更新影响 JetBrains IDE 中 LSP 功能的分发方式:
即时影响 (2025.2):目前已对 IntelliJ IDEA Ultimate 用户开放的 LSP API,在用户订阅到期后,将以限定功能集形式免费提供。 这项变化回应了插件开发者与小众语言社区长期以来的反馈,确保用户在选择开发平台时无需再考虑许可限制。
未来变化 (2025.3):随着全新统一分发模式的推行,传统的 Community Edition 将停用。 所有用户将下载同一个 IntelliJ IDEA 安装程序,其中 IntelliJ IDEA Ultimate 的专属功能需要解锁订阅才能使用,但 LSP 支持将对所有用户开放。
LSP 实现本身仍为闭源商业代码,但我们将持续免费向第三方插件完全开放其使用权限。 这意味着插件开发者如今可以面向更广泛的用户群体开发插件,而无需用户购买 IntelliJ IDEA 许可证。
对插件开发者而言,
这意味着什么?
这项变化解决了开发者社区长期以来的核心痛点之一。 在此之前,使用 LSP 的插件本质上仅能供 IntelliJ IDEA Ultimate 用户使用,这给以下群体带来了不小的阻碍:
开源插件开发者:希望提供基于 LSP 的语言支持,却不愿限制自己的用户群体; 小众语言社区:要求用户付费订阅使采用变得不切实际,对于小型团队或独立贡献者来说更是如此; 教育场景:管理不同的 IDE 版本会增加不必要的复杂度与操作成本。
在统一分发模式下,插件开发者现在可以:
构建适用于所有 JetBrains IDE 用户的基于 LSP 的插件; 降低向用户解释安装要求的复杂度; 与那些已提供全平台 LSP 支持的竞品扩展程序更高效地竞争。
当前 LSP 功能与设置
自从在 2023.2 版本中引入以来,IntelliJ 平台中的 LSP API 已日趋成熟,目前支持以下功能:
核心语言功能:
支持解析的代码补全 转到定义与类型定义 悬停查看文档 查找引用定义 语义高亮显示 诊断(包含推送与拉取两种模式)
高级功能:
代码操作与快速修复 文档格式设置 文档链接与颜色预览 意图操作 工作空间命令
插件开发者应当以 IntelliJ IDEA Ultimate 2025.2.1+ 版本为目标,并在plugin.xml文件中添加对com.intellij.modules.lsp模块的可选依赖。
<idea-plugin><dependsoptional=”true”config-file="lsp.xml">com.intellij.modules.lsp</depends></idea-plugin>
要确保插件仅能在 2025.2.1 及更高版本中安装,请在 build.gradle.kts 文件中指定 since-build 属性:
intellijPlatform {pluginConfiguration {ideaVersion {sinceBuild = "252.25557"}}}
如果您的项目基于插件模板开发,请在 gradle.properties 文件中设置相应构建版本号:
pluginSinceBuild=252.25557LSP 服务器描述符:指定支持的文件,并提供用于以独立进程形式启动服务器的命令行; LSP 支持提供程序:确保指定文件可以调用该服务器。
服务器描述符
以下KotlinLspServerDescriptor为Kotlin 语言服务器创建了一个 LSP 支持提供程序,用于处理 Kotlin 文件(扩展名为.kt)。 该提供程序会确保语言服务器通过PATH环境变量中可用的kotlin-lsp二进制文件,以独立进程形式运行。
private class KotlinLspServerDescriptor(project: Project): ProjectWideLspServerDescriptor(project, "KN Kotlin LSP") {override funisSupportedFile(file: VirtualFile) =file.extension == "kt"override funcreateCommandLine() =GeneralCommandLine("kotlin-lsp", "--stdio")}
LSP 支持提供程序
创建 LSP 支持提供程序,在需要时通过对应的服务器描述符启动 LSP 服务器。
class KotlinLspServerSupportProvider : LspServerSupportProvider {override funfileOpened(project: Project,file: VirtualFile,serverStarter: LspServerSupportProvider.LspServerStarter,) {if (file.extension == "kt") {serverStarter.ensureServerStarted(KotlinLspServerDescriptor(project))}}}
该 LSP 支持提供程序必须在插件描述符中(主 plugin.xml 旁的现有 lsp.xml 文件内)注册。
<idea-plugin><extensionsdefaultExtensionNs="com.intellij"><platform.lsp.serverSupportProviderimplementation="com.example.KotlinLspServerSupportProvider"/></extensions></idea-plugin>
权衡考量
IntelliJ 平台文档中对 LSP 的定位有明确说明:LSP 不应被视为现有语言 API 的替代,而应作为一种增值方案。尽管 LSP 开发具备显著优势(如降低维护成本、缩短开发周期、保障跨平台一致性),但仍需注意以下局限性:
- IDE 集成度有限:
LSP 无法充分调用 IntelliJ 平台中通过程序结构接口 (PSI)深度集成的强大原生功能; - 性能考量:
与原生实现相比,基于 LSP 的插件会引入额外的通信开销; - 功能对等性差距:
某些高级 IDE 功能目前尚无对应的 LSP 实现,这对部分插件开发者的功能范围造成了限制。
对于希望降低复杂度、扩大用户覆盖范围,同时提供一致语言支持的插件开发者而言,LSP 是一种实用的轻量级方案。 而如果需要与 IntelliJ 平台功能进行更深度的集成,PSI 等原生 API 仍是首选。
LSP 开发入门
要探索 LSP 集成,插件开发者应按以下步骤操作:
查阅IntelliJ 平台插件 SDK中的全面文档; - 参考现有实现
(如开源的Prisma ORM 插件); - 从基础功能入手
逐步添加更复杂的功能; - 针对 2025.2 版本进行规划
以充分利用全平台 LSP 支持。
总结与展望
移除 IntelliJ 平台中 LSP 集成的商业许可限制,为插件开发者解决了一大核心难题,使其能将精力集中在效率提升与功能开发上。
更重要的是,这项转变不仅是技术层面的调整,它凸显了 JetBrains 的核心理念,即语言服务器开发应面向更广泛的开发者社区,而非仅局限于商业产品开发群体。
尽管 LSP 集成无法替代所有原生 API,但它为在所有 JetBrains IDE 中提供一致的语言支持提供了实用的轻量级解决方案。 这将促进竞争,也为插件开发者带来覆盖更广泛用户群体的机遇。 随着 2025.2 版本的发布,插件开发者如今可以基于技术本身的优势评估并采用 LSP,无需再受许可限制的束缚。
更多阅读推荐
产品动态
“非商用免费” IDE 家族
⏬ 戳「阅读原文」了解更多