rubycritic 1.1.1 → 1.2.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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +593 -0
  3. data/.travis.yml +1 -1
  4. data/CHANGELOG.md +7 -0
  5. data/CONTRIBUTING.md +17 -15
  6. data/README.md +15 -4
  7. data/Rakefile +9 -6
  8. data/bin/rubycritic +2 -2
  9. data/lib/rubycritic.rb +21 -1
  10. data/lib/rubycritic/analysers/churn.rb +4 -2
  11. data/lib/rubycritic/analysers/helpers/ast_node.rb +4 -8
  12. data/lib/rubycritic/analysers/helpers/methods_counter.rb +2 -5
  13. data/lib/rubycritic/analysers/helpers/modules_locator.rb +2 -5
  14. data/lib/rubycritic/analysers/helpers/parser.rb +12 -0
  15. data/lib/rubycritic/analysers/helpers/reek.rb +6 -2
  16. data/lib/rubycritic/analysers/smells/reek.rb +1 -1
  17. data/lib/rubycritic/analysers_runner.rb +13 -7
  18. data/lib/rubycritic/cli/application.rb +24 -0
  19. data/lib/rubycritic/cli/options.rb +57 -0
  20. data/lib/rubycritic/commands/ci.rb +28 -0
  21. data/lib/rubycritic/commands/default.rb +30 -0
  22. data/lib/rubycritic/commands/help.rb +13 -0
  23. data/lib/rubycritic/commands/version.rb +11 -0
  24. data/lib/rubycritic/configuration.rb +19 -14
  25. data/lib/rubycritic/core/analysed_module.rb +1 -1
  26. data/lib/rubycritic/core/smell.rb +1 -1
  27. data/lib/rubycritic/report_generators/base.rb +1 -1
  28. data/lib/rubycritic/report_generators/line.rb +1 -1
  29. data/lib/rubycritic/report_generators/smells_index.rb +1 -0
  30. data/lib/rubycritic/report_generators/templates/code_file.html.erb +1 -1
  31. data/lib/rubycritic/report_generators/templates/smells_index.html.erb +6 -2
  32. data/lib/rubycritic/report_generators/templates/smelly_line.html.erb +1 -1
  33. data/lib/rubycritic/report_generators/view_helpers.rb +4 -4
  34. data/lib/rubycritic/reporters/base.rb +1 -1
  35. data/lib/rubycritic/revision_comparator.rb +14 -14
  36. data/lib/rubycritic/source_control_systems/base.rb +9 -32
  37. data/lib/rubycritic/source_control_systems/double.rb +6 -7
  38. data/lib/rubycritic/source_control_systems/git.rb +10 -16
  39. data/lib/rubycritic/source_control_systems/mercurial.rb +29 -0
  40. data/lib/rubycritic/source_locator.rb +4 -5
  41. data/lib/rubycritic/version.rb +1 -1
  42. data/rubycritic.gemspec +4 -3
  43. data/test/lib/rubycritic/analysers/churn_test.rb +5 -5
  44. data/test/lib/rubycritic/analysers/smells/flay_test.rb +1 -1
  45. data/test/lib/rubycritic/configuration_test.rb +8 -7
  46. data/test/lib/rubycritic/core/analysed_module_test.rb +2 -2
  47. data/test/lib/rubycritic/core/smell_test.rb +2 -2
  48. data/test/lib/rubycritic/source_control_systems/{source_control_system_test.rb → base_test.rb} +1 -1
  49. data/test/lib/rubycritic/source_control_systems/double_test.rb +11 -0
  50. data/test/lib/rubycritic/source_control_systems/git_test.rb +13 -0
  51. data/test/lib/rubycritic/source_control_systems/interfaces/basic.rb +7 -0
  52. data/test/lib/rubycritic/source_control_systems/interfaces/time_travel.rb +7 -0
  53. data/test/lib/rubycritic/source_control_systems/mercurial_test.rb +11 -0
  54. data/test/lib/rubycritic/source_locator_test.rb +8 -2
  55. data/test/test_helper.rb +29 -0
  56. metadata +49 -13
  57. data/lib/rubycritic/cli.rb +0 -46
  58. data/lib/rubycritic/modules_initializer.rb +0 -14
  59. data/lib/rubycritic/orchestrator.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 03a9d4fd43e882a330e86f72532d6c656db379d7
