deftype_definition(file_path:, line:, character:)
# Only send to servers that support typeDefinitionProvider
text_syncs = text_syncs_for(file_path).select do |ts|
ts.client.server_capabilities["typeDefinitionProvider"]
endif text_syncs.empty?
# Fallback message: check if any server is running but doesn't support typeDefinition
any_text_sync = text_syncs_for(file_path).first
@editor.message = if any_text_sync
"LSP: no server supports typeDefinition for this file"else
server_unavailable_message(file_path)
endreturnend
uri = TextDocumentSync.path_to_uri(file_path)
handler = Handlers::TypeDefinition.new(editor: @editor, client: text_syncs.first.client)
# Collect results from all clients
results_mutex = Mutex.new
pending_count = text_syncs.size
all_results = []
text_syncs.each do |text_sync|
text_sync.client.type_definition(uri: uri, line: line, character: character) do |result, _error|
results_mutex.synchronize do
all_results << result if result
pending_count -= 1if pending_count.zero?
merged = merge_locations(all_results)
handler.handle(merged, nil)
endendendendend