Code Monkey home page Code Monkey logo

acme-lsp's Introduction

GitHub Actions Status Travis CI Status GoDoc 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 get github.com/fhs/acme-lsp/cmd/acme-lsp@latest
GO111MODULE=on go get github.com/fhs/acme-lsp/cmd/L@latest

gopls

First install the latest release of gopls:

GO111MODULE=on go get 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

  • If a file gets out of sync in the LSP server (e.g. because you edited the file outside of acme), executing Get on the file will update it in the LSP server.

  • Create scripts like Ldef, Lrefs, Ltype, etc., so that you can easily execute those commands with a single middle click:

for(cmd in comp def fmt hov impls refs rn sig syms type assist ws ws+ ws-){
	> L^$cmd {
		echo '#!/bin/rc'
		echo exec L $cmd '$*'
	}
	chmod +x L^$cmd
}
  • Create custom keybindings that allow you to do completion (L comp -e) and show signature help (L sig) while you're typing. This can be achieved by using a general keybinding daemon (e.g. xbindkeys in X11) and running acmefocused.

See also

acme-lsp's People

Contributors

fhs avatar ilanpillemer avatar mibk avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.