rubocop 0.86.0 → 0.87.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 +46 -4
- data/lib/rubocop.rb +7 -1
- data/lib/rubocop/cli.rb +0 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +40 -5
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/config_loader.rb +22 -62
- data/lib/rubocop/config_obsoletion.rb +0 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +13 -23
- data/lib/rubocop/cop/base.rb +399 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +48 -50
- data/lib/rubocop/cop/cop.rb +85 -236
- data/lib/rubocop/cop/corrector.rb +38 -115
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
- data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -8
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +0 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +19 -25
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/interpolation_check.rb +13 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +8 -3
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +27 -23
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +8 -0
- data/lib/rubocop/cop/lint/syntax.rb +11 -26
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +22 -0
- data/lib/rubocop/cop/metrics/class_length.rb +25 -2
- data/lib/rubocop/cop/metrics/method_length.rb +23 -0
- data/lib/rubocop/cop/metrics/module_length.rb +25 -2
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/code_length.rb +4 -0
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -2
- data/lib/rubocop/cop/mixin/too_many_lines.rb +3 -13
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +27 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +136 -0
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +121 -0
- data/lib/rubocop/cop/style/class_vars.rb +21 -0
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +5 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -5
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +4 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +14 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +26 -7
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +1 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +2 -2
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/zero_length_predicate.rb +2 -2
- data/lib/rubocop/cop/team.rb +97 -81
- data/lib/rubocop/cop/utils/format_string.rb +1 -2
- data/lib/rubocop/name_similarity.rb +1 -3
- data/lib/rubocop/options.rb +15 -8
- data/lib/rubocop/rake_task.rb +6 -9
- data/lib/rubocop/rspec/cop_helper.rb +4 -4
- data/lib/rubocop/rspec/expect_offense.rb +10 -16
- data/lib/rubocop/rspec/shared_contexts.rb +7 -7
- data/lib/rubocop/runner.rb +31 -29
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +15 -7
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4ab19d9feaaa55fc107e42860eb4fe6a6f0106350edcfee8095b689845106d1
|
4
|
+
data.tar.gz: b096ab80d7f1c3e1e3ea5b4e32f74f0ce23dc5bf34c06b2fb80893c53cd058dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9db7c5ac245ecc290c75144ca7baf37d3f8a39911238f4d8d2866ce019c91b0c0dc2a9cc296c71e2f49d972d16773de3c077734ecef7e5b01f7d693de51a001
|
7
|
+
data.tar.gz: b9a3b18f4a95be71f2518ef6a2a4946f05079f0239a41c11230e7f60ba509b9d511c160edb0fe288663d41432d1e82aba6b721f6c27604a23a64b0bac674216f
|
data/README.md
CHANGED
@@ -49,7 +49,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
|
|
49
49
|
might want to use a conservative version lock in your `Gemfile`:
|
50
50
|
|
51
51
|
```rb
|
52
|
-
gem 'rubocop', '~> 0.
|
52
|
+
gem 'rubocop', '~> 0.87.0', require: false
|
53
53
|
```
|
54
54
|
|
55
55
|
## Quickstart
|
data/config/default.yml
CHANGED
@@ -180,6 +180,9 @@ Bundler/OrderedGems:
|
|
180
180
|
VersionAdded: '0.46'
|
181
181
|
VersionChanged: '0.47'
|
182
182
|
TreatCommentsAsGroupSeparators: true
|
183
|
+
# By default, "-" and "_" are ignored for order purposes.
|
184
|
+
# This can be overridden by setting this parameter to true.
|
185
|
+
ConsiderPunctuation: false
|
183
186
|
Include:
|
184
187
|
- '**/*.gemfile'
|
185
188
|
- '**/Gemfile'
|
@@ -200,6 +203,9 @@ Gemspec/OrderedDependencies:
|
|
200
203
|
Enabled: true
|
201
204
|
VersionAdded: '0.51'
|
202
205
|
TreatCommentsAsGroupSeparators: true
|
206
|
+
# By default, "-" and "_" are ignored for order purposes.
|
207
|
+
# This can be overridden by setting this parameter to true.
|
208
|
+
ConsiderPunctuation: false
|
203
209
|
Include:
|
204
210
|
- '**/*.gemspec'
|
205
211
|
|
@@ -1508,7 +1514,9 @@ Lint/InheritException:
|
|
1508
1514
|
Lint/InterpolationCheck:
|
1509
1515
|
Description: 'Raise warning for interpolation in single q strs.'
|
1510
1516
|
Enabled: true
|
1517
|
+
SafeAutoCorrect: false
|
1511
1518
|
VersionAdded: '0.50'
|
1519
|
+
VersionChanged: '0.87'
|
1512
1520
|
|
1513
1521
|
Lint/LiteralAsCondition:
|
1514
1522
|
Description: 'Checks of literals used in conditions.'
|
@@ -1736,6 +1744,7 @@ Lint/SafeNavigationWithEmpty:
|
|
1736
1744
|
Description: 'Avoid `foo&.empty?` in conditionals.'
|
1737
1745
|
Enabled: true
|
1738
1746
|
VersionAdded: '0.62'
|
1747
|
+
VersionChanged: '0.87'
|
1739
1748
|
|
1740
1749
|
Lint/ScriptPermission:
|
1741
1750
|
Description: 'Grant script file execute permission.'
|
@@ -1902,9 +1911,10 @@ Metrics/BlockLength:
|
|
1902
1911
|
Description: 'Avoid long blocks with many lines.'
|
1903
1912
|
Enabled: true
|
1904
1913
|
VersionAdded: '0.44'
|
1905
|
-
VersionChanged: '0.
|
1914
|
+
VersionChanged: '0.87'
|
1906
1915
|
CountComments: false # count full line comments?
|
1907
1916
|
Max: 25
|
1917
|
+
CountAsOne: []
|
1908
1918
|
ExcludedMethods:
|
1909
1919
|
# By default, exclude the `#refine` method, as it tends to have larger
|
1910
1920
|
# associated blocks.
|
@@ -1925,8 +1935,10 @@ Metrics/ClassLength:
|
|
1925
1935
|
Description: 'Avoid classes longer than 100 lines of code.'
|
1926
1936
|
Enabled: true
|
1927
1937
|
VersionAdded: '0.25'
|
1938
|
+
VersionChanged: '0.87'
|
1928
1939
|
CountComments: false # count full line comments?
|
1929
1940
|
Max: 100
|
1941
|
+
CountAsOne: []
|
1930
1942
|
|
1931
1943
|
# Avoid complex methods.
|
1932
1944
|
Metrics/CyclomaticComplexity:
|
@@ -1944,17 +1956,20 @@ Metrics/MethodLength:
|
|
1944
1956
|
StyleGuide: '#short-methods'
|
1945
1957
|
Enabled: true
|
1946
1958
|
VersionAdded: '0.25'
|
1947
|
-
VersionChanged: '0.
|
1959
|
+
VersionChanged: '0.87'
|
1948
1960
|
CountComments: false # count full line comments?
|
1949
1961
|
Max: 10
|
1962
|
+
CountAsOne: []
|
1950
1963
|
ExcludedMethods: []
|
1951
1964
|
|
1952
1965
|
Metrics/ModuleLength:
|
1953
1966
|
Description: 'Avoid modules longer than 100 lines of code.'
|
1954
1967
|
Enabled: true
|
1955
1968
|
VersionAdded: '0.31'
|
1969
|
+
VersionChanged: '0.87'
|
1956
1970
|
CountComments: false # count full line comments?
|
1957
1971
|
Max: 100
|
1972
|
+
CountAsOne: []
|
1958
1973
|
|
1959
1974
|
Metrics/ParameterLists:
|
1960
1975
|
Description: 'Avoid parameter lists longer than three or four parameters.'
|
@@ -1992,10 +2007,12 @@ Naming/AccessorMethodName:
|
|
1992
2007
|
VersionAdded: '0.50'
|
1993
2008
|
|
1994
2009
|
Naming/AsciiIdentifiers:
|
1995
|
-
Description: 'Use only ascii symbols in identifiers.'
|
2010
|
+
Description: 'Use only ascii symbols in identifiers and constants.'
|
1996
2011
|
StyleGuide: '#english-identifiers'
|
1997
2012
|
Enabled: true
|
1998
2013
|
VersionAdded: '0.50'
|
2014
|
+
VersionChanged: '0.87'
|
2015
|
+
AsciiConstants: true
|
1999
2016
|
|
2000
2017
|
Naming/BinaryOperatorParameterName:
|
2001
2018
|
Description: 'When defining binary operators, name the argument other.'
|
@@ -2288,6 +2305,17 @@ Style/AccessModifierDeclarations:
|
|
2288
2305
|
- group
|
2289
2306
|
AllowModifiersOnSymbols: true
|
2290
2307
|
|
2308
|
+
Style/AccessorGrouping:
|
2309
|
+
Description: 'Checks for grouping of accessors in `class` and `module` bodies.'
|
2310
|
+
Enabled: 'pending'
|
2311
|
+
VersionAdded: '0.87'
|
2312
|
+
EnforcedStyle: grouped
|
2313
|
+
SupportedStyles:
|
2314
|
+
# separated: each accessor goes in a separate statement.
|
2315
|
+
# grouped: accessors are grouped into a single statement.
|
2316
|
+
- separated
|
2317
|
+
- grouped
|
2318
|
+
|
2291
2319
|
Style/Alias:
|
2292
2320
|
Description: 'Use alias instead of alias_method.'
|
2293
2321
|
StyleGuide: '#alias-method-lexically'
|
@@ -2355,6 +2383,13 @@ Style/BeginBlock:
|
|
2355
2383
|
Enabled: true
|
2356
2384
|
VersionAdded: '0.9'
|
2357
2385
|
|
2386
|
+
Style/BisectedAttrAccessor:
|
2387
|
+
Description: >-
|
2388
|
+
Checks for places where `attr_reader` and `attr_writer`
|
2389
|
+
for the same method can be combined into single `attr_accessor`.
|
2390
|
+
Enabled: 'pending'
|
2391
|
+
VersionAdded: '0.87'
|
2392
|
+
|
2358
2393
|
Style/BlockComments:
|
2359
2394
|
Description: 'Do not use block comments.'
|
2360
2395
|
StyleGuide: '#no-block-comments'
|
@@ -2729,6 +2764,7 @@ Style/DoubleNegation:
|
|
2729
2764
|
VersionAdded: '0.19'
|
2730
2765
|
VersionChanged: '0.84'
|
2731
2766
|
EnforcedStyle: allowed_in_returns
|
2767
|
+
SafeAutoCorrect: false
|
2732
2768
|
SupportedStyles:
|
2733
2769
|
- allowed_in_returns
|
2734
2770
|
- forbidden
|
@@ -2995,6 +3031,7 @@ Style/IfUnlessModifierOfIfUnless:
|
|
2995
3031
|
Avoid modifier if/unless usage on conditionals.
|
2996
3032
|
Enabled: true
|
2997
3033
|
VersionAdded: '0.39'
|
3034
|
+
VersionChanged: '0.87'
|
2998
3035
|
|
2999
3036
|
Style/IfWithSemicolon:
|
3000
3037
|
Description: 'Do not use if x; .... Use the ternary operator instead.'
|
@@ -3581,6 +3618,11 @@ Style/RandomWithOffset:
|
|
3581
3618
|
Enabled: true
|
3582
3619
|
VersionAdded: '0.52'
|
3583
3620
|
|
3621
|
+
Style/RedundantAssignment:
|
3622
|
+
Description: 'Checks for redundant assignment before returning.'
|
3623
|
+
Enabled: 'pending'
|
3624
|
+
VersionAdded: '0.87'
|
3625
|
+
|
3584
3626
|
Style/RedundantBegin:
|
3585
3627
|
Description: "Don't use begin blocks when they are not needed."
|
3586
3628
|
StyleGuide: '#begin-implicit'
|
@@ -3924,7 +3966,7 @@ Style/SymbolLiteral:
|
|
3924
3966
|
Style/SymbolProc:
|
3925
3967
|
Description: 'Use symbols as procs instead of blocks when possible.'
|
3926
3968
|
Enabled: true
|
3927
|
-
|
3969
|
+
Safe: false
|
3928
3970
|
VersionAdded: '0.26'
|
3929
3971
|
VersionChanged: '0.64'
|
3930
3972
|
# A list of method names to be ignored by the check.
|
data/lib/rubocop.rb
CHANGED
@@ -30,6 +30,7 @@ require_relative 'rubocop/cop/ignored_node'
|
|
30
30
|
require_relative 'rubocop/cop/autocorrect_logic'
|
31
31
|
require_relative 'rubocop/cop/badge'
|
32
32
|
require_relative 'rubocop/cop/registry'
|
33
|
+
require_relative 'rubocop/cop/base'
|
33
34
|
require_relative 'rubocop/cop/cop'
|
34
35
|
require_relative 'rubocop/cop/commissioner'
|
35
36
|
require_relative 'rubocop/cop/corrector'
|
@@ -52,11 +53,12 @@ require_relative 'rubocop/cop/mixin/annotation_comment'
|
|
52
53
|
require_relative 'rubocop/cop/mixin/array_min_size'
|
53
54
|
require_relative 'rubocop/cop/mixin/array_syntax'
|
54
55
|
require_relative 'rubocop/cop/mixin/alignment'
|
56
|
+
require_relative 'rubocop/cop/mixin/allowed_methods'
|
57
|
+
require_relative 'rubocop/cop/mixin/auto_corrector'
|
55
58
|
require_relative 'rubocop/cop/mixin/check_assignment'
|
56
59
|
require_relative 'rubocop/cop/mixin/check_line_breakable'
|
57
60
|
require_relative 'rubocop/cop/mixin/configurable_max'
|
58
61
|
require_relative 'rubocop/cop/mixin/code_length' # relies on configurable_max
|
59
|
-
require_relative 'rubocop/cop/mixin/classish_length' # relies on code_length
|
60
62
|
require_relative 'rubocop/cop/mixin/configurable_enforced_style'
|
61
63
|
require_relative 'rubocop/cop/mixin/configurable_formatting'
|
62
64
|
require_relative 'rubocop/cop/mixin/configurable_naming'
|
@@ -326,6 +328,7 @@ require_relative 'rubocop/cop/metrics/utils/iterating_block'
|
|
326
328
|
require_relative 'rubocop/cop/metrics/cyclomatic_complexity'
|
327
329
|
# relies on cyclomatic_complexity
|
328
330
|
require_relative 'rubocop/cop/metrics/utils/abc_size_calculator'
|
331
|
+
require_relative 'rubocop/cop/metrics/utils/code_length_calculator'
|
329
332
|
require_relative 'rubocop/cop/metrics/abc_size'
|
330
333
|
require_relative 'rubocop/cop/metrics/block_length'
|
331
334
|
require_relative 'rubocop/cop/metrics/block_nesting'
|
@@ -353,6 +356,7 @@ require_relative 'rubocop/cop/naming/variable_name'
|
|
353
356
|
require_relative 'rubocop/cop/naming/variable_number'
|
354
357
|
|
355
358
|
require_relative 'rubocop/cop/style/access_modifier_declarations'
|
359
|
+
require_relative 'rubocop/cop/style/accessor_grouping'
|
356
360
|
require_relative 'rubocop/cop/style/alias'
|
357
361
|
require_relative 'rubocop/cop/style/and_or'
|
358
362
|
require_relative 'rubocop/cop/style/array_join'
|
@@ -361,6 +365,7 @@ require_relative 'rubocop/cop/style/attr'
|
|
361
365
|
require_relative 'rubocop/cop/style/auto_resource_cleanup'
|
362
366
|
require_relative 'rubocop/cop/style/bare_percent_literals'
|
363
367
|
require_relative 'rubocop/cop/style/begin_block'
|
368
|
+
require_relative 'rubocop/cop/style/bisected_attr_accessor'
|
364
369
|
require_relative 'rubocop/cop/style/block_comments'
|
365
370
|
require_relative 'rubocop/cop/style/block_delimiters'
|
366
371
|
require_relative 'rubocop/cop/style/case_equality'
|
@@ -426,6 +431,7 @@ require_relative 'rubocop/cop/style/lambda_call'
|
|
426
431
|
require_relative 'rubocop/cop/style/line_end_concatenation'
|
427
432
|
require_relative 'rubocop/cop/style/method_call_without_args_parentheses'
|
428
433
|
require_relative 'rubocop/cop/style/method_call_with_args_parentheses'
|
434
|
+
require_relative 'rubocop/cop/style/redundant_assignment'
|
429
435
|
require_relative 'rubocop/cop/style/redundant_fetch_block'
|
430
436
|
require_relative 'rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses'
|
431
437
|
require_relative 'rubocop/cop/style/method_call_with_args_parentheses/require_parentheses'
|
data/lib/rubocop/cli.rb
CHANGED
@@ -101,11 +101,9 @@ module RuboCop
|
|
101
101
|
|
102
102
|
def set_options_to_config_loader
|
103
103
|
ConfigLoader.debug = @options[:debug]
|
104
|
-
ConfigLoader.auto_gen_config = @options[:auto_gen_config]
|
105
104
|
ConfigLoader.disable_pending_cops = @options[:disable_pending_cops]
|
106
105
|
ConfigLoader.enable_pending_cops = @options[:enable_pending_cops]
|
107
106
|
ConfigLoader.ignore_parent_exclusion = @options[:ignore_parent_exclusion]
|
108
|
-
ConfigLoader.options_config = @options[:config]
|
109
107
|
end
|
110
108
|
|
111
109
|
def handle_exiting_options
|
@@ -7,6 +7,8 @@ module RuboCop
|
|
7
7
|
class AutoGenerateConfig < Base
|
8
8
|
self.command_name = :auto_gen_config
|
9
9
|
|
10
|
+
AUTO_GENERATED_FILE = '.rubocop_todo.yml'
|
11
|
+
|
10
12
|
PHASE_1 = 'Phase 1 of 2: run Layout/LineLength cop'
|
11
13
|
PHASE_2 = 'Phase 2 of 2: run all cops'
|
12
14
|
|
@@ -67,7 +69,7 @@ module RuboCop
|
|
67
69
|
@options.delete(:only)
|
68
70
|
@config_store = ConfigStore.new
|
69
71
|
# Save the todo configuration of the LineLength cop.
|
70
|
-
IO.read(
|
72
|
+
IO.read(AUTO_GENERATED_FILE)
|
71
73
|
.lines
|
72
74
|
.drop_while { |line| line.start_with?('#') }
|
73
75
|
.join
|
@@ -78,7 +80,7 @@ module RuboCop
|
|
78
80
|
result = execute_runner
|
79
81
|
# This run was made with the current maximum length allowed, so append
|
80
82
|
# the saved setting for LineLength.
|
81
|
-
File.open(
|
83
|
+
File.open(AUTO_GENERATED_FILE, 'a') do |f|
|
82
84
|
f.write(line_length_contents)
|
83
85
|
end
|
84
86
|
result
|
@@ -87,18 +89,51 @@ module RuboCop
|
|
87
89
|
def reset_config_and_auto_gen_file
|
88
90
|
@config_store = ConfigStore.new
|
89
91
|
@config_store.options_config = @options[:config] if @options[:config]
|
90
|
-
File.open(
|
91
|
-
|
92
|
+
File.open(AUTO_GENERATED_FILE, 'w') {}
|
93
|
+
add_inheritance_from_auto_generated_file(@options[:config])
|
92
94
|
end
|
93
95
|
|
94
96
|
def add_formatter
|
95
97
|
@options[:formatters] << [Formatter::DisabledConfigFormatter,
|
96
|
-
|
98
|
+
AUTO_GENERATED_FILE]
|
97
99
|
end
|
98
100
|
|
99
101
|
def execute_runner
|
100
102
|
Environment.new(@options, @config_store, @paths).run(:execute_runner)
|
101
103
|
end
|
104
|
+
|
105
|
+
def add_inheritance_from_auto_generated_file(config_file)
|
106
|
+
file_string = " #{AUTO_GENERATED_FILE}"
|
107
|
+
|
108
|
+
config_file ||= ConfigLoader::DOTFILE
|
109
|
+
|
110
|
+
if File.exist?(config_file)
|
111
|
+
files = Array(ConfigLoader.load_yaml_configuration(config_file)['inherit_from'])
|
112
|
+
|
113
|
+
return if files.include?(AUTO_GENERATED_FILE)
|
114
|
+
|
115
|
+
files.unshift(AUTO_GENERATED_FILE)
|
116
|
+
file_string = "\n - " + files.join("\n - ") if files.size > 1
|
117
|
+
rubocop_yml_contents = existing_configuration(config_file)
|
118
|
+
end
|
119
|
+
|
120
|
+
write_config_file(config_file, file_string, rubocop_yml_contents)
|
121
|
+
|
122
|
+
puts "Added inheritance from `#{AUTO_GENERATED_FILE}` in `#{ConfigLoader::DOTFILE}`."
|
123
|
+
end
|
124
|
+
|
125
|
+
def existing_configuration(config_file)
|
126
|
+
IO.read(config_file, encoding: Encoding::UTF_8)
|
127
|
+
.sub(/^inherit_from: *[^\n]+/, '')
|
128
|
+
.sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
|
129
|
+
end
|
130
|
+
|
131
|
+
def write_config_file(file_name, file_string, rubocop_yml_contents)
|
132
|
+
File.open(file_name, 'w') do |f|
|
133
|
+
f.write "inherit_from:#{file_string}\n"
|
134
|
+
f.write "\n#{rubocop_yml_contents}" if /\S/.match?(rubocop_yml_contents)
|
135
|
+
end
|
136
|
+
end
|
102
137
|
end
|
103
138
|
end
|
104
139
|
end
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
49
49
|
|
50
50
|
def print_cop_details(cops)
|
51
51
|
cops.each do |cop|
|
52
|
-
puts '# Supports --auto-correct' if cop.
|
52
|
+
puts '# Supports --auto-correct' if cop.support_autocorrect?
|
53
53
|
puts "#{cop.cop_name}:"
|
54
54
|
puts config_lines(cop)
|
55
55
|
puts
|
@@ -18,21 +18,19 @@ module RuboCop
|
|
18
18
|
XDG_CONFIG = 'config.yml'
|
19
19
|
RUBOCOP_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..'))
|
20
20
|
DEFAULT_FILE = File.join(RUBOCOP_HOME, 'config', 'default.yml')
|
21
|
-
AUTO_GENERATED_FILE = '.rubocop_todo.yml'
|
22
21
|
|
23
22
|
class << self
|
24
23
|
include FileFinder
|
25
24
|
|
26
|
-
attr_accessor :debug, :
|
27
|
-
:
|
25
|
+
attr_accessor :debug, :ignore_parent_exclusion,
|
26
|
+
:disable_pending_cops, :enable_pending_cops
|
28
27
|
attr_writer :default_configuration
|
29
28
|
|
30
29
|
alias debug? debug
|
31
|
-
alias auto_gen_config? auto_gen_config
|
32
30
|
alias ignore_parent_exclusion? ignore_parent_exclusion
|
33
31
|
|
34
32
|
def clear_options
|
35
|
-
@debug =
|
33
|
+
@debug = nil
|
36
34
|
FileFinder.root_level = nil
|
37
35
|
end
|
38
36
|
|
@@ -55,6 +53,21 @@ module RuboCop
|
|
55
53
|
Config.create(hash, path)
|
56
54
|
end
|
57
55
|
|
56
|
+
def load_yaml_configuration(absolute_path)
|
57
|
+
file_contents = read_file(absolute_path)
|
58
|
+
yaml_code = Dir.chdir(File.dirname(absolute_path)) do
|
59
|
+
ERB.new(file_contents).result
|
60
|
+
end
|
61
|
+
check_duplication(yaml_code, absolute_path)
|
62
|
+
hash = yaml_safe_load(yaml_code, absolute_path) || {}
|
63
|
+
|
64
|
+
puts "configuration from #{absolute_path}" if debug?
|
65
|
+
|
66
|
+
raise(TypeError, "Malformed configuration in #{absolute_path}") unless hash.is_a?(Hash)
|
67
|
+
|
68
|
+
hash
|
69
|
+
end
|
70
|
+
|
58
71
|
def add_missing_namespaces(path, hash)
|
59
72
|
# Using `hash.each_key` will cause the
|
60
73
|
# `can't add a new key into hash during iteration` error
|
@@ -85,7 +98,7 @@ module RuboCop
|
|
85
98
|
end
|
86
99
|
|
87
100
|
def configuration_from_file(config_file)
|
88
|
-
return
|
101
|
+
return default_configuration if config_file == DEFAULT_FILE
|
89
102
|
|
90
103
|
config = load_file(config_file)
|
91
104
|
if ignore_parent_exclusion?
|
@@ -105,8 +118,8 @@ module RuboCop
|
|
105
118
|
end
|
106
119
|
|
107
120
|
def add_excludes_from_files(config, config_file)
|
108
|
-
found_files = find_files_upwards(DOTFILE, config_file)
|
109
|
-
|
121
|
+
found_files = find_files_upwards(DOTFILE, config_file)
|
122
|
+
found_files = [find_user_dotfile, find_user_xdg_config].compact if found_files.empty?
|
110
123
|
|
111
124
|
return if found_files.empty?
|
112
125
|
return if PathUtil.relative_path(found_files.last) ==
|
@@ -139,36 +152,11 @@ module RuboCop
|
|
139
152
|
warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
|
140
153
|
end
|
141
154
|
|
142
|
-
# Merges the given configuration with the default one.
|
143
|
-
# AllCops:DisabledByDefault is true, it changes the Enabled params so
|
144
|
-
# that only cops from user configuration are enabled.
|
145
|
-
# If AllCops::EnabledByDefault is true, it changes the Enabled params
|
146
|
-
# so that only cops explicitly disabled in user configuration are
|
147
|
-
# disabled.
|
155
|
+
# Merges the given configuration with the default one.
|
148
156
|
def merge_with_default(config, config_file, unset_nil: true)
|
149
157
|
resolver.merge_with_default(config, config_file, unset_nil: unset_nil)
|
150
158
|
end
|
151
159
|
|
152
|
-
def add_inheritance_from_auto_generated_file
|
153
|
-
file_string = " #{AUTO_GENERATED_FILE}"
|
154
|
-
|
155
|
-
config_file = options_config || DOTFILE
|
156
|
-
|
157
|
-
if File.exist?(config_file)
|
158
|
-
files = Array(load_yaml_configuration(config_file)['inherit_from'])
|
159
|
-
|
160
|
-
return if files.include?(AUTO_GENERATED_FILE)
|
161
|
-
|
162
|
-
files.unshift(AUTO_GENERATED_FILE)
|
163
|
-
file_string = "\n - " + files.join("\n - ") if files.size > 1
|
164
|
-
rubocop_yml_contents = existing_configuration(config_file)
|
165
|
-
end
|
166
|
-
|
167
|
-
write_config_file(config_file, file_string, rubocop_yml_contents)
|
168
|
-
|
169
|
-
puts "Added inheritance from `#{AUTO_GENERATED_FILE}` in `#{DOTFILE}`."
|
170
|
-
end
|
171
|
-
|
172
160
|
private
|
173
161
|
|
174
162
|
def find_project_dotfile(target_dir)
|
@@ -196,38 +184,10 @@ module RuboCop
|
|
196
184
|
path
|
197
185
|
end
|
198
186
|
|
199
|
-
def existing_configuration(config_file)
|
200
|
-
IO.read(config_file, encoding: Encoding::UTF_8)
|
201
|
-
.sub(/^inherit_from: *[^\n]+/, '')
|
202
|
-
.sub(/^inherit_from: *(\n *- *[^\n]+)+/, '')
|
203
|
-
end
|
204
|
-
|
205
|
-
def write_config_file(file_name, file_string, rubocop_yml_contents)
|
206
|
-
File.open(file_name, 'w') do |f|
|
207
|
-
f.write "inherit_from:#{file_string}\n"
|
208
|
-
f.write "\n#{rubocop_yml_contents}" if /\S/.match?(rubocop_yml_contents)
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
187
|
def resolver
|
213
188
|
@resolver ||= ConfigLoaderResolver.new
|
214
189
|
end
|
215
190
|
|
216
|
-
def load_yaml_configuration(absolute_path)
|
217
|
-
file_contents = read_file(absolute_path)
|
218
|
-
yaml_code = Dir.chdir(File.dirname(absolute_path)) do
|
219
|
-
ERB.new(file_contents).result
|
220
|
-
end
|
221
|
-
check_duplication(yaml_code, absolute_path)
|
222
|
-
hash = yaml_safe_load(yaml_code, absolute_path) || {}
|
223
|
-
|
224
|
-
puts "configuration from #{absolute_path}" if debug?
|
225
|
-
|
226
|
-
raise(TypeError, "Malformed configuration in #{absolute_path}") unless hash.is_a?(Hash)
|
227
|
-
|
228
|
-
hash
|
229
|
-
end
|
230
|
-
|
231
191
|
def check_duplication(yaml_code, absolute_path)
|
232
192
|
smart_path = PathUtil.smart_path(absolute_path)
|
233
193
|
YAMLDuplicationChecker.check(yaml_code, absolute_path) do |key1, key2|
|