rubocop 1.18.4 → 1.21.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/config/default.yml +65 -13
- data/lib/rubocop/cli.rb +18 -0
- data/lib/rubocop/config_loader.rb +2 -2
- data/lib/rubocop/config_loader_resolver.rb +21 -6
- data/lib/rubocop/cop/base.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_filename.rb +103 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +12 -11
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/require_library_corrector.rb +23 -0
- data/lib/rubocop/cop/documentation.rb +1 -1
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +34 -0
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +71 -0
- data/lib/rubocop/cop/internal_affairs.rb +2 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +2 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +9 -0
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +7 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +0 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +2 -2
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +33 -14
- data/lib/rubocop/cop/layout/line_length.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +3 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +22 -9
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +15 -4
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -0
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +2 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_operators.rb +8 -1
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_parens.rb +5 -5
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +24 -1
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +107 -0
- data/lib/rubocop/cop/lint/ambiguous_range.rb +105 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +5 -2
- data/lib/rubocop/cop/lint/debugger.rb +2 -4
- data/lib/rubocop/cop/lint/duplicate_methods.rb +8 -5
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +67 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +7 -1
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -3
- data/lib/rubocop/cop/lint/useless_times.rb +1 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -1
- data/lib/rubocop/cop/mixin/annotation_comment.rb +57 -34
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +5 -2
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +19 -1
- data/lib/rubocop/cop/mixin/heredoc.rb +7 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +13 -7
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +9 -1
- data/lib/rubocop/cop/mixin/require_library.rb +59 -0
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +0 -3
- data/lib/rubocop/cop/naming/constant_name.rb +1 -1
- data/lib/rubocop/cop/naming/inclusive_language.rb +27 -10
- data/lib/rubocop/cop/style/accessor_grouping.rb +2 -2
- data/lib/rubocop/cop/style/and_or.rb +4 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +0 -3
- data/lib/rubocop/cop/style/block_delimiters.rb +39 -6
- data/lib/rubocop/cop/style/case_equality.rb +6 -9
- data/lib/rubocop/cop/style/collection_methods.rb +2 -1
- data/lib/rubocop/cop/style/comment_annotation.rb +25 -39
- data/lib/rubocop/cop/style/commented_keyword.rb +2 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +19 -5
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +1 -1
- data/lib/rubocop/cop/style/documentation.rb +23 -8
- data/lib/rubocop/cop/style/double_negation.rb +12 -1
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/encoding.rb +26 -15
- data/lib/rubocop/cop/style/explicit_block_argument.rb +46 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +11 -0
- data/lib/rubocop/cop/style/hash_except.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +0 -3
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +30 -5
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +3 -2
- data/lib/rubocop/cop/style/lambda_call.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +6 -6
- data/lib/rubocop/cop/style/method_def_parentheses.rb +10 -1
- data/lib/rubocop/cop/style/missing_else.rb +7 -0
- data/lib/rubocop/cop/style/mutable_constant.rb +68 -6
- data/lib/rubocop/cop/style/negated_if.rb +1 -1
- data/lib/rubocop/cop/style/negated_unless.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +2 -2
- data/lib/rubocop/cop/style/not.rb +2 -2
- data/lib/rubocop/cop/style/parallel_assignment.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +2 -2
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +25 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +2 -3
- data/lib/rubocop/cop/style/redundant_freeze.rb +4 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -3
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +83 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +19 -4
- data/lib/rubocop/cop/style/regexp_literal.rb +3 -3
- data/lib/rubocop/cop/style/return_nil.rb +2 -1
- data/lib/rubocop/cop/style/semicolon.rb +32 -24
- data/lib/rubocop/cop/style/single_line_block_params.rb +3 -1
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +4 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +21 -0
- data/lib/rubocop/cop/style/static_class.rb +1 -2
- data/lib/rubocop/cop/style/string_concatenation.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -0
- data/lib/rubocop/cop/style/symbol_array.rb +3 -3
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +23 -5
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -7
- data/lib/rubocop/cop/util.rb +7 -2
- data/lib/rubocop/magic_comment.rb +44 -15
- data/lib/rubocop/options.rb +1 -1
- data/lib/rubocop/result_cache.rb +1 -1
- data/lib/rubocop/runner.rb +1 -2
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +9 -2
- metadata +14 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd3bb4ebea9d6db387e52e92a0c9ffac3f6215f0b5b9bcd7d555e979c8fb9fa7
|
4
|
+
data.tar.gz: 208d08bf57f092a0857776924cb529db1324ecdf4696476475f51878f803b6ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d32668f49f495948628017c042cbc292d62c4ba93d905635d47ecba7c12e69ff7cbff3999a6cccba62bbc27ff7b51827e1a00f41769c1dd711f342fe10e8519
|
7
|
+
data.tar.gz: 9798e105b8ea95245d153e9e295a95a593e49464f91ac8c508ce0900f7f2ef0e97759a1144044f32acb726e11d3552de1f5de8d2d477151606bfd39090df3260
|
data/README.md
CHANGED
@@ -54,7 +54,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
|
|
54
54
|
in your `Gemfile`:
|
55
55
|
|
56
56
|
```rb
|
57
|
-
gem 'rubocop', '~> 1.
|
57
|
+
gem 'rubocop', '~> 1.21', require: false
|
58
58
|
```
|
59
59
|
|
60
60
|
See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
|
data/config/default.yml
CHANGED
@@ -174,6 +174,20 @@ Bundler/GemComment:
|
|
174
174
|
IgnoredGems: []
|
175
175
|
OnlyFor: []
|
176
176
|
|
177
|
+
Bundler/GemFilename:
|
178
|
+
Description: 'Enforces the filename for managing gems.'
|
179
|
+
Enabled: true
|
180
|
+
VersionAdded: '1.20'
|
181
|
+
EnforcedStyle: 'Gemfile'
|
182
|
+
SupportedStyles:
|
183
|
+
- 'Gemfile'
|
184
|
+
- 'gems.rb'
|
185
|
+
Include:
|
186
|
+
- '**/Gemfile'
|
187
|
+
- '**/gems.rb'
|
188
|
+
- '**/Gemfile.lock'
|
189
|
+
- '**/gems.locked'
|
190
|
+
|
177
191
|
Bundler/GemVersion:
|
178
192
|
Description: 'Requires or forbids specifying gem versions.'
|
179
193
|
Enabled: false
|
@@ -943,7 +957,6 @@ Layout/LineLength:
|
|
943
957
|
Enabled: true
|
944
958
|
VersionAdded: '0.25'
|
945
959
|
VersionChanged: '1.4'
|
946
|
-
AutoCorrect: true
|
947
960
|
Max: 120
|
948
961
|
# To make it possible to copy or click on URIs in the code, we allow lines
|
949
962
|
# containing a URI to be longer than Max.
|
@@ -1434,6 +1447,20 @@ Lint/AmbiguousOperator:
|
|
1434
1447
|
VersionAdded: '0.17'
|
1435
1448
|
VersionChanged: '0.83'
|
1436
1449
|
|
1450
|
+
Lint/AmbiguousOperatorPrecedence:
|
1451
|
+
Description: >-
|
1452
|
+
Checks for expressions containing multiple binary operations with
|
1453
|
+
ambiguous precedence.
|
1454
|
+
Enabled: pending
|
1455
|
+
VersionAdded: '1.21'
|
1456
|
+
|
1457
|
+
Lint/AmbiguousRange:
|
1458
|
+
Description: Checks for ranges with ambiguous boundaries.
|
1459
|
+
Enabled: pending
|
1460
|
+
VersionAdded: '1.19'
|
1461
|
+
SafeAutoCorrect: false
|
1462
|
+
RequireParenthesesForMethodChains: false
|
1463
|
+
|
1437
1464
|
Lint/AmbiguousRegexpLiteral:
|
1438
1465
|
Description: >-
|
1439
1466
|
Checks for ambiguous regexp literals in the first argument of
|
@@ -1512,6 +1539,11 @@ Lint/Debugger:
|
|
1512
1539
|
Capybara:
|
1513
1540
|
- save_and_open_page
|
1514
1541
|
- save_and_open_screenshot
|
1542
|
+
debug.rb:
|
1543
|
+
- binding.b
|
1544
|
+
- binding.break
|
1545
|
+
- Kernel.binding.b
|
1546
|
+
- Kernel.binding.break
|
1515
1547
|
Pry:
|
1516
1548
|
- binding.pry
|
1517
1549
|
- binding.remote_pry
|
@@ -1520,6 +1552,8 @@ Lint/Debugger:
|
|
1520
1552
|
Rails:
|
1521
1553
|
- debugger
|
1522
1554
|
- Kernel.debugger
|
1555
|
+
RubyJard:
|
1556
|
+
- jard
|
1523
1557
|
WebConsole:
|
1524
1558
|
- binding.console
|
1525
1559
|
|
@@ -1743,6 +1777,11 @@ Lint/ImplicitStringConcatenation:
|
|
1743
1777
|
Enabled: true
|
1744
1778
|
VersionAdded: '0.36'
|
1745
1779
|
|
1780
|
+
Lint/IncompatibleIoSelectWithFiberScheduler:
|
1781
|
+
Description: 'Checks for `IO.select` that is incompatible with Fiber Scheduler.'
|
1782
|
+
Enabled: pending
|
1783
|
+
VersionAdded: '1.21'
|
1784
|
+
|
1746
1785
|
Lint/IneffectiveAccessModifier:
|
1747
1786
|
Description: >-
|
1748
1787
|
Checks for attempts to use `private` or `protected` to set
|
@@ -1824,7 +1863,6 @@ Lint/MultipleComparison:
|
|
1824
1863
|
Enabled: true
|
1825
1864
|
VersionAdded: '0.47'
|
1826
1865
|
VersionChanged: '1.1'
|
1827
|
-
AllowMethodComparison: true
|
1828
1866
|
|
1829
1867
|
Lint/NestedMethodDefinition:
|
1830
1868
|
Description: 'Do not use nested method definitions.'
|
@@ -2536,8 +2574,9 @@ Naming/HeredocDelimiterNaming:
|
|
2536
2574
|
|
2537
2575
|
Naming/InclusiveLanguage:
|
2538
2576
|
Description: 'Recommend the use of inclusive language instead of problematic terms.'
|
2539
|
-
Enabled:
|
2577
|
+
Enabled: false
|
2540
2578
|
VersionAdded: '1.18'
|
2579
|
+
VersionChanged: '1.21'
|
2541
2580
|
CheckIdentifiers: true
|
2542
2581
|
CheckConstants: true
|
2543
2582
|
CheckVariables: true
|
@@ -2557,6 +2596,7 @@ Naming/InclusiveLanguage:
|
|
2557
2596
|
- denylist
|
2558
2597
|
- block
|
2559
2598
|
slave:
|
2599
|
+
WholeWord: true
|
2560
2600
|
Suggestions: ['replica', 'secondary', 'follower']
|
2561
2601
|
|
2562
2602
|
Naming/MemoizedInstanceVariableName:
|
@@ -2768,8 +2808,9 @@ Style/AndOr:
|
|
2768
2808
|
Description: 'Use &&/|| instead of and/or.'
|
2769
2809
|
StyleGuide: '#no-and-or-or'
|
2770
2810
|
Enabled: true
|
2811
|
+
SafeAutoCorrect: false
|
2771
2812
|
VersionAdded: '0.9'
|
2772
|
-
VersionChanged: '
|
2813
|
+
VersionChanged: '1.21'
|
2773
2814
|
# Whether `and` and `or` are banned only in conditionals (conditionals)
|
2774
2815
|
# or completely (always).
|
2775
2816
|
EnforcedStyle: conditionals
|
@@ -2803,9 +2844,9 @@ Style/ArrayJoin:
|
|
2803
2844
|
Style/AsciiComments:
|
2804
2845
|
Description: 'Use only ascii symbols in comments.'
|
2805
2846
|
StyleGuide: '#english-comments'
|
2806
|
-
Enabled:
|
2847
|
+
Enabled: false
|
2807
2848
|
VersionAdded: '0.9'
|
2808
|
-
VersionChanged: '
|
2849
|
+
VersionChanged: '1.21'
|
2809
2850
|
AllowedChars:
|
2810
2851
|
- ©
|
2811
2852
|
|
@@ -2967,7 +3008,7 @@ Style/CaseEquality:
|
|
2967
3008
|
Enabled: true
|
2968
3009
|
VersionAdded: '0.9'
|
2969
3010
|
VersionChanged: '0.89'
|
2970
|
-
# If AllowOnConstant is enabled, the cop will ignore violations when the receiver of
|
3011
|
+
# If `AllowOnConstant` option is enabled, the cop will ignore violations when the receiver of
|
2971
3012
|
# the case equality operator is a constant.
|
2972
3013
|
#
|
2973
3014
|
# # bad
|
@@ -3142,7 +3183,7 @@ Style/CommentAnnotation:
|
|
3142
3183
|
StyleGuide: '#annotate-keywords'
|
3143
3184
|
Enabled: true
|
3144
3185
|
VersionAdded: '0.10'
|
3145
|
-
VersionChanged: '1.
|
3186
|
+
VersionChanged: '1.20'
|
3146
3187
|
Keywords:
|
3147
3188
|
- TODO
|
3148
3189
|
- FIXME
|
@@ -3155,8 +3196,9 @@ Style/CommentAnnotation:
|
|
3155
3196
|
Style/CommentedKeyword:
|
3156
3197
|
Description: 'Do not place comments on the same line as certain keywords.'
|
3157
3198
|
Enabled: true
|
3199
|
+
SafeAutoCorrect: false
|
3158
3200
|
VersionAdded: '0.51'
|
3159
|
-
VersionChanged: '1.
|
3201
|
+
VersionChanged: '1.19'
|
3160
3202
|
|
3161
3203
|
Style/ConditionalAssignment:
|
3162
3204
|
Description: >-
|
@@ -3603,8 +3645,9 @@ Style/IdenticalConditionalBranches:
|
|
3603
3645
|
line at the end of each branch, which can validly be moved
|
3604
3646
|
out of the conditional.
|
3605
3647
|
Enabled: true
|
3648
|
+
SafeAutoCorrect: false
|
3606
3649
|
VersionAdded: '0.36'
|
3607
|
-
VersionChanged: '1.
|
3650
|
+
VersionChanged: '1.19'
|
3608
3651
|
|
3609
3652
|
Style/IfInsideElse:
|
3610
3653
|
Description: 'Finds if nodes inside else, which can be converted to elsif.'
|
@@ -3929,6 +3972,7 @@ Style/MultipleComparison:
|
|
3929
3972
|
Enabled: true
|
3930
3973
|
VersionAdded: '0.49'
|
3931
3974
|
VersionChanged: '1.1'
|
3975
|
+
AllowMethodComparison: true
|
3932
3976
|
|
3933
3977
|
Style/MutableConstant:
|
3934
3978
|
Description: 'Do not assign mutable objects to constants.'
|
@@ -4152,6 +4196,7 @@ Style/OptionHash:
|
|
4152
4196
|
- args
|
4153
4197
|
- params
|
4154
4198
|
- parameters
|
4199
|
+
Allowlist: []
|
4155
4200
|
|
4156
4201
|
Style/OptionalArguments:
|
4157
4202
|
Description: >-
|
@@ -4404,6 +4449,11 @@ Style/RedundantSelfAssignment:
|
|
4404
4449
|
Safe: false
|
4405
4450
|
VersionAdded: '0.90'
|
4406
4451
|
|
4452
|
+
Style/RedundantSelfAssignmentBranch:
|
4453
|
+
Description: 'Checks for places where conditional branch makes redundant self-assignment.'
|
4454
|
+
Enabled: pending
|
4455
|
+
VersionAdded: '1.19'
|
4456
|
+
|
4407
4457
|
Style/RedundantSort:
|
4408
4458
|
Description: >-
|
4409
4459
|
Use `min` instead of `sort.first`,
|
@@ -4575,6 +4625,7 @@ Style/SpecialGlobalVars:
|
|
4575
4625
|
VersionAdded: '0.13'
|
4576
4626
|
VersionChanged: '0.36'
|
4577
4627
|
SafeAutoCorrect: false
|
4628
|
+
RequireEnglish: true
|
4578
4629
|
EnforcedStyle: use_english_names
|
4579
4630
|
SupportedStyles:
|
4580
4631
|
- use_perl_names
|
@@ -4675,8 +4726,9 @@ Style/StructInheritance:
|
|
4675
4726
|
Description: 'Checks for inheritance from Struct.new.'
|
4676
4727
|
StyleGuide: '#no-extend-struct-new'
|
4677
4728
|
Enabled: true
|
4729
|
+
SafeAutoCorrect: false
|
4678
4730
|
VersionAdded: '0.29'
|
4679
|
-
VersionChanged: '
|
4731
|
+
VersionChanged: '1.20'
|
4680
4732
|
|
4681
4733
|
Style/SwapValues:
|
4682
4734
|
Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.'
|
@@ -4895,7 +4947,7 @@ Style/VariableInterpolation:
|
|
4895
4947
|
|
4896
4948
|
Style/WhenThen:
|
4897
4949
|
Description: 'Use when x then ... for one-line cases.'
|
4898
|
-
StyleGuide: '#
|
4950
|
+
StyleGuide: '#no-when-semicolons'
|
4899
4951
|
Enabled: true
|
4900
4952
|
VersionAdded: '0.9'
|
4901
4953
|
|
@@ -4919,7 +4971,7 @@ Style/WordArray:
|
|
4919
4971
|
StyleGuide: '#percent-w'
|
4920
4972
|
Enabled: true
|
4921
4973
|
VersionAdded: '0.9'
|
4922
|
-
VersionChanged: '
|
4974
|
+
VersionChanged: '1.19'
|
4923
4975
|
EnforcedStyle: percent
|
4924
4976
|
SupportedStyles:
|
4925
4977
|
# percent style: %w(word1 word2)
|
data/lib/rubocop/cli.rb
CHANGED
@@ -8,6 +8,11 @@ module RuboCop
|
|
8
8
|
STATUS_OFFENSES = 1
|
9
9
|
STATUS_ERROR = 2
|
10
10
|
STATUS_INTERRUPTED = 128 + Signal.list['INT']
|
11
|
+
DEFAULT_PARALLEL_OPTIONS = %i[
|
12
|
+
color debug display_style_guide display_time display_only_fail_level_offenses
|
13
|
+
display_only_failed except extra_details fail_level fix_layout format
|
14
|
+
ignore_disable_comments lint only only_guide_cops require safe
|
15
|
+
].freeze
|
11
16
|
|
12
17
|
class Finished < RuntimeError; end
|
13
18
|
|
@@ -37,6 +42,7 @@ module RuboCop
|
|
37
42
|
else
|
38
43
|
act_on_options
|
39
44
|
validate_options_vs_config
|
45
|
+
parallel_by_default!
|
40
46
|
apply_default_formatter
|
41
47
|
execute_runners
|
42
48
|
end
|
@@ -84,6 +90,18 @@ module RuboCop
|
|
84
90
|
'with AllCops: UseCache: false is not allowed.'
|
85
91
|
end
|
86
92
|
|
93
|
+
def parallel_by_default!
|
94
|
+
# See https://github.com/rubocop/rubocop/pull/4537 for JRuby and Windows constraints.
|
95
|
+
return if RUBY_ENGINE != 'ruby' || RuboCop::Platform.windows?
|
96
|
+
|
97
|
+
if (@options.keys - DEFAULT_PARALLEL_OPTIONS).empty? &&
|
98
|
+
@config_store.for_pwd.for_all_cops['UseCache'] != false
|
99
|
+
puts 'Use parallel by default.' if @options[:debug]
|
100
|
+
|
101
|
+
@options[:parallel] = true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
87
105
|
def act_on_options
|
88
106
|
set_options_to_config_loader
|
89
107
|
|
@@ -143,7 +143,7 @@ module RuboCop
|
|
143
143
|
PENDING_BANNER = <<~BANNER
|
144
144
|
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.
|
145
145
|
|
146
|
-
Please also note that can
|
146
|
+
Please also note that you can opt-in to new cops by default by adding this to your config:
|
147
147
|
AllCops:
|
148
148
|
NewCops: enable
|
149
149
|
BANNER
|
@@ -161,7 +161,7 @@ module RuboCop
|
|
161
161
|
def warn_pending_cop(cop)
|
162
162
|
version = cop.metadata['VersionAdded'] || 'N/A'
|
163
163
|
|
164
|
-
warn Rainbow("#{cop.name}: #
|
164
|
+
warn Rainbow("#{cop.name}: # new in #{version}").yellow
|
165
165
|
warn Rainbow(' Enabled: true').yellow
|
166
166
|
end
|
167
167
|
|
@@ -108,7 +108,7 @@ module RuboCop
|
|
108
108
|
result.delete(key)
|
109
109
|
elsif merge_hashes?(base_hash, derived_hash, key)
|
110
110
|
result[key] = merge(base_hash[key], derived_hash[key], **opts)
|
111
|
-
elsif should_union?(
|
111
|
+
elsif should_union?(derived_hash, base_hash, opts[:inherit_mode], key)
|
112
112
|
result[key] = base_hash[key] | derived_hash[key]
|
113
113
|
elsif opts[:debug]
|
114
114
|
warn_on_duplicate_setting(base_hash, derived_hash, key, **opts)
|
@@ -183,11 +183,26 @@ module RuboCop
|
|
183
183
|
local_inherit || hash['inherit_mode'] || {}
|
184
184
|
end
|
185
185
|
|
186
|
-
def should_union?(base_hash,
|
187
|
-
base_hash[key].is_a?(Array)
|
188
|
-
|
189
|
-
|
190
|
-
|
186
|
+
def should_union?(derived_hash, base_hash, root_mode, key)
|
187
|
+
return false unless base_hash[key].is_a?(Array)
|
188
|
+
|
189
|
+
derived_mode = derived_hash['inherit_mode']
|
190
|
+
return false if should_override?(derived_mode, key)
|
191
|
+
return true if should_merge?(derived_mode, key)
|
192
|
+
|
193
|
+
base_mode = base_hash['inherit_mode']
|
194
|
+
return false if should_override?(base_mode, key)
|
195
|
+
return true if should_merge?(base_mode, key)
|
196
|
+
|
197
|
+
should_merge?(root_mode, key)
|
198
|
+
end
|
199
|
+
|
200
|
+
def should_merge?(mode, key)
|
201
|
+
mode && mode['merge'] && mode['merge'].include?(key)
|
202
|
+
end
|
203
|
+
|
204
|
+
def should_override?(mode, key)
|
205
|
+
mode && mode['override'] && mode['override'].include?(key)
|
191
206
|
end
|
192
207
|
|
193
208
|
def merge_hashes?(base_hash, derived_hash, key)
|
data/lib/rubocop/cop/base.rb
CHANGED
@@ -222,8 +222,8 @@ module RuboCop
|
|
222
222
|
|
223
223
|
def relevant_file?(file)
|
224
224
|
file == RuboCop::AST::ProcessedSource::STRING_SOURCE_NAME ||
|
225
|
-
file_name_matches_any?(file, 'Include', true) &&
|
226
|
-
!file_name_matches_any?(file, 'Exclude', false)
|
225
|
+
(file_name_matches_any?(file, 'Include', true) &&
|
226
|
+
!file_name_matches_any?(file, 'Exclude', false))
|
227
227
|
end
|
228
228
|
|
229
229
|
def excluded_file?(file)
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Bundler
|
6
|
+
# This cop verifies that a project contains Gemfile or gems.rb file and correct
|
7
|
+
# associated lock file based on the configuration.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: Gemfile (default)
|
10
|
+
# # bad
|
11
|
+
# Project contains gems.rb and gems.locked files
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# Project contains Gemfile and gems.locked file
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# Project contains Gemfile and Gemfile.lock
|
18
|
+
#
|
19
|
+
# @example EnforcedStyle: gems.rb
|
20
|
+
# # bad
|
21
|
+
# Project contains Gemfile and Gemfile.lock files
|
22
|
+
#
|
23
|
+
# # bad
|
24
|
+
# Project contains gems.rb and Gemfile.lock file
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# Project contains gems.rb and gems.locked files
|
28
|
+
class GemFilename < Base
|
29
|
+
include ConfigurableEnforcedStyle
|
30
|
+
include RangeHelp
|
31
|
+
|
32
|
+
MSG_GEMFILE_REQUIRED = '`gems.rb` file was found but `Gemfile` is required '\
|
33
|
+
'(file path: %<file_path>s).'
|
34
|
+
MSG_GEMS_RB_REQUIRED = '`Gemfile` was found but `gems.rb` file is required '\
|
35
|
+
'(file path: %<file_path>s).'
|
36
|
+
MSG_GEMFILE_MISMATCHED = 'Expected a `Gemfile.lock` with `Gemfile` but found '\
|
37
|
+
'`gems.locked` file (file path: %<file_path>s).'
|
38
|
+
MSG_GEMS_RB_MISMATCHED = 'Expected a `gems.locked` file with `gems.rb` but found '\
|
39
|
+
'`Gemfile.lock` (file path: %<file_path>s).'
|
40
|
+
GEMFILE_FILES = %w[Gemfile Gemfile.lock].freeze
|
41
|
+
GEMS_RB_FILES = %w[gems.rb gems.locked].freeze
|
42
|
+
|
43
|
+
def on_new_investigation
|
44
|
+
file_path = processed_source.file_path
|
45
|
+
basename = File.basename(file_path)
|
46
|
+
return if expected_gemfile?(basename)
|
47
|
+
|
48
|
+
register_offense(file_path, basename)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def register_offense(file_path, basename)
|
54
|
+
register_gemfile_offense(file_path, basename) if gemfile_offense?(basename)
|
55
|
+
register_gems_rb_offense(file_path, basename) if gems_rb_offense?(basename)
|
56
|
+
end
|
57
|
+
|
58
|
+
def register_gemfile_offense(file_path, basename)
|
59
|
+
message = case basename
|
60
|
+
when 'gems.rb'
|
61
|
+
MSG_GEMFILE_REQUIRED
|
62
|
+
when 'gems.locked'
|
63
|
+
MSG_GEMFILE_MISMATCHED
|
64
|
+
end
|
65
|
+
|
66
|
+
add_global_offense(format(message, file_path: file_path))
|
67
|
+
end
|
68
|
+
|
69
|
+
def register_gems_rb_offense(file_path, basename)
|
70
|
+
message = case basename
|
71
|
+
when 'Gemfile'
|
72
|
+
MSG_GEMS_RB_REQUIRED
|
73
|
+
when 'Gemfile.lock'
|
74
|
+
MSG_GEMS_RB_MISMATCHED
|
75
|
+
end
|
76
|
+
|
77
|
+
add_global_offense(format(message, file_path: file_path))
|
78
|
+
end
|
79
|
+
|
80
|
+
def gemfile_offense?(basename)
|
81
|
+
gemfile_required? && GEMS_RB_FILES.include?(basename)
|
82
|
+
end
|
83
|
+
|
84
|
+
def gems_rb_offense?(basename)
|
85
|
+
gems_rb_required? && GEMFILE_FILES.include?(basename)
|
86
|
+
end
|
87
|
+
|
88
|
+
def expected_gemfile?(basename)
|
89
|
+
(gemfile_required? && GEMFILE_FILES.include?(basename)) ||
|
90
|
+
(gems_rb_required? && GEMS_RB_FILES.include?(basename))
|
91
|
+
end
|
92
|
+
|
93
|
+
def gemfile_required?
|
94
|
+
style == :Gemfile
|
95
|
+
end
|
96
|
+
|
97
|
+
def gems_rb_required?
|
98
|
+
style == :'gems.rb'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|