Erlang Language Platform. LSP server and CLI.

Overview

Erlang Language Platform (ELP)

ELP logo

Description

ELP integrates Erlang into modern IDEs via the language server protocol.

ELP was inspired by rust-analyzer.

Terms of Use

You are free to copy, modify, and distribute ELP with attribution under the terms of the Apache-2.0 and MIT licences. See LICENCE-APACHE and LICENCE-MIT for details.

Prerequisites

VS Code

Coming soon.

Emacs

  1. Download the appropriate elp executable from https://github.com/WhatsApp/erlang-language-platform/releases, and make sure it is on your $PATH.
  2. Add the following to your emacs init file
(use-package lsp-mode
  :custom
  (lsp-semantic-tokens-enable t)

  :config
  ;; Enable LSP automatically for Erlang files
  (add-hook 'erlang-mode-hook #'lsp)

  ;; ELP, added as priority 0 (> -1) so takes priority over the built-in one
  (lsp-register-client
   (make-lsp-client :new-connection (lsp-stdio-connection '("elp" "server"))
                    :major-modes '(erlang-mode)
                    :priority 0
                    :server-id 'erlang-language-platform))
  )

How to use ELP

Using it with rebar3 projects

  1. Use OTP 25

  2. Download the elp binary for your system from https://github.com/WhatsApp/erlang-language-platform/releases

    On Mac you will probably get the following message when trying to run the executable the first time: "elp cannot be opened because the developer cannot be verified.". To solve this, go to Preferences > Security and Privacy and add an exception. Alternatively, you can build elp from source.

  3. Add eqwalizer_support dependency and eqwalizer_rebar3 plugin to your rebar3 project definition (see below)

  4. From the project directory run:

  • elp eqwalize <module> to type-check a single module
  • elp eqwalize-all to type-check all src modules in the project

Adding eqwalizer_support and eqwalizer_rebar3:

{deps, [
  {eqwalizer_support,
    {git_subdir,
        "https://github.com/whatsapp/eqwalizer.git",
        {branch, "main"},
        "eqwalizer_support"}}
]}.

{project_plugins, [
  {eqwalizer_rebar3,
    {git_subdir,
        "https://github.com/whatsapp/eqwalizer.git",
        {branch, "main"},
        "eqwalizer_rebar3"}}
]}.

References

Contributing

  • CONTRIBUTING.md: Provides an overview of how to contribute changes to ELP (e.g., diffs, testing, etc)

FAQ

Please refer to the FAQ document for answers to some common questions, including:

  • What's the difference between ELP and Erlang LS?
  • Why not extend Erlang LS, rather than creating a new tool?
  • Why is ELP implemented in Rust, rather than Erlang?

License

erlang-language-platform is dual-licensed

You might also like...
A cross platform forensic parser written in Rust!

artemis artemis is a powerful command line digital forensic and incident response (DFIR) tool that collects forensic data from Windows and macOS endpo

Proxmox Backup Server and Client

Build & Release Notes rustup Toolchain We normally want to build with the rustc Debian package. To do that you can set the following rustup configurat

xrd a next-gen server controller for TrackMania Forever and Nations ESWC
xrd a next-gen server controller for TrackMania Forever and Nations ESWC

xrd is a next-gen server controller for TrackMania Forever and Nations ESWC that is designed to be hassle-free and easily updatable (with a bus factor of 0).

Rust implementation for Wlroots (Sway, Wayfire, Hikari, River, etc.) of Gnome Screenshot and Idle DBUS Server, which Upwork uses to capture the screen as proof of work.

🚀 upwork-wlroots-bridge 🚀 Rust Implementation for Wlroots (Sway, Wayfire, Hikari, River, etc.) of Gnome Screenshot and Idle DBUS Server (with extra

CLI tool that make it easier to perform multiple lighthouse runs towards a single target and output the result in a "plotable" format.

Lighthouse Groupie CLI tool that make it easier to perform multiple lighthouse runs towards a single target and output the result in a "plotable" form

NSE is a rust cli binary and library for extracting real-time data from National Stock Exchange (India)

NSE Check out the sister projects NsePython and SaveKiteEnctoken which are Python & Javascript libraries to use the NSE and Zerodha APIs respectively

A CLI tool to convet Hex color code or RGB to color code, RGB, HSL and color name(if exists)
A CLI tool to convet Hex color code or RGB to color code, RGB, HSL and color name(if exists)

iro -色- A CLI tool to convert the hex color code or RGB to color code, RGB, HSL, color name(if exists, according to jonathantneal/color-names). Usage

Locast to Emby/Plex/Channels server

This application provides an interface between locast.org and Media Servers like Plex Media Server (PMS) and Emby by acting like an HDHomerun or an m3u tuner and an XMLTV provider.

 Björn - The AS207960 ACME server
Björn - The AS207960 ACME server

Björn - The AS207960 ACME server Björn is not a full CA upon to itself, but contains many of the building blocks of a complete ACME CA. Components Bjö

Comments
  • Some minor bpaf fixes

    Some minor bpaf fixes

    • elp::args - use flag instead of switch + negate combo
    • add /target to .gitignore

    Describe your changes

    minor improvements to bpaf code, it should be possible to clean it up more with 0.9 branch - show help by default, etc.


    --experimental flag seems a bit strange. Name and help suggest that it will enable experimental diagnostics, while value it produces and how it is later used suggests that experimental diagnostics will be disabled:

    crates/elp/src/bin/elp_parse_cli.rs:    cfg.disable_experimental = args.experimental_diags;
    crates/elp/src/bin/lint_cli.rs:            cfg.disable_experimental = args.experimental_diags;
    
    cla signed Merged 
    opened by pacak 2
  • Please add erlang_ls.config support and/or erlang.mk, bazel

    Please add erlang_ls.config support and/or erlang.mk, bazel

    Hi, congratulations with the first public release!

    I tried it with RabbitMQ where we use erlang.mk and bazel and erlang_ls successfully. Well it complains about missing rebar.config.

    Please consider relaxing requirements and having erlang_ls.config support (here we list all the paths).

    Thank you for improving Erlang world.

    opened by deadtrickster 1
A Rust library to manipulate the BEAM (Erlang VM) opcodes

beamop References https://blog.stenmans.org/theBeamBook/ https://www.erlang.org/doc/apps/erts/beam_makeops.html http://beam-wisdoms.clau.se/en/latest/

Takeru Ohta 11 Sep 30, 2022
A simple, terminal-based Erlang dashboard written in Rust

erldash A simple, terminal-based Erlang dashboard. erldash connects to an Erlang node using the dynamic node name feature (since OTP-23) to collect me

Takeru Ohta 85 Dec 8, 2022
A language server implementation for the WGSL shading language

wgsl-analyzer wgsl-analyzer is a language server plugin for the WGSL Shading language. It comes with a VS Code plugin located in ./editors/code, but d

null 155 Jan 2, 2023
Efficent platform for inference and serving local LLMs including an OpenAI compatible API server.

candle-vllm Efficient platform for inference and serving local LLMs including an OpenAI compatible API server. Features OpenAI compatible API server p

Eric Buehler 21 Nov 15, 2023
The SATySFi Language Server

[WIP] SATySFi Language Server This repository is work-in-progress yet. Features Kind Function Done codeAction Add the definition of an undefined comma

monaqa 50 Dec 24, 2022
A language server for lua written in rust

lua-analyzer lua-analyzer is a lsp server for lua. This is mostly for me to learn the lsp protocol and language analysis so suggestions are helpful. T

null 61 Dec 11, 2022
tr-lang is a language that aims to bring programming language syntax closer to Turkish.

tr-lang Made with ❤️ in ???? tr-lang is a language that aims to bring programming language syntax closer to Turkish. tr-lang is a stack based language

Kerem Göksu 10 Apr 2, 2022
Display strings in a safe platform-appropriate way

os_display Printing strings can be tricky. They may contain control codes that mess up the message or the whole terminal. On Unix even filenames can c

Jan Verbeek 19 Dec 19, 2022
Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices

Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and battery life of your device.

w1nst0n 6.8k Jan 2, 2023
A cross-platform application for custom presence on Discord.

Discord Presence ⚠️ macOS is NOT supported. This is due the package for setting the presence being broken on mac. It may work for some people (only wh

Tofix.js 2 Dec 30, 2022