acmeでLanguage Serverを利用する
This content is a draft and will not be included in production builds.
acme-lsp
Section titled “acme-lsp”go install 9fans.net/acme-lsp/cmd/acme-lsp@latestgo install 9fans.net/acme-lsp/cmd/L@latest設定は UserConfigDir/acme-lsp/config.toml に置く。Linuxの場合、UserConfigDir は .config なので .config/acme-lsp/config.toml となる。
WorkspaceDirectories = []FormatOnPut = trueCodeActionsOnPut = ["source.organizeImports"]
[Servers] [Servers.gopls] ... [Servers.typescript-ls] ...各言語ごとの設定
Section titled “各言語ごとの設定”Servers.xxx 以下に LogFile と StderrFile パラメータがある。このファイル名が相対パスの場合、ログは UserCacheDir/acme-lsp 以下に出力される。
まずはLanguage Serverをインストールする。Arch Linuxなので pacman で入れる。
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"TypeScript
Section titled “TypeScript”まずはLanguage Serverをインストールする。Arch Linuxなので pacman で入れる。
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-lsp は plumb を使っているので、acme の起動前に plumber を実行しておく。
plumberacme と一緒に acme-lsp も実行する。
acmeacme-lspこの状態で、管理したい(LSP用語の)ワークスペースで L ws+ すると acme-lsp の対象となる。あとはカーソルを移動させて L コマンドで色々できる。
- L def: 定義にジャンプ
- L refs: 参照している場所を列挙
gopls以前の話
Section titled “gopls以前の話”以前は guru と A を使ってコードの定義ジャンプ等を実装していた。
go get -u golang.org/x/tools/cmd/gurugo get -u github.com/davidrjenni/Aこれで、acme のカーソルをシンボルに移動させて A def のようなコマンドで実行していた。