Class: RuboCop::Cop::FormulaAudit::GenerateCompletionsDSL Private
- Inherits:
-
RuboCop::Cop::FormulaCop
- Object
- Base
- RuboCop::Cop::FormulaCop
- RuboCop::Cop::FormulaAudit::GenerateCompletionsDSL
- Extended by:
- AutoCorrector
- Defined in:
- rubocops/lines.rb,
sorbet/rbi/dsl/rubo_cop/cop/formula_audit/generate_completions_dsl.rbi
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 makes sure that the generate_completions_from_executable DSL is used.
Instance Attribute Summary
Attributes inherited from RuboCop::Cop::FormulaCop
Instance Method Summary collapse
- #audit_formula(formula_nodes) ⇒ void private
- #correctable_shell_completion_node(node, *pattern, **kwargs, &block) ⇒ T.untyped private
- #shell_completion_node(node, *pattern, **kwargs, &block) ⇒ T.untyped private
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?, #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, #source_buffer, #start_column, #string_content
Instance Method Details
#audit_formula(formula_nodes) ⇒ 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.
690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 |
# File 'rubocops/lines.rb', line 690 def audit_formula(formula_nodes) install = find_method_def(formula_nodes.body_node, :install) return if install.blank? correctable_shell_completion_node(install) do |node, shell, base_name, executable, subcommand, shell_parameter| # generate_completions_from_executable only applicable if shell is passed next unless shell_parameter.match?(/(bash|zsh|fish|pwsh)/) base_name = base_name.delete_prefix("_").delete_suffix(".fish") shell = shell.to_s.delete_suffix("_completion").to_sym shell_parameter_stripped = shell_parameter .delete_suffix("bash") .delete_suffix("zsh") .delete_suffix("fish") .delete_suffix("pwsh") shell_parameter_format = if shell_parameter_stripped.empty? nil elsif shell_parameter_stripped == "--" :flag elsif shell_parameter_stripped == "--shell=" :arg else shell_parameter_stripped end replacement_args = %w[] replacement_args << executable.source replacement_args << subcommand.source replacement_args << "base_name: \"#{base_name}\"" if base_name != @formula_name replacement_args << "shells: [:#{shell}]" unless shell_parameter_format.nil? replacement_args << "shell_parameter_format: #{shell_parameter_format.inspect}" end @offensive_node = node replacement = "generate_completions_from_executable(#{replacement_args.join(", ")})" problem "Use `#{replacement}` instead of `#{@offensive_node.source}`." do |corrector| corrector.replace(@offensive_node.source_range, replacement) end end shell_completion_node(install) do |node| next if node.source.include?("<<~") # skip heredoc completion scripts next if node.source.match?(/{.*=>.*}/) # skip commands needing custom ENV variables offending_node(node) problem "Use `generate_completions_from_executable` DSL instead of `#{T.must(@offensive_node).source}`." end end |
#correctable_shell_completion_node(node, *pattern, **kwargs, &block) ⇒ T.untyped
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.
17 |
# File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/generate_completions_dsl.rbi', line 17 def correctable_shell_completion_node(node, *pattern, **kwargs, &block); end |
#shell_completion_node(node, *pattern, **kwargs, &block) ⇒ T.untyped
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.
27 |
# File 'sorbet/rbi/dsl/rubo_cop/cop/formula_audit/generate_completions_dsl.rbi', line 27 def shell_completion_node(node, *pattern, **kwargs, &block); end |