IntelliJ Plugin 「kotlin-fill-class」の現在

この記事は suusan2go Advent Calendar 2019 - Adventar の12日目の記事です。

kotlin-fill-classとは

自分が趣味で作っていたIntelliJ IDEAのPluginで、Kotlinのコンストラクタを(実は今は関数の引数も)シュッと補完してくれます。

suzan2go.hatenablog.com

実際に見ていただくとどんなものか分かるかと思います

https://user-images.githubusercontent.com/8841470/59397528-e61a4380-8dc7-11e9-9684-d82d225316fe.gif

Kotlin Festのなかでも発表させていただきました。

公開されたあとも地味に色々と機能が追加されているので、このブログではその紹介をします。

kotlin-fill-classの現在

独自クラスでも再帰的にコンストラクタを埋められるようになりました

これまではInt, Stringなど組み込みの型については自動で埋められていたものの、 例えば以下のようなValue Objectを用いたユーザー定義クラスの型は値を埋めることができませんでした。

data class UserName(val value: String)

data class UserId(val value: Int)

data class User(
        val id: UserId,
        val name: UserName
)

user = User(id: , name: ) // fill constructorしても値は空欄になってしまっていた。

それが、現在は以下のように再帰的に独自クラスのコンストラクタも呼んで値を埋められるようになりました。

non empty

以下のプルリクで対応されました。

github.com

関数の引数も値を埋められるようになりました

kotlin-fill-class という名前の通り、もともとはコンストラクタをターゲットにしていましたが、なんと現在は関数にも対応しています。

function

以下のプルリクで対応しています。

github.com

もはや kotlin-fill-class という名前でいいのかという感じになってきましたが、なんかいい名前ください。

import分も自動で追加されるようになりました

これはコンストラクタにユーザー定義のクラスを含んでいた場合に、自動でimportされるようになりました。 github.com

テストが追加されました

ユーザーからすると関係ありませんが、テストが追加されました。以下のプルリクでCircleCI回していますが、テスト書いてくれたのは @t-kameyama さんです。

github.com

その他

補完されても嬉しくない箇所で補完されていた箇所など、ちょっと使いにくかったところが改善されています。

github.com

github.com

謝辞

プルリク見ていただくと分かりますがこの辺の大きな機能追加や細かな改善は自分ではなく、@t-kameyama さんという方がやってくれています。もはや自分のコードは殆ど残ってなくて、自分がやってるのはIdeaのバージョンがあがったときに動作確認してプラグインの依存を上げるのと、チェンジログを書いてJetBrainsに公開するくらいです。@t-kameyama さん、PR頂いたときにお礼を言うくらいしか出来てませんが本当にありがとうございます!!!!!

@t-kameyama さん以外にも、 IntelliJがアップデートされたタイミングで「サポートしてくれーーー」ってIssueを上げてくれる人や、プルリクを上げてくれる人がいて嬉しい限りです。顔も名前も知らない、なんなら国も違う人が自分の作ったものをガンガン改良していってくれてるの、凄い。普段利用者としては正直あまり意識していないけど、OSSってすげーなとPRやIssueもらうたびに思います。

残念ながら最近は仕事でKotlin書いていないので機能面での改良はなかなか思いつきませんが、今後もほそぼそとメンテナンスしていきます。今後ともkotlin-fill-classをよろしくお願いいたします。