class RuboCop::Cop::Style::PerlBackrefs
puts Regexp.last_match(1)
# good
puts $1
# bad
@example
$1, $2, $&, &+, $MATCH, $PREMATCH, etc.
backreferences and their English versions like
Looks for uses of Perl-style regexp match
def constant_prefix(node)
-
(String)
-
Parameters:
-
node
(RuboCop::AST::Node
) --
Other tags:
- Private: -
def constant_prefix(node) if node.each_ancestor(:class, :module).any? '::' else '' end end
def derived_from_braceless_interpolation?(node)
-
(Boolean)
-
Parameters:
-
node
(RuboCop::AST::Node
) --
Other tags:
- Private: -
def derived_from_braceless_interpolation?(node) %i[dstr regexp xstr].include?(node.parent&.type) end
def format_message(node:, preferred_expression:)
-
(String)
-
Parameters:
-
preferred_expression
(String
) -- -
node
(RuboCop::AST::Node
) --
Other tags:
- Private: -
def format_message(node:, preferred_expression:) original_expression = original_expression_of(node) format( MESSAGE_FORMAT, original_expression: original_expression, preferred_expression: preferred_expression ) end
def on_back_ref(node)
def on_back_ref(node) on_back_ref_or_gvar_or_nth_ref(node) end
def on_back_ref_or_gvar_or_nth_ref(node)
-
node
(RuboCop::AST::Node
) --
Other tags:
- Private: -
def on_back_ref_or_gvar_or_nth_ref(node) preferred_expression = preferred_expression_to_node_with_constant_prefix(node) return unless preferred_expression add_offense( node, message: format_message(node: node, preferred_expression: preferred_expression) ) do |corrector| if derived_from_braceless_interpolation?(node) preferred_expression = "{#{preferred_expression}}" end corrector.replace(node, preferred_expression) end end
def on_gvar(node)
def on_gvar(node) on_back_ref_or_gvar_or_nth_ref(node) end
def on_nth_ref(node)
def on_nth_ref(node) on_back_ref_or_gvar_or_nth_ref(node) end
def original_expression_of(node)
-
(String)
-
Parameters:
-
node
(RuboCop::AST::Node
) --
Other tags:
- Private: -
def original_expression_of(node) first = node.to_a.first if first.is_a?(::Integer) "$#{first}" else first.to_s end end
def preferred_expression_to(node)
-
(String, nil)
-
Parameters:
-
node
(RuboCop::AST::Node
) --
Other tags:
- Private: -
def preferred_expression_to(node) first = node.to_a.first case first when ::Integer "Regexp.last_match(#{first})" when :$&, :$MATCH 'Regexp.last_match(0)' when :$`, :$PREMATCH 'Regexp.last_match.pre_match' when :$', :$POSTMATCH 'Regexp.last_match.post_match' when :$+, :$LAST_PAREN_MATCH 'Regexp.last_match(-1)' end end
def preferred_expression_to_node_with_constant_prefix(node)
-
(String, nil)
-
Parameters:
-
node
(RuboCop::AST::Node
) --
Other tags:
- Private: -
def preferred_expression_to_node_with_constant_prefix(node) expression = preferred_expression_to(node) return unless expression "#{constant_prefix(node)}#{expression}" end