class Ducalis::RegexCop
Constants
- DEFAULT_EXAMPLE
- DETAILS
- OFFENSE
- SELF_DESCRIPTIVE
Public Instance Methods
on_begin(node)
click to toggle source
# File lib/ducalis/cops/regex_cop.rb, line 44 def on_begin(node) not_defined_regexes(node).each do |regex| next if SELF_DESCRIPTIVE.include?(regex.source) || const_dynamic?(regex) add_offense(regex, :expression, format(OFFENSE, present_node(regex))) end end
Private Instance Methods
const_dynamic?(node)
click to toggle source
# File lib/ducalis/cops/regex_cop.rb, line 67 def const_dynamic?(node) node.child_nodes.any?(&:begin_type?) end
defined_as_const?(regex, definitions)
click to toggle source
# File lib/ducalis/cops/regex_cop.rb, line 63 def defined_as_const?(regex, definitions) definitions.any? { |node| const_using(node).any? { |use| use == regex } } end
not_defined_regexes(node)
click to toggle source
# File lib/ducalis/cops/regex_cop.rb, line 57 def not_defined_regexes(node) const_using(node).reject do |regex| defined_as_const?(regex, const_definition(node)) end.map(&:parent) end
present_node(node)
click to toggle source
# File lib/ducalis/cops/regex_cop.rb, line 71 def present_node(node) { constant: node.source, fixed_string: node.source_range.source_line .sub(node.source, 'CONST_NAME').lstrip, example: regex_sample(node) } end
regex_sample(node)
click to toggle source
# File lib/ducalis/cops/regex_cop.rb, line 80 def regex_sample(node) Regexp.new(node.to_a.first.to_a.first).examples.sample rescue RegexpExamples::IllegalSyntaxError DEFAULT_EXAMPLE end