rubocop-rspec 1.41.0 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +43 -2
  3. data/config/default.yml +41 -3
  4. data/lib/rubocop-rspec.rb +2 -1
  5. data/lib/rubocop/cop/rspec/align_left_let_brace.rb +12 -19
  6. data/lib/rubocop/cop/rspec/align_right_let_brace.rb +12 -19
  7. data/lib/rubocop/cop/rspec/any_instance.rb +1 -1
  8. data/lib/rubocop/cop/rspec/around_block.rb +2 -2
  9. data/lib/rubocop/cop/rspec/base.rb +76 -0
  10. data/lib/rubocop/cop/rspec/be.rb +2 -2
  11. data/lib/rubocop/cop/rspec/be_eql.rb +6 -6
  12. data/lib/rubocop/cop/rspec/before_after_all.rb +1 -1
  13. data/lib/rubocop/cop/rspec/capybara/current_path_expectation.rb +19 -17
  14. data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +14 -12
  15. data/lib/rubocop/cop/rspec/capybara/visibility_matcher.rb +1 -1
  16. data/lib/rubocop/cop/rspec/context_method.rb +7 -9
  17. data/lib/rubocop/cop/rspec/context_wording.rb +3 -3
  18. data/lib/rubocop/cop/rspec/cop.rb +2 -66
  19. data/lib/rubocop/cop/rspec/describe_class.rb +40 -30
  20. data/lib/rubocop/cop/rspec/describe_method.rb +14 -6
  21. data/lib/rubocop/cop/rspec/describe_symbol.rb +2 -2
  22. data/lib/rubocop/cop/rspec/described_class.rb +12 -9
  23. data/lib/rubocop/cop/rspec/described_class_module_wrapping.rb +1 -1
  24. data/lib/rubocop/cop/rspec/dialect.rb +5 -12
  25. data/lib/rubocop/cop/rspec/empty_example_group.rb +124 -6
  26. data/lib/rubocop/cop/rspec/empty_hook.rb +6 -10
  27. data/lib/rubocop/cop/rspec/empty_line_after_example.rb +5 -7
  28. data/lib/rubocop/cop/rspec/empty_line_after_example_group.rb +5 -9
  29. data/lib/rubocop/cop/rspec/empty_line_after_final_let.rb +8 -8
  30. data/lib/rubocop/cop/rspec/empty_line_after_hook.rb +5 -9
  31. data/lib/rubocop/cop/rspec/empty_line_after_subject.rb +6 -6
  32. data/lib/rubocop/cop/rspec/example_length.rb +1 -1
  33. data/lib/rubocop/cop/rspec/example_without_description.rb +1 -1
  34. data/lib/rubocop/cop/rspec/example_wording.rb +10 -11
  35. data/lib/rubocop/cop/rspec/expect_actual.rb +8 -11
  36. data/lib/rubocop/cop/rspec/expect_change.rb +10 -35
  37. data/lib/rubocop/cop/rspec/expect_in_hook.rb +3 -3
  38. data/lib/rubocop/cop/rspec/expect_output.rb +2 -2
  39. data/lib/rubocop/cop/rspec/factory_bot/attribute_defined_statically.rb +20 -20
  40. data/lib/rubocop/cop/rspec/factory_bot/create_list.rb +20 -22
  41. data/lib/rubocop/cop/rspec/factory_bot/factory_class_name.rb +7 -8
  42. data/lib/rubocop/cop/rspec/file_path.rb +25 -17
  43. data/lib/rubocop/cop/rspec/focus.rb +7 -11
  44. data/lib/rubocop/cop/rspec/hook_argument.rb +16 -23
  45. data/lib/rubocop/cop/rspec/hooks_before_examples.rb +13 -14
  46. data/lib/rubocop/cop/rspec/implicit_block_expectation.rb +2 -3
  47. data/lib/rubocop/cop/rspec/implicit_expect.rb +7 -15
  48. data/lib/rubocop/cop/rspec/implicit_subject.rb +16 -11
  49. data/lib/rubocop/cop/rspec/instance_spy.rb +18 -12
  50. data/lib/rubocop/cop/rspec/instance_variable.rb +1 -1
  51. data/lib/rubocop/cop/rspec/invalid_predicate_matcher.rb +3 -6
  52. data/lib/rubocop/cop/rspec/it_behaves_like.rb +5 -6
  53. data/lib/rubocop/cop/rspec/iterated_expectation.rb +1 -1
  54. data/lib/rubocop/cop/rspec/leading_subject.rb +27 -20
  55. data/lib/rubocop/cop/rspec/leaky_constant_declaration.rb +1 -1
  56. data/lib/rubocop/cop/rspec/let_before_examples.rb +13 -11
  57. data/lib/rubocop/cop/rspec/let_setup.rb +6 -3
  58. data/lib/rubocop/cop/rspec/message_chain.rb +7 -6
  59. data/lib/rubocop/cop/rspec/message_expectation.rb +2 -2
  60. data/lib/rubocop/cop/rspec/message_spies.rb +2 -3
  61. data/lib/rubocop/cop/rspec/missing_example_group_argument.rb +1 -1
  62. data/lib/rubocop/cop/rspec/multiple_describes.rb +11 -8
  63. data/lib/rubocop/cop/rspec/multiple_expectations.rb +7 -11
  64. data/lib/rubocop/cop/rspec/multiple_memoized_helpers.rb +148 -0
  65. data/lib/rubocop/cop/rspec/multiple_subjects.rb +18 -19
  66. data/lib/rubocop/cop/rspec/named_subject.rb +2 -2
  67. data/lib/rubocop/cop/rspec/nested_groups.rb +4 -4
  68. data/lib/rubocop/cop/rspec/not_to_not.rb +5 -6
  69. data/lib/rubocop/cop/rspec/overwriting_setup.rb +1 -1
  70. data/lib/rubocop/cop/rspec/pending.rb +1 -1
  71. data/lib/rubocop/cop/rspec/predicate_matcher.rb +30 -67
  72. data/lib/rubocop/cop/rspec/rails/http_status.rb +5 -9
  73. data/lib/rubocop/cop/rspec/receive_counts.rb +15 -17
  74. data/lib/rubocop/cop/rspec/receive_never.rb +12 -12
  75. data/lib/rubocop/cop/rspec/repeated_description.rb +1 -1
  76. data/lib/rubocop/cop/rspec/repeated_example.rb +2 -2
  77. data/lib/rubocop/cop/rspec/repeated_example_group_body.rb +1 -1
  78. data/lib/rubocop/cop/rspec/repeated_example_group_description.rb +1 -1
  79. data/lib/rubocop/cop/rspec/repeated_include_example.rb +103 -0
  80. data/lib/rubocop/cop/rspec/return_from_stub.rb +9 -20
  81. data/lib/rubocop/cop/rspec/scattered_let.rb +8 -11
  82. data/lib/rubocop/cop/rspec/scattered_setup.rb +1 -1
  83. data/lib/rubocop/cop/rspec/shared_context.rb +8 -21
  84. data/lib/rubocop/cop/rspec/shared_examples.rb +6 -9
  85. data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +15 -18
  86. data/lib/rubocop/cop/rspec/stubbed_mock.rb +172 -0
  87. data/lib/rubocop/cop/rspec/subject_stub.rb +6 -6
  88. data/lib/rubocop/cop/rspec/unspecified_exception.rb +1 -1
  89. data/lib/rubocop/cop/rspec/variable_definition.rb +6 -6
  90. data/lib/rubocop/cop/rspec/variable_name.rb +28 -9
  91. data/lib/rubocop/cop/rspec/verified_doubles.rb +1 -1
  92. data/lib/rubocop/cop/rspec/void_expect.rb +1 -1
  93. data/lib/rubocop/cop/rspec/yield.rb +14 -11
  94. data/lib/rubocop/cop/rspec_cops.rb +3 -0
  95. data/lib/rubocop/rspec/corrector/move_node.rb +7 -5
  96. data/lib/rubocop/rspec/description_extractor.rb +1 -1
  97. data/lib/rubocop/rspec/{blank_line_separation.rb → empty_line_separation.rb} +13 -10
  98. data/lib/rubocop/rspec/example_group.rb +2 -2
  99. data/lib/rubocop/rspec/hook.rb +1 -5
  100. data/lib/rubocop/rspec/language.rb +12 -5
  101. data/lib/rubocop/rspec/language/node_pattern.rb +6 -1
  102. data/lib/rubocop/rspec/top_level_describe.rb +2 -2
  103. data/lib/rubocop/rspec/top_level_group.rb +26 -13
  104. data/lib/rubocop/rspec/variable.rb +1 -1
  105. data/lib/rubocop/rspec/version.rb +1 -1
  106. metadata +40 -8
