LSP Server for EOLANG

July 9, 2026 · View on GitHub

GitHub Workflow Status (branch) GitHub codecov Hits-of-Code

This is the LSP server for EO. It provides semantic highlighting and parsing error checking for .eo files (written in EOLANG). In order to use it, you need to have Node and npm installed. Building it from source additionally requires a Java runtime (JRE 11 or newer), since the parser is generated with ANTLR4.

Using with IntelliJ (with LSP4IJ)

LSP4IJ, a free LSP support plugin for IntelliJ, provides an EO LSP server template to automatically install and run the LSP Server for EOLANG:

  • Install LSP4IJ into IntelliJ
  • Open any *.eo file, a notification will appear with Install LSP Server for EOLANG
  • Click the link, confirm the server creation, then click OK
  • The server will be installed (via npm)

Once done, semantic tokens and diagnostics will be available.

Using with Sublime Text

To use this LSP server with Sublime Text, you'll need to install the LSP package and configure it in Settings → Package Settings → LSP → Settings:

{
  "clients": {
    "eo-lsp": {
      "enabled": true,
      "command": ["npx", "-y", "eo-lsp-server@0.4.1", "--stdio"],
      "selector": "source.eo"
    }
  }
}

Then, create a syntax definition file in ~/Library/Application Support/Sublime Text/Packages/User/EO.sublime-syntax:

%YAML 1.2
---
name: EO
file_extensions:
  - eo
scope: source.eo
contexts:
  main:
    - match: '^\+[^\n]+$'
      scope: meta.eo
    - match: '#.*$'
      scope: comment.line.eo
    - match: '[@^*?]'
      scope: keyword.eo
    - match: '[\[\]\\>!:\.\)\(]|\+>'
      scope: keyword.operator.eo
    - match: '"[^"]*"'
      scope: string.quoted.double.eo
    - match: '\b(\+|-)?\d+(\.\d+(e(\+|-)?\d)?)?\b'
      scope: constant.numeric.eo

Should work. If it doesn't, file an issue, we'll help.

Using with Neovim

To use this LSP server with Neovim, you need Neovim 0.11 or later (the built-in LSP client, no plugin required).

First, tell Neovim that *.eo files use the eo filetype, by adding this to your init.lua:

vim.filetype.add({ extension = { eo = 'eo' } })

Then, register the server and enable it:

vim.lsp.config['eo_lsp'] = {
  cmd = { 'npx', '-y', 'eo-lsp-server@0.4.1', '--stdio' },
  filetypes = { 'eo' },
  root_markers = { '.git', '.eo-root' },
}
vim.lsp.enable('eo_lsp')

Open any *.eo file; the server starts on attach and provides semantic tokens and diagnostics.

Should work. If it doesn't, file an issue, we'll help.

How to Contribute

First, install Node modules with:

npm install

Then, build the project (this needs a Java runtime on your PATH, because make generates the parser by running the ANTLR4 jar):

make

Make changes on a new branch. You can run an instance of VS Code with the extension running by hitting F5 in the code editor. After modifications, test your code with:

make test

Create a pull request, we'll be glad to review it and merge.