rubocop 0.79.0 → 0.80.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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +3 -3
  4. data/config/default.yml +33 -19
  5. data/lib/rubocop.rb +5 -1
  6. data/lib/rubocop/ast/node.rb +0 -12
  7. data/lib/rubocop/ast/node/regexp_node.rb +2 -4
  8. data/lib/rubocop/ast/traversal.rb +9 -0
  9. data/lib/rubocop/comment_config.rb +6 -1
  10. data/lib/rubocop/config_obsoletion.rb +2 -1
  11. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -1
  12. data/lib/rubocop/cop/layout/leading_comment_space.rb +33 -2
  13. data/lib/rubocop/cop/layout/line_length.rb +30 -1
  14. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +0 -4
  15. data/lib/rubocop/cop/layout/space_around_operators.rb +18 -0
  16. data/lib/rubocop/cop/layout/space_before_first_arg.rb +8 -0
  17. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -9
  18. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  19. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +12 -7
  20. data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -0
  21. data/lib/rubocop/cop/migration/department_name.rb +14 -1
  22. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +4 -0
  23. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +6 -0
  24. data/lib/rubocop/cop/mixin/hash_transform_method.rb +172 -0
  25. data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -9
  26. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
  27. data/lib/rubocop/cop/style/block_delimiters.rb +60 -1
  28. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +89 -11
  29. data/lib/rubocop/cop/style/hash_each_methods.rb +87 -0
  30. data/lib/rubocop/cop/style/hash_transform_keys.rb +79 -0
  31. data/lib/rubocop/cop/style/hash_transform_values.rb +79 -0
  32. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +5 -0
  33. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -4
  34. data/lib/rubocop/cop/style/or_assignment.rb +3 -2
  35. data/lib/rubocop/cop/style/symbol_array.rb +2 -2
  36. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
  37. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +0 -22
  38. data/lib/rubocop/cop/variable_force.rb +4 -1
  39. data/lib/rubocop/formatter/formatter_set.rb +1 -0
  40. data/lib/rubocop/formatter/junit_formatter.rb +63 -0
  41. data/lib/rubocop/node_pattern.rb +96 -10
  42. data/lib/rubocop/version.rb +1 -1
  43. metadata +21 -3
  44. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +0 -209
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3bdc80758a1e3604ccf4fc91cedac86412bea6d234b27c9b7ae064fb364076ce
4
- data.tar.gz: 2890ef6acaede12b528cf963cdbb8a90f64ecbcef6c5da6b3684fcf90c7d4c07
3
+ metadata.gz: 7143484124cd6cb7ebff12de736d4ed5a17b5189d26ab6da3f8072cf9b3d6f7e
4
+ data.tar.gz: acd2182467726955151e8dc249833ed1fffacae4dc988037ec5fe73e1d5bb0c7
5
5
  SHA512:
6
- metadata.gz: 8eb332a372b879708bedba857c21532665ad9b459b18977180fdc5d5ec0cb0f035968a907adfe70bd6e5688a97d9c321503d97d37e87cbf77b04168d1e071c1d
7
- data.tar.gz: 98d0a07c70c4dca7c63cc96fb473a0079eee449d045b3543b55b90da3f1700c564d0f2ab7ccd909f63fefff7956680fd862710fabe2ccb0e9969b424b943216d
6
+ metadata.gz: ae462c69bb5933c60f6254c4778fcddf4c778776b1d4c64247091bf36837c6899636d0d79a433c99aa5c64d1c4cccfbb9d1d8531a2b3a8418558899f6be61481
7
+ data.tar.gz: 844dd51ef4fef218ab42a742dbd7717b1a47c18b4cee630ba3da77279832292417a8e4c07486b59f821bc7d28ace0cdfaa917f574b1a35fa52bca7fc17da822f
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012-19 Bozhidar Batsov
1
+ Copyright (c) 2012-20 Bozhidar Batsov
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -41,7 +41,7 @@ automatically fix some of the problems for you.
41
41
  $ gem install rubocop