@@ -22,7 +22,8 @@ module RuboCop
22
22
  # create_feed
23
23
  # end
24
24
  # after(:all) { cleanup_feed }
25
- class EmptyHook < Cop
25
+ class EmptyHook < Base
26
+ extend AutoCorrector
26
27
  include RuboCop::Cop::RangeHelp
27
28
 
28
29
  MSG = 'Empty hook detected.'
@@ -33,15 +34,10 @@ module RuboCop
33
34
 
34
35
  def on_block(node)
35
36
  empty_hook?(node) do |hook|
36
- add_offense(hook)
37
- end
38
- end
39
-
40
- def autocorrect(node)
41
- lambda do |corrector|
42
- block = node.parent
43
- range = range_with_surrounding_space(range: block.loc.expression)
44
- corrector.remove(range)
37
+ add_offense(hook) do |corrector|
38
+ range = range_with_surrounding_space(range: node.loc.expression)
39
+ corrector.remove(range)
40
+ end
45
41
  end
46
42
  end
47
43
  end
@@ -41,20 +41,18 @@ module RuboCop
41
41
  # it { two }
42
42
  # end
43
43
  #
44
- class EmptyLineAfterExample < Cop
45
- include RuboCop::RSpec::BlankLineSeparation
44
+ class EmptyLineAfterExample < Base
45
+ extend AutoCorrector
46
+ include RuboCop::RSpec::EmptyLineSeparation
46
47
 
