diff --git a/Library/Homebrew/rubocops/all.rb b/Library/Homebrew/rubocops/all.rb index b42f50665e8858..284d135bd5970c 100644 --- a/Library/Homebrew/rubocops/all.rb +++ b/Library/Homebrew/rubocops/all.rb @@ -11,6 +11,7 @@ require_relative "presence" require_relative "present" require_relative "safe_navigation_with_blank" +require_relative "shell_command_stub" require_relative "shell_commands" require_relative "install_bundler_gems" diff --git a/Library/Homebrew/rubocops/shell_command_stub.rb b/Library/Homebrew/rubocops/shell_command_stub.rb new file mode 100644 index 00000000000000..34d19999054c81 --- /dev/null +++ b/Library/Homebrew/rubocops/shell_command_stub.rb @@ -0,0 +1,24 @@ +# typed: strict +# frozen_string_literal: true + +module RuboCop + module Cop + module Homebrew + class ShellCommandStub < Base + MSG = "Shell command stubs must have a `.sh` counterpart." + RESTRICT_ON_SEND = [:include].freeze + + sig { params(node: AST::SendNode).void } + def on_send(node) + return if node.first_argument&.const_name != "ShellCommand" + + stub_path = Pathname.new(processed_source.file_path) + sh_cmd_path = Pathname.new("#{stub_path.dirname}/#{stub_path.basename(".rb")}.sh") + return if sh_cmd_path.exist? + + add_offense(node) + end + end + end + end +end