42
42
  ```
43
43
 
44
- If you'd rather install RuboCop using `bundler`, don't require it in your `Gemfile`:
44
+ If you'd rather install RuboCop using `bundler`, add a line for it in your `Gemfile` (but set the `require` option to `false`, as it is a standalone tool):
45
45
 
46
46
  ```rb
47
47
  gem 'rubocop', require: false
@@ -53,7 +53,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
53
53
  might want to use a conservative version lock in your `Gemfile`:
54
54
 
55
55
  ```rb
56
- gem 'rubocop', '~> 0.79.0', require: false
56
+ gem 'rubocop', '~> 0.80.0', require: false
57
57
  ```
58
58
 
59
59
  ## Quickstart
@@ -213,5 +213,5 @@ RuboCop's changelog is available [here](CHANGELOG.md).
213
213
 
214
214
  ## Copyright
215
215
 
216
- Copyright (c) 2012-2019 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for
216
+ Copyright (c) 2012-2020 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for
217
217
  further details.
@@ -54,6 +54,7 @@ AllCops:
54
54
  - '**/Puppetfile'
55
55
  - '**/Rakefile'
56
56
  - '**/Snapfile'
57
+ - '**/Steepfile'
57
58
  - '**/Thorfile'
58
59
  - '**/Vagabondfile'
59
60
  - '**/Vagrantfile'
@@ -794,6 +795,7 @@ Layout/LeadingCommentSpace:
794
795
  VersionAdded: '0.49'
795
796
  VersionChanged: '0.73'
796
797
  AllowDoxygenCommentStyle: false
798
+ AllowGemfileRubyComment: false
797
799
 
798
800
  Layout/LeadingEmptyLines:
799
801
  Description: Check for unnecessary blank lines at the beginning of a file.
@@ -1782,6 +1784,8 @@ Lint/UselessSetterCall:
1782
1784
  Description: 'Checks for useless setter call to a local variable.'
1783
1785
  Enabled: true
1784
1786
  VersionAdded: '0.13'
1787
+ VersionChanged: '0.80'
1788
+ Safe: false
1785
1789
 
1786
1790
  Lint/Void:
1787
1791
  Description: 'Possible use of operator/literal/variable in void context.'
@@ -1883,7 +1887,7 @@ Migration/DepartmentName:
1883
1887
  Description: >-
1884
1888
  Check that cop names in rubocop:disable (etc) comments are
1885
1889
  given with department name.
1886
- Enabled: false
1890
+ Enabled: true
1887
1891
 
1888
1892
  #################### Naming ##############################
1889
1893
 
@@ -2065,6 +2069,7 @@ Naming/MethodParameterName:
2065
2069
  - ip
2066
2070
  - db
2067
2071
  - os
2072
+ - pp
2068
2073
  # Forbidden names that will register an offense
2069
2074
  ForbiddenNames: []
2070
2075
 
@@ -2355,24 +2360,12 @@ Style/BlockDelimiters:
2355
2360
  # # also good
2356
2361
  # collection.each do |element| puts element end
2357
2362
  AllowBracesOnProceduralOneLiners: false
2358
-
2359
- Style/BracesAroundHashParameters:
2360
- Description: 'Enforce braces style around hash parameters.'
2361
- Enabled: true
2362
- VersionAdded: '0.14.1'
2363
- VersionChanged: '0.28'
2364
- EnforcedStyle: no_braces
2365
- SupportedStyles:
2366
- # The `braces` style enforces braces around all method parameters that are
2367
- # hashes.
2368
- - braces
2369
- # The `no_braces` style checks that the last parameter doesn't have braces
2370
- # around it.
2371
- - no_braces
2372
- # The `context_dependent` style checks that the last parameter doesn't have
2373
- # braces around it, but requires braces if the second to last parameter is
2374
- # also a hash literal.
2375
- - context_dependent
2363
+ # The BracesRequiredMethods overrides all other configurations except
2364
+ # IgnoredMethods. It can be used to enforce that all blocks for specific
2365
+ # methods use braces. For example, you can use this to enforce Sorbet
2366
+ # signatures use braces even when the rest of your codebase enforces
2367
+ # the `line_count_based` style.
2368
+ BracesRequiredMethods: []
2376
2369
 
