A Ruby Language Server

Code Examples

This document provides simple examples of how to use the Solargraph library. The examples are intended as a starting point for developers who want to modify or extend the library, or integrate its tools into other software.

Language client implementors who want to connect to Solargraph language servers should refer to the language server documentation.

Querying Ruby Core Methods

api_map =
pins = api_map.get_methods('String') # Get public instance methods of the
                                     # String class

Adding a File to an ApiMap

api_map =
source = Solargraph::Source.load_string('class MyClass; end', 'my_class.rb') source # Add the source to the map
pins = api_map.get_constants('') # The constants in the global namespace will
                                 # include `MyClass`

Adding a Workspace to an ApiMap

api_map = Solargraph::ApiMap.load('/path/to/workspace')
pins = api_map.get_constants('') # Results will include constants defined in
                                 # the project's code

Querying Definitions from a Location in Source Code

api_map =
source = Solargraph::Source.load_string("x = 'string'; puts x", 'example.rb')
api_map.virtualize source
clip = api_map.clip_at('example.rb',, 23))
pins = clip.define # `var` is recognized as a local variable of type String

Querying Completion Suggestions

api_map =
source = Solargraph::Source.load_string("String.", 'example.rb') source
clip = api_map.clip_at('example.rb',, 7))
completion = clip.complete # Suggestions will include String class methods

Adding a Message to the Language Server Protocol

class MyMessage < Solargraph::LanguageServer::Message::Base
  def process
    STDERR.puts "Server received MyMessage parameters: #{params}"

Solargraph::LanguageServer::Message.register '$/myMessage', MyMessage

Adding a Diagnostics Reporter to the Language Server

class MyReporter < Solargraph::Diagnostics::Base
  def diagnose source, api_map
    # Return an array of hash objects that conform to the LSP's Diagnostic
    # specification

Solargraph::Diagnostics.register 'my_reporter', MyReporter

More Examples

Developers are encouraged to refer to the specs for more examples of how to use Solargraph.