cookstyle 6.3.4 → 6.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/config/cookstyle.yml +290 -15
  4. data/config/disable_all.yml +13 -1
  5. data/config/upstream.yml +82 -22
  6. data/lib/cookstyle.rb +1 -1
  7. data/lib/cookstyle/version.rb +2 -2
  8. data/lib/rubocop/chef/platform_helpers.rb +2 -1
  9. data/lib/rubocop/cop/chef/correctness/invalid_platform_family_values_in_case.rb +77 -0
  10. data/lib/rubocop/cop/chef/correctness/invalid_platform_values_in_case.rb +77 -0
  11. data/lib/rubocop/cop/chef/correctness/lazy_eval_node_attribute_defaults.rb +56 -0
  12. data/lib/rubocop/cop/chef/correctness/node_normal.rb +1 -1
  13. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +1 -1
  14. data/lib/rubocop/cop/chef/correctness/openssl_password_helpers.rb +45 -0
  15. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +1 -1
  16. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +1 -1
  17. data/lib/rubocop/cop/chef/deprecation/deprecated_chefspec_platform.rb +10 -4
  18. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +2 -2
  19. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +1 -1
  20. data/lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb +141 -0
  21. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +2 -2
  22. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +1 -1
  23. data/lib/rubocop/cop/chef/deprecation/node_set.rb +2 -3
  24. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +2 -3
  25. data/lib/rubocop/cop/chef/deprecation/powershell_cookbook_helpers.rb +3 -3
  26. data/lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb +86 -0
  27. data/lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb +59 -0
  28. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +6 -1
  29. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +3 -3
  30. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +24 -3
  31. data/lib/rubocop/cop/chef/modernize/shell_out_helper.rb +64 -0
  32. data/lib/rubocop/cop/chef/modernize/use_multipackage_installs.rb +8 -4
  33. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +1 -1
  34. data/lib/rubocop/cop/target_chef_version.rb +4 -0
  35. data/lib/rubocop/monkey_patches/team.rb +24 -0
  36. metadata +13 -6
  37. data/lib/rubocop/cop/chef/deprecation/resource_without_name_or_provides.rb +0 -81
  38. data/lib/rubocop/monkey_patches/commissioner.rb +0 -26
@@ -59,6 +59,8 @@ Layout/EmptyLinesAroundAccessModifier:
59
59
  Enabled: false
60
60
  Layout/EmptyLinesAroundArguments:
61
61
  Enabled: false
62
+ Layout/EmptyLinesAroundAttributeAccessor:
63
+ Enabled: false
62
64
  Layout/EmptyLinesAroundBeginBody:
63
65
  Enabled: false
64
66
  Layout/EmptyLinesAroundBlockBody:
@@ -213,6 +215,8 @@ Lint/Debugger:
213
215
  Enabled: false
214
216
  Lint/DeprecatedClassMethods:
215
217
  Enabled: false
218
+ Lint/DeprecatedOpenSSLConstant:
219
+ Enabled: false
216
220
  Lint/DisjunctiveAssignmentInConstructor:
217
221
  Enabled: false
218
222
  Lint/DuplicateCaseCondition:
@@ -261,6 +265,8 @@ Lint/Loop:
261
265
  Enabled: false
262
266
  Lint/MissingCopEnableDirective:
263
267
  Enabled: false
268
+ Lint/MixedRegexpCaptureTypes:
269
+ Enabled: false
264
270
  Lint/MultipleComparison:
265
271
  Enabled: false
266
272
  Lint/NestedMethodDefinition:
@@ -665,6 +671,10 @@ Style/RedundantParentheses:
665
671
  Enabled: false
666
672
  Style/RedundantPercentQ:
667
673
  Enabled: false
674
+ Style/RedundantRegexpCharacterClass:
675
+ Enabled: false
676
+ Style/RedundantRegexpEscape:
677
+ Enabled: false
668
678
  Style/RedundantReturn:
669
679
  Enabled: false
