Class: RubyLsp::HasStateMachine::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_lsp/has_state_machine/definition.rb

Constant Summary collapse

SERVER_ADDON_NAME =
"has_state_machine"

Instance Method Summary collapse

Constructor Details

#initialize(response_builder, _uri, node_context, dispatcher, index: nil, rails_client: nil, model_name_cache: nil) ⇒ Definition

Returns a new instance of Definition.



10
11
12
13
14
15
16
17
18
19
# File 'lib/ruby_lsp/has_state_machine/definition.rb', line 10

def initialize(response_builder, _uri, node_context, dispatcher, index: nil, rails_client: nil,
  model_name_cache: nil)
  @response_builder = response_builder
  @node_context = node_context
  @index = index
  @rails_client = rails_client
  @model_name_cache = model_name_cache

  dispatcher.register(self, :on_call_node_enter)
end

Instance Method Details

#on_call_node_enter(node) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ruby_lsp/has_state_machine/definition.rb', line 21

def on_call_node_enter(node)
  return unless current_target?(node)

  # Check the node shape first: resolving the model name may require a
  # round-trip to the Rails runner, so only pay it for `object` calls.
  if object_call?(node)
    return unless resolved_model_name

    push_entries(constant_entries(resolved_model_name))
  elsif object_method_call?(node)
    return unless resolved_model_name

    method_name = message(node)
    entries = method_entries(resolved_model_name, method_name)
    entries = association_entries(resolved_model_name, method_name) if entries.empty?

    push_entries(entries)
  end
end