The Solargraph library consists of two major groups of components: the data providers and the language servers. The data providers manage the maps of information about a program. The language servers are the concrete implementations of transports and messages that enable the language server protocol.
ApiMap (Solargraph::ApiMap): The component that provides information about a program based on its Workspace, external gems, and the Ruby core.
Workspace (Solargraph::Workspace): A collection of Sources that comprise a project. Workspaces have configurations that define which files to include in maps and other project-related options. Users can configure the Workspace through a .solargraph.yml file in a project's root directory.
Source (Solargraph::Source): Data about a single Ruby file. Sources parse Ruby code into an AST and handle incremental updates.
SourceMap (Solargraph::SourceMap): A Source with generated pins for use in ApiMaps.
Pins (Solargraph::Pin): Information about classes, modules, methods, variables, etc. Pins for different types of components extend Pin::Base. Most ApiMap queries return results as an array of Pins.
Cursor (Solargraph::Source::Cursor): Information about a specific location in a Source.
Clip (Solargraph::SourceMap::Clip): A Cursor bundled with an ApiMap to provide definitions, completions, and other information.
YardMap (Solargraph::YardMap): A collection of YARD documents. ApiMaps use YardMaps to gather data from external gems and the Ruby core.
Library (Solargraph::Library): The component that synchronizes a Workspace with an ApiMap. Libraries help ensure that the ApiMap gets updated when a file in the Workspace changes.
Host (Solargraph::LanguageServer::Host): The component responsible for processing messages between the server and the client. Hosts maintain a project's Library and provide thread-safe methods for asynchronous operations.
Messages (Solargraph::LanguageServer::Message): Implementations of LSP methods and notifications. Each message implementation extends Message::Base.
Transports (Solargraph::LanguageServer::Transport): Server implementations for various protocols. The two transports that are currently supported are socket and stdio. The Transport::DataReader class provides a common interface for processing incoming JSON-RPC messages.
The EXAMPLES.md document provides simple examples of how to use, extend, and modify the Solargraph library.
Refer to LANGUAGE_SERVER.md for information about connecting language clients to Solargraph language servers.