Permalink
Find file Copy path
753c165 Sep 7, 2018
1 contributor

Users who have contributed to this file

77 lines (57 sloc) 2.39 KB

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 LANGUAGE_SERVER.md.

Querying Ruby Core Methods

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

Adding a File to an ApiMap

api_map = Solargraph::ApiMap.new
source = Solargraph::Source.load_string('class MyClass; end', 'my_class.rb')
api_map.map 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 = Solargraph::ApiMap.new
source = Solargraph::Source.load_string("var = 'a string'; puts var", 'example.rb')
api_map.virtualize source
clip = api_map.clip_at('example.rb', Solargraph::Position.new(0, 23))
pins = clip.define # `var` is recognized as a local variable containing a String

Querying Completion Suggestions

api_map = Solargraph::ApiMap.new
source = Solargraph::Source.load_string("String.", 'example.rb')
api_map.map source
clip = api_map.clip_at('example.rb', Solargraph::Position.new(0, 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 with the following parameters: #{params}"
  end
end

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
    []
  end
end

Solargraph::Diagnostics.register 'my_reporter', MyReporter

More Examples

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