🔖

Lem Advent Calendar 2023 - Language Server Protocol

2023/12/21に公開

これは Lem Advent Calendar の記事です。

LemにはLanguage Server Protocolのクライアント実装としてlsp-modeを用意しています。
現在、デフォルトで対応している言語はGo, Elixir, Swiftです。

Lemで特定の言語のlspの設定はlem-lsp-mode:define-language-specマクロを使います。
例えばJavaScriptの場合は次のように書くことが出来ます。

(lem-lsp-mode:define-language-spec (js-spec lem-js-mode:js-mode)
  :language-id "javascript"
  :root-uri-patterns '("package.json" "tsconfig.json")
  :command '("typescript-language-server" "--stdio")
  :install-command "npm install -g typescript-language-server typescript"
  :readme-url "https://github.com/typescript-language-server/typescript-language-server"
  :connection-mode :stdio)

LSPに対応している場合は、その言語のファイルを開くと有効化されます。

lsp-modeで使える機能は次の表の通りです。

コマンド 説明
M-x lsp-document-diagnostics ファイル内のエラーやwarningを一覧する
M-x lsp-hover (C-c h) カーソル位置のシンボルのドキュメントを表示する
M-x lsp-signature-help 関数のシグネチャの一覧を表示する
M-x lsp-type-definition カーソル位置のシンボルの型定義に移動する
M-x lsp-implementation カーソル位置のシンボルの実装に移動する
M-x lsp-document-highlight シンボルのハイライト
M-x lsp-document-symbol ファイル内の定義を一覧する
M-x lsp-code-action 現在実行できるcode actionのメニューを表示する
M-x lsp-organize-imports importのリファクタリング
M-x lsp-document-format 現在のファイルのコードフォーマットを行う
M-x lsp-document-range-format リージョン内のコードフォーマットを行う
M-x lsp-rename シンボル名の一括変更

Discussion