Команда Spring АйО перевела статью от JetBrains, в которой рассказано про избавление одного из главных барьеров на пути к массовому внедрению Language Server Protocol (LSP) в своей экосистеме.

С версии IntelliJ IDEA Ultimate 2025.2 пользователи смогут использовать LSP даже после окончания подписки, а с 2025.3 — LSP станет доступным во всех дистрибутивах IDE благодаря переходу на единый дистрибутив.


Способ, которым разработчики создают плагины с реализацией Language Server Protocol (LSP) в IDE от JetBrains, претерпевает значительные изменения. В связи с переходом PyCharm и IntelliJ IDEA на единую модель дистрибутива, мы устраняем одно из ключевых препятствий, ограничивающих внедрение LSP в экосистеме IntelliJ Platform. Начиная с версии IntelliJ IDEA Ultimate 2025.2, пользователи смогут продолжать использовать ограниченный набор функций, включая API LSP, даже после окончания подписки. Community Edition (CE) по-прежнему будет доступна в версии 2025.2, но поддержка LSP в неё входить не будет. Подробнее об этом — в нашем отдельном анонсе.

Ключевые изменения в доступности LSP

Самое важное обновление касается порядка распространения функциональности LSP в IDE JetBrains:

Немедленные изменения (2025.2): API LSP, уже доступный пользователям IntelliJ IDEA Ultimate, теперь будет оставаться бесплатным в рамках ограниченного набора функций после окончания подписки. Это изменение отвечает на многолетние запросы разработчиков плагинов и сообществ малораспространенных языков, устраняя необходимость учитывать лицензионные ограничения при выборе платформы.

Будущие изменения (2025.3): С внедрением единого дистрибутива редакция Community Edition в ее привычной форме будет упразднена. Все пользователи будут загружать единый дистрибутив IntelliJ IDEA, при этом функции Ultimate будут требовать подписки для активации, но поддержка LSP останется доступной для всех.

Реализация LSP останется коммерческой и закрытой, но доступ к ней для сторонних плагинов будет полностью бесплатным. Это означает, что разработчики плагинов смогут ориентироваться на гораздо более широкую аудиторию без необходимости приобретения лицензии IntelliJ IDEA их пользователями.

Что это означает для разработчиков плагинов

Это изменение устраняет одну из самых устойчивых проблем, озвученных сообществом разработчиков. Ранее плагины с поддержкой LSP были фактически доступны только пользователям IntelliJ IDEA Ultimate, что создаёт серьёзные ограничения для:

  • Разработчиков open source-плагинов, стремящихся предоставить поддержку языков через LSP без ограничения аудитории;

  • Сообществ, работающих с нишевыми языками, для которых платная подписка делает использование плагинов невозможным, особенно для небольших команд и индивидуальных участников;

  • Образовательных учреждений, где необходимость управлять разными дистрибутивами IDE создавала ненужную сложность и препятствия.

Унифицированный подход теперь позволяет разработчикам плагинов:

  • Создавать плагины на основе LSP, работающие во всех IDE от JetBrains;

  • Упростить инструкции по установке и требованиям для пользователей;

  • Более эффективно конкурировать с расширениями других платформ, где поддержка LSP давно доступна всем.

Текущие возможности LSP и настройка

С момента появления в версии 2023.2 API LSP в платформе IntelliJ значительно эволюционировал и на сегодняшний день поддерживает следующие функции:

Основные языковые функции:

  • Автодополнение кода с resolve support

  • Переход к определению и определению типа (jump to definition)

  • Всплывающая документация (hover)

  • Поиск ссылок (find references)

  • Семантическая подсветка

  • Диагностика (push- и pull-модели)

Дополнительные функции:

  • Действия с кодом и быстрые исправления (quick-fixes)

  • Форматирование документов

  • Ссылки внутри документов и предпросмотр цветов

  • Предложения по улучшению кода (intention actions)

  • Команды для рабочей области (workspace commands)

Разработчикам плагинов следует ориентироваться на IntelliJ IDEA Ultimate версии 2025.2.1+ и добавить в файл plugin.xml опциональную зависимость от модуля com.intellij.modules.lsp.

<idea-plugin>
  <depends optional=”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"
        }
    }
}

Если проект основан на шаблоне плагина (Plugin Template), номер сборки следует указать в gradle.properties:

pluginSinceBuild=252.25557

Интеграция Kotlin LSP

Для интеграции Kotlin LSP необходимы два компонента:

  1. Дескриптор LSP-сервера, который определяет поддерживаемые файлы и предоставляет команду для запуска LSP сервера как отдельного процесса.

  2. Поставщик LSP-поддержки, который обеспечивает доступ к серверу для конкретного файла.

