建立第一個 JetBrains 編輯器擴充套件

要開發 JetBrains 家族的編輯器擴充套件,首先需要先安裝 Plugin DevKit 套件,可以方便我們建立 IDE Plugin 專案。

點選 File > Net Project...
選擇 IDE Plugin ,這裡 JDK 選擇 17

這裡有個小坑,如果對新的 Java 相關的專案比較了解,就會知道其實可以同時存在 Java 和 Kotlin 兩種語言,這裡建立完成後會自動依照 package 建立資料夾,但是是在 kotlin 的資料夾內:

如果想要使用 Java 開發,需要在 main 資料夾下(和 kotlin 資料夾同層)增加 java 資料夾,在裡面建立 .java 檔案才不會有多餘的問題,也可以依照平時的習慣依照 package 建立多個資料夾,不過就不是必須的了

下面使用 Java 示範
這裡建立一個簡單的顯示訊息的視窗,建立 ShowMessage.java 檔案,需要繼承 AnAction 類別。
    
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import org.jetbrains.annotations.NotNull;

public class ShowMessage extends AnAction {
    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
    }
}
    

會發現類別名稱有黃色波浪符底線,他提示我們需要在 plugin.xml 中註冊,用來定義我們這個套件的行為

這裡需要定義我們剛剛建立的 ShowMessage 會在哪裡出現,我們建立了一個「顯示訊息」的按鈕,此按鈕會被加入到「編輯視窗的彈出選單(EditorPopupMenu)」中,右側的 Anchor 可以定義顯示順序,下方的 Keyboard Shortcuts 可以定義預設快捷鍵:

上面的步驟會出現在 plugin.xml 中:
    
<!-- Plugin Configuration File. Read more: https://plugins.jetbrains.com/docs/intellij/plugin-configuration-file.html -->
<idea-plugin>
    <actions>
        <action id="com.example.ideplugintest0325.ShowMessage" class="com.example.ideplugintest0325.ShowMessage" text="顯示訊息">
            <add-to-group group-id="EditorPopupMenu" anchor="first"/>
            <keyboard-shortcut keymap="$default" first-keystroke="shift ctrl alt M"/>
        </action>
    </actions>
</idea-plugin>
    

我們先回到 ShowMessage.java ,這裡增加一個彈出視窗:
    
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.Messages;
import org.jetbrains.annotations.NotNull;

public class ShowMessage extends AnAction {
    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
        Messages.showInfoMessage("Message", "Title");
    }
}
    

點選編輯器右上角的執行按鈕

會開啟一個新的編輯器,可以發現我們的套件已經出現在這裡了

隨便開啟一個檔案,點選滑鼠右鍵,就會看到我們的「顯示訊息」按鈕

按下後也有正常出現彈出視窗

這就是一個最簡單的 JetBrains 編輯器擴充套件

這裡也附上 Kotlin 的寫法:
    
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent

import com.intellij.openapi.ui.Messages;

class ShowMessage : AnAction() {
    override fun actionPerformed(e: AnActionEvent) {
        Messages.showMessageDialog(
            "Message",
            "Title",
            Messages.getInformationIcon()
        )
    }
}
    



參考資料:
IntelliJ Platform SDK

留言