Class: RuboCop::Cop::RubyLsp::UseRegisterWithHandlerMethod

Inherits:
Base
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb

Overview

Avoid using register without handler method, or handler without register.

# Register without handler method.

# bad class MyListener < Listener

def initialize(dispatcher)
  super()
  dispatcher.register(
    self,
    :on_string_node_enter,
  )
end

end

# good class MyListener < Listener

def initialize(dispatcher)
  super()
  dispatcher.register(
    self,
    :on_string_node_enter,
  )
end

def on_string_node_enter(node)
end

end

# Handler method without register.

# bad class MyListener < Listener

def initialize(dispatcher)
  super()
  dispatcher.register(
    self,
  )
end

def on_string_node_enter(node)
end

end

# good class MyListener < Listener

def initialize(dispatcher)
  super()
  dispatcher.register(
    self,
    :on_string_node_enter,
  )
end

def on_string_node_enter(node)
end

end

Constant Summary collapse

MSG_MISSING_HANDLER =
"Registered to `%{listener}` without a handler defined."
MSG_MISSING_LISTENER =
"Created a handler without registering the associated `%{listener}` event."

Instance Method Summary collapse

Instance Method Details

#on_new_investigationObject



88
89
90
91
92
93
94
95
96
# File 'lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb', line 88

def on_new_investigation
  return if processed_source.blank?

  listeners = find_all_listeners(processed_source.ast).flat_map { |listener| listener }
  handlers = find_all_handlers(processed_source.ast).flat_map { |handler| handler }

  add_offense_to_listeners_without_handler(listeners, handlers)
  add_offense_handlers_without_listener(listeners, handlers)
end