class RubyLsp::Requests::WorkspaceSymbol
symbols.
request allows fuzzy searching declarations in the entire project. On VS Code, use CTRL/CMD + T to search for
The [workspace symbol](microsoft.github.io/language-server-protocol/specification#workspace_symbol)
def initialize(global_state, query)
def initialize(global_state, query) super() @global_state = global_state @query = query @index = global_state.index #: RubyIndexer::Index end
def perform
@override
def perform @index.fuzzy_search(@query).filter_map do |entry| uri = entry.uri file_path = uri.full_path # We only show symbols declared in the workspace in_dependencies = file_path && !not_in_dependencies?(file_path) next if in_dependencies # We should never show private symbols when searching the entire workspace next if entry.private? kind = kind_for_entry(entry) loc = entry.location # We use the namespace as the container name, but we also use the full name as the regular name. The reason we # do this is to allow people to search for fully qualified names (e.g.: `Foo::Bar`). If we only included the # short name `Bar`, then searching for `Foo::Bar` would not return any results *container, _short_name = entry.name.split("::") Interface::WorkspaceSymbol.new( name: entry.name, container_name: container.join("::"), kind: kind, location: Interface::Location.new( uri: uri.to_s, range: Interface::Range.new( start: Interface::Position.new(line: loc.start_line - 1, character: loc.start_column), end: Interface::Position.new(line: loc.end_line - 1, character: loc.end_column), ), ), ) end end