4
- data.tar.gz: 7d3a194907c98214a334b2771f3448e617849661
3
+ metadata.gz: e86148ed6e8dc3e9649695c90784be4cc5dc95ec
4
+ data.tar.gz: 201c5008a2b0e0b7db1dbe7f18a59ecf4187f19e
5
5
  SHA512:
6
- metadata.gz: f0a6c2e7577dab3978c17f1a97cfc294fcce09198a3c5ce1e2ad87f89fbc0dd1942eef2211016eef26644c615defcac9d86614e23282fc1b9896d229ca634e5b
7
- data.tar.gz: fc770f5bff15c880d19012bad99abc310b3628d67fc8a29e59ab441257a36125016711b68d193c29d4901ed440b1c45352a2712c1fb7742d45ad95335f0d5312
6
+ metadata.gz: eb0f3a23a9d8080fb6d2b7c46a15e1752957058c81af4f5e15618f15cdf415048b9a8554f776729aa811b865daa2b7d42765bd34c6f6af2adcfeb0c03f44b988
7
+ data.tar.gz: 0f6af7917e75941cd405fc5b311345bf2464894e4e8acbe4573a20d9cf076958e1483d1763f8dacdf9b25ba9b5db2dcc932f014e7754b8fb1f1d34356763ac22
@@ -0,0 +1,593 @@
1
+ AllCops:
2
+ Include:
3
+ - '**/*.gemspec'
4
+ - '**/*.rake'
5
+ - '**/Gemfile'
6
+ - '**/Rakefile'
7
+ Exclude:
8
+ - 'test/samples/**/*'
9
+ # By default, the rails cops are not run. Override in project or home
10
+ # directory .rubocop.yml files, or by giving the -R/--rails option.
11
+ RunRailsCops: false
12
+
13
+ Style/AccessorMethodName:
14
+ Enabled: false
15
+
16
+ # Indent private/protected/public as deep as method definitions
17
+ Style/AccessModifierIndentation:
18
+ EnforcedStyle: indent
19
+ SupportedStyles:
20
+ - outdent
21
+ - indent
22
+
23
+ # Align the elements of a hash literal if they span more than one line.
24
+ Style/AlignHash:
25
+ # Alignment of entries using hash rocket as separator. Valid values are:
26
+ #
27
+ # key - left alignment of keys
28
+ # 'a' => 2
29
+ # 'bb' => 3
30
+ # separator - alignment of hash rockets, keys are right aligned
31
+ # 'a' => 2
32
+ # 'bb' => 3
33
+ # table - left alignment of keys, hash rockets, and values
34
+ # 'a' => 2
35
+ # 'bb' => 3
36
+ EnforcedHashRocketStyle: key
37
+ # Alignment of entries using colon as separator. Valid values are:
38
+ #
39
+ # key - left alignment of keys
40
+ # a: 0
41
+ # bb: 1
42
+ # separator - alignment of colons, keys are right aligned
43
+ # a: 0
44
+ # bb: 1
45
+ # table - left alignment of keys and values
46
+ # a: 0
47
+ # bb: 1
48
+ EnforcedColonStyle: key
49
+ # Select whether hashes that are the last argument in a method call should be
50
+ # inspected? Valid values are:
51
+ #
52
+ # always_inspect - Inspect both implicit and explicit hashes.
53
+ # Registers an offense for:
54
+ # function(a: 1,
55
+ # b: 2)
56
+ # Registers an offense for:
57
+ # function({a: 1,
58
+ # b: 2})
59
+ # always_ignore - Ignore both implicit and explicit hashes.
60
+ # Accepts:
61
+ # function(a: 1,
62
+ # b: 2)
63
+ # Accepts:
64
+ # function({a: 1,
65
+ # b: 2})
66
+ # ignore_implicit - Ignore only implicit hashes.
67
+ # Accepts:
68
+ # function(a: 1,
69
+ # b: 2)
70
+ # Registers an offense for:
71
+ # function({a: 1,
72
+ # b: 2})
73
+ # ignore_explicit - Ignore only explicit hashes.
74
+ # Accepts:
75
+ # function({a: 1,
76
+ # b: 2})
77
+ # Registers an offense for:
78
+ # function(a: 1,
79
+ # b: 2)
80
+ EnforcedLastArgumentHashStyle: always_inspect
81
+ SupportedLastArgumentHashStyles:
82
+ - always_inspect
83
+ - always_ignore
84
+ - ignore_implicit
85
+ - ignore_explicit
86
+
87
+ Style/AlignParameters:
88
+ # Alignment of parameters in multi-line method calls.
89
+ #
90
+ # The `with_first_parameter` style aligns the following lines along the same
91
+ # column as the first parameter.
92
+ #
93
+ # method_call(a,
94
+ # b)
95
+ #
96
+ # The `with_fixed_indentation` style aligns the following lines with one
97
+ # level of indentation relative to the start of the line with the method call.
98
+ #
99
+ # method_call(a,
100
+ # b)
101
+ EnforcedStyle: with_first_parameter
102
+ SupportedStyles:
103
+ - with_first_parameter
104
+ - with_fixed_indentation
105
+ # My prefered method is not available:
106
+ # method_call(
107
+ # a,
108
+ # b
109
+ # )
110
+ Enabled: false
111
+
112
+ Style/AndOr:
113
+ # Whether `and` and `or` are banned only in conditionals (conditionals)
114
+ # or completely (always).
115
+ EnforcedStyle: always
116
+ SupportedStyles:
117
+ - always
118
+ - conditionals
119
+
120
+
121
+ # Checks if usage of %() or %Q() matches configuration.
122
+ Style/BarePercentLiterals:
123
+ EnforcedStyle: bare_percent
124
+ SupportedStyles:
125
+ - percent_q
126
+ - bare_percent
127
+
128
+ Style/BracesAroundHashParameters:
129
+ EnforcedStyle: no_braces
130
+ SupportedStyles:
131
+ # The `braces` style enforces braces around all method parameters that are
132
+ # hashes.
133
+ - braces
134
+ # The `no_braces` style checks that the last parameter doesn't have braces
135
+ # around it.
136
+ - no_braces
137
+ # The `context_dependent` style checks that the last parameter doesn't have
138
+ # braces around it, but requires braces if the second to last parameter is
139
+ # also a hash literal.
140
+ - context_dependent
141
+
142
+ # Indentation of `when`.
143
+ Style/CaseIndentation:
144
+ IndentWhenRelativeTo: case
145
+ SupportedStyles:
146
+ - case
147
+ - end
148
+ IndentOneStep: false
149
+
150
+ Style/ClassAndModuleChildren:
151
+ # Checks the style of children definitions at classes and modules.
152
+ #
153
+ # Basically there are two different styles:
154
+ #
155
+ # `nested` - have each child on a separate line
156
+ # class Foo
157
+ # class Bar
158
+ # end
159
+ # end
160
+ #
161
+ # `compact` - combine definitions as much as possible
162
+ # class Foo::Bar
163
+ # end
164
+ #
165
+ # The compact style is only forced, for classes / modules with one child.
166
+ EnforcedStyle: nested
167
+ SupportedStyles:
168
+ - nested
169
+ - compact
170
+
171
+ Style/ClassCheck:
172
+ EnforcedStyle: is_a?
173
+ SupportedStyles:
174
+ - is_a?
175
+ - kind_of?
176
+
177
+ Style/ClassVars:
178
+ Enabled: false
179
+
180
+ # Align with the style guide.
181
+ Style/CollectionMethods:
182
+ # Mapping from undesired method to desired_method
183
+ # e.g. to use `detect` over `find`:
184
+ #
185
+ # CollectionMethods:
186
+ # PreferredMethods:
187
+ # find: detect
188
+ PreferredMethods:
189
+ collect: 'map'
190
+ collect!: 'map!'
191
+ inject: 'reduce'
192
+ detect: 'find'
193
+ find_all: 'select'
194
+
195
+ # Checks formatting of special comments
196
+ Style/CommentAnnotation:
197
+ Keywords:
198
+ - TODO
199
+ - FIXME
200
+ - OPTIMIZE
201
+ - HACK
202
+ - REVIEW
203
+
204
+ Style/Documentation:
205
+ Enabled: false
206
+
207
+ # Multi-line method chaining should be done with leading dots.
208
+ Style/DotPosition:
209
+ EnforcedStyle: leading
210
+ SupportedStyles:
211
+ - leading
212
+ - trailing
213
+
214
+ # Use empty lines between defs.
215
+ Style/EmptyLineBetweenDefs:
216
+ # If true, this parameter means that single line method definitions don't
217
+ # need an empty line between them.
218
+ AllowAdjacentOneLineDefs: false
219
+
220
+ Style/EmptyLinesAroundBlockBody:
221
+ EnforcedStyle: no_empty_lines
222
+ SupportedStyles:
223
+ - empty_lines
224
+ - no_empty_lines
225
+
226
+ Style/EmptyLinesAroundClassBody:
227
+ Enabled: false
228
+ EnforcedStyle: no_empty_lines
229
+ SupportedStyles:
230
+ - empty_lines
231
+ - no_empty_lines
232
+
233
+ Style/EmptyLinesAroundModuleBody:
234
+ Enabled: false
235
+ EnforcedStyle: no_empty_lines
236
+ SupportedStyles:
237
+ - empty_lines
238
+ - no_empty_lines
239
+
240
+ # Checks whether the source file has a utf-8 encoding comment or not
241
+ Style/Encoding:
242
+ EnforcedStyle: when_needed
243
+ SupportedStyles:
244
+ - when_needed
245
+ - always
246
+
247
+ Style/FileName:
248
+ # File names listed in AllCops:Include are excluded by default. Add extra
249
+ # excludes here.
250
+ Exclude: []
251
+
252
+ # Checks use of for or each in multiline loops.
253
+ Style/For:
254
+ EnforcedStyle: each
255
+ SupportedStyles:
256
+ - for
257
+ - each
258
+
259
+ # Enforce the method used for string formatting.
260
+ Style/FormatString:
261
+ EnforcedStyle: format
262
+ SupportedStyles:
263
+ - format
264
+ - sprintf
265
+ - percent
266
+
267
+ # Built-in global variables are allowed by default.
268
+ Style/GlobalVars:
269
+ AllowedVariables: []
270
+
271
+ # `MinBodyLength` defines the number of lines of the a body of an if / unless
272
+ # needs to have to trigger this cop
273
+ Style/GuardClause:
274
+ MinBodyLength: 1
275
+
276
+ Style/HashSyntax:
277
+ EnforcedStyle: hash_rockets
278
+ SupportedStyles:
279
+ - ruby19
280
+ - hash_rockets
281
+
282
+ Style/IfUnlessModifier:
283
+ MaxLineLength: 80
284
+
285
+ Style/IndentationWidth:
286
+ # Number of spaces for each indentation level.
287
+ Width: 2
288
+
289
+ # Checks the indentation of the first key in a hash literal.
290
+ Style/IndentHash:
291
+ # The value `special_inside_parentheses` means that hash literals with braces
292
+ # that have their opening brace on the same line as a surrounding opening
293
+ # round parenthesis, shall have their first key indented relative to the
294
+ # first position inside the parenthesis.
295
+ # The value `consistent` means that the indentation of the first key shall
296
+ # always be relative to the first position of the line where the opening
297
+ # brace is.
298
+ EnforcedStyle: special_inside_parentheses
299
+ SupportedStyles:
300
+ - special_inside_parentheses
301
+ - consistent
302
+
303
+ Style/LambdaCall:
304
+ EnforcedStyle: call
305
+ SupportedStyles:
306
+ - call
307
+ - braces
308
+
309
+ Style/Next:
310
+ # With `always` all conditions at the end of an iteration needs to be
311
+ # replaced by next - with `skip_modifier_ifs` the modifier if like this one
312
+ # are ignored: [1, 2].each { |a| return 'yes' if a == 1 }
313
+ EnforcedStyle: skip_modifier_ifs
314
+ # `MinBodyLength` defines the number of lines of the a body of an if / unless
315
+ # needs to have to trigger this cop
316
+ MinBodyLength: 3
317
+ SupportedStyles:
318
+ - skip_modifier_ifs
319
+ - always
320
+
321
+ Style/NonNilCheck:
322
+ # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
323
+ # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
324
+ # **usually** OK, but might change behavior.
325
+ #
326
+ # With `IncludeSemanticChanges` set to `false`, this cop does not report
327
+ # offenses for `!x.nil?` and does no changes that might change behavior.
328
+ IncludeSemanticChanges: false
329
+
330
+ Style/MethodDefParentheses:
331
+ EnforcedStyle: require_parentheses
332
+ SupportedStyles:
333
+ - require_parentheses
334
+ - require_no_parentheses
335
+
336
+ Style/MethodName:
337
+ EnforcedStyle: snake_case
338
+ SupportedStyles:
339
+ - snake_case
340
+ - camelCase
341
+
342
+ Style/MultilineOperationIndentation:
343
+ EnforcedStyle: indented
344
+ SupportedStyles:
345
+ - aligned
346
+ - indented
347
+
348
+ Style/NumericLiterals:
349
+ MinDigits: 5
350
+
351
+ # Allow safe assignment in conditions.
352
+ Style/ParenthesesAroundCondition:
353
+ AllowSafeAssignment: true
354
+
355
+ Style/PercentLiteralDelimiters:
356
+ PreferredDelimiters:
357
+ '%': ()
358
+ '%i': ()
359
+ '%q': ()
360
+ '%Q': ()
361
+ '%r': '{}'
362
+ '%s': ()
363
+ '%w': ()
364
+ '%W': ()
365
+ '%x': ()
366
+
367
+ Style/PercentQLiterals:
368
+ EnforcedStyle: lower_case_q
369
+ SupportedStyles:
370
+ - lower_case_q # Use %q when possible, %Q when necessary
371
+ - upper_case_q # Always use %Q
372
+
373
+ Style/PredicateName:
374
+ # Predicate name prefices.
375
+ NamePrefix:
376
+ - is_
377
+ - has_
378
+ - have_
379
+ # Predicate name prefices that should be removed.
380
+ NamePrefixBlacklist:
381
+ - is_
382
+ - has_
383
+ - have_
384
+
385
+ Style/RaiseArgs:
386
+ EnforcedStyle: compact
387
+ SupportedStyles:
388
+ - compact # raise Exception.new(msg)
389
+ - exploded # raise Exception, msg
390
+
391
+ Style/RedundantReturn:
392
+ # When true allows code like `return x, y`.
393
+ AllowMultipleReturnValues: false
394
+
395
+ Style/RegexpLiteral:
396
+ # The maximum number of (escaped) slashes that a slash-delimited regexp is
397
+ # allowed to have. If there are more slashes, a %r regexp shall be used.
398
+ MaxSlashes: 1
399
+
400
+ Style/Semicolon:
401
+ # Allow ; to separate several expressions on the same line.
402
+ AllowAsExpressionSeparator: false
403
+
404
+ Style/SignalException:
405
+ Enabled: false
406
+ EnforcedStyle: semantic
407
+ SupportedStyles:
408
+ - only_raise
409
+ - only_fail
410
+ - semantic
411
+
412
+ Style/SingleLineBlockParams:
413
+ Methods:
414
+ - reduce:
415
+ - a
416
+ - e
417
+ - inject:
418
+ - a
419
+ - e
420
+
421
+ Style/SingleLineMethods:
422
+ AllowIfMethodIsEmpty: true
423
+
424
+ Style/StringLiterals:
425
+ EnforcedStyle: double_quotes
426
+ SupportedStyles:
427
+ - single_quotes
428
+ - double_quotes
429
+
430
+ Style/StringLiteralsInInterpolation:
431
+ EnforcedStyle: single_quotes
432
+ SupportedStyles:
433
+ - single_quotes
434
+ - double_quotes
435
+
436
+ Style/SpaceAroundEqualsInParameterDefault:
437
+ EnforcedStyle: space
438
+ SupportedStyles:
439
+ - space
440
+ - no_space
441
+
442
+ Style/SpaceBeforeBlockBraces:
443
+ EnforcedStyle: space
444
+ SupportedStyles:
445
+ - space
446
+ - no_space
447
+
448
+ Style/SpaceInsideBlockBraces:
449
+ EnforcedStyle: space
450
+ SupportedStyles:
451
+ - space
452
+ - no_space
453
+ # Valid values are: space, no_space
454
+ EnforcedStyleForEmptyBraces: no_space
455
+ # Space between { and |. Overrides EnforcedStyle if there is a conflict.
456
+ SpaceBeforeBlockParameters: true
457
+
458
+ Style/SpaceInsideHashLiteralBraces:
459
+ EnforcedStyle: space
460
+ EnforcedStyleForEmptyBraces: no_space
461
+ SupportedStyles:
462
+ - space
463
+ - no_space
464
+
465
+ Style/SymbolProc:
466
+ # A list of method names to be ignored by the check.
467
+ # The names should be fairly unique, otherwise you'll end up ignoring lots of code.
468
+ IgnoredMethods:
469
+ - respond_to
470
+
471
+ Style/SpecialGlobalVars:
472
+ Enabled: false
473
+
474
+ Style/TrailingBlankLines:
475
+ EnforcedStyle: final_newline
476
+ SupportedStyles:
477
+ - final_newline
478
+ - final_blank_line
479
+
480
+ Style/TrailingComma:
481
+ # If EnforcedStyleForMultiline is comma, the cop allows a comma after the
482
+ # last item of a list, but only for lists where each item is on its own line.
483
+ EnforcedStyleForMultiline: no_comma
484
+ SupportedStyles:
485
+ - comma
486
+ - no_comma
487
+
488
+ # TrivialAccessors doesn't require exact name matches and doesn't allow
489
+ # predicated methods by default.
490
+ Style/TrivialAccessors:
491
+ ExactNameMatch: false
492
+ AllowPredicates: false
493
+ # Allows trivial writers that don't end in an equal sign. e.g.
494
+ #
495
+ # def on_exception(action)
496
+ # @on_exception=action
497
+ # end
498
+ # on_exception :restart
499
+ #
500
+ # Commonly used in DSLs
501
+ AllowDSLWriters: false
502
+ Whitelist:
503
+ - to_ary
504
+ - to_a
505
+ - to_c
506
+ - to_enum
507
+ - to_h
508
+ - to_hash
509
+ - to_i
510
+ - to_int
511
+ - to_io
512
+ - to_open
513
+ - to_path
514
+ - to_proc
515
+ - to_r
516
+ - to_regexp
517
+ - to_str
518
+ - to_s
519
+ - to_sym
520
+
521
+ Style/VariableName:
522
+ EnforcedStyle: snake_case
523
+ SupportedStyles:
524
+ - snake_case
525
+ - camelCase
526
+
527
+ Style/WhileUntilModifier:
528
+ Enabled: false
529
+ MaxLineLength: 80
530
+
531
+ Style/WordArray:
532
+ MinSize: 0
533
+ # The regular expression WordRegex decides what is considered a word.
534
+ WordRegex: !ruby/regexp '/\A[\p{Word}]+\z/'
535
+
536
+ ##################### Metrics ##################################
537
+
538
+ Metrics/BlockNesting:
539
+ Max: 2
540
+
541
+ Metrics/ClassLength:
542
+ CountComments: false # count full line comments?
543
+ Max: 100
544
+
545
+ # Avoid complex methods.
546
+ Metrics/CyclomaticComplexity:
547
+ Max: 6
548
+
549
+ Metrics/LineLength:
550
+ Max: 120
551
+ AllowURI: true
552
+ URISchemes:
553
+ - http
554
+ - https
555
+
556
+ Metrics/MethodLength:
557
+ CountComments: false # count full line comments?
558
+ Max: 16
559
+
560
+ Metrics/ParameterLists:
561
+ Max: 5
562
+ CountKeywordArgs: true
563
+
564
+ Metrics/PerceivedComplexity:
565
+ Max: 7
566
+
567
+ ##################### Lint ##################################
568
+
569
+ # Allow safe assignment in conditions.
570
+ Lint/AssignmentInCondition:
571
+ AllowSafeAssignment: true
572
+
573
+ # Align ends correctly.
574
+ Lint/EndAlignment:
575
+ # The value `keyword` means that `end` should be aligned with the matching
576
+ # keyword (if, while, etc.).
577
+ # The value `variable` means that in assignments, `end` should be aligned
578
+ # with the start of the variable on the left hand side of `=`. In all other
579
+ # situations, `end` should still be aligned with the keyword.
580
+ AlignWith: keyword
581
+ SupportedStyles:
582
+ - keyword
583
+ - variable
584
+
585
+ Lint/DefEndAlignment:
586
+ # The value `def` means that `end` should be aligned with the def keyword.
587
+ # The value `start_of_line` means that `end` should be aligned with method
588
+ # calls like `private`, `public`, etc, if present in front of the `def`
589
+ # keyword on the same line.
590
+ AlignWith: start_of_line
591
+ SupportedStyles:
592
+ - start_of_line
593
+ - def