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

Methods included from RequestSupport

#hash_member, #integer_member, #params_hash, #publish, #require_running!, #require_state!, #stale_publication?, #store, #string_member, #workspace

Instance Method Details

#capabilitiesHash[String, untyped]

RBS:

  • () -> Hash[String, untyped]

Returns:

  • (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

RBS:

  • (untyped params) -> nil

Parameters:

  • params (Object)

Returns:

  • (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]

RBS:

  • (Hash[String, untyped] params) -> Array[String]

Parameters:

  • params (Hash[String, untyped])

Returns:

  • (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]

RBS:

  • (untyped raw_params) -> Hash[String, untyped]

Parameters:

  • raw_params (Object)

Returns:

  • (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

RBS:

  • (untyped params) -> nil

Parameters:

  • params (Object)

Returns:

  • (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

RBS:

  • (untyped params) -> nil

Parameters:

  • params (Object)

Returns:

  • (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