Skip to content

glehmann/earthlyls

Repository files navigation

earthlyls: earthly language server

A fast language server for earthly.

Screenshot of yage Earthfile in helix

earthlyls supports the following LSP features:

  • completion
  • diagnostics
  • document symbol
  • goto declaration
  • goto definition
  • hover
  • incremental document update
  • references
  • semantic tokens
  • watch file changes
  • workspace symbol

Text editor configuration

Visual Studio Code

The earthlyls extension for Visual Studio Code is available in the marketplace.

neovim

neovim has a ready to use configuration for earthlyls in nvim-lspconfig.

earthlyls can either be installed manually or with mason.nvim, which is configured to download the binary for your platform from earthlyls’ releases.

Zed

The earthfile extension for Zed is available in the Zed extensions. Open the command palette with Cmd-Shif-P, enter zed: extensions and install the earthfile extension.

helix

Helix from the main branch comes preconfigured with earthlyls support. Just install it and enjoy!

For older versions, add this in your languages.toml:

[language-server]
earthlyls = { command = "earthlyls" }

[[language]]
name = "earthfile"
scope = "source.earthfile"
injection-regex = "earthfile"
roots = ["Earthfile"]
file-types = [
  { glob = "Earthfile" },
]
comment-token = "#"
indent = { tab-width = 2, unit = "  " }
language-servers = ["earthlyls"]

[[grammar]]
name = "earthfile"
source = { git = "https://github.com/glehmann/tree-sitter-earthfile", rev = "2a6ab191f5f962562e495a818aa4e7f45f8a556a" }

Optionally run hx --grammar build to update your tree-sitter libraries and get the Earthfile syntax highlighting.

Installation

See INSTAll.md

Performance

How fast?

On a macbook air m1, earthlyls loads the 178 Earthfile in the earthly repository — approximately 10000 lines — in 51.95ms. A simple "go to definition" runs under a millisecond. A "go to reference", which searchs in all the Earthfile in the workspace, runs in 18.61ms.

License

earthlyls is distributed under the terms of the MIT license.

See LICENSE for details.