しおしお

IntelliJ IDEAのことなんかを書いてます

IntelliJ IDEA系の自作プラグインでLanguage Injectionsの設定を行う方法

このメソッドのこの引数は自動的にHTMLやSQLとして認識させたいなーって思うことがあったりしますよね。 それを、自作のプラグインで自動的に設定してあげる手順的なやつです。

プラグインの設定手順

plugin.xmlの定義

org.intellij.intelliLang の拡張ポイントを使って、Language Injectionsの設定ファイルを認識させます。

plugin.xmlの内容的にはこんな感じになります。 この設定の場合は、プロジェクトのmain/resources/META-INF/domaInjection.xml(plugin.xmlと同じ場所)がLanguage Injectionsの設定ファイルとしてロードされます。 1

  <extensions defaultExtensionNs="org.intellij.intelliLang">
    <injectionConfig config="META-INF/domaInjection.xml" />
  </extensions>

Language Injectionsの設定ファイルを作る

Language Injectionsの設定ファイルを作って、plugin.xmlinjectionConfigに設定したパスに保存してあげます。

設定ファイルの内容的には、こんな感じですね。<component name="LanguageInjectionConfiguration">内にinjectionの設定をしてあげます。

<?xml version="1.0" encoding="UTF-8"?>
<component name="LanguageInjectionConfiguration">
  <injection language="SQL" injector-id="java">
    <display-name>Sql.value (org.seasar.doma.experimental)</display-name>
    <place><![CDATA[psiMethod().withName("value").withParameters().definedInClass("org.seasar.doma.experimental.Sql")]]></place>
  </injection>
  <injection language="SQL" injector-id="kotlin">
    <display-name>Sql.value (org.seasar.doma.experimental)</display-name>
    <place><![CDATA[psiMethod().withName("value").withParameters().definedInClass("org.seasar.doma.experimental.Sql")]]></place>
  </injection>
</component>

この設定ファイル、手で作るのはかなりしんどいのでIntelliJの画面で作ったxmlから設定内容を持ってくるのが楽で良いですね。 IntelliJの設定画面からは、↓な流れで設定できますね。

f:id:sioiri:20200226120615p:plain:w300

設定内容は、~/.IntelliJIdea2019.3/config/options/IntelliLang.xml(2020.1以降は、~/.config/JetBrains/IntelliJIdea2020.1/options/IntelliLang.xml)に保存されているので、そこから必要なinjectionタグを探して持ってくれば良いですね。

動かしてみると

↓のようにLanguage Injectionsの設定画面でプラグインで設定したやつが、Built-inスコープで登録されていれば成功ですね。

f:id:sioiri:20200226122019p:plain:w300


  1. IntelliJさんでこの設定を入れると、プラグイン開発用のプラグインorg.intellij.intelliLangに対応していないのかinjectionConfigが怒られますが気にしないで大丈夫です。