Module: RubyLsp::TestHelper

Defined in:
lib/ruby_lsp/test_helper.rb

Overview

@requires_ancestor: Kernel

Defined Under Namespace

Classes: TestError

Instance Method Summary collapse

Instance Method Details

#pop_log_notification(message_queue, type) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/ruby_lsp/test_helper.rb', line 60

def pop_log_notification(message_queue, type)
  log = message_queue.pop
  return log if log.params.type == type

  log = message_queue.pop until log.params.type == type
  log
end

#pop_message(outgoing_queue, &block) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/ruby_lsp/test_helper.rb', line 68

def pop_message(outgoing_queue, &block)
  message = outgoing_queue.pop
  return message if block.call(message)

  message = outgoing_queue.pop until block.call(message)
  message
end

#pop_result(server) ⇒ Object

: (RubyLsp::Server server) -> RubyLsp::Result



49
50
51
52
53
54
55
56
57
58
# File 'lib/ruby_lsp/test_helper.rb', line 49

def pop_result(server)
  result = server.pop_response
  result = server.pop_response until result.is_a?(RubyLsp::Result) || result.is_a?(RubyLsp::Error)

  if result.is_a?(RubyLsp::Error)
    raise TestError, "Failed to execute request #{result.message}"
  else
    result
  end
end

#with_server(source = nil, uri = Kernel.URI("file:///fake.rb"), stub_no_typechecker: false, load_addons: true, &block) ⇒ Object

: [T] (?String? source, ?URI::Generic uri, ?stub_no_typechecker: bool, ?load_addons: bool) { (RubyLsp::Server server, URI::Generic uri) -> T } -> T



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/ruby_lsp/test_helper.rb', line 12

def with_server(source = nil, uri = Kernel.URI("file:///fake.rb"), stub_no_typechecker: false, load_addons: true,
  &block)
  server = RubyLsp::Server.new(test_mode: true)
  server.global_state.apply_options({ initializationOptions: { experimentalFeaturesEnabled: true } })
  server.global_state.instance_variable_set(:@has_type_checker, false) if stub_no_typechecker
  language_id = uri.to_s.end_with?(".erb") ? "erb" : "ruby"

  if source
    server.process_message({
      method: "textDocument/didOpen",
      params: {
        textDocument: {
          uri: uri,
          text: source,
          version: 1,
          languageId: language_id,
        },
      },
    })

    server.global_state.index.index_single(uri, source)
  end

  server.load_addons(include_project_addons: false) if load_addons

  begin
    block.call(server, uri)
  ensure
    if load_addons
      RubyLsp::Addon.addons.each(&:deactivate)
      RubyLsp::Addon.addons.clear
    end
    server.run_shutdown
  end
end