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を生成しておいて、それを起動時にデフォルトで読み込む、というのをやる必要がありそう。