Skip to content

acmeでLanguage Serverを利用する

This content is a draft and will not be included in production builds.

Terminal window
go install 9fans.net/acme-lsp/cmd/acme-lsp@latest
go install 9fans.net/acme-lsp/cmd/L@latest

設定は UserConfigDir/acme-lsp/config.toml に置く。Linuxの場合、UserConfigDir.config なので .config/acme-lsp/config.toml となる。

WorkspaceDirectories = []
FormatOnPut = true
CodeActionsOnPut = ["source.organizeImports"]
[Servers]
[Servers.gopls]
...
[Servers.typescript-ls]
...

Servers.xxx 以下に LogFileStderrFile パラメータがある。このファイル名が相対パスの場合、ログは UserCacheDir/acme-lsp 以下に出力される。

まずはLanguage Serverをインストールする。Arch Linuxなので pacman で入れる。

Terminal window
run0 pacman -S gopls

設定は公式のREADMEにあったのでそのまま使う。

[Servers]
[Servers.gopls]
Command = ["gopls", "serve"]
StderrFile = "gopls.stderr.log"
LogFile = "gopls.log"
[Servers.gopls.Options]
hoverKind = "FullDocumentation"
[[FilenameHandlers]]
Pattern = "[/\\\\]go\\.mod$"
LanguageID = "go.mod"
ServerKey = "gopls"
[[FilenameHandlers]]
Pattern = "[/\\\\]go\\.sum$"
LanguageID = "go.sum"
ServerKey = "gopls"
[[FilenameHandlers]]
Pattern = "\\.go$"
LanguageID = "go"
ServerKey = "gopls"

まずはLanguage Serverをインストールする。Arch Linuxなので pacman で入れる。

Terminal window
run0 pacman -S typescript-language-server

まともに動かせていないけ、こういう設定を入れる。

[Servers]
[Servers.typescript-ls]
Command = ["typescript-language-server", "--stdio"]
[[FilenameHandlers]]
Pattern = "\\.ts$"
LanguageID = "typescript"
ServerKey = "typescript-ls"
[[FilenameHandlers]]
Pattern = "\\.mts$"
LanguageID = "typescript"
ServerKey = "typescript-ls"
[[FilenameHandlers]]
Pattern = "\\.tsx$"
LanguageID = "typescriptreact"
ServerKey = "typescript-ls"

acme-lspplumb を使っているので、acme の起動前に plumber を実行しておく。

Terminal window
plumber

acme と一緒に acme-lsp も実行する。

Terminal window
acme
acme-lsp

この状態で、管理したい(LSP用語の)ワークスペースで L ws+ すると acme-lsp の対象となる。あとはカーソルを移動させて L コマンドで色々できる。

  • L def: 定義にジャンプ
  • L refs: 参照している場所を列挙

以前は guruA を使ってコードの定義ジャンプ等を実装していた。

Terminal window
go get -u golang.org/x/tools/cmd/guru
go get -u github.com/davidrjenni/A

これで、acme のカーソルをシンボルに移動させて A def のようなコマンドで実行していた。