2377
2370
  Style/CaseEquality:
2378
2371
  Description: 'Avoid explicit use of the case equality operator(===).'
@@ -2766,6 +2759,10 @@ Style/FrozenStringLiteralComment:
2766
2759
  # string literal. If you run code against multiple versions of Ruby, it is
2767
2760
  # possible that this will create errors in Ruby 2.3.0+.
2768
2761
  - always
2762
+ # `always_true` will add the frozen string literal comment to a file,
2763
+ # similarly to the `always` style, but will also change any disabled
2764
+ # comments (e.g. `# frozen_string_literal: false`) to be enabled.
2765
+ - always_true
2769
2766
  # `never` will enforce that the frozen string literal comment does not
2770
2767
  # exist in a file.
2771
2768
  - never
@@ -2790,6 +2787,13 @@ Style/GuardClause:
2790
2787
  # needs to have to trigger this cop
2791
2788
  MinBodyLength: 1
2792
2789
 
2790
+ Style/HashEachMethods:
2791
+ Description: 'Use Hash#each_key and Hash#each_value.'
2792
+ StyleGuide: '#hash-each'
2793
+ Enabled: pending
2794
+ VersionAdded: '0.80'
2795
+ Safe: false
2796
+
2793
2797
  Style/HashSyntax:
2794
2798
  Description: >-
2795
2799
  Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
@@ -2813,6 +2817,16 @@ Style/HashSyntax:
2813
2817
  # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style
2814
2818
  PreferHashRocketsForNonAlnumEndingSymbols: false
2815
2819
 
2820
+ Style/HashTransformKeys:
2821
+ Description: 'Prefer `transform_keys` over `each_with_object` and `map`.'
2822
+ Enabled: 'pending'
2823
+ Safe: false
2824
+
2825
+ Style/HashTransformValues:
2826
+ Description: 'Prefer `transform_values` over `each_with_object` and `map`.'
2827
+ Enabled: 'pending'
2828
+ Safe: false
2829
+
2816
2830
  Style/IdenticalConditionalBranches:
2817
2831
  Description: >-
2818
2832
  Checks that conditional statements do not have an identical
@@ -120,6 +120,7 @@ require_relative 'rubocop/cop/mixin/enforce_superclass'
120
120
  require_relative 'rubocop/cop/mixin/first_element_line_break'
121
121
  require_relative 'rubocop/cop/mixin/frozen_string_literal'
122
122
  require_relative 'rubocop/cop/mixin/hash_alignment_styles'
123
+ require_relative 'rubocop/cop/mixin/hash_transform_method'
123
124
  require_relative 'rubocop/cop/mixin/ignored_pattern'
124
125
  require_relative 'rubocop/cop/mixin/ignored_methods'
125
126
  require_relative 'rubocop/cop/mixin/integer_node'
@@ -402,7 +403,6 @@ require_relative 'rubocop/cop/style/bare_percent_literals'
402
403
  require_relative 'rubocop/cop/style/begin_block'
403
404
  require_relative 'rubocop/cop/style/block_comments'
404
405
  require_relative 'rubocop/cop/style/block_delimiters'
405
- require_relative 'rubocop/cop/style/braces_around_hash_parameters'
406
406
  require_relative 'rubocop/cop/style/case_equality'
407
407
  require_relative 'rubocop/cop/style/character_literal'
408
408
  require_relative 'rubocop/cop/style/class_and_module_children'
@@ -445,7 +445,10 @@ require_relative 'rubocop/cop/style/format_string_token'
445
445
  require_relative 'rubocop/cop/style/frozen_string_literal_comment'
446
446
  require_relative 'rubocop/cop/style/global_vars'
447
447
  require_relative 'rubocop/cop/style/guard_clause'
448
+ require_relative 'rubocop/cop/style/hash_each_methods'
448
449
  require_relative 'rubocop/cop/style/hash_syntax'
