Class: RuboCop::Cop::FormulaAudit::LivecheckRegexCaseInsensitive Private

Inherits:
RuboCop::Cop::FormulaCop show all
Defined in:
brew/Library/Homebrew/rubocops/livecheck.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

This cop ensures that the regex provided to livecheck is case-insensitive, unless sensitivity is explicitly required for proper matching.

Constant Summary collapse

REGEX_CASE_SENSITIVE_ALLOWLIST =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

%w[].freeze

Instance Attribute Summary

Attributes inherited from RuboCop::Cop::FormulaCop

#file_path

Instance Method Summary collapse

Methods inherited from RuboCop::Cop::FormulaCop

#audit_comments, #audit_urls, #block_size, #caveats_strings, #check_precedence, #class_name, #component_precedes?, #depends_on?, #depends_on_name_type?, #end_column, #expression_negated?, #find_all_blocks, #find_block, #find_blocks, #find_const, #find_every_func_call_by_name, #find_every_method_call_by_name, #find_instance_call, #find_instance_method_call, #find_method_calls_by_name, #find_method_def, #find_method_with_args, #find_node_method_by_name, #find_strings, #format_component, #formula_tap, #get_checksum_node, #method_called?, #method_called_ever?, #method_called_in_block?, #method_name, #node_equals?, #offending_node, #on_class, #parameters, #parameters_passed?, #size, #versioned_formula?

Methods included from HelperFunctions

#line_number, #line_start_column, #problem, #regex_match_group, #source_buffer, #start_column, #string_content

Instance Method Details

#audit_formula(_node, _class_node, _parent_class_node, body_node) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# File 'brew/Library/Homebrew/rubocops/livecheck.rb', line 223

def audit_formula(_node, _class_node, _parent_class_node, body_node)
  return if REGEX_CASE_SENSITIVE_ALLOWLIST.include?(@formula_name)

  livecheck_node = find_block(body_node, :livecheck)
  return if livecheck_node.blank?

  skip = find_every_method_call_by_name(livecheck_node, :skip).first.present?
  return if skip.present?

  livecheck_regex_node = find_every_method_call_by_name(livecheck_node, :regex).first
  return if livecheck_regex_node.blank?

  regex_node = livecheck_regex_node.descendants.first
  options_node = regex_node.regopt
  return if options_node.source.include?("i")

  offending_node(regex_node)
  problem "Regexes should be case-insensitive unless sensitivity is explicitly required for proper matching."
end

#autocorrect(node) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



243
244
245
246
247
248
# File 'brew/Library/Homebrew/rubocops/livecheck.rb', line 243

def autocorrect(node)
  lambda do |corrector|
    node = node.regopt
    corrector.replace(node.source_range, "i#{node.source}".chars.sort.join)
  end
end