State of the Ruby language server (LSP) ecosystem / looking for suggestions

This page summarizes the projects mentioned and recommended in the original post on /r/ruby

Our great sponsors
  • InfluxDB - Access the most powerful time series database as a service
  • SonarLint - Clean code begins in your IDE with SonarLint
  • SaaSHub - Software Alternatives and Reviews
  • solargraph

    A Ruby language server.

    https://github.com/castwide/solargraph Seems to be the most mature/developed one. Slow on my system, bad documentation. Language docs are shipped as "cores" you imperatively download that float around in your home directory; this is messy and prone to failure. Doesn't have any docs for versions of ruby past 2.7.

  • sorbet

    A fast, powerful type checker designed for Ruby

    https://github.com/sorbet/sorbet A type checker. Created before Ruby's signature format and uses its own messy eDSL for type annotations. Has a language server. I don't know if this is usable without first adding type annotations to your code. No idea if it supports language and library documentation; there's no real docs for its LSP mode other than "here, have a vscode extension", and digging through the codebase is... difficult.

  • InfluxDB

    Access the most powerful time series database as a service. Ingest, store, & analyze all types of time series data in a fully-managed, purpose-built database. Keep data forever with low-cost storage and superior data compression.

  • steep

    Static type checker for Ruby

    https://github.com/soutaro/steep Also a type checker. This one uses rbs files. Not sure what subset of LSP features it supports either.

  • ruby-lsp

    An opinionated language server for Ruby

    https://github.com/Shopify/ruby-lsp Fairly new project, started in June. Digging through issues indicates it's meant to complement Sorbet's language server. Seems immature right now; it only supports a few queries and does so in janky ways. Probably not the best choice right now, but seems promising.

  • ruby_language_server

    Language Server implementation in Ruby for Ruby. Development happens on the develop branch. Production is master.

    https://github.com/kwerle/ruby_language_server Seems to be abandoned in an incomplete state, with only minor bug fixes for years.

  • orbacle

    Program allowing for smart jump-to-definitions, autocompletion, constant renaming and more.

    https://github.com/swistak35/orbacle Hasn't been updated in ~4 years. Someone's master's thesis project. Incomplete.

  • vscode-ruby

    Provides Ruby language and debugging support for Visual Studio Code

    https://github.com/rubyide/vscode-ruby/tree/main/packages/language-server-ruby Part of a VS Code extension. Uses tree-sitter to parse and analyze code. Feels the most technically sound, though still early in development. Unmaintained since April.

  • SonarLint

    Clean code begins in your IDE with SonarLint. Up your coding game and discover issues early. SonarLint is a free plugin that helps you find & fix bugs and security issues from the moment you start writing code. Install from your favorite IDE marketplace today.

  • language_server-ruby

    A Ruby Language Server implementation

    https://github.com/mtsmfm/language_server-ruby Abandoned project from 4-5 years ago.

  • lib-ruby-parser

    Ruby parser written in Rust

    I realize this might not be for everyone, but I'm writing it in Rust using Lib-ruby-parser and tower-lsp: two existing libraries that handle a bunch of the heavy lifting for me. I'm more productive in Rust than with Ruby at this point, despite doing Ruby full time for 15 years, plus I really really don't want to have to deal with a slow LSP--that was the whome impetus for this project. I started in the spring, made a bunch of headway, then backtracked to redo the internals to make it easier to handle monkeypatching, overriding/redefining of methods, etc. across your project.

  • tower-lsp

    Language Server Protocol implementation written in Rust

    I realize this might not be for everyone, but I'm writing it in Rust using Lib-ruby-parser and tower-lsp: two existing libraries that handle a bunch of the heavy lifting for me. I'm more productive in Rust than with Ruby at this point, despite doing Ruby full time for 15 years, plus I really really don't want to have to deal with a slow LSP--that was the whome impetus for this project. I started in the spring, made a bunch of headway, then backtracked to redo the internals to make it easier to handle monkeypatching, overriding/redefining of methods, etc. across your project.

  • tailor

    A RubyGem that allows for checking standard styling of Ruby files. (by turboladen)

    I'd also love some more diagnostics; things that you may get from flog or flay or rubocop (although I think integrating with rubocop would be ideal, given its influence on the ecosystem) or rails_best_practices (prior to rubocop, I actually tried making my own linter, tailor, but rubocop came along and was a million times better)...

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts