Класс: 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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
Этот метод возвращает неопределённое значение.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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. По возможности сторонним разработчикам следует избегать использования этого метода, поскольку он может быть удалён или изменён без предупреждения.
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