Комментарий от эксперта Spring АйО, Михаила Поливахи

На всякий случай стоит пояснить, что в совершенно подавляющем числе случаев LSP Server – это локальный процесс операционной системы, который запускает сама IDE (IntelliJ в нашем случае, посредством дескриптора, который пишут/кастомизируют авторы плагина).

Дескриптор сервера

Следующий KotlinLspServerDescriptor создаёт провайдер поддержки LSP для Language Server for Kotlin, обрабатывающего файлы Kotlin (с расширением .kt). Этот провайдер гарантирует, что LSP server будет запускаться в отдельном процессе из исполняемого файла kotlin-lsp, доступного через переменную окружения PATH.

private class KotlinLspServerDescriptor(project: Project)
    : ProjectWideLspServerDescriptor(project, "KN Kotlin LSP") {

    override fun isSupportedFile(file: VirtualFile) =
        file.extension == "kt"

    override fun createCommandLine() =
        GeneralCommandLine("kotlin-lsp", "--stdio")
}

Провайдер LSP-поддержки

Создайте LSP-провайдер, который запускает сервер при необходимости, используя соответствующий дескриптор:

class KotlinLspServerSupportProvider : LspServerSupportProvider {

    override fun fileOpened(
        project: Project,
        file: VirtualFile,
        serverStarter: LspServerSupportProvider.LspServerStarter,
    ) {
        if (file.extension == "kt") {
            serverStarter.ensureServerStarted(
                KotlinLspServerDescriptor(project)
            )
        }
    }
}

LSP-провайдер должен быть зарегистрирован в файле lsp.xml, который находится рядом с основным plugin.xml:

<idea-plugin>
  <extensions defaultExtensionNs="com.intellij">
    <platform.lsp.serverSupportProvider
      implementation="com.example.KotlinLspServerSupportProvider"/>
  </extensions>
</idea-plugin>

Реализацию вышеуказанного LSP можно найти как пример в виде Kotlin Notebook по следующей ссылке: https://github.com/Kotlin/kotlin-notebook-intellij-platform/blob/master/examples/lsp.ipynb

Trade-offs

Документация по платформе IntelliJ ясно формулирует позиционирование: подход LSP не должен рассматриваться как замена существующего языкового API, а скорее как его дополнение. Несмотря на существенные преимущества разработки с использованием LSP — такие как снижение затрат на сопровождение, ускорение циклов разработки и кросс-платформенная согласованность — важно учитывать следующие ограничения:

  • Ограниченная интеграция с IDE: Подход LSP предоставляет меньше доступа к мощным встроенным возможностям платформы IntelliJ, которые тесно связаны с интерфейсом структуры программы (Program Structure Interface – PSI).

  • Особенности производительности: Использование плагина на базе LSP добавляет издержки на коммуникацию по сравнению с нативными реализациями.

  • Неполное соответствие по функциональности: Некоторые продвинутые функции IDE пока не имеют аналогов в LSP, что ограничивает возможности отдельных разработчиков плагинов.

Таким образом, LSP выступает как практичное и лёгкое решение для разработчиков плагинов, стремящихся снизить сложность разработки и расширить охват аудитории при обеспечении стабильной поддержки языков. Однако для тех, кому необходима более глубокая интеграция с возможностями платформы IntelliJ, приоритетными остаются нативные API, такие как PSI.

Начало работы с разработкой на LSP

Чтобы начать интеграцию LSP, разработчикам плагинов рекомендуется:

  • Ознакомиться с подробной документацией в IntelliJ Platform Plugin SDK.

  • Изучить существующие реализации, такие как open source-плагин Prisma ORM.

  • Начинать с базовых функций и постепенно добавлять более сложные возможности.

  • Планировать релиз под версию 2025.2, чтобы воспользоваться универсальной поддержкой LSP.

Итоги и взгляд в будущее

Отмена коммерческих ограничений на интеграцию LSP в платформе IntelliJ устраняет одну из ключевых проблем для разработчиков плагинов, позволяя им сосредоточиться на эффективности и развитии функциональности.

Более того, это изменение — не просто технический шаг: оно подчеркивает признание со стороны JetBrains важности предоставления language серверов широкой аудитории, а не только создателям коммерческих продуктов.

Хотя интеграция через LSP не заменит все нативные API, она предоставляет удобный, лёгкий способ обеспечить стабильную языковую поддержку во всех IDE от JetBrains. Это усиливает конкуренцию и открывает перед разработчиками плагинов возможность ориентироваться на более широкую аудиторию. С выходом версии 2025.2 авторы плагинов могут оценить LSP по его техническим достоинствам, не оглядываясь на лицензионные ограничения.


Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Комментарии (0)