vscode-solargraph、たまにdocument highlightが壊れてエラーのポップアップを右下に出し続ける状態になるので、そこは体験が悪い

型の特定ができるようになってきたので、今度はこれを利用する補完の提案機能をつくってみようと思う

solargraphはYARDのパース機能を使わず、自前でソースコードをコメントと一緒にパースしながら、自前でYard::CodeObject::Baseのインスタンスを生成し、自前でHashに詰めて管理しているので、こんなに複雑になっているんだなということが分かった。

YARDの機能では拾いきれないもの (ローカル変数などに対する @type タグとか?) があってそのために自前でやっているのかな?

Symbolの補完

  • シンボルを入力しようとしていそうであれば補完する
  • そのプロジェクトに存在する全てのSymbol (リテラル?) を返す
  • Gemに含まれてるものは無視していい?

YARD Tagの補完

  • コメント内でかつタグっぽい場所であれば補完する
  • 知っているすべての定数から補完
  • 上手く検索するために検索器がそこそこ優秀なAPIを提供している

Cursorはsourceとpositionを保持するだけのあまり意味のない抽象かと思っていたものの、Cursor#start_of_constant? などを見ると必要そうな抽象かも。補完のコンテキストでよく出てくる。

Closureというのは、コンテキストを作り得るノード (solargraphにおいてはPin) を表すようで、class, module, def, (block?) などがあるっぽい

coreとstdlibのyardocを生成しておいて、それを起動時にデフォルトで読み込む、というのをやる必要がありそう。