450
+ require_relative 'rubocop/cop/style/hash_transform_keys'
451
+ require_relative 'rubocop/cop/style/hash_transform_values'
449
452
  require_relative 'rubocop/cop/style/identical_conditional_branches'
450
453
  require_relative 'rubocop/cop/style/if_inside_else'
451
454
  require_relative 'rubocop/cop/style/if_unless_modifier'
@@ -585,6 +588,7 @@ require_relative 'rubocop/formatter/file_list_formatter'
585
588
  require_relative 'rubocop/formatter/fuubar_style_formatter'
586
589
  require_relative 'rubocop/formatter/html_formatter'
587
590
  require_relative 'rubocop/formatter/json_formatter'
591
+ require_relative 'rubocop/formatter/junit_formatter'
588
592
  require_relative 'rubocop/formatter/offense_count_formatter'
589
593
  require_relative 'rubocop/formatter/progress_formatter'
590
594
  require_relative 'rubocop/formatter/quiet_formatter'
@@ -141,9 +141,6 @@ module RuboCop
141
141
  # Yield only nodes matching any of the types.
142
142
  # @param [Symbol] type_a a node type
143
143
  # @param [Symbol] type_b a node type
144
- # @overload each_ancestor(types)
145
- # Yield only nodes matching any of types in the array.
146
- # @param [Array<Symbol>] types an array containing node types
147
144
  # @yieldparam [Node] node each ancestor node
148
145
  # @return [self] if a block is given
149
146
  # @return [Enumerator] if no block is given
@@ -178,9 +175,6 @@ module RuboCop
178
175
  # Yield only nodes matching any of the types.
179
176
  # @param [Symbol] type_a a node type
180
177
  # @param [Symbol] type_b a node type
181
- # @overload each_child_node(types)
182
- # Yield only nodes matching any of types in the array.
183
- # @param [Array<Symbol>] types an array containing node types
184
178
  # @yieldparam [Node] node each child node
185
179
  # @return [self] if a block is given
186
180
  # @return [Enumerator] if no block is given
@@ -216,9 +210,6 @@ module RuboCop
216
210
  # Yield only nodes matching any of the types.
217
211
  # @param [Symbol] type_a a node type
218
212
  # @param [Symbol] type_b a node type
219
- # @overload each_descendant(types)
220
- # Yield only nodes matching any of types in the array.
221
- # @param [Array<Symbol>] types an array containing node types
222
213
  # @yieldparam [Node] node each descendant node
223
214
  # @return [self] if a block is given
224
215
  # @return [Enumerator] if no block is given
@@ -254,9 +245,6 @@ module RuboCop
254
245
  # Yield only nodes matching any of the types.
255
246
  # @param [Symbol] type_a a node type
256
247
  # @param [Symbol] type_b a node type
257
- # @overload each_node(types)
258
- # Yield only nodes matching any of types in the array.
259
- # @param [Array<Symbol>] types an array containing node types
260
248
  # @yieldparam [Node] node each node
261
249
  # @return [self] if a block is given
262
250
  # @return [Enumerator] if no block is given
@@ -21,14 +21,12 @@ module RuboCop
21
21
 
22
22
  # @return [RuboCop::AST::Node] a regopt node
23
23
  def regopt
24
- first, second = *self
25
- first.regopt_type? ? first : second
24
+ children.last
26
25
  end
27
26
 
28
27
  # @return [String] a string of regexp content
29
28
  def content
30
- str = children.first
31
- str.str_content || ''
29
+ children.select(&:str_type?).map(&:str_content).join
32
30
  end
33
31
  end
34
32
  end
@@ -185,6 +185,15 @@ module RuboCop
185
185
  alias on_when on_case
186
186
  alias on_irange on_case
187
187
  alias on_erange on_case
188
+
189
+ def on_numblock(node)
190
+ children = node.children
191
+ child = children[0]
192
+ send(:"on_#{child.type}", child)
193
+ return unless (child = children[2])
194
+
195
+ send(:"on_#{child.type}", child)
196
+ end
188
197
  end
189
198
  end
190
199
  end