670
680
  Style/RedundantSelf:
@@ -697,6 +707,8 @@ Style/SingleLineBlockParams:
697
707
  Enabled: false
698
708
  Style/SingleLineMethods:
699
709
  Enabled: false
710
+ Style/SlicingWithRange:
711
+ Enabled: false
700
712
  Style/SpecialGlobalVars:
701
713
  Enabled: false
702
714
  Style/StabbyLambdaParentheses:
@@ -770,4 +782,4 @@ Security/MarshalLoad:
770
782
  Security/Open:
771
783
  Enabled: false
772
784
  Security/YAMLLoad:
773
- Enabled: false
785
+ Enabled: false
@@ -35,6 +35,7 @@ AllCops:
35
35
  - '**/*.watchr'
36
36
  - '**/.irbrc'
37
37
  - '**/.pryrc'
38
+ - '**/.simplecov'
38
39
  - '**/buildfile'
39
40
  - '**/Appraisals'
40
41
  - '**/Berksfile'
@@ -53,6 +54,7 @@ AllCops:
53
54
  - '**/Podfile'
54
55
  - '**/Puppetfile'
55
56
  - '**/Rakefile'
57
+ - '**/rakefile'
56
58
  - '**/Snapfile'
57
59
  - '**/Steepfile'
58
60
  - '**/Thorfile'
@@ -151,12 +153,13 @@ Bundler/GemComment:
151
153
  Description: 'Add a comment describing each gem.'
152
154
  Enabled: false
153
155
  VersionAdded: '0.59'
154
- VersionChanged: '0.77'
156
+ VersionChanged: '0.85'
155
157
  Include:
156
158
  - '**/*.gemfile'
157
159
  - '**/Gemfile'
158
160
  - '**/gems.rb'
159
161
  IgnoredGems: []
162
+ OnlyFor: []
160
163
 
161
164
  Bundler/InsecureProtocolSource:
162
165
  Description: >-
@@ -375,6 +378,7 @@ Layout/ConditionPosition:
375
378
  StyleGuide: '#same-line-condition'
376
379
  Enabled: true
377
380
  VersionAdded: '0.53'
381
+ VersionChanged: '0.83'
378
382
 
379
383
  Layout/DefEndAlignment:
380
384
  Description: 'Align ends corresponding to defs correctly.'
@@ -460,6 +464,19 @@ Layout/EmptyLinesAroundArguments:
460
464
  Enabled: true
461
465
  VersionAdded: '0.52'
462
466
 
467
+ Layout/EmptyLinesAroundAttributeAccessor:
468
+ Description: "Keep blank lines around attribute accessors."
469
+ StyleGuide: '#empty-lines-around-attribute-accessor'
470
+ Enabled: pending
471
+ VersionAdded: '0.83'
472
+ VersionChanged: '0.84'
473
+ AllowAliasSyntax: true
474
+ AllowedMethods:
475
+ - alias_method
476
+ - public
477
+ - protected
478
+ - private
479
+
463
480
  Layout/EmptyLinesAroundBeginBody:
464
481
  Description: "Keeps track of empty lines around begin-end bodies."
465
482
  StyleGuide: '#empty-lines-around-bodies'
@@ -774,13 +791,7 @@ Layout/HeredocIndentation:
774
791
  StyleGuide: '#squiggly-heredocs'
775
792
  Enabled: true
776
793
  VersionAdded: '0.49'
777
- VersionChanged: '0.77'
778
- EnforcedStyle: squiggly
779
- SupportedStyles:
780
- - squiggly
781
- - active_support
782
- - powerpack
783
- - unindent
794
+ VersionChanged: '0.85'
784
795
 
785
796
  Layout/IndentationConsistency:
786
797
  Description: 'Keep indentation straight.'
@@ -848,13 +859,13 @@ Layout/LeadingEmptyLines:
848
859
  VersionChanged: '0.77'
849
860
 
850
861
  Layout/LineLength:
