Class: Utils::AST::CaskAST Private

Inherits:
Object show all
Includes:
Utils::AST
Defined in:
utils/ast.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.

Helper class for editing casks.

Constant Summary

Constants included from Utils::AST

BlockNode, DefNode, Node, ProcessedSource, SendNode, TreeRewriter

Constants included from Kernel

Kernel::IGNORE_INTERRUPTS_MUTEX

Instance Method Summary collapse

Methods included from Utils::AST

body_children, call_node_match?, component_match?, literal_value, process_source, ruby_literal, stanza_text

Methods included from Kernel

#ensure_executable!, #exec_browser, #exec_editor, #ignore_interrupts, #interactive_shell, #quiet_system, #redirect_stdout, #safe_system, #which, #which_editor, #with_env, #with_homebrew_path

Constructor Details

#initialize(cask_contents) ⇒ 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.

Parameters:



559
560
561
562
563
564
565
# File 'utils/ast.rb', line 559

def initialize(cask_contents)
  @cask_contents = cask_contents
  processed_source, cask_block = process_cask
  @processed_source = T.let(processed_source, ProcessedSource)
  @cask_block = T.let(cask_block, BlockNode)
  @tree_rewriter = T.let(TreeRewriter.new(processed_source.buffer), TreeRewriter)
end

Instance Method Details

#depends_on_macos?Boolean

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.

Returns:

  • (Boolean)


609
610
611
612
613
614
615
616
617
618
# File 'utils/ast.rb', line 609

def depends_on_macos?
  stanzas(:depends_on).any? do |stanza_node|
    stanza_node.arguments.any? do |argument|
      literal_value(argument) == :macos ||
        (argument.hash_type? && T.cast(argument, RuboCop::AST::HashNode).pairs.any? do |pair|
          literal_value(pair.key) == :macos
        end)
    end
  end
end

#processString

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.

Returns:



568
569
570
# File 'utils/ast.rb', line 568

def process
  tree_rewriter.process
end

#replace_first_stanza_value(name, value) ⇒ 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:



573
574
575
576
577
578
# File 'utils/ast.rb', line 573

def replace_first_stanza_value(name, value)
  stanza_node = stanzas(name).first
  raise "Could not find '#{name}' stanza!" if stanza_node.blank?

  replace_stanza_argument(stanza_node, value)
end

#replace_stanza_value(name, old_value, new_value) ⇒ Integer

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.

Parameters:

Returns:



587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
# File 'utils/ast.rb', line 587

def replace_stanza_value(name, old_value, new_value)
  replacement_count = T.let(0, Integer)
  stanzas(name).each do |stanza_node|
    if literal_value(stanza_node.first_argument) == old_value
      replace_stanza_argument(stanza_node, new_value)
      replacement_count += 1
    end

    stanza_node.arguments.grep(RuboCop::AST::HashNode).each do |hash_node|
      hash_node.pairs.each do |pair|
        next if literal_value(pair.value) != old_value

        tree_rewriter.replace(pair.value.source_range, ruby_literal(new_value))
        replacement_count += 1
      end
    end
  end

  replacement_count
end