class RuboCop::Cop::Commissioner
Commissioner class is responsible for processing the AST and delegating work to the specified cops.
Attributes
errors[R]
Public Class Methods
callback_methods()
click to toggle source
# File lib/rubocop/cop/commissioner.rb, line 12 def self.callback_methods Parser::Meta::NODE_TYPES.map { |type| :"on_#{type}" } end
new(cops, forces = [], options = {})
click to toggle source
# File lib/rubocop/cop/commissioner.rb, line 16 def initialize(cops, forces = [], options = {}) @cops = cops @forces = forces @options = options @callbacks = {} reset_errors end
Public Instance Methods
investigate(processed_source)
click to toggle source
# File lib/rubocop/cop/commissioner.rb, line 51 def investigate(processed_source) reset_errors remove_irrelevant_cops(processed_source.buffer.name) reset_callbacks prepare(processed_source) invoke_custom_processing(@cops, processed_source) invoke_custom_processing(@forces, processed_source) walk(processed_source.ast) if processed_source.ast @cops.flat_map(&:offenses) end
Private Instance Methods
invoke_custom_processing(cops_or_forces, processed_source)
click to toggle source
There are cops/forces that require their own custom processing. If they define the investigate method, all input parameters passed to the commissioner will be passed to the cop too in order to do its own processing.
# File lib/rubocop/cop/commissioner.rb, line 85 def invoke_custom_processing(cops_or_forces, processed_source) cops_or_forces.each do |cop| next unless cop.respond_to?(:investigate) with_cop_error_handling(cop) do cop.investigate(processed_source) end end end
prepare(processed_source)
click to toggle source
TODO: Bad design.
# File lib/rubocop/cop/commissioner.rb, line 77 def prepare(processed_source) @cops.each { |cop| cop.processed_source = processed_source } end
remove_irrelevant_cops(filename)
click to toggle source
# File lib/rubocop/cop/commissioner.rb, line 68 def remove_irrelevant_cops(filename) @cops.reject! { |cop| cop.excluded_file?(filename) } end
reset_callbacks()
click to toggle source
# File lib/rubocop/cop/commissioner.rb, line 72 def reset_callbacks @callbacks.clear end
reset_errors()
click to toggle source
# File lib/rubocop/cop/commissioner.rb, line 64 def reset_errors @errors = Hash.new { |hash, k| hash[k] = [] } end
with_cop_error_handling(cop) { || ... }
click to toggle source
# File lib/rubocop/cop/commissioner.rb, line 95 def with_cop_error_handling(cop) yield rescue => e raise e if @options[:raise_error] @errors[cop] << e end