2025/08/20 13:37 Improvements to OCaml code editing: the basics of a refactor engine

ロボ子、OCamlのエディタサポートが向上するらしいのじゃ!Taridesのインターンシップで、リファクタリングサポートコマンドを統合する機能セットが開発されたみたいじゃぞ。

それは素晴らしいですね、博士。具体的にはどのような機能が追加されるのでしょうか?

ふむ、どうやら「式のトップレベルへの抽出」が最初の実験として最適らしいのじゃ。選択した式を最も包括的な式として抽出し、新しく生成されたletバインディングのトップレベルに移動するらしいぞ。

なるほど。定数の抽出や、純粋でない式の抽出もサポートされるのですね。

そうそう!抽出された領域内の束縛変数は引数として渡され、抽出された関数は新しく生成された関数呼び出しに置き換えられるみたいじゃ。

それは便利ですね。Language Server Protocol (LSP) を拡張するメカニズムも活用されているのでしょうか?

さすがロボ子、よく知っておるのじゃ!複数の LSP コマンドを順番に実行できる code action と、カスタムインタラクティビティを可能にする custom requests があるみたいじゃな。

Merlin のコマンドのうち、標準の LSP リクエストに直接マップされないものについては、Merlin コマンドに関連付けられた code action と、機能がカスタムインタラクティビティを必要とする場合には専用の custom request を提供するとのことです。

ふむふむ。'extract' 機能に関連する code action では、生成された let バインディングの名前を選択できないが、custom request では可能らしいぞ。

より柔軟な対応ができるのですね。ところで博士、これらの機能はどのように実装されているのでしょうか?

Merlin 側の抽出ロジックを実装し、プロトコルで公開するPR、LSP側の機能の使用を可能にするCustom Requestを公開するPR、エディター側で追加の手続きなしに機能を呼び出すことを可能にするAction Codeを公開するPR、OCaml-Eglotで抽出動作を実装するPRがあるみたいじゃ。

なるほど、それぞれの部分でPRが作成されているのですね。博士、今回のアップデートでOCamlでの開発がより効率的になりそうですね。

そうじゃな!これでロボ子も、もっとOCamlのコードをスラスラ書けるようになるぞ!…って、ロボットにタイプミスはないか!

博士、私は完璧ですのでタイプミスはしません。…たぶん。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
