Class: RuboCop::Cop::FormulaAudit::LivecheckUrlSymbol 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 a supported symbol (head, stable, homepage) is used when the livecheck url` 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, #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.



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 'brew/Library/Homebrew/rubocops/livecheck.rb', line 70

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)
    @offense = symbol
    problem "Use `url :#{symbol}`"
    break
  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.



119
120
121
122
123
124
# File 'brew/Library/Homebrew/rubocops/livecheck.rb', line 119

def autocorrect(node)
  lambda do |corrector|
    corrector.replace(node.source_range, "url :#{@offense}")
    @offense = nil
  end
end