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_name, #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?, descendant_send_nodes, descendant_send_nodes_by_method_name, #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.
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 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 |
# File 'rubocops/lines.rb', line 716 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 `#{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 |