module RuboCop::Cop::MethodComplexity
def self.included(base)
Ensure cops that include `MethodComplexity` have the config
def self.included(base) base.extend(IgnoredMethods::Config) end
def check_complexity(node, method_name)
def check_complexity(node, method_name) # Accepts empty methods always. return unless node.body max = cop_config['Max'] reset_repeated_csend complexity, abc_vector = complexity(node.body) return unless complexity > max msg = format(self.class::MSG, method: method_name, complexity: complexity, abc_vector: abc_vector, max: max) add_offense(node, message: msg) do self.max = complexity.ceil end end
def complexity(body)
def complexity(body) body.each_node(:lvasgn, *self.class::COUNTED_NODES).reduce(1) do |score, node| if node.lvasgn_type? reset_on_lvasgn(node) next score end score + complexity_score_for(node) end end
def on_block(node)
def on_block(node) define_method?(node) do |name| return if ignored_method?(name) check_complexity(node, name) end end
def on_def(node)
def on_def(node) return if ignored_method?(node.method_name) check_complexity(node, node.method_name) end