Class: RubyLsp::Addon

Inherits:
Object
  • Object
show all
Extended by:
T::Helpers, T::Sig
Defined in:
lib/ruby_lsp/addon.rb

Overview

To register an addon, inherit from this class and implement both ‘name` and `activate`

# Example

“‘ruby module MyGem

class MyAddon < Addon
  def activate
    # Perform any relevant initialization
  end

  def name
    "My addon name"
  end
end

end “‘

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeAddon

Returns a new instance of Addon.



92
93
94
# File 'lib/ruby_lsp/addon.rb', line 92

def initialize
  @errors = T.let([], T::Array[StandardError])
end

Class Attribute Details

.addon_classesObject (readonly)

Returns the value of attribute addon_classes.



43
44
45
# File 'lib/ruby_lsp/addon.rb', line 43

def addon_classes
  @addon_classes
end

.addonsObject

Returns the value of attribute addons.



37
38
39
# File 'lib/ruby_lsp/addon.rb', line 37

def addons
  @addons
end

.file_watcher_addonsObject

Returns the value of attribute file_watcher_addons.



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

def file_watcher_addons
  @file_watcher_addons
end

Class Method Details

.get(addon_name) ⇒ Object



83
84
85
86
87
88
# File 'lib/ruby_lsp/addon.rb', line 83

def get(addon_name)
  addon = addons.find { |addon| addon.name == addon_name }
  raise "Could not find addon '#{addon_name}'" unless addon

  addon
end

.inherited(child_class) ⇒ Object



47
48
49
50
# File 'lib/ruby_lsp/addon.rb', line 47

def inherited(child_class)
  addon_classes << child_class
  super
end

.load_addons(global_state, outgoing_queue) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/ruby_lsp/addon.rb', line 56

def load_addons(global_state, outgoing_queue)
  # Require all addons entry points, which should be placed under
  # `some_gem/lib/ruby_lsp/your_gem_name/addon.rb`
  errors = Gem.find_files("ruby_lsp/**/addon.rb").filter_map do |addon|
    require File.expand_path(addon)
    nil
  rescue => e
    e
  end

  # Instantiate all discovered addon classes
  self.addons = addon_classes.map(&:new)
  self.file_watcher_addons = addons.select { |addon| addon.respond_to?(:workspace_did_change_watched_files) }

  # Activate each one of the discovered addons. If any problems occur in the addons, we don't want to
  # fail to boot the server
  addons.each do |addon|
    addon.activate(global_state, outgoing_queue)
  rescue => e
    addon.add_error(e)
  end

  errors
end

Instance Method Details

#activate(global_state, outgoing_queue) ⇒ Object



123
# File 'lib/ruby_lsp/addon.rb', line 123

def activate(global_state, outgoing_queue); end

#add_error(error) ⇒ Object



97
98
99
100
# File 'lib/ruby_lsp/addon.rb', line 97

def add_error(error)
  @errors << error
  self
end

#create_code_lens_listener(response_builder, uri, dispatcher) ⇒ Object



142
# File 'lib/ruby_lsp/addon.rb', line 142

def create_code_lens_listener(response_builder, uri, dispatcher); end

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



194
# File 'lib/ruby_lsp/addon.rb', line 194

def create_completion_listener(response_builder, node_context, dispatcher, uri); end

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



183
# File 'lib/ruby_lsp/addon.rb', line 183

def create_definition_listener(response_builder, uri, node_context, dispatcher); end

#create_document_symbol_listener(response_builder, dispatcher) ⇒ Object



161
# File 'lib/ruby_lsp/addon.rb', line 161

def create_document_symbol_listener(response_builder, dispatcher); end

#create_hover_listener(response_builder, node_context, dispatcher) ⇒ Object



152
# File 'lib/ruby_lsp/addon.rb', line 152

def create_hover_listener(response_builder, node_context, dispatcher); end

#create_semantic_highlighting_listener(response_builder, dispatcher) ⇒ Object



169
# File 'lib/ruby_lsp/addon.rb', line 169

def create_semantic_highlighting_listener(response_builder, dispatcher); end

#deactivateObject



128
# File 'lib/ruby_lsp/addon.rb', line 128

def deactivate; end

#error?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/ruby_lsp/addon.rb', line 103

def error?
  @errors.any?
end

#errors_detailsObject



116
117
118
# File 'lib/ruby_lsp/addon.rb', line 116

def errors_details
  @errors.map(&:full_message).join("\n\n")
end

#formatted_errorsObject



108
109
110
111
112
113
# File 'lib/ruby_lsp/addon.rb', line 108

def formatted_errors
  <<~ERRORS
    #{name}:
      #{@errors.map(&:message).join("\n")}
  ERRORS
end

#nameObject



132
# File 'lib/ruby_lsp/addon.rb', line 132

def name; end