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.
- 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
@@ -23,6 +23,12 @@ module RuboCop
|
|
23
23
|
class UnusedMethodArgument < Cop
|
24
24
|
include UnusedArgument
|
25
25
|
|
26
|
+
def autocorrect(node)
|
27
|
+
UnusedArgCorrector.correct(processed_source, node)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
26
32
|
def check_argument(variable)
|
27
33
|
return unless variable.method_argument?
|
28
34
|
return if variable.keyword_argument? &&
|
@@ -17,7 +17,8 @@ module RuboCop
|
|
17
17
|
#
|
18
18
|
# # good
|
19
19
|
# CGI.escape('http://example.com')
|
20
|
-
# URI.encode_www_form('
|
20
|
+
# URI.encode_www_form([['example', 'param'], ['lang', 'en']])
|
21
|
+
# URI.encode_www_form(page: 10, locale: 'en')
|
21
22
|
# URI.encode_www_form_component('http://example.com')
|
22
23
|
#
|
23
24
|
# # bad
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
# This module checks for nodes that should be aligned to the left or right.
|
6
|
+
# This amount is determined by the instance variable @column_delta.
|
7
|
+
module Alignment
|
8
|
+
private
|
9
|
+
|
10
|
+
SPACE = ' '.freeze
|
11
|
+
|
12
|
+
attr_reader :column_delta
|
13
|
+
|
14
|
+
def configured_indentation_width
|
15
|
+
cop_config['IndentationWidth'] ||
|
16
|
+
config.for_cop('IndentationWidth')['Width']
|
17
|
+
end
|
18
|
+
|
19
|
+
def indentation(node)
|
20
|
+
offset(node) + (SPACE * configured_indentation_width)
|
21
|
+
end
|
22
|
+
|
23
|
+
def offset(node)
|
24
|
+
SPACE * node.loc.column
|
25
|
+
end
|
26
|
+
|
27
|
+
def check_alignment(items, base_column = nil)
|
28
|
+
unless items.empty?
|
29
|
+
base_column ||= display_column(items.first.source_range)
|
30
|
+
end
|
31
|
+
|
32
|
+
each_bad_alignment(items, base_column) do |current|
|
33
|
+
expr = current.source_range
|
34
|
+
if offenses.any? { |o| within?(expr, o.location) }
|
35
|
+
# If this offense is within a line range that is already being
|
36
|
+
# realigned by autocorrect, we report the offense without
|
37
|
+
# autocorrecting it. Two rewrites in the same area by the same
|
38
|
+
# cop can not be handled. The next iteration will find the
|
39
|
+
# offense again and correct it.
|
40
|
+
add_offense(nil, location: expr)
|
41
|
+
else
|
42
|
+
add_offense(current)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def each_bad_alignment(items, base_column)
|
48
|
+
prev_line = -1
|
49
|
+
items.each do |current|
|
50
|
+
if current.loc.line > prev_line &&
|
51
|
+
begins_its_line?(current.source_range)
|
52
|
+
@column_delta = base_column - display_column(current.source_range)
|
53
|
+
|
54
|
+
yield current if @column_delta.nonzero?
|
55
|
+
end
|
56
|
+
prev_line = current.loc.line
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def display_column(range)
|
61
|
+
line = processed_source.lines[range.line - 1]
|
62
|
+
Unicode::DisplayWidth.of(line[0, range.column])
|
63
|
+
end
|
64
|
+
|
65
|
+
def within?(inner, outer)
|
66
|
+
inner.begin_pos >= outer.begin_pos && inner.end_pos <= outer.end_pos
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -5,6 +5,8 @@ module RuboCop
|
|
5
5
|
# Handles `Max` configuration parameters, especially setting them to an
|
6
6
|
# appropriate value with --auto-gen-config.
|
7
7
|
module ConfigurableMax
|
8
|
+
private
|
9
|
+
|
8
10
|
def max=(value)
|
9
11
|
cfg = config_to_allow_offenses
|
10
12
|
value = [cfg[max_parameter_name], value].max if cfg[max_parameter_name]
|
@@ -8,13 +8,15 @@ module RuboCop
|
|
8
8
|
|
9
9
|
NON_PUBLIC_MODIFIERS = %w[private protected].freeze
|
10
10
|
|
11
|
+
private
|
12
|
+
|
11
13
|
def non_public?(node)
|
12
14
|
non_public_modifier?(node.parent) ||
|
13
15
|
preceding_non_public_modifier?(node)
|
14
16
|
end
|
15
17
|
|
16
18
|
def preceding_non_public_modifier?(node)
|
17
|
-
stripped_source_upto(node.
|
19
|
+
stripped_source_upto(node.first_line).any? do |line|
|
18
20
|
NON_PUBLIC_MODIFIERS.include?(line)
|
19
21
|
end
|
20
22
|
end
|
@@ -7,10 +7,10 @@ module RuboCop
|
|
7
7
|
extend NodePattern::Macros
|
8
8
|
include Style::AnnotationComment
|
9
9
|
|
10
|
-
def_node_matcher :constant_definition?, '{class module casgn}'
|
11
|
-
|
12
10
|
private
|
13
11
|
|
12
|
+
def_node_matcher :constant_definition?, '{class module casgn}'
|
13
|
+
|
14
14
|
def documentation_comment?(node)
|
15
15
|
preceding_lines = preceding_lines(node)
|
16
16
|
|
@@ -15,23 +15,11 @@ module RuboCop
|
|
15
15
|
MSG_DEFERRED = 'Empty line missing before first %<type>s ' \
|
16
16
|
'definition'.freeze
|
17
17
|
|
18
|
+
private
|
19
|
+
|
18
20
|
def_node_matcher :constant_definition?, '{class module}'
|
19
21
|
def_node_matcher :empty_line_required?, '{def defs class module}'
|
20
22
|
|
21
|
-
def autocorrect(args)
|
22
|
-
offense_style, range = args
|
23
|
-
lambda do |corrector|
|
24
|
-
case offense_style
|
25
|
-
when :no_empty_lines then
|
26
|
-
corrector.remove(range)
|
27
|
-
when :empty_lines then
|
28
|
-
corrector.insert_before(range, "\n")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
23
|
def check(node, body)
|
36
24
|
# When style is `empty_lines`, if the body is empty, we don't enforce
|
37
25
|
# the presence OR absence of an empty line
|
@@ -111,7 +99,7 @@ module RuboCop
|
|
111
99
|
node = first_empty_line_required_child(body)
|
112
100
|
return unless node
|
113
101
|
|
114
|
-
line = previous_line_ignoring_comments(node.
|
102
|
+
line = previous_line_ignoring_comments(node.first_line)
|
115
103
|
return if processed_source[line].empty?
|
116
104
|
|
117
105
|
range = source_range(processed_source.buffer, line + 2, 0)
|
@@ -58,31 +58,7 @@ module RuboCop
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def line_break_before_keyword?(whole_expression, rhs)
|
61
|
-
rhs.
|
62
|
-
end
|
63
|
-
|
64
|
-
def align(node, align_to)
|
65
|
-
whitespace = whitespace_range(node)
|
66
|
-
return false unless whitespace.source.strip.empty?
|
67
|
-
|
68
|
-
column = alignment_column(align_to)
|
69
|
-
->(corrector) { corrector.replace(whitespace, ' ' * column) }
|
70
|
-
end
|
71
|
-
|
72
|
-
def whitespace_range(node)
|
73
|
-
begin_pos = node.loc.end.begin_pos
|
74
|
-
|
75
|
-
range_between(begin_pos - node.loc.end.column, begin_pos)
|
76
|
-
end
|
77
|
-
|
78
|
-
def alignment_column(align_to)
|
79
|
-
if !align_to
|
80
|
-
0
|
81
|
-
elsif align_to.respond_to?(:loc)
|
82
|
-
align_to.source_range.column
|
83
|
-
else
|
84
|
-
align_to.column
|
85
|
-
end
|
61
|
+
rhs.first_line > whole_expression.line
|
86
62
|
end
|
87
63
|
end
|
88
64
|
end
|
@@ -5,10 +5,6 @@ module RuboCop
|
|
5
5
|
# Common functionality for checking for a line break before the first
|
6
6
|
# element in a multi-line collection.
|
7
7
|
module FirstElementLineBreak
|
8
|
-
def autocorrect(node)
|
9
|
-
->(corrector) { corrector.insert_before(node.source_range, "\n") }
|
10
|
-
end
|
11
|
-
|
12
8
|
private
|
13
9
|
|
14
10
|
def check_method_line_break(node, children)
|
@@ -27,23 +23,23 @@ module RuboCop
|
|
27
23
|
def check_children_line_break(node, children, start = node)
|
28
24
|
return if children.size < 2
|
29
25
|
|
30
|
-
line = start.
|
26
|
+
line = start.first_line
|
31
27
|
|
32
28
|
min = first_by_line(children)
|
33
|
-
return if line != min.
|
29
|
+
return if line != min.first_line
|
34
30
|
|
35
31
|
max = last_by_line(children)
|
36
|
-
return if line == max.
|
32
|
+
return if line == max.last_line
|
37
33
|
|
38
34
|
add_offense(min)
|
39
35
|
end
|
40
36
|
|
41
37
|
def first_by_line(nodes)
|
42
|
-
nodes.min_by
|
38
|
+
nodes.min_by(&:first_line)
|
43
39
|
end
|
44
40
|
|
45
41
|
def last_by_line(nodes)
|
46
|
-
nodes.max_by
|
42
|
+
nodes.max_by(&:last_line)
|
47
43
|
end
|
48
44
|
end
|
49
45
|
end
|
@@ -16,6 +16,8 @@ module RuboCop
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
private
|
20
|
+
|
19
21
|
def frozen_string_literals_enabled?
|
20
22
|
ruby_version = processed_source.ruby_version
|
21
23
|
return false unless ruby_version
|
@@ -27,8 +29,6 @@ module RuboCop
|
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
|
-
private
|
31
|
-
|
32
32
|
def leading_comment_lines
|
33
33
|
processed_source[0..2].compact
|
34
34
|
end
|
@@ -4,6 +4,8 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
# Common functionality for obtaining source ranges from regexp matches
|
6
6
|
module MatchRange
|
7
|
+
private
|
8
|
+
|
7
9
|
# Return a new `Range` covering the first matching group number for each
|
8
10
|
# match of `regex` inside `range`
|
9
11
|
def each_match_range(range, regex)
|
@@ -7,6 +7,8 @@ module RuboCop
|
|
7
7
|
module MultilineLiteralBraceLayout
|
8
8
|
include ConfigurableEnforcedStyle
|
9
9
|
|
10
|
+
private
|
11
|
+
|
10
12
|
def check_brace_layout(node)
|
11
13
|
return if ignored_literal?(node)
|
12
14
|
|
@@ -17,30 +19,6 @@ module RuboCop
|
|
17
19
|
check(node)
|
18
20
|
end
|
19
21
|
|
20
|
-
def autocorrect(node)
|
21
|
-
if closing_brace_on_same_line?(node)
|
22
|
-
lambda do |corrector|
|
23
|
-
corrector.insert_before(node.loc.end, "\n".freeze)
|
24
|
-
end
|
25
|
-
else
|
26
|
-
# When a comment immediately before the closing brace gets in the way
|
27
|
-
# of an easy correction, the offense is reported but not auto-
|
28
|
-
# corrected. The user must handle the delicate decision of where to
|
29
|
-
# put the comment.
|
30
|
-
return if new_line_needed_before_closing_brace?(node)
|
31
|
-
|
32
|
-
lambda do |corrector|
|
33
|
-
corrector.remove(range_with_surrounding_space(range: node.loc.end,
|
34
|
-
side: :left))
|
35
|
-
|
36
|
-
corrector.insert_after(last_element_range_with_trailing_comma(node),
|
37
|
-
node.loc.end.source)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
22
|
# Returns true for the case
|
45
23
|
# [a,
|
46
24
|
# b # comment
|
@@ -91,33 +69,16 @@ module RuboCop
|
|
91
69
|
end
|
92
70
|
end
|
93
71
|
|
94
|
-
def ignored_literal?(node)
|
95
|
-
implicit_literal?(node) || empty_literal?(node) || node.single_line?
|
96
|
-
end
|
97
|
-
|
98
|
-
def implicit_literal?(node)
|
99
|
-
!node.loc.begin
|
100
|
-
end
|
101
|
-
|
102
72
|
def empty_literal?(node)
|
103
73
|
children(node).empty?
|
104
74
|
end
|
105
75
|
|
106
|
-
def
|
107
|
-
|
108
|
-
if trailing_comma_range
|
109
|
-
children(node).last.source_range.join(trailing_comma_range)
|
110
|
-
else
|
111
|
-
children(node).last.source_range
|
112
|
-
end
|
76
|
+
def implicit_literal?(node)
|
77
|
+
!node.loc.begin
|
113
78
|
end
|
114
79
|
|
115
|
-
def
|
116
|
-
|
117
|
-
range: children(node).last.source_range,
|
118
|
-
side: :right
|
119
|
-
).end.resize(1)
|
120
|
-
range.source == ',' ? range : nil
|
80
|
+
def ignored_literal?(node)
|
81
|
+
implicit_literal?(node) || empty_literal?(node) || node.single_line?
|
121
82
|
end
|
122
83
|
|
123
84
|
def children(node)
|
@@ -127,13 +88,13 @@ module RuboCop
|
|
127
88
|
# This method depends on the fact that we have guarded
|
128
89
|
# against implicit and empty literals.
|
129
90
|
def opening_brace_on_same_line?(node)
|
130
|
-
node.loc.begin.line == children(node).first.
|
91
|
+
node.loc.begin.line == children(node).first.first_line
|
131
92
|
end
|
132
93
|
|
133
94
|
# This method depends on the fact that we have guarded
|
134
95
|
# against implicit and empty literals.
|
135
96
|
def closing_brace_on_same_line?(node)
|
136
|
-
node.loc.end.line == children(node).last.
|
97
|
+
node.loc.end.line == children(node).last.last_line
|
137
98
|
end
|
138
99
|
|
139
100
|
# Starting with the parent node and recursively for the parent node's
|
@@ -165,7 +126,7 @@ module RuboCop
|
|
165
126
|
|
166
127
|
if node.respond_to?(:loc) &&
|
167
128
|
node.loc.respond_to?(:heredoc_end) &&
|
168
|
-
node.loc.heredoc_end.last_line >= parent.
|
129
|
+
node.loc.heredoc_end.last_line >= parent.last_line
|
169
130
|
return true
|
170
131
|
end
|
171
132
|
|