Class: RuboCop::Cop::FormulaAudit::LivecheckUrlSymbol Private

Inherits:
RuboCop::Cop::FormulaCop show all
Extended by:
AutoCorrector
Defined in:
rubocops/livecheck.rb

Overview

This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.

This cop ensures that a supported symbol (head, stable,homepage) is used when the livecheckurl` is identical to one of these formula URLs.

Constant Summary

Constants included from Kernel

Kernel::IGNORE_INTERRUPTS_MUTEX

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, #caveats_strings, #dependency_name_hash_match?, #dependency_type_hash_match?, #depends_on?, #depends_on_name_type?, #formula_tap, #get_checksum_node, #on_class, #required_dependency?, #required_dependency_name?, #style_exceptions_dir, #tap_style_exception?, #versioned_formula?

Methods included from HelperFunctions

#block_method_called_in_block?, #block_size, #check_precedence, #class_name, #component_precedes?, #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, #line_number, #line_start_column, #method_called?, #method_called_ever?, #method_name, #node_equals?, #offending_node, #parameters, #parameters_passed?, #problem, #regex_match_group, #size, #source_buffer, #start_column, #string_content

Methods included from Kernel

#disk_usage_readable, #ensure_executable!, #ensure_formula_installed!, #exec_browser, #exec_editor, #ignore_interrupts, #interactive_shell, #number_readable, #odebug, #odeprecated, #odie, #odisabled, #ofail, #oh1, #oh1_title, #ohai, #ohai_title, #onoe, #opoo, #paths, #pretty_duration, #pretty_installed, #pretty_outdated, #pretty_uninstalled, #quiet_system, #redact_secrets, #redirect_stdout, #require?, #safe_system, #tap_and_name_comparison, #truncate_text_to_approximate_size, #which, #which_all, #which_editor, #with_custom_locale, #with_env, #with_homebrew_path

Instance Method Details

#audit_formula(formula_nodes) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'rubocops/livecheck.rb', line 68

def audit_formula(formula_nodes)
  body_node = formula_nodes.body_node
  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_url_node = find_every_method_call_by_name(livecheck_node, :url).first
  livecheck_url = find_strings(livecheck_url_node).first
  return if livecheck_url.blank?

  livecheck_url = string_content(livecheck_url)

  head = find_every_method_call_by_name(body_node, :head).first
  head_url = find_strings(head).first

  if head.present? && head_url.blank?
    head = find_every_method_call_by_name(head, :url).first
    head_url = find_strings(head).first
  end

  head_url = string_content(head_url) if head_url.present?

  stable = find_every_method_call_by_name(body_node, :url).first
  stable_url = find_strings(stable).first

  if stable_url.blank?
    stable = find_every_method_call_by_name(body_node, :stable).first
    stable = find_every_method_call_by_name(stable, :url).first
    stable_url = find_strings(stable).first
  end

  stable_url = string_content(stable_url) if stable_url.present?

  homepage = find_every_method_call_by_name(body_node, :homepage).first
  homepage_url = string_content(find_strings(homepage).first) if homepage.present?

  formula_urls = { head: head_url, stable: stable_url, homepage: homepage_url }.compact

  formula_urls.each do |symbol, url|
    next if url != livecheck_url && url != "#{livecheck_url}/" && "#{url}/" != livecheck_url

    offending_node(livecheck_url_node)
    problem "Use `url :#{symbol}`" do |corrector|
      corrector.replace(livecheck_url_node.source_range, "url :#{symbol}")
    end
    break
  end
end