diff --git a/Library/Homebrew/rubocops/cask/no_overrides.rb b/Library/Homebrew/rubocops/cask/no_overrides.rb index 6dafc294b0..a7a65c751f 100644 --- a/Library/Homebrew/rubocops/cask/no_overrides.rb +++ b/Library/Homebrew/rubocops/cask/no_overrides.rb @@ -43,7 +43,9 @@ module RuboCop # Skip (nested) livecheck blocks as its `url` is different to a download `url`. next if send_node.method_name == :livecheck || inside_livecheck_block?(send_node) # Skip string interpolations. - next if send_node.ancestors.drop_while { |a| !a.begin_type? }.any?(&:dstr_type?) + if send_node.ancestors.drop_while { |a| !a.begin_type? }.any? { |a| a.dstr_type? || a.regexp_type? } + next + end next if ON_SYSTEM_METHODS.include?(send_node.method_name) names.add(send_node.method_name) diff --git a/Library/Homebrew/test/rubocops/cask/no_overrides_spec.rb b/Library/Homebrew/test/rubocops/cask/no_overrides_spec.rb index d7b43cf0a1..312035d140 100644 --- a/Library/Homebrew/test/rubocops/cask/no_overrides_spec.rb +++ b/Library/Homebrew/test/rubocops/cask/no_overrides_spec.rb @@ -71,6 +71,29 @@ describe RuboCop::Cop::Cask::NoOverrides do include_examples "does not report any offenses" end + context "when there are `arch` interpolations in regexps in `on_*` blocks" do + let(:source) do + <<~CASK + cask 'foo' do + arch arm: "arm64", intel: "x86" + + version 0.99,123.3 + + on_mojave :or_later do + url "https://brew.sh/foo-\#{arch}-\#{version.csv.first}-\#{version.csv.last}.pkg" + + livecheck do + url "https://brew.sh/foo/releases.html" + regex(/href=.*?foo[._-]v?(\d+(?:.\d+)+)-\#{arch}.pkg/i) + end + end + end + CASK + end + + include_examples "does not report any offenses" + end + context "when there are single-line livecheck blocks within `on_*` blocks, ignore their contents" do let(:source) do <<~CASK