@@ -113,7 +113,8 @@ module RuboCop
113
113
  def each_mentioned_cop
114
114
  each_directive do |comment, cop_names, disabled|
115
115
  comment_line_number = comment.loc.expression.line
116
- single_line = !comment_only_line?(comment_line_number)
116
+ single_line = !comment_only_line?(comment_line_number) ||
117
+ directive_on_comment_line?(comment)
117
118
 
118
119
  cop_names.each do |cop_name|
119
120
  yield qualified_cop_name(cop_name), disabled, comment_line_number,
@@ -122,6 +123,10 @@ module RuboCop
122
123
  end
123
124
  end
124
125
 
126
+ def directive_on_comment_line?(comment)
127
+ comment.text[1..-1].match(COMMENT_DIRECTIVE_REGEXP)
128
+ end
129
+
125
130
  def each_directive
126
131
  return if processed_source.comments.nil?
127
132
 
@@ -69,7 +69,8 @@ module RuboCop
69
69
  'Style/TrailingCommaInHashLiteral',
70
70
  'Style/TrailingCommaInLiteral' => 'Style/TrailingCommaInArrayLiteral ' \
71
71
  'and/or ' \
72
- 'Style/TrailingCommaInHashLiteral'
72
+ 'Style/TrailingCommaInHashLiteral',
73
+ 'Style/BracesAroundHashParameters' => nil
73
74
  }.map do |old_name, other_cops|
74
75
  if other_cops
