Class: RuboCop::Cop::FormulaAudit::PythonVersions Private

Inherits:
RuboCop::Cop::FormulaCop show all
Defined in:
brew/Library/Homebrew/rubocops/lines.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 makes sure that python versions are consistent.

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.



327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
# File 'brew/Library/Homebrew/rubocops/lines.rb', line 327

def audit_formula(_node, _class_node, _parent_class_node, body_node)
  python_formula_node = find_every_method_call_by_name(body_node, :depends_on).find do |dep|
    string_content(parameters(dep).first).start_with? "python@"
  end

  return if python_formula_node.blank?

  python_version = string_content(parameters(python_formula_node).first).split("@").last

  find_strings(body_node).each do |str|
    string_content = string_content(str)

    next unless match = string_content.match(/^python(@)?(\d\.\d+)$/)
    next if python_version == match[2]

    @fix = if match[1]
      "python@#{python_version}"
    else
      "python#{python_version}"
    end

    offending_node(str)
    problem "References to `#{string_content}` should match the specified python dependency (`#{@fix}`)"
  end
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.



353
354
355
356
357
# File 'brew/Library/Homebrew/rubocops/lines.rb', line 353

def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.source_range, "\"#{@fix}\"")
  end
end