Недавно у меня возникла идея плагина IntelliJ, который помогает мне в разработке программного обеспечения. Это для Scala, поэтому я хотел написать его на Scala. К счастью, JetBrains предоставляет плагин sbt для разработки плагинов Intellij. Я сразу попробовал.



Как упоминалось в README, существует репозиторий шаблонов для проекта плагина Intellij с этим плагином sbt.



Вы можете создать свой проект из этого репозитория шаблонов. Клонируйте и откройте его на IntelliJ.

Этот проект содержит несколько примеров. Запустите следующую команду, чтобы сначала увидеть, как она работает:

$ sbt runIDE

Эта команда запускает новый подключаемый модуль IntelliJ с образцом подключаемого модуля следующим образом:

Этот пример подключаемого модуля добавляет «Плагин Action Basics: всплывающее диалоговое действие» в меню «Инструменты». Следующее диалоговое окно отображается, если щелкнуть пункт меню.

Чтобы сгенерировать архив дистрибутива плагина, вы можете запустить следующую команду:

$ sbt packageArtifactZip

Эта команда создает MyAwsomeFramework-0.0.1-SNAPSHOT.zip в каталоге target. Вы можете установить этот файл, выбрав «Установить плагин с диска» в диспетчере плагинов.

У sbt-idea-plugin есть много других задач, которые помогают в разработке плагинов IntelliJ, таких как публикация плагина в репозитории плагинов JetBrains.

Далее рассмотрим структуру проекта. В проекте plugin.xml в src/main/resources/META-INF. Вы можете удалить расширения в этом файле и реализовать объявленные классы.

<idea-plugin>
    <id>me.and.co.my.awesome.framework</id>
    <name>My Awesome Framework</name>
    <version>0.0.1-SNAPSHOT</version>
    <vendor>Me and Co</vendor>

    <description>A new plugin for IntelliJ platform written in Scala and built with SBT</description>

    <idea-version since-build="203.0"/>

    <depends>com.intellij.modules.platform</depends>
    <depends>com.intellij.properties</depends>

    <resource-bundle>messages.SamplePluginBundle</resource-bundle>

    <actions>
        <action id="org.jetbrains.scala.samples.actions.PopupDialogAction"
                class="org.jetbrains.scala.samples.actions.PopupDialogAction">
            <add-to-group group-id="ToolsMenu" anchor="first"/>
        </action>
    </actions>

    <applicationListeners>
        <listener class="org.jetbrains.scala.samples.listeners.FileOpenedListener" topic="com.intellij.openapi.fileEditor.FileEditorManagerListener"/>
    </applicationListeners>

    <extensions defaultExtensionNs="com.intellij">
        <notificationGroup displayType="BALLOON" id="My Plugin Notification" />
        <toolWindow factoryClass="org.jetbrains.scala.samples.ui.MyToolWindowFactory" id="MyToolWindow" anchor="bottom"/>
        <completion.contributor implementationClass="org.jetbrains.scala.samples.completion.SimpleCompletionContributor" language="Properties"/>
    </extensions>

</idea-plugin>

Существует несколько ресурсов, посвященных разработке плагинов Intellij в Scala. Вы можете посмотреть исходный код плагина Scala для IntelliJ.



Кроме того, проект ZIO разрабатывает плагин для Intellij. Это может быть еще одним хорошим ресурсом для вас.