rubocop 0.52.0 → 0.52.1

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -5
  3. data/config/default.yml +1 -11
  4. data/config/disabled.yml +5 -0
  5. data/config/enabled.yml +6 -8
  6. data/lib/rubocop.rb +13 -2
  7. data/lib/rubocop/ast/node.rb +23 -15
  8. data/lib/rubocop/cli.rb +25 -2
  9. data/lib/rubocop/config.rb +23 -8
  10. data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
  11. data/lib/rubocop/cop/bundler/ordered_gems.rb +9 -0
  12. data/lib/rubocop/cop/commissioner.rb +1 -1
  13. data/lib/rubocop/cop/correctors/alignment_corrector.rb +121 -0
  14. data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
  15. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  16. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +62 -0
  17. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  18. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  19. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  20. data/lib/rubocop/cop/correctors/space_corrector.rb +34 -0
  21. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  22. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +31 -0
  23. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
  24. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +9 -0
  25. data/lib/rubocop/cop/generator.rb +18 -87
  26. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  27. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +5 -1
  28. data/lib/rubocop/cop/layout/align_array.rb +5 -1
  29. data/lib/rubocop/cop/layout/align_hash.rb +1 -1
  30. data/lib/rubocop/cop/layout/align_parameters.rb +5 -1
  31. data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
  32. data/lib/rubocop/cop/layout/class_structure.rb +2 -2
  33. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -1
  34. data/lib/rubocop/cop/layout/comment_indentation.rb +5 -1
  35. data/lib/rubocop/cop/layout/else_alignment.rb +5 -1
  36. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +3 -3
  37. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +17 -19
  38. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +4 -0
  39. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +4 -0
  40. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +4 -0
  41. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -0
  42. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +4 -0
  43. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +4 -0
  44. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +4 -0
  45. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +4 -0
  46. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -0
  47. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +4 -0
  48. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -2
  49. data/lib/rubocop/cop/layout/indent_array.rb +6 -2
  50. data/lib/rubocop/cop/layout/indent_assignment.rb +6 -2
  51. data/lib/rubocop/cop/layout/indent_hash.rb +5 -1
  52. data/lib/rubocop/cop/layout/indentation_consistency.rb +5 -1
  53. data/lib/rubocop/cop/layout/indentation_width.rb +5 -1
  54. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +4 -0
  55. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +3 -3
  56. data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -2
  57. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +4 -0
  58. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +4 -0
  59. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +6 -2
  60. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +4 -0
  61. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -2
  62. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -1
  63. data/lib/rubocop/cop/layout/space_after_comma.rb +4 -0
  64. data/lib/rubocop/cop/layout/space_after_semicolon.rb +4 -0
  65. data/lib/rubocop/cop/layout/space_before_comma.rb +4 -0
  66. data/lib/rubocop/cop/layout/space_before_semicolon.rb +4 -0
  67. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
  68. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -7
  69. data/lib/rubocop/cop/layout/tab.rb +1 -1
  70. data/lib/rubocop/cop/lint/block_alignment.rb +1 -1
  71. data/lib/rubocop/cop/lint/def_end_alignment.rb +2 -2
  72. data/lib/rubocop/cop/lint/end_alignment.rb +3 -1
  73. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
  74. data/lib/rubocop/cop/lint/unused_block_argument.rb +4 -0
  75. data/lib/rubocop/cop/lint/unused_method_argument.rb +6 -0
  76. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -1
  77. data/lib/rubocop/cop/mixin/alignment.rb +70 -0
  78. data/lib/rubocop/cop/mixin/array_hash_indentation.rb +2 -0
  79. data/lib/rubocop/cop/mixin/array_syntax.rb +2 -0
  80. data/lib/rubocop/cop/mixin/code_length.rb +2 -0
  81. data/lib/rubocop/cop/mixin/configurable_max.rb +2 -0
  82. data/lib/rubocop/cop/mixin/def_node.rb +3 -1
  83. data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
  84. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -15
  85. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -25
  86. data/lib/rubocop/cop/mixin/enforce_superclass.rb +0 -6
  87. data/lib/rubocop/cop/mixin/first_element_line_break.rb +5 -9
  88. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +2 -2
  89. data/lib/rubocop/cop/mixin/ignored_pattern.rb +2 -0
  90. data/lib/rubocop/cop/mixin/integer_node.rb +2 -0
  91. data/lib/rubocop/cop/mixin/match_range.rb +2 -0
  92. data/lib/rubocop/cop/mixin/min_body_length.rb +2 -0
  93. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +2 -0
  94. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +9 -48
  95. data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -16
  96. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +12 -31
  97. data/lib/rubocop/cop/mixin/parentheses.rb +2 -19
  98. data/lib/rubocop/cop/mixin/percent_literal.rb +3 -3
  99. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +2 -0
  100. data/lib/rubocop/cop/mixin/rescue_node.rb +2 -0
  101. data/lib/rubocop/cop/mixin/safe_assignment.rb +2 -0
  102. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -3
  103. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -3
  104. data/lib/rubocop/cop/mixin/statement_modifier.rb +4 -2
  105. data/lib/rubocop/cop/mixin/string_help.rb +2 -0
  106. data/lib/rubocop/cop/mixin/string_literals_help.rb +2 -13
  107. data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -21
  108. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -10
  109. data/lib/rubocop/cop/mixin/unused_argument.rb +2 -15
  110. data/lib/rubocop/cop/performance/case_when_splat.rb +1 -1
  111. data/lib/rubocop/cop/rails/action_filter.rb +3 -2
  112. data/lib/rubocop/cop/rails/active_support_aliases.rb +3 -2
  113. data/lib/rubocop/cop/rails/application_job.rb +6 -0
  114. data/lib/rubocop/cop/rails/application_record.rb +6 -0
  115. data/lib/rubocop/cop/rails/blank.rb +10 -9
  116. data/lib/rubocop/cop/rails/date.rb +22 -14
  117. data/lib/rubocop/cop/rails/delegate.rb +1 -1
  118. data/lib/rubocop/cop/rails/dynamic_find_by.rb +3 -2
  119. data/lib/rubocop/cop/rails/enum_uniqueness.rb +4 -2
  120. data/lib/rubocop/cop/rails/environment_comparison.rb +2 -2
  121. data/lib/rubocop/cop/rails/file_path.rb +1 -1
  122. data/lib/rubocop/cop/rails/find_by.rb +2 -2
  123. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +15 -7
  124. data/lib/rubocop/cop/rails/http_positional_arguments.rb +2 -2
  125. data/lib/rubocop/cop/rails/inverse_of.rb +130 -8
  126. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +3 -3
  127. data/lib/rubocop/cop/rails/pluralization_grammar.rb +3 -2
  128. data/lib/rubocop/cop/rails/presence.rb +31 -18
  129. data/lib/rubocop/cop/rails/present.rb +11 -8
  130. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +52 -10
  131. data/lib/rubocop/cop/rails/request_referer.rb +2 -3
  132. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +9 -2
  133. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +38 -10
  134. data/lib/rubocop/cop/style/class_and_module_children.rb +76 -0
  135. data/lib/rubocop/cop/style/commented_keyword.rb +1 -1
  136. data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
  137. data/lib/rubocop/cop/style/format_string_token.rb +24 -4
  138. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +46 -0
  139. data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
  140. data/lib/rubocop/cop/style/if_unless_modifier.rb +14 -0
  141. data/lib/rubocop/cop/style/method_def_parentheses.rb +79 -0
  142. data/lib/rubocop/cop/style/mixin_usage.rb +13 -2
  143. data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
  144. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +19 -0
  145. data/lib/rubocop/cop/style/negated_if.rb +1 -1
  146. data/lib/rubocop/cop/style/negated_while.rb +6 -4
  147. data/lib/rubocop/cop/style/parallel_assignment.rb +1 -1
  148. data/lib/rubocop/cop/style/parentheses_around_condition.rb +4 -0
  149. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
  150. data/lib/rubocop/cop/style/redundant_parentheses.rb +4 -0
  151. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  152. data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
  153. data/lib/rubocop/cop/style/string_literals.rb +4 -0
  154. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +4 -0
  155. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
  156. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -0
  157. data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +4 -0
  158. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
  159. data/lib/rubocop/formatter/disabled_config_formatter.rb +33 -24
  160. data/lib/rubocop/options.rb +33 -10
  161. data/lib/rubocop/path_util.rb +7 -0
  162. data/lib/rubocop/token.rb +4 -0
  163. data/lib/rubocop/version.rb +1 -1
  164. metadata +14 -4
  165. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -149
  166. data/lib/rubocop/cop/style/extend_self.rb +0 -92
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ class Generator
6
+ # A class that injects a require directive into the root RuboCop file.
7
+ # It looks for other directives that require files in the same (cop)
8
+ # namespace and injects the provided one in alpha
9
+ class RequireFileInjector
10
+ REQUIRE_PATH = /require_relative ['"](.+)['"]/
11
+
12
+ def initialize(source_path:, root_file_path:, output: $stdout)
13
+ @source_path = Pathname(source_path)
14
+ @root_file_path = Pathname(root_file_path)
15
+ @require_entries = File.readlines(root_file_path)
16
+ @output = output
17
+ end
18
+
19
+ def inject
20
+ return if require_exists? || !target_line
21
+
22
+ File.write(root_file_path, updated_directives)
23
+ require = injectable_require_directive.chomp
24
+ output.puts "[modify] #{root_file_path} - `#{require}` was injected."
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :require_entries, :root_file_path, :source_path, :output
30
+
31
+ def require_exists?
32
+ require_entries.any? do |entry|
33
+ entry == injectable_require_directive
34
+ end
35
+ end
36
+
37
+ def updated_directives
38
+ require_entries.insert(target_line,
39
+ injectable_require_directive).join
40
+ end
41
+
42
+ def target_line
43
+ @target_line ||= begin
44
+ in_the_same_department = false
45
+ inject_parts = require_path_fragments(injectable_require_directive)
46
+
47
+ require_entries.find.with_index do |entry, index|
48
+ current_entry_parts = require_path_fragments(entry)
49
+
50
+ if inject_parts[0..-2] == current_entry_parts[0..-2]
51
+ in_the_same_department = true
52
+
53
+ break index if inject_parts.last < current_entry_parts.last
54
+ elsif in_the_same_department
55
+ break index
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ def require_path_fragments(require_directove)
62
+ path = require_directove.match(REQUIRE_PATH)
63
+
64
+ path ? path.captures.first.split('/') : []
65
+ end
66
+
67
+ def injectable_require_directive
68
+ "require_relative '#{require_path}'\n"
69
+ end
70
+
71
+ def require_path
72
+ path = source_path.relative_path_from(root_file_path.dirname)
73
+ path.to_s.sub('.rb', '')
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -32,7 +32,7 @@ module RuboCop
32
32
  # def smooth; end
33
33
  # end
34
34
  class AccessModifierIndentation < Cop
35
- include AutocorrectAlignment
35
+ include Alignment
36
36
  include ConfigurableEnforcedStyle
37
37
 
38
38
  MSG = '%<style>s access modifiers like `%<node>s`.'.freeze
@@ -58,6 +58,10 @@ module RuboCop
58
58
  check_body(node.body, node)
59
59
  end
60
60
 
61
+ def autocorrect(node)
62
+ AlignmentCorrector.correct(processed_source, node, @column_delta)
63
+ end
64
+
61
65
  private
62
66
 
63
67
  def check_body(body, node)
@@ -21,7 +21,7 @@ module RuboCop
21
21
  # 'forrest',
22
22
  # 'run']
23
23
  class AlignArray < Cop
24
- include AutocorrectAlignment
24
+ include Alignment
25
25
 
26
26
  MSG = 'Align the elements of an array literal if they span more ' \
27
27
  'than one line.'.freeze
@@ -29,6 +29,10 @@ module RuboCop
29
29
  def on_array(node)
30
30
  check_alignment(node.children)
31
31
  end
32
+
33
+ def autocorrect(node)
34
+ AlignmentCorrector.correct(processed_source, node, column_delta)
35
+ end
32
36
  end
33
37
  end
34
38
  end
@@ -116,7 +116,7 @@ module RuboCop
116
116
 
117
117
  def on_hash(node)
118
118
  return if ignored_node?(node)
119
- return if node.empty? || node.single_line?
119
+ return if node.pairs.empty? || node.single_line?
120
120
 
121
121
  return unless alignment_for_hash_rockets.checkable_layout?(node) &&
122
122
  alignment_for_colons.checkable_layout?(node)
@@ -28,7 +28,7 @@ module RuboCop
28
28
  # foo :bar,
29
29
  # :baz
30
30
  class AlignParameters < Cop
31
- include AutocorrectAlignment
31
+ include Alignment
32
32
 
33
33
  ALIGN_PARAMS_MSG = 'Align the parameters of a method %<type>s if ' \
34
34
  'they span more than one line.'.freeze
@@ -45,6 +45,10 @@ module RuboCop
45
45
  alias on_def on_send
46
46
  alias on_defs on_send
47
47
 
48
+ def autocorrect(node)
49
+ AlignmentCorrector.correct(processed_source, node, column_delta)
50
+ end
51
+
48
52
  private
49
53
 
50
54
  def message(node)
@@ -68,7 +68,7 @@ module RuboCop
68
68
  # y / 3
69
69
  # end
70
70
  class CaseIndentation < Cop
71
- include AutocorrectAlignment
71
+ include Alignment
72
72
  include ConfigurableEnforcedStyle
73
73
 
74
74
  MSG = 'Indent `when` %<depth>s `%<base>s`.'.freeze
@@ -264,7 +264,7 @@ module RuboCop
264
264
  end
265
265
 
266
266
  def begin_pos_with_comment(node)
267
- annotation_line = node.loc.line - 1
267
+ annotation_line = node.first_line - 1
268
268
  first_comment = nil
269
269
 
270
270
  comments_before_line(annotation_line).reverse_each do |comment|
@@ -278,7 +278,7 @@ module RuboCop
278
278
  end
279
279
 
280
280
  def start_line_position(node)
281
- buffer.line_range(node.loc.line).begin_pos - 1
281
+ buffer.line_range(node.first_line).begin_pos - 1
282
282
  end
283
283
 
284
284
  def comments_before_line(line)
@@ -27,7 +27,7 @@ module RuboCop
27
27
  # )
28
28
  # end
29
29
  class ClosingParenthesisIndentation < Cop
30
- include AutocorrectAlignment
30
+ include Alignment
31
31
 
32
32
  MSG_INDENT =
33
33
  'Indent `)` the same as the start of the line where `(` is.'.freeze
@@ -46,6 +46,10 @@ module RuboCop
46
46
  end
47
47
  alias on_defs on_def
48
48
 
49
+ def autocorrect(node)
50
+ AlignmentCorrector.correct(processed_source, node, @column_delta)
51
+ end
52
+
49
53
  private
50
54
 
51
55
  def check(node, elements)
@@ -33,7 +33,7 @@ module RuboCop
33
33
  # end
34
34
  #
35
35
  class CommentIndentation < Cop
36
- include AutocorrectAlignment
36
+ include Alignment
37
37
 
38
38
  MSG = 'Incorrect indentation detected (column %<column>d ' \
39
39
  'instead of %<correct_comment_indentation>d).'.freeze
@@ -42,6 +42,10 @@ module RuboCop
42
42
  processed_source.comments.each { |comment| check(comment) }
43
43
  end
44
44
 
45
+ def autocorrect(node)
46
+ AlignmentCorrector.correct(processed_source, node, @column_delta)
47
+ end
48
+
45
49
  private
46
50
 
47
51
  def check(comment)
@@ -31,7 +31,7 @@ module RuboCop
31
31
  # end
32
32
  class ElseAlignment < Cop
33
33
  include EndKeywordAlignment
34
- include AutocorrectAlignment
34
+ include Alignment
35
35
  include CheckAssignment
36
36
 
37
37
  MSG = 'Align `%<else_range>s` with `%<base_range>s`.'.freeze
@@ -66,6 +66,10 @@ module RuboCop
66
66
  check_alignment(node.when_branches.last.loc.keyword, node.loc.else)
67
67
  end
68
68
 
69
+ def autocorrect(node)
70
+ AlignmentCorrector.correct(processed_source, node, column_delta)
71
+ end
72
+
69
73
  private
70
74
 
71
75
  def check_nested(node, base)
@@ -37,7 +37,7 @@ module RuboCop
37
37
 
38
38
  def autocorrect(node)
39
39
  lambda do |corrector|
40
- send_line = node.loc.line
40
+ send_line = node.first_line
41
41
  previous_line = processed_source[send_line - 2]
42
42
  next_line = processed_source[send_line]
43
43
  line = range_by_whole_lines(node.source_range)
@@ -71,7 +71,7 @@ module RuboCop
71
71
  end
72
72
 
73
73
  def empty_lines_around?(node)
74
- send_line = node.loc.line
74
+ send_line = node.first_line
75
75
  previous_line = previous_line_ignoring_comments(processed_source,
76
76
  send_line)
77
77
  next_line = processed_source[send_line]
@@ -92,7 +92,7 @@ module RuboCop
92
92
  end
93
93
 
94
94
  def message(node)
95
- previous_line = processed_source[node.loc.line - 2]
95
+ previous_line = processed_source[node.first_line - 2]
96
96
 
97
97
  if block_start?(previous_line) ||
98
98
  class_def?(previous_line)
@@ -42,8 +42,7 @@ module RuboCop
42
42
  MSG = 'Empty line detected around arguments.'.freeze
43
43
 
44
44
  def on_send(node)
45
- return if node.single_line?
46
- return if empty_lines(node).empty?
45
+ return if node.single_line? || node.arguments.empty?
47
46
  extra_lines(node) { |range| add_offense(node, location: range) }
48
47
  end
49
48
 
@@ -56,21 +55,9 @@ module RuboCop
56
55
  private
57
56
 
58
57
  def empty_lines(node)
59
- @empty_lines ||= begin
60
- lines = source_lines(node).map.with_index(1).to_a
61
- lines.select! { |code, _| code == '' }
62
- lines.map { |_, line| line }
63
- end
64
- end
65
-
66
- def source_lines(node)
67
- source =
68
- if node.arguments.last && node.arguments.last.block_type?
69
- source_without_block(node, node.arguments.last)
70
- else
71
- node.source
72
- end
73
- source.lines.map { |line| line.delete("\n") }
58
+ lines = processed_lines(node).map.with_index(first_line(node)).to_a
59
+ lines.select! { |code, _| code.empty? }
60
+ lines.map { |_, line| line }
74
61
  end
75
62
 
76
63
  def extra_lines(node)
@@ -80,8 +67,19 @@ module RuboCop
80
67
  end
81
68
  end
82
69
 
83
- def source_without_block(node, block_node)
84
- node.source.split(block_node.source).first
70
+ def first_line(node)
71
+ node.receiver ? node.receiver.last_line : node.first_line
72
+ end
73
+
74
+ def last_line(node)
75
+ last_arg = node.arguments.last
76
+ last_arg.block_type? ? last_arg.first_line : node.last_line
77
+ end
78
+
79
+ def processed_lines(node)
80
+ start = first_line(node) - 1
81
+ stop = last_line(node) - 1
82
+ processed_source.lines[start..stop]
85
83
  end
86
84
  end
87
85
  end
@@ -31,6 +31,10 @@ module RuboCop
31
31
  check(node, nil)
32
32
  end
33
33
 
34
+ def autocorrect(node)
35
+ EmptyLineCorrector.correct(node)
36
+ end
37
+
34
38
  private
35
39
 
36
40
  def style
@@ -29,6 +29,10 @@ module RuboCop
29
29
  def on_block(node)
30
30
  check(node, node.body)
31
31
  end
32
+
33
+ def autocorrect(node)
34
+ EmptyLineCorrector.correct(node)
35
+ end
32
36
  end
33
37
  end
34
38
  end
@@ -58,6 +58,10 @@ module RuboCop
58
58
  _obj, body = *node
59
59
  check(node, body)
60
60
  end
61
+
62
+ def autocorrect(node)
63
+ EmptyLineCorrector.correct(node)
64
+ end
61
65
  end
62
66
  end
63
67
  end
@@ -73,6 +73,10 @@ module RuboCop
73
73
  check_body(body)
74
74
  end
75
75
 
76
+ def autocorrect(node)
77
+ EmptyLineCorrector.correct(node)
78
+ end
79
+
76
80
  private
77
81
 
78
82
  def check_body(node)
@@ -30,6 +30,10 @@ module RuboCop
30
30
  end
31
31
  alias on_defs on_def
32
32
 
33
+ def autocorrect(node)
34
+ EmptyLineCorrector.correct(node)
35
+ end
36
+
33
37
  private
34
38
 
35
39
  def style
@@ -53,6 +53,10 @@ module RuboCop
53
53
  _name, body = *node
54
54
  check(node, body)
55
55
  end
56
+
57
+ def autocorrect(node)
58
+ EmptyLineCorrector.correct(node)
59
+ end
56
60
  end
57
61
  end
58
62
  end
@@ -29,6 +29,10 @@ module RuboCop
29
29
  check_children_line_break(node, node.children)
30
30
  end
31
31
 
32
+ def autocorrect(node)
33
+ EmptyLineCorrector.insert_before(node)
34
+ end
35
+
32
36
  private
33
37
 
34
38
  def assignment_on_same_line?(node)
@@ -27,6 +27,10 @@ module RuboCop
27
27
  # If it doesn't, Style/FirstMethodArgumentLineBreak will handle it
28
28
  check_children_line_break(node, node.children) if node.loc.begin
29
29
  end
30
+
31
+ def autocorrect(node)
32
+ EmptyLineCorrector.insert_before(node)
33
+ end
30
34
  end
31
35
  end
32
36
  end
@@ -43,6 +43,10 @@ module RuboCop
43
43
 
44
44
  check_method_line_break(node, args)
45
45
  end
46
+
47
+ def autocorrect(node)
48
+ EmptyLineCorrector.insert_before(node)
49
+ end
46
50
  end
47
51
  end
48
52
  end
@@ -36,6 +36,10 @@ module RuboCop
36
36
  check_method_line_break(node, node.arguments)
37
37
  end
38
38
  alias on_defs on_def
39
+
40
+ def autocorrect(node)
41
+ EmptyLineCorrector.insert_before(node)
42
+ end
39
43
  end
40
44
  end
41
45
  end
@@ -19,7 +19,7 @@ module RuboCop
19
19
  # first_param,
20
20
  # second_param)
21
21
  class FirstParameterIndentation < Cop
22
- include AutocorrectAlignment
22
+ include Alignment
23
23
  include ConfigurableEnforcedStyle
24
24
 
25
25
  MSG = 'Indent the first parameter one step more than %<base>s.'.freeze
@@ -32,6 +32,10 @@ module RuboCop
32
32
  check_alignment([node.first_argument], indent)
33
33
  end
34
34
 
35
+ def autocorrect(node)
36
+ AlignmentCorrector.correct(processed_source, node, column_delta)
37
+ end
38
+
35
39
  private
36
40
 
37
41
  def message(arg_node)
@@ -54,7 +58,7 @@ module RuboCop
54
58
  if special_inner_call_indentation?(node)
55
59
  column_of(base_range(node, node.first_argument))
56
60
  else
57
- previous_code_line(node.first_argument.loc.line) =~ /\S/
61
+ previous_code_line(node.first_argument.first_line) =~ /\S/
58
62
  end
59
63
  end
60
64