Fix skipping of livecheck block contents in on_* blocks
- This passes the previously failing test for `on_*` blocks with `livecheck` blocks with multiple stanzas inside them (eg `url` and `strategy`) that weren't being correctly skipped because we weren't detecting high enough up the ancestry.
This commit is contained in:
parent
991e5f2f9c
commit
e66226aefc
@ -41,9 +41,7 @@ module RuboCop
|
|||||||
node.child_nodes.each do |child|
|
node.child_nodes.each do |child|
|
||||||
child.each_node(:send) do |send_node|
|
child.each_node(:send) do |send_node|
|
||||||
# Skip (nested) livecheck blocks as its `url` is different to a download `url`.
|
# Skip (nested) livecheck blocks as its `url` is different to a download `url`.
|
||||||
next if send_node.method_name == :livecheck
|
next if send_node.method_name == :livecheck || inside_livecheck_block?(send_node)
|
||||||
next if send_node.parent.block_type? && send_node.parent.method_name == :livecheck
|
|
||||||
|
|
||||||
# Skip string interpolations (`:send` inside `:begin` inside `:dstr`).
|
# Skip string interpolations (`:send` inside `:begin` inside `:dstr`).
|
||||||
next if send_node.parent.begin_type? && send_node.parent.parent.dstr_type?
|
next if send_node.parent.begin_type? && send_node.parent.parent.dstr_type?
|
||||||
next if ON_SYSTEM_METHODS.include?(send_node.method_name)
|
next if ON_SYSTEM_METHODS.include?(send_node.method_name)
|
||||||
@ -54,6 +52,19 @@ module RuboCop
|
|||||||
end
|
end
|
||||||
names
|
names
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def inside_livecheck_block?(node)
|
||||||
|
single_stanza_livecheck_block?(node) || multi_stanza_livecheck_block?(node)
|
||||||
|
end
|
||||||
|
|
||||||
|
def single_stanza_livecheck_block?(node)
|
||||||
|
node.parent.block_type? && node.parent.method_name == :livecheck
|
||||||
|
end
|
||||||
|
|
||||||
|
def multi_stanza_livecheck_block?(node)
|
||||||
|
grandparent_node = node.parent.parent
|
||||||
|
node.parent.begin_type? && grandparent_node.block_type? && grandparent_node.method_name == :livecheck
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -46,6 +46,7 @@ describe RuboCop::Cop::Cask::NoOverrides do
|
|||||||
version '1.2.3'
|
version '1.2.3'
|
||||||
on_mojave :or_later do
|
on_mojave :or_later do
|
||||||
url "https://brew.sh/foo-\#{version}-\#{arch}.pkg"
|
url "https://brew.sh/foo-\#{version}-\#{arch}.pkg"
|
||||||
|
sha256 "aaa"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
CASK
|
CASK
|
||||||
@ -54,7 +55,30 @@ describe RuboCop::Cop::Cask::NoOverrides do
|
|||||||
include_examples "does not report any offenses"
|
include_examples "does not report any offenses"
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when there are livecheck blocks within `on_*` blocks, ignore their contents" do
|
context "when there are single-line livecheck blocks within `on_*` blocks, ignore their contents" do
|
||||||
|
let(:source) do
|
||||||
|
<<~CASK
|
||||||
|
cask 'foo' do
|
||||||
|
on_intel do
|
||||||
|
livecheck do
|
||||||
|
url 'https://brew.sh/foo' # Livecheck should be allowed since it's a different "kind" of URL.
|
||||||
|
end
|
||||||
|
version '1.2.3'
|
||||||
|
end
|
||||||
|
on_arm do
|
||||||
|
version '2.3.4'
|
||||||
|
end
|
||||||
|
|
||||||
|
url 'https://brew.sh/foo.pkg'
|
||||||
|
sha256 "bbb"
|
||||||
|
end
|
||||||
|
CASK
|
||||||
|
end
|
||||||
|
|
||||||
|
include_examples "does not report any offenses"
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when there are multi-line livecheck blocks within `on_*` blocks, ignore their contents" do
|
||||||
let(:source) do
|
let(:source) do
|
||||||
<<~CASK
|
<<~CASK
|
||||||
cask 'foo' do
|
cask 'foo' do
|
||||||
@ -70,6 +94,7 @@ describe RuboCop::Cop::Cask::NoOverrides do
|
|||||||
end
|
end
|
||||||
|
|
||||||
url 'https://brew.sh/foo.pkg'
|
url 'https://brew.sh/foo.pkg'
|
||||||
|
sha256 "bbb"
|
||||||
end
|
end
|
||||||
CASK
|
CASK
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user