LSPは、コード補完や定義ジャンプなどの開発支援機能を提供するプロトコルです。
RのLSPといえばrenkun-kenさんが開発しているREditorSupport/languageserverがデファクトスタンダードですが、最近、Posit PBCがposit-dev/airを開発しているので試してみました。
インストール方法はリポジトリに記載の手順に従えばOK。 VS Codeの場合は追加で拡張機能を入れる必要があるようです。
私はNeovimユーザーなので、以下の設定を追記しました。
vim.api.nvim_create_autocmd("FileType", {
group = vim.api.nvim_create_augroup("posit-dev-air", {}),
pattern = "r",
callback = function()
vim.lsp.start({
name = "air",
cmd = { "air", "language-server" },
filetypes = { "r" },
})
end,
})
ひとまず、vim.lsp.buf.format()
を使ってコードフォーマットできることは確認できました。
残念ながらコード補完や定義ジャンプは未実装な模様(2024-01-09時点)。ここから先はYutaniさんに教えてもらったことですが、以下の部分でcompletion()
やcode_definition()
を実装する必要があるようですが、未対応のようですね。
どんな関数を定義すべきかはRustのtower_lsp crateのドキュメントを参照すると良いそうです。
https://docs.rs/tower-lsp/latest/tower_lsp/trait.LanguageServer.html
ただし、posit-dev/airはtower-lspからruff_serverのFork版に移行しようとしてるみたいなので、勇み足でPRしないほうがよさそう。
Yutaniさんの予想では設計が固まった後は、必要な機能はposit-dev/arkから移植してくるのではとのこと。
というわけで、あんまり役に立つ情報はないですが、今後を期待して待ちましょう!