🔖
Lem Advent Calendar 2023 - Language Server Protocol
これは 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