Spec-Zone.ru › Homebrew

Класс: Utils::AST::CaskAST Закрытый

Наследует:
Object
  • Object
  • Utils::AST::CaskAST
показать все
Подключает:
Utils::AST
Определён в:
utils/ast.rb

Обзор

Этот класс является частью закрытого API. Этот класс можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого класса, так как он может быть удалён или изменён без предупреждения.

Вспомогательный класс для редактирования cask.

Краткое описание констант

Константы, подключённые из Utils::AST

BlockNode, DefNode, Node, ProcessedSource, SendNode, TreeRewriter

Константы, подключённые из Kernel

Kernel::IGNORE_INTERRUPTS_MUTEX

Краткое описание методов экземпляра свернуть

  • #depends_on_macos? ⇒ Boolean закрытый
  • #first_stanza_value(name, within: nil) ⇒ T.untyped закрытый
  • #initialize(cask_contents) ⇒ void конструктор закрытый
  • #process ⇒ String закрытый
  • #replace_first_stanza_value(name, value) ⇒ void закрытый
  • #replace_root_stanza_with_arch_blocks(name, old_value) ⇒ void закрытый
  • #replace_stanza_value(name, old_value, new_value, within: nil) ⇒ Integer закрытый
  • #stanza?(name, within: nil) ⇒ Boolean закрытый
  • #stanza_anywhere?(name, within:) ⇒ Boolean закрытый

Методы, подключённые из Utils::AST

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

Методы, подключённые из 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

Подробное описание конструкторов

#initialize(cask_contents) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • cask_contents (String)


568
569
570
571
572
573
574
# File 'utils/ast.rb', line 568

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

Подробное описание методов экземпляра

#depends_on_macos? ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (Boolean)


663
664
665
666
667
668
669
670
671
672
# File 'utils/ast.rb', line 663

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

#first_stanza_value(name, within: nil) ⇒ T.untyped

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • name (Symbol)
  • within (Symbol, nil) (по умолчанию: nil)

Возвращает:

  • (T.untyped)


607
608
609
610
611
612
# File 'utils/ast.rb', line 607

def first_stanza_value(name, within: nil)
  stanza_node = stanzas(name, within:).first
  return if stanza_node.blank?

  literal_value(stanza_node.first_argument)
end

#process ⇒ String

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Возвращает:

  • (String)


577
578
579
# File 'utils/ast.rb', line 577

def process
  tree_rewriter.process
end

#replace_first_stanza_value(name, value) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • name (Symbol)
  • value (Numeric, String, Symbol)


582
583
584
585
586
587
# File 'utils/ast.rb', line 582

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_root_stanza_with_arch_blocks(name, old_value) ⇒ void

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Этот метод возвращает неопределённое значение.

Параметры:

  • name (Symbol)
  • old_value (Numeric, String, Symbol)


644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
# File 'utils/ast.rb', line 644

def replace_root_stanza_with_arch_blocks(name, old_value)
  stanza_node = top_level_stanzas(name).find do |node|
    literal_value(node.first_argument) == old_value
  end
  return if stanza_node.blank?

  indent = "" * stanza_node.source_range.column
  replacement = <<~EOS
#{indent}on_arm do
#{indent}#{name}#{ruby_literal(old_value)}#{indent}end
#{indent}on_intel do
#{indent}#{name}#{ruby_literal(old_value)}#{indent}end
  EOS
  tree_rewriter.replace(whole_line_range(stanza_node.source_range), replacement)
end

#replace_stanza_value(name, old_value, new_value, within: nil) ⇒ Integer

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • name (Symbol)
  • old_value (Numeric, String, Symbol)
  • new_value (Numeric, String, Symbol)
  • within (Symbol, nil) (по умолчанию: nil)

Возвращает:

  • (Integer)


622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
# File 'utils/ast.rb', line 622

def replace_stanza_value(name, old_value, new_value, within: nil)
  replacement_count = T.let(0, Integer)
  stanzas(name, within:).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

#stanza?(name, within: nil) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • name (Symbol)
  • within (Symbol, nil) (по умолчанию: nil)

Возвращает:

  • (Boolean)


590
591
592
# File 'utils/ast.rb', line 590

def stanza?(name, within: nil)
  stanzas(name, within:).present?
end

#stanza_anywhere?(name, within:) ⇒ Boolean

Этот метод является частью закрытого API. Этот метод можно использовать только в репозитории Homebrew/brew. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.

Параметры:

  • name (Symbol)
  • within (Symbol)

Возвращает:

  • (Boolean)


595
596
597
598
599
600
601
602
603
604
# File 'utils/ast.rb', line 595

def stanza_anywhere?(name, within:)
  cask_block.each_node(:block).any? do |node|
    block_node = T.cast(node, BlockNode)
    next false if block_node.method_name != within || block_node.receiver.present?

    block_node.each_node(:send).any? do |send_node|
      send_node.method_name == name && send_node.receiver.nil? && send_node.first_argument.present?
    end
  end
end

© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/rubydoc/Utils/AST/CaskAST.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API