851
- Description: 'Limit lines to 80 characters.'
852
- StyleGuide: '#80-character-limits'
862
+ Description: 'Checks that line length does not exceed the configured limit.'
863
+ StyleGuide: '#max-line-length'
853
864
  Enabled: true
854
865
  VersionAdded: '0.25'
855
- VersionChanged: '0.78'
866
+ VersionChanged: '0.84'
856
867
  AutoCorrect: false
857
- Max: 80
868
+ Max: 120
858
869
  # To make it possible to copy or click on URIs in the code, we allow lines
859
870
  # containing a URI to be longer than Max.
860
871
  AllowHeredoc: true
@@ -1295,8 +1306,8 @@ Layout/TrailingWhitespace:
1295
1306
  StyleGuide: '#no-trailing-whitespace'
1296
1307
  Enabled: true
1297
1308
  VersionAdded: '0.49'
1298
- VersionChanged: '0.55'
1299
- AllowInHeredoc: false
1309
+ VersionChanged: '0.83'
1310
+ AllowInHeredoc: true
1300
1311
 
1301
1312
  #################### Lint ##################################
1302
1313
  ### Warnings
@@ -1316,6 +1327,7 @@ Lint/AmbiguousOperator:
1316
1327
  StyleGuide: '#method-invocation-parens'
1317
1328
  Enabled: true
1318
1329
  VersionAdded: '0.17'
1330
+ VersionChanged: '0.83'
1319
1331
 
1320
1332
  Lint/AmbiguousRegexpLiteral:
1321
1333
  Description: >-
@@ -1323,6 +1335,7 @@ Lint/AmbiguousRegexpLiteral:
1323
1335
  a method invocation without parentheses.
1324
1336
  Enabled: true
1325
1337
  VersionAdded: '0.17'
1338
+ VersionChanged: '0.83'
1326
1339
 
1327
1340
  Lint/AssignmentInCondition:
1328
1341
  Description: "Don't use assignment in conditions."
@@ -1339,8 +1352,9 @@ Lint/BigDecimalNew:
1339
1352
  Lint/BooleanSymbol:
1340
1353
  Description: 'Check for `:true` and `:false` symbols.'
1341
1354
  Enabled: true
1355
+ Safe: false
1342
1356
  VersionAdded: '0.50'
1343
- VersionChanged: '0.81'
1357
+ VersionChanged: '0.83'
1344
1358
 
1345
1359
  Lint/CircularArgumentReference:
1346
1360
  Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument."
@@ -1358,6 +1372,11 @@ Lint/DeprecatedClassMethods:
1358
1372
  Enabled: true
1359
1373
  VersionAdded: '0.19'
1360
1374
 
