rubocop 0.52.0 → 0.52.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -5
- data/config/default.yml +1 -11
- data/config/disabled.yml +5 -0
- data/config/enabled.yml +6 -8
- data/lib/rubocop.rb +13 -2
- data/lib/rubocop/ast/node.rb +23 -15
- data/lib/rubocop/cli.rb +25 -2
- data/lib/rubocop/config.rb +23 -8
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
- data/lib/rubocop/cop/bundler/ordered_gems.rb +9 -0
- data/lib/rubocop/cop/commissioner.rb +1 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +121 -0
- data/lib/rubocop/cop/correctors/condition_corrector.rb +28 -0
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +62 -0
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
- data/lib/rubocop/cop/correctors/space_corrector.rb +34 -0
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +31 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +9 -0
- data/lib/rubocop/cop/generator.rb +18 -87
- data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/align_array.rb +5 -1
- data/lib/rubocop/cop/layout/align_hash.rb +1 -1
- data/lib/rubocop/cop/layout/align_parameters.rb +5 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +2 -2
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/comment_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +5 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +3 -3
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +17 -19
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +4 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +4 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +4 -0
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -0
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +4 -0
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +4 -0
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +4 -0
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +4 -0
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -0
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +4 -0
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -2
- data/lib/rubocop/cop/layout/indent_array.rb +6 -2
- data/lib/rubocop/cop/layout/indent_assignment.rb +6 -2
- data/lib/rubocop/cop/layout/indent_hash.rb +5 -1
- data/lib/rubocop/cop/layout/indentation_consistency.rb +5 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +5 -1
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +4 -0
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +3 -3
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -2
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +4 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +4 -0
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +6 -2
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +4 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -2
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -1
- data/lib/rubocop/cop/layout/space_after_comma.rb +4 -0
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +4 -0
- data/lib/rubocop/cop/layout/space_before_comma.rb +4 -0
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +4 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -7
- data/lib/rubocop/cop/layout/tab.rb +1 -1
- data/lib/rubocop/cop/lint/block_alignment.rb +1 -1
- data/lib/rubocop/cop/lint/def_end_alignment.rb +2 -2
- data/lib/rubocop/cop/lint/end_alignment.rb +3 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/unused_block_argument.rb +4 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +6 -0
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -1
- data/lib/rubocop/cop/mixin/alignment.rb +70 -0
- data/lib/rubocop/cop/mixin/array_hash_indentation.rb +2 -0
- data/lib/rubocop/cop/mixin/array_syntax.rb +2 -0
- data/lib/rubocop/cop/mixin/code_length.rb +2 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +2 -0
- data/lib/rubocop/cop/mixin/def_node.rb +3 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -15
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -25
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +0 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +5 -9
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +2 -2
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +2 -0
- data/lib/rubocop/cop/mixin/integer_node.rb +2 -0
- data/lib/rubocop/cop/mixin/match_range.rb +2 -0
- data/lib/rubocop/cop/mixin/min_body_length.rb +2 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +2 -0
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +9 -48
- data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -16
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +12 -31
- data/lib/rubocop/cop/mixin/parentheses.rb +2 -19
- data/lib/rubocop/cop/mixin/percent_literal.rb +3 -3
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +2 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +2 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -3
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -3
- data/lib/rubocop/cop/mixin/statement_modifier.rb +4 -2
- data/lib/rubocop/cop/mixin/string_help.rb +2 -0
- data/lib/rubocop/cop/mixin/string_literals_help.rb +2 -13
- data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -21
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -10
- data/lib/rubocop/cop/mixin/unused_argument.rb +2 -15
- data/lib/rubocop/cop/performance/case_when_splat.rb +1 -1
- data/lib/rubocop/cop/rails/action_filter.rb +3 -2
- data/lib/rubocop/cop/rails/active_support_aliases.rb +3 -2
- data/lib/rubocop/cop/rails/application_job.rb +6 -0
- data/lib/rubocop/cop/rails/application_record.rb +6 -0
- data/lib/rubocop/cop/rails/blank.rb +10 -9
- data/lib/rubocop/cop/rails/date.rb +22 -14
- data/lib/rubocop/cop/rails/delegate.rb +1 -1
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +3 -2
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +4 -2
- data/lib/rubocop/cop/rails/environment_comparison.rb +2 -2
- data/lib/rubocop/cop/rails/file_path.rb +1 -1
- data/lib/rubocop/cop/rails/find_by.rb +2 -2
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +15 -7
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +2 -2
- data/lib/rubocop/cop/rails/inverse_of.rb +130 -8
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +3 -3
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +3 -2
- data/lib/rubocop/cop/rails/presence.rb +31 -18
- data/lib/rubocop/cop/rails/present.rb +11 -8
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +52 -10
- data/lib/rubocop/cop/rails/request_referer.rb +2 -3
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +9 -2
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +38 -10
- data/lib/rubocop/cop/style/class_and_module_children.rb +76 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/format_string_token.rb +24 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +46 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +14 -0
- data/lib/rubocop/cop/style/method_def_parentheses.rb +79 -0
- data/lib/rubocop/cop/style/mixin_usage.rb +13 -2
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +19 -0
- data/lib/rubocop/cop/style/negated_if.rb +1 -1
- data/lib/rubocop/cop/style/negated_while.rb +6 -4
- data/lib/rubocop/cop/style/parallel_assignment.rb +1 -1
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +4 -0
- data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +4 -0
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/string_literals.rb +4 -0
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +4 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -0
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +4 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +33 -24
- data/lib/rubocop/options.rb +33 -10
- data/lib/rubocop/path_util.rb +7 -0
- data/lib/rubocop/token.rb +4 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +14 -4
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +0 -149
- 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
|
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
|
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
|
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)
|
@@ -264,7 +264,7 @@ module RuboCop
|
|
264
264
|
end
|
265
265
|
|
266
266
|
def begin_pos_with_comment(node)
|
267
|
-
annotation_line = node.
|
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.
|
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
|
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
|
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
|
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.
|
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.
|
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.
|
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
|
-
|
60
|
-
|
61
|
-
|
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
|
84
|
-
node.
|
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
|
@@ -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
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
# first_param,
|
20
20
|
# second_param)
|
21
21
|
class FirstParameterIndentation < Cop
|
22
|
-
include
|
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.
|
61
|
+
previous_code_line(node.first_argument.first_line) =~ /\S/
|
58
62
|
end
|
59
63
|
end
|
60
64
|
|