47
48
  MSG = 'Add an empty line after `%<example>s`.'
48
49
 
49
50
  def on_block(node)
50
51
  return unless example?(node)
51
- return if last_child?(node)
52
52
  return if allowed_one_liner?(node)
53
53
 
54
- missing_separating_line(node) do |location|
55
- add_offense(node,
56
- location: location,
57
- message: format(MSG, example: node.method_name))
54
+ missing_separating_line_offense(node) do |method|
55
+ format(MSG, example: method)
58
56
  end
59
57
  end
60
58
 
@@ -23,21 +23,17 @@ module RuboCop
23
23
  # end
24
24
  # end
25
25
  #
26
- class EmptyLineAfterExampleGroup < Cop
27
- include RuboCop::RSpec::BlankLineSeparation
26
+ class EmptyLineAfterExampleGroup < Base
27
+ extend AutoCorrector
28
+ include RuboCop::RSpec::EmptyLineSeparation
28
29
 
29
30
  MSG = 'Add an empty line after `%<example_group>s`.'
30
31
 
31
32
  def on_block(node)
32
33
  return unless example_group?(node)
33
- return if last_child?(node)
34
34
 
35
- missing_separating_line(node) do |location|
36
- add_offense(
37
- node,
38
- location: location,
39
- message: format(MSG, example_group: node.method_name)
40
- )
35
+ missing_separating_line_offense(node) do |method|
36
+ format(MSG, example_group: method)
41
37
  end
42
38
  end
43
39
  end
@@ -16,21 +16,21 @@ module RuboCop
16
16
  # let(:something) { other }
17
17
  #
18
18
  # it { does_something }
19
- class EmptyLineAfterFinalLet < Cop
20
- include RuboCop::RSpec::BlankLineSeparation
19
+ class EmptyLineAfterFinalLet < Base
20
+ extend AutoCorrector
21
+ include RuboCop::RSpec::EmptyLineSeparation
21
22
 
22
- MSG = 'Add an empty line after the last `let` block.'
23
+ MSG = 'Add an empty line after the last `%<let>s`.'
23
24
 
24
25
  def on_block(node)
25
26
  return unless example_group_with_body?(node)
26
27
 
27
- latest_let = node.body.child_nodes.select { |child| let?(child) }.last
28
+ final_let = node.body.child_nodes.reverse.find { |child| let?(child) }
28
29
 
29
- return if latest_let.nil?
30
- return if last_child?(latest_let)
30
+ return if final_let.nil?
31
31
 
32
- missing_separating_line(latest_let) do |location|
33
- add_offense(latest_let, location: location)
32
+ missing_separating_line_offense(final_let) do |method|
33
+ format(MSG, let: method)
34
34
  end
35
35
  end
36
36
  end