1375
+ Lint/DeprecatedOpenSSLConstant:
1376
+ Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`."
1377
+ Enabled: pending
1378
+ VersionAdded: '0.84'
1379
+
1361
1380
  Lint/DisjunctiveAssignmentInConstructor:
1362
1381
  Description: 'In constructor, plain assignment is preferred over disjunctive.'
1363
1382
  Enabled: true
@@ -1411,13 +1430,16 @@ Lint/EmptyInterpolation:
1411
1430
  Lint/EmptyWhen:
1412
1431
  Description: 'Checks for `when` branches with empty bodies.'
1413
1432
  Enabled: true
1433
+ AllowComments: true
1414
1434
  VersionAdded: '0.45'
1435
+ VersionChanged: '0.83'
1415
1436
 
1416
1437
  Lint/EnsureReturn:
1417
1438
  Description: 'Do not use return in an ensure block.'
1418
1439
  StyleGuide: '#no-return-ensure'
1419
1440
  Enabled: true
1420
1441
  VersionAdded: '0.9'
1442
+ VersionChanged: '0.83'
1421
1443
 
1422
1444
  Lint/ErbNewArguments:
1423
1445
  Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.'
@@ -1511,6 +1533,11 @@ Lint/MissingCopEnableDirective:
1511
1533
  # .inf for any size
1512
1534
  MaximumRangeSize: .inf
1513
1535
 
1536
+ Lint/MixedRegexpCaptureTypes:
1537
+ Description: 'Do not mix named captures and numbered captures in a Regexp literal.'
1538
+ Enabled: pending
1539
+ VersionAdded: '0.85'
1540
+
1514
1541
  Lint/MultipleComparison:
1515
1542
  Description: "Use `&&` operator to compare multiple values."
1516
1543
  Enabled: true
@@ -1565,6 +1592,7 @@ Lint/ParenthesesAsGroupedExpression:
1565
1592
  StyleGuide: '#parens-no-spaces'
1566
1593
  Enabled: true
1567
1594
  VersionAdded: '0.12'
1595
+ VersionChanged: '0.83'
1568
1596
 
1569
1597
  Lint/PercentStringArray:
1570
1598
  Description: >-
@@ -1808,7 +1836,7 @@ Lint/UselessAccessModifier:
1808
1836
  Description: 'Checks for useless access modifiers.'
1809
1837
  Enabled: true
1810
1838
  VersionAdded: '0.20'
1811
- VersionChanged: '0.47'
1839
+ VersionChanged: '0.83'
1812
1840
  ContextCreatingMethods: []
1813
1841
  MethodCreatingMethods: []
1814
1842
 
@@ -1983,6 +2011,11 @@ Naming/ClassAndModuleCamelCase:
1983
2011
  StyleGuide: '#camelcase-classes'
1984
2012
  Enabled: true
1985
2013
  VersionAdded: '0.50'
2014
+ VersionChanged: '0.85'
2015
+ # Allowed class/module names can be specified here.
2016
+ # These can be full or part of the name.
2017
+ AllowedNames:
2018
+ - module_parent
1986
2019
 
1987
2020
  Naming/ConstantName:
1988
2021
  Description: 'Constants should use SCREAMING_SNAKE_CASE.'
@@ -2003,6 +2036,10 @@ Naming/FileName:
2003
2036
  # It further expects it to be nested inside modules which match the names
2004
2037
  # of subdirectories in its path.
2005
2038
  ExpectMatchingDefinition: false
2039
+ # When `false`, changes the behavior of ExpectMatchingDefinition to match only
2040
+ # whether each source file's class or module name matches the file name --
2041
+ # not whether the nested module hierarchy matches the subdirectory path.
2042
+ CheckDefinitionPathHierarchy: true
2006
2043
  # If non-`nil`, expect all source file names to match the following regex.
2007
2044
  # Only the file name itself is matched, not the entire file path.
2008
2045
  # Use anchors as necessary if you want to match the entire name rather than
@@ -2194,7 +2231,7 @@ Security/JSONLoad:
2194
2231
  Description: >-
2195
2232
  Prefer usage of `JSON.parse` over `JSON.load` due to potential
2196
2233
  security issues. See reference for more information.
2197
- Reference: 'https://ruby-doc.org/stdlib-2.3.0/libdoc/json/rdoc/JSON.html#method-i-load'
2234
+ Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load'
2198
2235
  Enabled: true
2199
2236
  VersionAdded: '0.43'
2200
2237
  VersionChanged: '0.44'
@@ -2207,7 +2244,7 @@ Security/MarshalLoad:
2207
2244
  Description: >-
2208
2245
  Avoid using of `Marshal.load` or `Marshal.restore` due to potential
2209
2246
  security issues. See reference for more information.
2210
- Reference: 'https://ruby-doc.org/core-2.3.3/Marshal.html#module-Marshal-label-Security+considerations'
2247
+ Reference: 'https://ruby-doc.org/core-2.7.0/Marshal.html#module-Marshal-label-Security+considerations'
2211
2248
  Enabled: true
2212
2249
  VersionAdded: '0.47'
2213
2250
 
@@ -2221,7 +2258,7 @@ Security/YAMLLoad:
2221
2258
  Description: >-
2222
2259
  Prefer usage of `YAML.safe_load` over `YAML.load` due to potential
2223
2260
  security issues. See reference for more information.
2224
- Reference: 'https://ruby-doc.org/stdlib-2.3.3/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security'
2261
+ Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security'
2225
2262
  Enabled: true
2226
2263
  VersionAdded: '0.47'
2227
2264
  SafeAutoCorrect: false
@@ -2258,7 +2295,7 @@ Style/AndOr:
2258
2295
  VersionChanged: '0.25'
2259
2296
  # Whether `and` and `or` are banned only in conditionals (conditionals)
2260
2297
  # or completely (always).
2261
- EnforcedStyle: always
2298
+ EnforcedStyle: conditionals
2262
2299
  SupportedStyles:
2263
2300
  - always
2264
2301
  - conditionals
@@ -2678,6 +2715,11 @@ Style/DoubleNegation:
2678
2715
  StyleGuide: '#no-bang-bang'
2679
2716
  Enabled: true
2680
2717
  VersionAdded: '0.19'
2718
+ VersionChanged: '0.84'
2719
+ EnforcedStyle: allowed_in_returns
2720
+ SupportedStyles:
2721
+ - allowed_in_returns
2722
+ - forbidden
2681
2723
 
2682
2724
  Style/EachForSimpleLoop:
2683
2725
  Description: >-
@@ -2841,8 +2883,7 @@ Style/FrozenStringLiteralComment:
2841
2883
  SupportedStyles:
2842
2884
  # `always` will always add the frozen string literal comment to a file
2843
2885
  # regardless of the Ruby version or if `freeze` or `<<` are called on a
2844
- # string literal. If you run code against multiple versions of Ruby, it is
2845
- # possible that this will create errors in Ruby 2.3.0+.
2886
+ # string literal. It is possible that this will create errors.
2846
2887
  - always
2847
2888
  # `always_true` will add the frozen string literal comment to a file,
2848
2889
  # similarly to the `always` style, but will also change any disabled
@@ -2948,6 +2989,7 @@ Style/IfWithSemicolon:
2948
2989
  StyleGuide: '#no-semicolon-ifs'
2949
2990
  Enabled: true
2950
2991
  VersionAdded: '0.9'
2992
+ VersionChanged: '0.83'
2951
2993
 
2952
2994
  Style/ImplicitRuntimeError:
2953
2995
  Description: >-
@@ -3425,7 +3467,9 @@ Style/OptionalArguments:
3425
3467
  of the argument list.
3426
3468
  StyleGuide: '#optional-arguments'
3427
3469
  Enabled: true
3470
+ Safe: false
3428
3471
  VersionAdded: '0.33'
3472
+ VersionChanged: '0.83'
3429
3473
 
3430
3474
  Style/OrAssignment:
3431
3475
  Description: 'Recommend usage of double pipe equals (||=) where applicable.'
@@ -3574,6 +3618,16 @@ Style/RedundantPercentQ:
3574
3618
  Enabled: true
3575
3619
  VersionAdded: '0.76'
3576
3620
 
3621
+ Style/RedundantRegexpCharacterClass:
3622
+ Description: 'Checks for unnecessary single-element Regexp character classes.'
3623
+ Enabled: pending
3624
+ VersionAdded: '0.85'
3625
+
3626
+ Style/RedundantRegexpEscape:
3627
+ Description: 'Checks for redundant escapes in Regexps.'
3628
+ Enabled: pending
3629
+ VersionAdded: '0.85'
3630
+
3577
3631
  Style/RedundantReturn:
3578
3632
  Description: "Don't use return where it's not required."
3579
3633
  StyleGuide: '#no-explicit-return'
@@ -3730,6 +3784,12 @@ Style/SingleLineMethods:
3730
3784
  VersionChanged: '0.19'
3731
3785
  AllowIfMethodIsEmpty: true
3732
3786
 
3787
+ Style/SlicingWithRange:
3788
+ Description: 'Checks array slicing is done with endless ranges when suitable.'
3789
+ Enabled: pending
3790
+ VersionAdded: '0.83'
3791
+ Safe: false
3792
+
3733
3793
  Style/SpecialGlobalVars:
3734
3794
  Description: 'Avoid Perl-style global variables.'
3735
3795
  StyleGuide: '#no-cryptic-perlisms'
@@ -11,7 +11,7 @@ require 'rubocop/monkey_patches/comment_config.rb'
11
11
  # monkey patches needed for the TargetChefVersion config option
12
12
  require 'rubocop/monkey_patches/config.rb'
13
13
  require 'rubocop/monkey_patches/cop.rb'
14
- require 'rubocop/monkey_patches/commissioner.rb'
14
+ require 'rubocop/monkey_patches/team.rb'
15
15
 
16
16
  module RuboCop
17
17
  class ConfigLoader
@@ -1,4 +1,4 @@
1
1
  module Cookstyle
2
- VERSION = "6.3.4".freeze # rubocop: disable Style/StringLiterals
3
- RUBOCOP_VERSION = '0.82.0'.freeze
2
+ VERSION = "6.8.0".freeze # rubocop: disable Style/StringLiterals
3
+ RUBOCOP_VERSION = '0.85.1'.freeze
4
4
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright 2019, Chef Software Inc.
2
+ # Copyright:: Copyright 2019-2020, Chef Software Inc.
3
3
  # Author:: Tim Smith (<tsmith@chef.io>)
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -32,6 +32,7 @@ module RuboCop
32
32
  'mswin' => 'windows',
33
33
  'opensuse' => 'suse',
34
34
  'opensuseleap' => 'suse',
35
+ 'oracle' => 'rhel',
35
36
  'redhat' => 'rhel',
36
37
  'scientific' => 'rhel',
37
38
  'sles' => 'suse',
@@ -0,0 +1,77 @@
1
+ #
2
+ # Copyright:: Copyright 2020, Chef Software Inc.
3
+ # Author:: Tim Smith (<tsmith@chef.io>)
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+ module RuboCop
18
+ module Cop
19
+ module Chef
20
+ module ChefCorrectness
21
+ # Use valid platform family values in case statements.
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ # case node['platform_family']
27
+ # when 'redhat'
28
+ # puts "I'm on a RHEL-like system"
29
+ # end
30
+ #
31
+ class InvalidPlatformFamilyInCase < Cop
32
+ include RangeHelp
33
+ include ::RuboCop::Chef::PlatformHelpers
34
+
35
+ MSG = 'Use valid platform family values in case statements.'.freeze
36
+
37
+ def_node_matcher :node_platform_family?, <<-PATTERN
38
+ (send (send nil? :node) :[] (str "platform_family") )
39
+ PATTERN
40
+
41
+ def on_case(node)
42
+ node_platform_family?(node.condition) do
43
+ node.each_when do |when_node|
44
+ when_node.each_condition do |con|
45
+ next unless con.str_type? # if the condition isn't a string we can't check so skip
46
+
47
+ if INVALID_PLATFORM_FAMILIES[con.str_content]
48
+ add_offense(con, location: :expression, message: MSG, severity: :refactor)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ def autocorrect(node)
56
+ new_value = INVALID_PLATFORM_FAMILIES[node.str_content]
57
+
58
+ # some invalid platform families have no direct correction value and return nil instead
59
+ return unless new_value
60
+
61
+ # if the correct value already exists in the when statement then we just want to delete this node
62
+ if node.parent.conditions.any? { |x| x.str_content == new_value }
63
+ lambda do |corrector|
64
+ range = range_with_surrounding_comma(range_with_surrounding_space(range: node.loc.expression, side: :left), :both)
65
+ corrector.remove(range)
66
+ end
67
+ else
68
+ lambda do |corrector|
69
+ corrector.replace(node.loc.expression, "'#{new_value}'")
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end