Class: RubyLsp::RailsPartial::Addon

Inherits:
Addon
  • Object
show all
Defined in:
lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb

Overview

Ruby LSP add-on that provides go-to-definition and completion for the partial name string of a render call.

The view root is fixed to app/views (this add-on does not support prepend/append_view_path or independent engines).

Constant Summary collapse

WATCHER_REGISTRATION_ID =
"rails-partial-watcher"

Instance Method Summary collapse

Instance Method Details

#activate(global_state, outgoing_queue) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 21

def activate(global_state, outgoing_queue)
  views_path = File.join(global_state.workspace_path, "app", "views")
  @index = PartialIndex.new(views_path)
  @resolver = PartialResolver.new(@index, views_path)

  register_file_watcher(global_state, outgoing_queue)
end

#create_completion_listener(response_builder, node_context, dispatcher, uri) ⇒ Object



45
46
47
48
49
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 45

def create_completion_listener(response_builder, node_context, dispatcher, uri)
  return unless @resolver

  Completion.new(response_builder, node_context, @resolver, uri, dispatcher)
end

#create_definition_listener(response_builder, uri, node_context, dispatcher) ⇒ Object



39
40
41
42
43
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 39

def create_definition_listener(response_builder, uri, node_context, dispatcher)
  return unless @resolver

  Definition.new(response_builder, uri, node_context, @resolver, dispatcher)
end

#create_hover_listener(response_builder, node_context, dispatcher) ⇒ Object



51
52
53
54
55
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 51

def create_hover_listener(response_builder, node_context, dispatcher)
  return unless @resolver

  Hover.new(response_builder, node_context, @resolver, dispatcher)
end

#deactivateObject



29
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 29

def deactivate; end

#nameObject



31
32
33
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 31

def name
  "Rails Partial"
end

#versionObject



35
36
37
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 35

def version
  VERSION
end

#workspace_did_change_watched_files(changes) ⇒ Object

Watches partial changes under app/views and updates the index incrementally.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/ruby_lsp/ruby_lsp_rails_partial/addon.rb', line 58

def workspace_did_change_watched_files(changes)
  return unless @index

  changes.each do |change|
    path = Util.uri_to_path(change[:uri])
    next unless path

    case change[:type]
    when Constant::FileChangeType::CREATED, Constant::FileChangeType::CHANGED
      @index.add(path)
    when Constant::FileChangeType::DELETED
      @index.remove(path)
    end
  end
end