rubocop 1.50.1 → 1.51.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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/config/default.yml +20 -3
  4. data/lib/rubocop/config.rb +4 -0
  5. data/lib/rubocop/config_obsoletion.rb +2 -2
  6. data/lib/rubocop/cop/base.rb +4 -0
  7. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
  8. data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -1
  9. data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
  10. data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +2 -2
  11. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +25 -34
  12. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +7 -19
  13. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +42 -52
  14. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +38 -55
  15. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -2
  16. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +8 -27
  17. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +7 -26
  18. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +4 -21
  19. data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +6 -30
  20. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -0
  21. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +12 -1
  22. data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
  23. data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -2
  24. data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -2
  25. data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
  26. data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +2 -2
  27. data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +2 -2
  28. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
  29. data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +23 -9
  30. data/lib/rubocop/cop/lint/useless_assignment.rb +56 -1
  31. data/lib/rubocop/cop/lint/void.rb +62 -6
  32. data/lib/rubocop/cop/mixin/comments_help.rb +6 -2
  33. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
  34. data/lib/rubocop/cop/naming/constant_name.rb +1 -1
  35. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +22 -7
  36. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +11 -3
  37. data/lib/rubocop/cop/style/attr.rb +11 -1
  38. data/lib/rubocop/cop/style/collection_compact.rb +13 -6
  39. data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
  40. data/lib/rubocop/cop/style/combinable_loops.rb +26 -6
  41. data/lib/rubocop/cop/style/conditional_assignment.rb +2 -2
  42. data/lib/rubocop/cop/style/copyright.rb +5 -2
  43. data/lib/rubocop/cop/style/documentation.rb +1 -1
  44. data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
  45. data/lib/rubocop/cop/style/exact_regexp_match.rb +62 -0
  46. data/lib/rubocop/cop/style/guard_clause.rb +2 -0
  47. data/lib/rubocop/cop/style/hash_except.rb +19 -8
  48. data/lib/rubocop/cop/style/if_inside_else.rb +6 -0
  49. data/lib/rubocop/cop/style/if_unless_modifier.rb +3 -0
  50. data/lib/rubocop/cop/style/invertible_unless_condition.rb +9 -5
  51. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
  52. data/lib/rubocop/cop/style/redundant_fetch_block.rb +6 -4
  53. data/lib/rubocop/cop/style/redundant_line_continuation.rb +5 -1
  54. data/lib/rubocop/cop/style/regexp_literal.rb +11 -2
  55. data/lib/rubocop/cop/style/require_order.rb +9 -4
  56. data/lib/rubocop/cop/style/semicolon.rb +12 -1
  57. data/lib/rubocop/cop/style/special_global_vars.rb +2 -2
  58. data/lib/rubocop/cop/team.rb +1 -1
  59. data/lib/rubocop/cop/variable_force/assignment.rb +4 -0
  60. data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
  61. data/lib/rubocop/result_cache.rb +1 -1
  62. data/lib/rubocop/rspec/cop_helper.rb +1 -1
  63. data/lib/rubocop/target_ruby.rb +3 -2
  64. data/lib/rubocop/version.rb +3 -3
  65. data/lib/rubocop.rb +1 -0
  66. metadata +5 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc74785ce6643999994c7595e6ab7b6508abc7ab33532032d09fb854808d3ab5
4
- data.tar.gz: 3313880579d587260cae9f718b148160a597da1a239464c9ae86ce8a773065fc
3
+ metadata.gz: '0863dd1792c6296e51bcdbbc4503423cbc61f66c40a7120b405f4eaf999349be'
4
+ data.tar.gz: a4998dfeef1e7f82ffac34fb409494859b28afba9ce6bb007f6ca5870a5e371b
5
5
  SHA512:
6
- metadata.gz: 0b4ea0d9447499f45e99d333c05f72edd634980d506717117cb35029ac2f185de08681c68ce40a2d319efe163b23a168e6c9a55f8178dbf25f847ecc7710cb04
7
- data.tar.gz: e1c57df60ec75958f78eec411b0697496ea34b0a10626b3fa79453a64328162292cb621319557b0aac59fe88d447fa32a5e3fbcf1d4d4efcf9ef9388191a6fee
6
+ metadata.gz: 1ff6067cf16502e16e5bf6691717f97b5f0cf34bdd03e0d893ee90185af1a26d5622c394b5b586530a9d596f8f92cdff4b5eb351d305fc8a2206906f903c9606
7
+ data.tar.gz: 2ab3c9a30731adbd8818bfce7fba9f346ac8f66a3b0a52fe2ee65094a7ed580f617fa776664f59df71d6229cf35e3e9ad74a557ec6a760dcbc6d85ae1008a2bb
data/README.md CHANGED
@@ -53,7 +53,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
53
53
  in your `Gemfile`:
54
54
 
55
55
  ```rb
56
- gem 'rubocop', '~> 1.50', require: false
56
+ gem 'rubocop', '~> 1.51', require: false
57
57
  ```
58
58
 
59
59
  See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