@@ -33,21 +33,17 @@ module RuboCop
33
33
  #
34
34
  # it { does_something }
35
35
  #
36
- class EmptyLineAfterHook < Cop
37
- include RuboCop::RSpec::BlankLineSeparation
36
+ class EmptyLineAfterHook < Base
37
+ extend AutoCorrector
38
+ include RuboCop::RSpec::EmptyLineSeparation
38
39
 
39
40
  MSG = 'Add an empty line after `%<hook>s`.'
40
41
 
41
42
  def on_block(node)
42
43
  return unless hook?(node)
43
- return if last_child?(node)
44
44
 
45
- missing_separating_line(node) do |location|
46
- add_offense(
47
- node,
48
- location: location,
49
- message: format(MSG, hook: node.method_name)
50
- )
45
+ missing_separating_line_offense(node) do |method|
46
+ format(MSG, hook: method)
51
47
  end
52
48
  end
53
49
  end
@@ -14,17 +14,17 @@ module RuboCop
14
14
  # subject(:obj) { described_class }
15
15
  #
16
16
  # let(:foo) { bar }
17
- class EmptyLineAfterSubject < Cop
18
- include RuboCop::RSpec::BlankLineSeparation
17
+ class EmptyLineAfterSubject < Base
18
+ extend AutoCorrector
19
+ include RuboCop::RSpec::EmptyLineSeparation
19
20
 
20
- MSG = 'Add empty line after `subject`.'
21
+ MSG = 'Add an empty line after `%<subject>s`.'
21
22
 
22
23
  def on_block(node)
23
24
  return unless subject?(node) && !in_spec_block?(node)
24
- return if last_child?(node)
25
25
 
26
- missing_separating_line(node) do |location|
27
- add_offense(node, location: location)
26
+ missing_separating_line_offense(node) do |method|
27
+ format(MSG, subject: method)
28
28
  end
29
29
  end
30
30
 
@@ -25,7 +25,7 @@ module RuboCop
25
25
  # result = service.call
26
26
  # expect(result).to be(true)
27
27
  # end
28
- class ExampleLength < Cop
28
+ class ExampleLength < Base
29
29
  include CodeLength
30
30
 
31
31
  MSG = 'Example has too many lines [%<total>d/%<max>d].'
@@ -47,7 +47,7 @@ module RuboCop
47
47
  # result = service.call
48
48
  # expect(result).to be(true)
49
49
  # end
50
- class ExampleWithoutDescription < Cop
50
+ class ExampleWithoutDescription < Base
51
51
  include ConfigurableEnforcedStyle
52
52
 
53
53
  MSG_DEFAULT_ARGUMENT = 'Omit the argument when you want to ' \
@@ -29,7 +29,9 @@ module RuboCop
29
29
  # # good
30
30
  # it 'does things' do
31
31
  # end
32
- class ExampleWording < Cop
32
+ class ExampleWording < Base
33
+ extend AutoCorrector
34
+
33
35
  MSG_SHOULD = 'Do not use should when describing your tests.'
34
36
  MSG_IT = "Do not repeat 'it' when describing your tests."
35
37
 
@@ -45,24 +47,21 @@ module RuboCop
45
47
 
46
48
  def on_block(node)
47
49
  it_description(node) do |description_node, message|
48
- if message =~ SHOULD_PREFIX
50
+ if message.match?(SHOULD_PREFIX)
49
51
  add_wording_offense(description_node, MSG_SHOULD)
50
- elsif message =~ IT_PREFIX
52
+ elsif message.match?(IT_PREFIX)
51
53
  add_wording_offense(description_node, MSG_IT)
52
54
  end
53
55
  end
54
56
  end
55
57
 
56
- def autocorrect(node)
57
- lambda do |corrector|
58
- corrector.replace(docstring(node), replacement_text(node))
59
- end
60
- end
61
-
62
58
  private
63
59
 
64
60
  def add_wording_offense(node, message)
65
- add_offense(node, location: docstring(node), message: message)
61
+ docstring = docstring(node)
62
+ add_offense(docstring, message: message) do |corrector|
63
+ corrector.replace(docstring, replacement_text(node))
64
+ end
66
65
  end
67
66
 
68
67
  def docstring(node)
@@ -78,7 +77,7 @@ module RuboCop
78
77
  def replacement_text(node)
79
78
  text = text(node)
80
79
 
