9fans / acme-lsp

Language Server Protocol tools for the acme text editor
MIT License
195 stars 25 forks source link
acme-text-editor golang language-server-protocol plan9port

GitHub Actions Status Go Reference Go Report Card

acme-lsp

Language Server Protocol tools for acme text editor.

The main tool is acme-lsp, which listens for commands from the L command. It also watches for files created (New), loaded (Get), saved (Put), or deleted (Del) in acme, and tells the LSP server about these changes. The LSP server in turn responds by sending diagnostics information (compiler errors, lint errors, etc.) which are shown in an acme window. When Put is executed in an acme window, acme-lsp also organizes import paths in the window and formats it.

Currently, acme-lsp has been tested with gopls, go-langserver and pyls. Please report incompatibilities with those or other servers.

Installation

Install the latest release:

GO111MODULE=on go install 9fans.net/acme-lsp/cmd/acme-lsp@latest
GO111MODULE=on go install 9fans.net/acme-lsp/cmd/L@latest

gopls

First install the latest release of gopls:

GO111MODULE=on go install golang.org/x/tools/gopls@latest

Start acme-lsp like this:

acme-lsp -server '([/\\]go\.mod)|([/\\]go\.sum)|(\.go)$:gopls serve' -workspaces /path/to/mod1:/path/to/mod2

where mod1 and mod2 are module directories with a go.mod file. The set of workspace directories can be changed at runtime by using the L ws+ and L ws- sub-commands.

When Put is executed in an acme window editing .go file, acme-lsp will update import paths and gofmt the window buffer if needed. It also enables commands like L def (jump to defenition), L refs (list of references), etc. within acme. The L assist command opens a window where completion, hover, or signature help output is shown for the current cursor position in the .go file being edited.

If you want to change gopls settings, you can create a configuration file at UserConfigDir/acme-lsp/config.toml (the -showconfig flag prints the exact location) and then run acme-lsp without any flags. Example config file:

WorkspaceDirectories = [
    "/path/to/mod1",
    "/path/to/mod2",
]
FormatOnPut = true
CodeActionsOnPut = ["source.organizeImports"]

[Servers]
    [Servers.gopls]
    Command = ["gopls", "serve", "-rpc.trace"]
    StderrFile = "gopls.stderr.log"
    LogFile = "gopls.log"

        # These settings gets passed to gopls
        [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"

Hints & Tips

See also