75
76
  more = ". Please use #{other_cops} instead".gsub(%r{[A-Z]\w+/\w+},
@@ -56,7 +56,8 @@ module RuboCop
56
56
  return if nodes.all?(&:single_line?) &&
57
57
  cop_config['AllowAdjacentOneLineDefs']
58
58
 
59
- add_offense(nodes.last, location: :keyword)
59
+ location = nodes.last.loc.keyword.join(nodes.last.loc.name)
60
+ add_offense(nodes.last, location: location)
60
61
  end
61
62
 
62
63
  def autocorrect(node)
@@ -35,6 +35,20 @@ module RuboCop
35
35
  # # Another line of comment
36
36
  # #*
37
37
  #
38
+ # @example AllowGemfileRubyComment: false (default)
39
+ #
40
+ # # bad
41
+ #
42
+ # #ruby=2.7.0
43
+ # #ruby-gemset=myproject
44
+ #
45
+ # @example AllowGemfileRubyComment: true
46
+ #
47
+ # # good
48
+ #
49
+ # #ruby=2.7.0
50
+ # #ruby-gemset=myproject
51
+ #
38
52
  class LeadingCommentSpace < Cop
39
53
  include RangeHelp
40
54
 
@@ -44,7 +58,8 @@ module RuboCop
44
58
  processed_source.each_comment do |comment|
45
59
  next unless comment.text =~ /\A#+[^#\s=:+-]/
46
60
  next if comment.loc.line == 1 && allowed_on_first_line?(comment)
47
- next if allow_doxygen_comment? && doxygen_comment_style?(comment)
61
+ next if doxygen_comment_style?(comment)
62
+ next if gemfile_ruby_comment?(comment)
48
63
 
49
64
  add_offense(comment)
50
65
  end
@@ -80,7 +95,23 @@ module RuboCop
80
95
  end
81
96
 
82
97
  def doxygen_comment_style?(comment)
83
- comment.text.start_with?('#*')
98
+ allow_doxygen_comment? && comment.text.start_with?('#*')
99
+ end
100
+
101
+ def allow_gemfile_ruby_comment?
102
+ cop_config['AllowGemfileRubyComment']
103
+ end
104
+
105
+ def gemfile?
106
+ File.basename(processed_source.file_path).eql?('Gemfile')
107
+ end
108
+
109
+ def ruby_comment_in_gemfile?(comment)
110
+ gemfile? && comment.text.start_with?('#ruby')
111
+ end
112
+
113
+ def gemfile_ruby_comment?(comment)
114
+ allow_gemfile_ruby_comment? && ruby_comment_in_gemfile?(comment)
84
115
  end
85
116
  end
86
117
  end
@@ -19,19 +19,25 @@ module RuboCop
19
19
  #
20
20
  # If autocorrection is enabled, the following Layout cops
21
21
  # are recommended to further format the broken lines.
22
+ # (Many of these are enabled by default.)
22
23
  #
23
- # - ParameterAlignment
24
24
  # - ArgumentAlignment
25
+ # - BlockAlignment
26
+ # - BlockDelimiters
27
+ # - BlockEndNewline
25
28
  # - ClosingParenthesisIndentation
26
29
  # - FirstArgumentIndentation
27
30
  # - FirstArrayElementIndentation
28
31
  # - FirstHashElementIndentation
29
32
  # - FirstParameterIndentation
30
33
  # - HashAlignment
34
+ # - IndentationWidth
31
35
  # - MultilineArrayLineBreaks
36
+ # - MultilineBlockLayout
32
37
  # - MultilineHashBraceLayout
33
38
  # - MultilineHashKeyLineBreaks
34
39
  # - MultilineMethodArgumentLineBreaks
40
+ # - ParameterAlignment
35
41
  #
36
42
  # Together, these cops will pretty print hashes, arrays,
37
43
  # method calls, etc. For example, let's say the max columns
@@ -61,6 +67,10 @@ module RuboCop
61
67
 
62
68
  MSG = 'Line is too long. [%<length>d/%<max>d]'
63
69
 
70
+ def on_block(node)
71
+ check_for_breakable_block(node)
72
+ end
73
+
64
74
  def on_potential_breakable_node(node)
65
75
  check_for_breakable_node(node)
66
76
  end
@@ -109,6 +119,25 @@ module RuboCop
109
119
  end
110
120
  end
111
121
 
122
+ def check_for_breakable_block(block_node)
123
+ return unless block_node.single_line?
124
+
125
+ line_index = block_node.loc.line - 1
126
+ range = breakable_block_range(block_node)
127
+ pos = range.begin_pos + 1
128
+
129
+ breakable_range_by_line_index[line_index] =
130
+ range_between(pos, pos + 1)
131
+ end
132
+
133
+ def breakable_block_range(block_node)
134
+ if block_node.arguments?
135
+ block_node.arguments.loc.end
136
+ else
137
+ block_node.loc.begin
138
+ end
139
+ end
140
+
112
141
  def breakable_range_after_semicolon(semicolon_token)
113
142
  range = semicolon_token.pos
114
143
  end_pos = range.end_pos
@@ -105,10 +105,6 @@ module RuboCop
105
105
  ALWAYS_SAME_LINE_MESSAGE = 'Closing hash brace must be on the same ' \
106
106
  'line as the last hash element.'
107
107
 
108
- def self.autocorrect_incompatible_with
109
- [Style::BracesAroundHashParameters]
110
- end
111
-
112
108
  def on_hash(node)
113
109
  check_brace_layout(node)
114
110
  end
@@ -6,6 +6,10 @@ module RuboCop
6
6
  # Checks that operators have space around them, except for ** which
7
7
  # should or shouldn't have surrounding space depending on configuration.
8
8
  #
9
+ # This cop has `AllowForAlignment` option. When `true`, allows most
10
+ # uses of extra spacing if the intent is to align with an operator on
11
+ # the previous or next line, not counting empty lines or comment lines.
12
+ #
9
13
  # @example
10
14
  # # bad
11
15
  # total = 3*4
@@ -17,6 +21,20 @@ module RuboCop
17
21
  # "apple" + "juice"
18
22
  # my_number = 38 / 4
19
23
  #
24
+ # @example AllowForAlignment: true (default)
25
+ # # good
26
+ # {
27
+ # 1 => 2,
28
+ # 11 => 3
29
+ # }
30
+ #
31
+ # @example AllowForAlignment: false
32
+ # # bad
33
+ # {
34
+ # 1 => 2,
35
+ # 11 => 3
36
+ # }
37
+ #
20
38
  # @example EnforcedStyleForExponentOperator: no_space (default)
21
39
  # # bad
22
40
  # a ** b