@@ -75,8 +75,8 @@ You can read a lot more about RuboCop in its [official docs](https://docs.ruboco
75
75
 
76
76
  RuboCop officially supports the following runtime Ruby implementations:
77
77
 
78
- * MRI 2.6+
79
- * JRuby 9.3+
78
+ * MRI 2.7+
79
+ * JRuby 9.4+
80
80
 
81
81
  Targets Ruby 2.0+ code analysis.
82
82
 
data/config/default.yml CHANGED
@@ -140,7 +140,7 @@ AllCops:
140
140
  # or gems.locked file. (Although the Ruby version is specified in the Gemfile
141
141
  # or gems.rb file, RuboCop reads the final value from the lock file.) If the
142
142
  # Ruby version is still unresolved, RuboCop will use the oldest officially
143
- # supported Ruby version (currently Ruby 2.6).
143
+ # supported Ruby version (currently Ruby 2.7).
144
144
  TargetRubyVersion: ~
145
145
  # Determines if a notification for extension libraries should be shown when
146
146
  # rubocop is run. Keys are the name of the extension, and values are an array
@@ -154,6 +154,7 @@ AllCops:
154
154
  rubocop-rake: [rake]
155
155
  rubocop-graphql: [graphql]
156
156
  rubocop-capybara: [capybara]
157
+ rubocop-factory_bot: [factory_bot, factory_bot_rails]
157
158
  # Enable/Disable checking the methods extended by Active Support.
158
159
  ActiveSupportExtensionsEnabled: false
159
160
 
@@ -2343,6 +2344,9 @@ Lint/TopLevelReturnWithArgument:
2343
2344
  Description: 'Detects top level return statements with argument.'
2344
2345
  Enabled: true
2345
2346
  VersionAdded: '0.89'
2347
+ # These codes are `eval`-ed in method and their return values may be used.
2348
+ Exclude:
2349
+ - '**/*.jb'
2346
2350
 
2347
2351
  Lint/TrailingCommaInAttributeDeclaration:
2348
2352
  Description: 'Checks for trailing commas in attribute declarations.'
@@ -2451,6 +2455,8 @@ Lint/UselessAssignment:
2451
2455
  StyleGuide: '#underscore-unused-vars'
2452
2456
  Enabled: true
2453
2457
  VersionAdded: '0.11'
2458
+ VersionChanged: '1.51'
2459
+ SafeAutoCorrect: false
2454
2460
 
2455
2461
  Lint/UselessElseWithoutRescue:
2456
2462
  Description: 'Checks for useless `else` in `begin..end` without `rescue`.'
@@ -2942,7 +2948,9 @@ Naming/VariableNumber:
2942
2948
  Security/CompoundHash:
2943
2949
  Description: 'When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.'
2944
2950
  Enabled: pending
2951
+ Safe: false
2945
2952
  VersionAdded: '1.28'
2953
+ VersionChanged: '1.51'
2946
2954
 
2947
2955
  Security/Eval:
2948
2956
  Description: 'The use of eval represents a serious security risk.'
@@ -3515,7 +3523,9 @@ Style/DataInheritance:
3515
3523
  Description: 'Checks for inheritance from Data.define.'
3516
3524
  StyleGuide: '#no-extend-data-define'
3517
3525
  Enabled: pending
3526
+ SafeAutoCorrect: false
3518
3527
  VersionAdded: '1.49'
3528
+ VersionChanged: '1.51'
3519
3529
 
3520
3530
  Style/DateTime:
3521
3531
  Description: 'Use Time over DateTime.'
@@ -3706,6 +3716,11 @@ Style/EvenOdd:
3706
3716
  VersionAdded: '0.12'
3707
3717
  VersionChanged: '0.29'
3708
3718
 
3719
+ Style/ExactRegexpMatch:
3720
+ Description: 'Checks for exact regexp match inside Regexp literals.'
3721
+ Enabled: pending
3722
+ VersionAdded: '1.51'
3723
+
3709
3724
  Style/ExpandPathArguments:
3710
3725
  Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`."
3711
3726
  Enabled: true
@@ -4067,7 +4082,9 @@ Style/InverseMethods:
4067
4082
  Style/InvertibleUnlessCondition:
4068
4083
  Description: 'Favor `if` with inverted condition over `unless`.'
4069
4084
  Enabled: false
4085
+ Safe: false
4070
4086
  VersionAdded: '1.44'
4087
+ VersionChanged: '1.50'
4071
4088
  # `InverseMethods` are methods that can be inverted in a `unless` condition.
4072
4089
  # The relationship of inverse methods needs to be defined in both directions.
4073
4090
  # Keys and values both need to be defined as symbols.
@@ -4090,8 +4107,6 @@ Style/InvertibleUnlessCondition:
4090
4107
  # :blank?: :present?
4091
4108
  # :include?: :exclude?
4092
4109
  # :exclude?: :include?
4093
- # :one?: :many?
4094
- # :many?: :one?
4095
4110
 
4096
4111
  Style/IpAddresses:
4097
4112
  Description: "Don't include literal IP addresses in code."
@@ -4622,7 +4637,9 @@ Style/OpenStructUse:
4622
4637
  - https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats
4623
4638
 
4624
4639
  Enabled: pending
4640
+ Safe: false
4625
4641
  VersionAdded: '1.23'
4642
+ VersionChanged: '1.51'
4626
4643
 
4627
4644
  Style/OperatorMethodCall:
4628
4645
  Description: 'Checks for redundant dot before operator method call.'
@@ -284,6 +284,10 @@ module RuboCop
284
284
  end
285
285
  end
286
286
 
287
+ def inspect # :nodoc:
288
+ "#<#{self.class.name}:#{object_id} @loaded_path=#{loaded_path}>"
289
+ end
290
+
287
291
  private
288
292
 
289
293
  def target_rails_version_from_bundler_lock_file
@@ -68,11 +68,11 @@ module RuboCop
68
68
  # Cop rules are keyed by the name of the original cop
69
69
  def load_cop_rules(rules)
70
70
  rules.flat_map do |rule_type, data|
71
- data.map do |cop_name, configuration|
71
+ data.filter_map do |cop_name, configuration|
72
72
  next unless configuration # allow configurations to be disabled with `CopName: ~`
73
73
 
74
74
  COP_RULE_CLASSES[rule_type].new(@config, cop_name, configuration)
75
- end.compact
75
+ end
76
76
  end
77
77
  end
78
78
 
@@ -305,6 +305,10 @@ module RuboCop
305
305
  @current_original = original
306
306
  end
307
307
 
308
+ def inspect # :nodoc:
309
+ "#<#{self.class.name}:#{object_id} @config=#{@config} @options=#{@options}>"
310
+ end
311
+
308
312
  private
309
313
 
310
314
  ### Reserved for Cop::Cop
@@ -54,7 +54,7 @@ module RuboCop
54
54
  def inside_string_ranges(node)
55
55
  return [] unless node.is_a?(Parser::AST::Node)
56
56
 
57
- node.each_node(:str, :dstr, :xstr).map { |n| inside_string_range(n) }.compact
57
+ node.each_node(:str, :dstr, :xstr).filter_map { |n| inside_string_range(n) }
58
58
  end
59
59
 
60
60
  def inside_string_range(node)
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Gemspec
6
- # Checks that deprecated attribute attributes are not set in a gemspec file.
6
+ # Checks that deprecated attributes are not set in a gemspec file.
7
7
  # Removing deprecated attributes allows the user to receive smaller packed gems.
8
8
  #
9
9
  # @example
@@ -75,7 +75,7 @@ module RuboCop
75
75
 
76
76
  # @!method add_development_dependency?(node)
77
77
  def_node_matcher :add_development_dependency?, <<~PATTERN
78
- (send _ :add_development_dependency (str #forbidden_gem? ...))
78
+ (send _ :add_development_dependency (str #forbidden_gem? ...) _? _?)
79
79
  PATTERN
80
80
 
81
81
  # @!method gem?(node)
@@ -59,12 +59,12 @@ module RuboCop
59
59
  def method_directives(node)
60
60
  comments = processed_source.ast_with_comments[node]
61
61
 
62
- comments.map do |comment|
62
+ comments.filter_map do |comment|
63
63
  match = comment.text.match(REGEXP)
64
64
  next unless match
65
65
 
66
66
  { node: comment, method_name: match[:method_name], args: match[:args] }
67
- end.compact
67
+ end
68
68
  end
69
69
 
70
70
  def too_many_directives(node)
@@ -6,49 +6,40 @@ module RuboCop
6
6
  # Checks for a line break before the first element in a
7
7
  # multi-line array.
8
8
  #
9
- # @example AllowMultilineFinalElement: false (default)
9
+ # @example
10
10
  #
11
- # # bad
12
- # [ :a,
13
- # :b]
11
+ # # bad
12
+ # [ :a,
13
+ # :b]
14
14
  #
15
- # # bad
16
- # [ :a, {
17
- # :b => :c
18
- # }]
15
+ # # good
16
+ # [
17
+ # :a,
18
+ # :b]
19
19
  #
20
- # # good
21
- # [:a, :b]
20
+ # # good
21
+ # [:a, :b]
22
22
  #
23
- # # good
24
- # [
25
- # :a,
26
- # :b]
23
+ # @example AllowMultilineFinalElement: false (default)
27
24
  #
28
- # # good
29
- # [
30
- # :a, {
31
- # :b => :c
32
- # }]
25
+ # # bad
26
+ # [ :a, {
27
+ # :b => :c
28
+ # }]
33
29
  #
34
- # @example AllowMultilineFinalElement: true
30
+ # # good
31
+ # [
32
+ # :a, {
33
+ # :b => :c
34
+ # }]
35
35
  #
36
- # # bad
37
- # [ :a,
38
- # :b]
39
- #
40
- # # good
41
- # [ :a, {
42
- # :b => :c
43
- # }]
36
+ # @example AllowMultilineFinalElement: true
44
37
  #
45
- # # good
46
- # [
47
- # :a,
48
- # :b]
38
+ # # good
39
+ # [:a, {
40
+ # :b => :c
41
+ # }]
49
42
  #
50
- # # good
51
- # [:a, :b]
52
43
  class FirstArrayElementLineBreak < Base
53
44
  include FirstElementLineBreak
54
45
  extend AutoCorrector
@@ -6,17 +6,12 @@ module RuboCop
6
6
  # Checks for a line break before the first element in a
7
7
  # multi-line hash.
8
8
  #
9
- # @example AllowMultilineFinalElement: false (default)
9
+ # @example
10
10
  #
11
11
  # # bad
12
12
  # { a: 1,
13
13
  # b: 2}
14
14
  #
15
- # # bad
16
- # { a: 1, b: {
17
- # c: 3
18
- # }}
19
- #
20
15
  # # good
21
16
  # {
22
17
  # a: 1,
@@ -28,11 +23,14 @@ module RuboCop
28
23
  # c: 3
29
24
  # }}
30
25
  #
31
- # @example AllowMultilineFinalElement: true
26
+ # @example AllowMultilineFinalElement: false (default)
32
27
  #
33
28
  # # bad
34
- # { a: 1,
35
- # b: 2}
29
+ # { a: 1, b: {
30
+ # c: 3
31
+ # }}
32
+ #
33
+ # @example AllowMultilineFinalElement: true
36
34
  #
37
35
  # # bad
38
36
  # { a: 1,
@@ -45,16 +43,6 @@ module RuboCop
45
43
  # c: 3
46
44
  # }}
47
45
  #
48
- # # good
49
- # {
50
- # a: 1,
51
- # b: 2 }
52
- #
53
- # # good
54
- # {
55
- # a: 1, b: {
56
- # c: 3
57
- # }}
58
46
  class FirstHashElementLineBreak < Base
59
47
  include FirstElementLineBreak
60
48
  extend AutoCorrector
@@ -6,73 +6,63 @@ module RuboCop
6
6
  # Checks for a line break before the first argument in a
7
7
  # multi-line method call.
8
8
  #
9
- # @example AllowMultilineFinalElement: false (default)
10
- #
11
- # # bad
12
- # method(foo, bar,
13
- # baz)
14
- #
15
- # # bad
16
- # method(foo, bar, {
17
- # baz: "a",
18
- # qux: "b",
19
- # })
9
+ # @example
20
10
  #
21
- # # good
22
- # method(
23
- # foo, bar,
24
- # baz)
11
+ # # bad
12
+ # method(foo, bar,
13
+ # baz)
25
14
  #
26
- # # good
27
- # method(
28
- # foo, bar, {
29
- # baz: "a",
30
- # qux: "b",
31
- # })
15
+ # # good
16
+ # method(
17
+ # foo, bar,
18
+ # baz)
32
19
  #
33
20
  # # ignored
34
21
  # method foo, bar,
35
22
  # baz
36
23
  #
37
- # @example AllowMultilineFinalElement: true
24
+ # @example AllowMultilineFinalElement: false (default)
25
+ #
26
+ # # bad
27
+ # method(foo, bar, {
28
+ # baz: "a",
29
+ # qux: "b",
30
+ # })
38
31
  #
39
- # # bad
40
- # method(foo, bar,
41
- # baz)
32
+ # # good
33
+ # method(
34
+ # foo, bar, {
35
+ # baz: "a",
36
+ # qux: "b",
37
+ # })
42
38
  #
43
- # # bad
44
- # method(foo,
45
- # bar,
46
- # {
47
- # baz: "a",
48
- # qux: "b",
49
- # }
50
- # )
39
+ # @example AllowMultilineFinalElement: true
51
40
  #
52
- # # good
53
- # method(foo, bar, {
41
+ # # bad
42
+ # method(foo,
43
+ # bar,
44
+ # {
54
45
  # baz: "a",
55
46
  # qux: "b",
56
- # })
47
+ # }
48
+ # )
57
49
  #
58
- # # good
59
- # method(
60
- # foo, bar,
61
- # baz)
50
+ # # good
51
+ # method(foo, bar, {
52
+ # baz: "a",
53
+ # qux: "b",
54
+ # })
62
55
  #
63
- # # good
64
- # method(
65
- # foo,
66
- # bar,
67
- # {
68
- # baz: "a",
69
- # qux: "b",
70
- # }
71
- # )
56
+ # # good
57
+ # method(
58
+ # foo,
59
+ # bar,
60
+ # {
61
+ # baz: "a",
62
+ # qux: "b",
63
+ # }
64
+ # )
72
65
  #
73
- # # ignored
74
- # method foo, bar,
75
- # baz
76
66
  class FirstMethodArgumentLineBreak < Base
77
67
  include FirstElementLineBreak
78
68
  extend AutoCorrector
@@ -6,69 +6,52 @@ module RuboCop
6
6
  # Checks for a line break before the first parameter in a
7
7
  # multi-line method parameter definition.
8
8
  #
9
- # @example AllowMultilineFinalElement: false (default)
10
- #
11
- # # bad
12
- # def method(foo, bar,
13
- # baz)
14
- # do_something
15
- # end
16
- #
17
- # # bad
18
- # def method(foo, bar, baz = {
19
- # :a => "b",
20
- # })
21
- # do_something
22
- # end
9
+ # @example
23
10
  #
24
- # # good
25
- # def method(
26
- # foo, bar,
27
- # baz)
28
- # do_something
29
- # end
11
+ # # bad
12
+ # def method(foo, bar,
13
+ # baz)
14
+ # do_something
15
+ # end
30
16
  #
31
- # # good
32
- # def method(
33
- # foo, bar, baz = {
34
- # :a => "b",
35
- # })
36
- # do_something
37
- # end
17
+ # # good
18
+ # def method(
19
+ # foo, bar,
20
+ # baz)
21
+ # do_something
22
+ # end
38
23
  #
39
- # # ignored
40
- # def method foo,
41
- # bar
42
- # do_something
43
- # end
24
+ # # ignored
25
+ # def method foo,
26
+ # bar
27
+ # do_something
28
+ # end
44
29
  #
45
- # @example AllowMultilineFinalElement: true
30
+ # @example AllowMultilineFinalElement: false (default)
46
31
  #
47
- # # bad
48
- # def method(foo, bar,
49
- # baz)
50
- # do_something
51
- # end
32
+ # # bad
33
+ # def method(foo, bar, baz = {
34
+ # :a => "b",
35
+ # })
36
+ # do_something
37
+ # end
52
38
  #
53
- # # good
54
- # def method(foo, bar, baz = {
55
- # :a => "b",
56
- # })
57
- # do_something
58
- # end
39
+ # # good
40
+ # def method(
41
+ # foo, bar, baz = {
42
+ # :a => "b",
43
+ # })
44
+ # do_something
45
+ # end
59
46
  #
60
- # # good
61
- # def method(
62
- # foo, bar,
63
- # baz)
64
- # do_something
65
- # end
47
+ # @example AllowMultilineFinalElement: true
66
48
  #
67
- # # ignored
68
- # def method foo,
69
- # bar
70
- # do_something
71
- # end
49
+ # # good
50
+ # def method(foo, bar, baz = {
51
+ # :a => "b",
52
+ # })
53
+ # do_something
54
+ # end
72
55
  #
73
56
  class FirstMethodParameterLineBreak < Base
74
57
  include FirstElementLineBreak
@@ -228,9 +228,9 @@ module RuboCop
228
228
  end
229
229
 
230
230
  def find_most_bottom_of_heredoc_end(arguments)
231
- arguments.map do |argument|
231
+ arguments.filter_map do |argument|
232
232
  argument.loc.heredoc_end.end_pos if argument.loc.respond_to?(:heredoc_end)
233
- end.compact.max
233
+ end.max
234
234
  end
235
235
 
236
236
  # Internal trailing comma helpers.
@@ -6,7 +6,7 @@ module RuboCop
6
6
  # Ensures that each item in a multi-line array
7
7
  # starts on a separate line.
8
8
  #
9
- # @example AllowMultilineFinalElement: false (default)
9
+ # @example
10
10
  #
11
11
  # # bad
12
12
  # [
@@ -14,11 +14,6 @@ module RuboCop
14
14
  # c
15
15
  # ]
16
16
  #
17
- # # bad
18
- # [ a, b, foo(
19
- # bar
20
- # )]
21
- #
22
17
  # # good
23
18
  # [
24
19
  # a,
@@ -35,34 +30,20 @@ module RuboCop
35
30
  # )
36
31
  # ]
37
32
  #
38
- # @example AllowMultilineFinalElement: true
33
+ # @example AllowMultilineFinalElement: false (default)
39
34
  #
40
35
  # # bad
41
- # [
42
- # a, b,
43
- # c
44
- # ]
45
- #
46
- # # good
47
- # [ a, b, foo(
36
+ # [a, b, foo(
48
37
  # bar
49
38
  # )]
50
39
  #
51
- # # good
52
- # [
53
- # a,
54
- # b,
55
- # c
56
- # ]
40
+ # @example AllowMultilineFinalElement: true
57
41
  #
58
42
  # # good
59
- # [
60
- # a,
61
- # b,
62
- # foo(
63
- # bar
64
- # )
65
- # ]
43
+ # [a, b, foo(
44
+ # bar
45
+ # )]
46
+ #
66
47
  class MultilineArrayLineBreaks < Base
67
48
  include MultilineElementLineBreaks
68
49
  extend AutoCorrector