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.

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(_node, _class_node, _parent_class_node, body_node) ⇒ Object

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.



65
66
67
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
# File 'rubocops/livecheck.rb', line 65

def audit_formula(_node, _class_node, _parent_class_node, 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