Skip to content

Commit 000d0e2

Browse files
author
Thong Kuah
committed
Allow definitions within a task that is within a namespace.
This is similar to definitions within a task (without a namespace).
1 parent 2915482 commit 000d0e2

5 files changed

+41
-0
lines changed

lib/rubocop/cop/rake/class_definition_in_namespace.rb

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class ClassDefinitionInNamespace < Base
3333

3434
def on_class(node)
3535
return if Helper::ClassDefinition.in_class_definition?(node)
36+
return if Helper::TaskDefinition.in_task?(node)
37+
3638
return unless Helper::TaskDefinition.in_namespace?(node)
3739

3840
add_offense(node, message: format(MSG, type: node.type))

lib/rubocop/cop/rake/helper/task_definition.rb

+14
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,25 @@ module TaskDefinition
1616
)
1717
PATTERN
1818

19+
def_node_matcher :task?, <<-PATTERN
20+
(block
21+
(send _ {:task} ...)
22+
args
23+
_
24+
)
25+
PATTERN
26+
1927
def in_namespace?(node)
2028
node.each_ancestor(:block).any? do |a|
2129
namespace?(a)
2230
end
2331
end
32+
33+
def in_task?(node)
34+
node.each_ancestor(:block).any? do |a|
35+
task?(a)
36+
end
37+
end
2438
end
2539
end
2640
end

lib/rubocop/cop/rake/method_definition_in_namespace.rb

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class MethodDefinitionInNamespace < Base
3535

3636
def on_def(node)
3737
return if Helper::ClassDefinition.in_class_definition?(node)
38+
return if Helper::TaskDefinition.in_task?(node)
39+
3840
return unless Helper::TaskDefinition.in_namespace?(node)
3941

4042
add_offense(node)

spec/rubocop/cop/rake/class_definition_in_namespace_spec.rb

+11
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,17 @@ module M
1919
RUBY
2020
end
2121

22+
it 'allows class definition in a task when wrapped in a namespace' do
23+
expect_no_offenses(<<~RUBY)
24+
namespace :bar do
25+
task :foo do
26+
class C
27+
end
28+
end
29+
end
30+
RUBY
31+
end
32+
2233
it 'registers an offense to a class definition in namespace' do
2334
expect_offense(<<~RUBY)
2435
namespace 'foo' do

spec/rubocop/cop/rake/method_definition_in_namespace_spec.rb

+12
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ def self.foo
2323
RUBY
2424
end
2525

26+
it 'does not register an offense to `def` in a task when wrapped in a namespace' do
27+
expect_no_offenses(<<~RUBY)
28+
namespace :bar do
29+
task :foo do
30+
def helper_method
31+
do_something
32+
end
33+
end
34+
end
35+
RUBY
36+
end
37+
2638
it 'registers an offense to `def` in a namespace' do
2739
expect_offense(<<~RUBY)
2840
namespace 'foo' do

0 commit comments

Comments
 (0)