Module: Ibex::LSP::InitializationHandlers
- Includes:
- RequestSupport
- Included in:
- RequestHandlers
- Defined in:
- lib/ibex/lsp/initialization_handlers.rb,
sig/ibex/lsp/initialization_handlers.rbs
Overview
Handles initialize/initialized/shutdown/exit lifecycle transitions.
Instance Method Summary
collapse
#hash_member, #integer_member, #params_hash, #publish, #require_running!, #require_state!, #stale_publication?, #store, #string_member, #workspace
Instance Method Details
#capabilities ⇒ Hash[String, untyped]
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/ibex/lsp/initialization_handlers.rb', line 48
def capabilities
{
"positionEncoding" => "utf-16",
"textDocumentSync" => { "openClose" => true, "change" => 1, "save" => { "includeText" => true } },
"definitionProvider" => true,
"referencesProvider" => true,
"renameProvider" => { "prepareProvider" => true },
"hoverProvider" => true,
"workspace" => { "workspaceFolders" => { "supported" => true, "changeNotifications" => false } }
}
end
|
#exit_notification(_params) ⇒ nil
41
42
43
44
45
|
# File 'lib/ibex/lsp/initialization_handlers.rb', line 41
def exit_notification(_params)
@exit_status = @state == :shutdown ? 0 : 1
@exit_requested = true
nil
end
|
#initialization_roots(params) ⇒ Array[String]
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/ibex/lsp/initialization_handlers.rb', line 61
def initialization_roots(params)
folders = params["workspaceFolders"]
if folders.is_a?(Array) && !folders.empty?
return folders.map do |folder|
raise ProtocolError.new("workspaceFolders entries must be objects", code: -32_602) unless folder.is_a?(Hash)
string_member(folder, "uri")
end
end
root = params["rootUri"]
return [root] if root.is_a?(String)
raise ProtocolError.new("initialize requires rootUri or workspaceFolders", code: -32_602)
end
|
#initialize_workspace(raw_params) ⇒ Hash[String, untyped]
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/ibex/lsp/initialization_handlers.rb', line 12
def initialize_workspace(raw_params)
raise ProtocolError.new("server is already initialized", code: -32_600) unless @state == :uninitialized
params = params_hash(raw_params)
loader = Frontend::SourceLoader.new
@workspace = Workspace.new(initialization_roots(params), loader)
@store = DocumentStore.new(@workspace, loader)
@state = :initialized
{
"capabilities" => capabilities,
"serverInfo" => { "name" => "ibex", "version" => Ibex::VERSION }
}
end
|
#initialized_notification(_params) ⇒ nil
27
28
29
30
31
|
# File 'lib/ibex/lsp/initialization_handlers.rb', line 27
def initialized_notification(_params)
require_state!(:initialized)
@state = :running
nil
end
|
#shutdown_request(_params) ⇒ nil
34
35
36
37
38
|
# File 'lib/ibex/lsp/initialization_handlers.rb', line 34
def shutdown_request(_params)
require_state!(:running)
@state = :shutdown
nil
end
|