From d4d413db622b852632bf06a6d5c22d3ce0d55563 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Thu, 23 Mar 2023 13:54:55 +0000 Subject: [PATCH] String interpolations in `regexp`s should also be allowed - This came up in Cask `simply-fortran`: ``` Scanning /opt/homebrew/Library/Taps/homebrew/homebrew-cask/Casks/simply-fortran.rb send_node: s(:send, nil, :arch), send_node.parent: s(:begin, s(:send, nil, :arch)), send_node.parent.parent: (regexp (str "href=.*?simplyfortran[._-]v?(\\d+(?:\\.\\d+)+)") (begin (send nil :arch)) (str "\\.dmg") (regopt :i)) Casks/simply-fortran.rb:2:3: C: Cask/NoOverrides: Do not use a top-level arch stanza as the default. Add it to an on_{system} block instead. Use :or_older or :or_newer to specify a range of macOS versions. arch arm: "-arm64", intel: "-x86_64" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1 file inspected, 1 offense detected ``` --- .../Homebrew/rubocops/cask/no_overrides.rb | 4 +++- .../test/rubocops/cask/no_overrides_spec.rb | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) 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