Skip to content

Commit dd17d2d

Browse files
committed
[Fix #1062] Correct rake tasks with arguments
Account for rake tasks that accept arguments.
1 parent 6202d3e commit dd17d2d

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* [#1062](https://github.com/rubocop/rubocop-rails/issues/1062): Fix autocorrection for `Rails/RakeEnvironment` when rake task accepts arguments. ([@fastjames][])

lib/rubocop/cop/rails/rake_environment.rb

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,24 @@ def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
4545
return if with_dependencies?(task_method)
4646

4747
add_offense(task_method) do |corrector|
48-
task_name = task_method.arguments[0]
49-
task_dependency = correct_task_dependency(task_name)
50-
51-
corrector.replace(task_name, task_dependency)
48+
if with_arguments?(task_method)
49+
new_task_dependency = correct_task_arguments_dependency(task_method)
50+
corrector.replace(task_arguments(task_method), new_task_dependency)
51+
else
52+
task_name = task_method.first_argument
53+
new_task_dependency = correct_task_dependency(task_name)
54+
corrector.replace(task_name, new_task_dependency)
55+
end
5256
end
5357
end
5458
end
5559

5660
private
5761

62+
def correct_task_arguments_dependency(task_method)
63+
"#{task_arguments(task_method).source} => :environment"
64+
end
65+
5866
def correct_task_dependency(task_name)
5967
if task_name.sym_type?
6068
"#{task_name.source.delete(':|\'|"')}: :environment"
@@ -80,6 +88,14 @@ def task_name(node)
8088
end
8189
end
8290

91+
def task_arguments(node)
92+
node.arguments[1]
93+
end
94+
95+
def with_arguments?(node)
96+
node.arguments.size > 1 && node.arguments[1].array_type?
97+
end
98+
8399
def with_dependencies?(node)
84100
first_arg = node.arguments[0]
85101
return false unless first_arg

spec/rubocop/cop/rails/rake_environment_spec.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,19 @@
4040
RUBY
4141
end
4242

43+
it 'registers an offense for a task with arguments' do
44+
expect_offense(<<~RUBY)
45+
task :foo, [:arg] do
46+
^^^^^^^^^^^^^^^^^ Include `:environment` task as a dependency for all Rake tasks.
47+
end
48+
RUBY
49+
50+
expect_correction(<<~RUBY)
51+
task :foo, [:arg] => :environment do
52+
end
53+
RUBY
54+
end
55+
4356
it 'does not register an offense to task with :environment but it has other dependency before it' do
4457
expect_no_offenses(<<~RUBY)
4558
task foo: [:bar, `:environment`] do

0 commit comments

Comments
 (0)