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?, #block_size, #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, #size, #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.
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 |
# File 'rubocops/lines.rb', line 496 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, subcmd, shell_parameter| # generate_completions_from_executable only applicable if shell is passed next unless shell_parameter.match?(/(bash|zsh|fish)/) 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") 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 << subcmd.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 offending_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 `#{@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 |