class Ducalis::ComplexRegex

Constants

COMPLEX_TYPES_COSTS
DEFAULT_COST
OFFENSE

Public Instance Methods

on_begin(node) click to toggle source
# File lib/ducalis/cops/complex_regex.rb, line 21
def on_begin(node)
  regex_using(node).each do |regex_desc|
    next if formatted?(regex_desc) || simple?(regex_desc.first)

    add_offense(regex_desc.first, :expression, OFFENSE)
  end
end

Private Instance Methods

formatted?(regex_desc) click to toggle source
# File lib/ducalis/cops/complex_regex.rb, line 43
def formatted?(regex_desc)
  regex_desc.size > 1
end
maximal_complexity() click to toggle source
# File lib/ducalis/cops/complex_regex.rb, line 39
def maximal_complexity
  cop_config['MaxComplexity']
end
simple?(regex_node) click to toggle source
# File lib/ducalis/cops/complex_regex.rb, line 31
def simple?(regex_node)
  Regexp::Scanner.scan(
    Regexp.new(regex_node.source)
  ).map do |type, _, _, _, _|
    COMPLEX_TYPES_COSTS.fetch(type, DEFAULT_COST)
  end.inject(:+) <= maximal_complexity
end