81
- if text =~ SHOULD_PREFIX
80
+ if text.match?(SHOULD_PREFIX)
82
81
  RuboCop::RSpec::Wording.new(
83
82
  text,
84
83
  ignore: ignored_words,
@@ -16,7 +16,9 @@ module RuboCop
16
16
  # expect(pattern).to eq(/foo/)
17
17
  # expect(name).to eq("John")
18
18
  #
19
- class ExpectActual < Cop
19
+ class ExpectActual < Base
20
+ extend AutoCorrector
21
+
20
22
  MSG = 'Provide the actual you are testing to `expect(...)`.'
21
23
 
22
24
  SIMPLE_LITERALS = %i[
@@ -55,17 +57,12 @@ module RuboCop
55
57
  PATTERN
56
58
 
57
59
  def on_send(node)
58
- expect_literal(node) do |argument|
59
- add_offense(node, location: argument.source_range)
60
- end
61
- end
62
-
63
- def autocorrect(node)
64
- actual, matcher, expected = expect_literal(node)
65
- lambda do |corrector|
66
- return unless SUPPORTED_MATCHERS.include?(matcher)
60
+ expect_literal(node) do |actual, matcher, expected|
61
+ add_offense(actual.source_range) do |corrector|
62
+ next unless SUPPORTED_MATCHERS.include?(matcher)
67
63
 
68
- swap(corrector, actual, expected)
64
+ swap(corrector, actual, expected)
65
+ end
69
66
  end
70
67
  end
71
68
 
@@ -29,7 +29,8 @@ module RuboCop
29
29
  # expect { run }.to change { Foo.bar(:count) }
30
30
  # expect { run }.to change { user.reload.name }
31
31
  #
32
- class ExpectChange < Cop
32
+ class ExpectChange < Base
33
+ extend AutoCorrector
33
34
  include ConfigurableEnforcedStyle
34
35
 
35
36
  MSG_BLOCK = 'Prefer `change(%<obj>s, :%<attr>s)`.'
@@ -51,10 +52,11 @@ module RuboCop
51
52
  return unless style == :block
52
53
 
53
54
  expect_change_with_arguments(node) do |receiver, message|
54
- add_offense(
55
- node,
56
- message: format(MSG_CALL, obj: receiver, attr: message)
57
- )
55
+ msg = format(MSG_CALL, obj: receiver, attr: message)
56
+ add_offense(node, message: msg) do |corrector|
57
+ replacement = "change { #{receiver}.#{message} }"
58
+ corrector.replace(node, replacement)
59
+ end
58
60
  end
59
61
  end
60
62
 
@@ -62,37 +64,10 @@ module RuboCop
62
64
  return unless style == :method_call
63
65
 
64
66
  expect_change_with_block(node) do |receiver, message|
65
- add_offense(
66
- node,
67
- message: format(MSG_BLOCK, obj: receiver, attr: message)
68
- )
69
- end
70
- end
71
-
72
- def autocorrect(node)
73
- if style == :block
74
- autocorrect_method_call_to_block(node)
75
- else
76
- autocorrect_block_to_method_call(node)
77
- end
78
- end
79
-
80
- private
81
-
82
- def autocorrect_method_call_to_block(node)
83
- lambda do |corrector|
84
- expect_change_with_arguments(node) do |receiver, message|
85
- replacement = "change { #{receiver}.#{message} }"
86
- corrector.replace(node.loc.expression, replacement)
87
- end
88
- end
89
- end
90
-
91
- def autocorrect_block_to_method_call(node)
92
- lambda do |corrector|
93
- expect_change_with_block(node) do |receiver, message|
67
+ msg = format(MSG_BLOCK, obj: receiver, attr: message)
68
+ add_offense(node, message: msg) do |corrector|
94
69
  replacement = "change(#{receiver}, :#{message})"
95
- corrector.replace(node.loc.expression, replacement)
70
+ corrector.replace(node, replacement)
96
71
  end
97
72
  end
98
73
  end
@@ -20,7 +20,7 @@ module RuboCop
20
20
  # it do
21
21
  # expect(something).to eq 'foo'
22
22
  # end
23
- class ExpectInHook < Cop
23
+ class ExpectInHook < Base
24
24
  MSG = 'Do not use `%<expect>s` in `%<hook>s` hook'
25
25
 
26
26
  def_node_search :expectation, Expectations::ALL.send_pattern
@@ -30,8 +30,8 @@ module RuboCop
30
30
  return if node.body.nil?
31
31
 
32
32
  expectation(node.body) do |expect|
33
- add_offense(expect, location: :selector,
34
- message: message(expect, node))
33
+ add_offense(expect.loc.selector,
34
+ message: message(expect, node))
35
35
  end
36
36
  end
37
37
 
@@ -14,7 +14,7 @@ module RuboCop
14
14
  #
15
15
  # # good
16
16
  # expect { my_app.print_report }.to output('Hello World').to_stdout
17
- class ExpectOutput < Cop
17
+ class ExpectOutput < Base
18
18
  MSG = 'Use `expect { ... }.to output(...).to_%<name>s` '\
19
19
  'instead of mutating $%<name>s.'
20
20
 
@@ -27,7 +27,7 @@ module RuboCop
27
27
  name = variable_name[1..-1]
28
28
  return unless name.eql?('stdout') || name.eql?('stderr')
29
29
 
30
- add_offense(node, location: :name, message: format(MSG, name: name))
30
+ add_offense(node.loc.name, message: format(MSG, name: name))
31
31
  end
32
32
 
33
33
  private
@@ -24,7 +24,9 @@ module RuboCop
24
24
  #
25
25
  # # good
26
26
  # count { 1 }
27
- class AttributeDefinedStatically < Cop
27
+ class AttributeDefinedStatically < Base
28
+ extend AutoCorrector
29
+
28
30
  MSG = 'Use a block to declare attribute values.'
29
31
 
30
32
  def_node_matcher :value_matcher, <<-PATTERN
@@ -37,26 +39,28 @@ module RuboCop
37
39
 
38
40
  def on_block(node)
39
41
  attributes = factory_attributes(node) || []
40
- attributes = [attributes] unless attributes.is_a?(Array)
42
+ attributes = [attributes] unless attributes.is_a?(Array) # rubocop:disable Style/ArrayCoercion, Lint/RedundantCopDisableDirective
41
43
 
42
44
  attributes.each do |attribute|
43
45
  next unless offensive_receiver?(attribute.receiver, node)
44
46
  next if proc?(attribute) || association?(attribute.first_argument)
45
47
 
46
- add_offense(attribute)
48
+ add_offense(attribute) do |corrector|
49
+ autocorrect(corrector, attribute)
50
+ end
47
51
  end
48
52
  end
49
53
 
50
- def autocorrect(node)
54
+ private
55
+
56
+ def autocorrect(corrector, node)
51
57
  if node.parenthesized?
52
- autocorrect_replacing_parens(node)
58
+ autocorrect_replacing_parens(corrector, node)
53
59
  else
54
- autocorrect_without_parens(node)
60
+ autocorrect_without_parens(corrector, node)
55
61
  end
56
62
  end
57
63
 
58
- private
59
-
60
64
  def offensive_receiver?(receiver, node)
61
65
  receiver.nil? ||
62
66
  receiver.self_type? ||
@@ -77,24 +81,20 @@ module RuboCop
77
81
 
78
82
  def_node_matcher :association?, '(hash <(pair (sym :factory) _) ...>)'
79
83
 
80
- def autocorrect_replacing_parens(node)
84
+ def autocorrect_replacing_parens(corrector, node)
81
85
  left_braces, right_braces = braces(node)
82
86
 
83
- lambda do |corrector|
84
- corrector.replace(node.location.begin, ' ' + left_braces)
85
- corrector.replace(node.location.end, right_braces)
86
- end
87
+ corrector.replace(node.location.begin, " #{left_braces}")
88
+ corrector.replace(node.location.end, right_braces)
87
89
  end
88
90
 
89
- def autocorrect_without_parens(node)
91
+ def autocorrect_without_parens(corrector, node)
90
92
  left_braces, right_braces = braces(node)
91
93
 
92
- lambda do |corrector|
93
- argument = node.first_argument
94
- expression = argument.location.expression
95
- corrector.insert_before(expression, left_braces)
96
- corrector.insert_after(expression, right_braces)
97
- end
94
+ argument = node.first_argument
95
+ expression = argument.location.expression
96
+ corrector.insert_before(expression, left_braces)
97
+ corrector.insert_after(expression, right_braces)
98
98
  end
99
99
 
100
100
  def braces(node)