cookstyle 5.18.4 → 5.19.9

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/config/cookstyle.yml +18 -4
  3. data/lib/cookstyle/version.rb +1 -1
  4. data/lib/rubocop/cop/chef/correctness/cb_depends_on_self.rb +3 -1
  5. data/lib/rubocop/cop/chef/deprecation/chef_rewind.rb +3 -2
  6. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +2 -1
  7. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +3 -1
  8. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +3 -1
  9. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +6 -2
  10. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +3 -1
  11. data/lib/rubocop/cop/chef/modernize/allowed_actions_initializer.rb +1 -1
  12. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +2 -1
  13. data/lib/rubocop/cop/chef/modernize/chef_gem_nokogiri.rb +2 -1
  14. data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +9 -10
  15. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +3 -1
  16. data/lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb +2 -1
  17. data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +3 -1
  18. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +3 -1
  19. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +3 -1
  20. data/lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb +3 -1
  21. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +2 -1
  22. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +3 -1
  23. data/lib/rubocop/cop/chef/redundant/attribute_metadata.rb +3 -1
  24. data/lib/rubocop/cop/chef/redundant/conflicts_metadata.rb +3 -1
  25. data/lib/rubocop/cop/chef/redundant/grouping_metadata.rb +48 -0
  26. data/lib/rubocop/cop/chef/redundant/long_description_metadata.rb +6 -1
  27. data/lib/rubocop/cop/chef/redundant/provides_metadata.rb +3 -1
  28. data/lib/rubocop/cop/chef/redundant/recipe_metadata.rb +3 -1
  29. data/lib/rubocop/cop/chef/redundant/replaces_metadata.rb +3 -1
  30. data/lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb +3 -1
  31. data/lib/rubocop/cop/chef/redundant/suggests_metadata.rb +3 -1
  32. data/lib/rubocop/cop/chef/sharing/invalid_license_string.rb +1 -0
  33. data/lib/rubocop/cop/chef/style/file_mode.rb +4 -1
  34. data/lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb +73 -0
  35. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56fb1dda6ccaeeb4a3f521c52407e12becf9f1b1625a89b4c893f415820e40c4
4
- data.tar.gz: 46c9bf893653173d77d7282056dc81cb385ef2b6f7828cc5f76e0e4e8e51a3f4
3
+ metadata.gz: 0f5cc0916309f625be3469422c3feb76f7e1340fca4ae99cc5110b0b80f857f6
4
+ data.tar.gz: 1c813c90c2bef8b8c869c4d9a826be958507a31db227c4b67ff1025192ab624c
5
5
  SHA512:
6
- metadata.gz: f3e1c5acbb968e895c0a8190c28635baa023574e797d0b56ba54bba776f97f24b7d0f718bb02b92080175f46f475500a02254db3bd6f92090fd89f5b2239ec4e
7
- data.tar.gz: 44d2c68635670c76ac81c4941dd70a3fd99fa53cdf40654576584784fd88b256f6c94066716cdff8c8cb7b63b29f68b17524b654e7de4cba514d89803993941b
6
+ metadata.gz: 0e8ae2b07a6b712889fa67ececde059ae3063fa89627fe6937668ed101a9874bfc98d2faaf5ac36cf99063fb14c9835595052213ffc299d5bc0b5aac28502153
7
+ data.tar.gz: 61747c1c26cf1708cfd82ca7945850c8fb2022a18d16c33145ed805741c313ee6bb0c0fc849ba90dad4a0a65ae53e10ea9d4b0291f5b14faaafc43ea18d7a8b0
@@ -115,6 +115,13 @@ ChefStyle/TrueClassFalseClassResourceProperties:
115
115
  - '**/libraries/*.rb'
116
116
  - '**/resources/*.rb'
117
117
 
118
+ ChefStyle/OverlyComplexSupportsDependsMetadata:
119
+ Description: Don't loop over an array to set cookbook dependencies or supported platforms if you have fewer than three values to set.
120
+ Enabled: true
121
+ VersionAdded: '5.19.0'
122
+ Include:
123
+ - '**/metadata.rb'
124
+
118
125
  ###############################
119
126
  # ChefCorrectness: Avoiding potential problems
120
127
  ###############################
@@ -1095,7 +1102,7 @@ ChefRedundantCode/ConflictsMetadata:
1095
1102
  - '**/metadata.rb'
1096
1103
 
1097
1104
  ChefRedundantCode/SuggestsMetadata:
1098
- Description: Don't use the deprecated 'suggests' metadata value
1105
+ Description: The suggests metadata.rb method is not used and is unnecessary in cookbooks.
1099
1106
  Enabled: true
1100
1107
  VersionAdded: '5.1.0'
1101
1108
  VersionChanged: '5.15.0'
@@ -1103,7 +1110,7 @@ ChefRedundantCode/SuggestsMetadata:
1103
1110
  - '**/metadata.rb'
1104
1111
 
1105
1112
  ChefRedundantCode/ProvidesMetadata:
1106
- Description: Don't use the deprecated 'provides' metadata value
1113
+ Description: The provides metadata.rb method is not used and is unnecessary in cookbooks.
1107
1114
  Enabled: true
1108
1115
  VersionAdded: '5.1.0'
1109
1116
  VersionChanged: '5.15.0'
@@ -1111,7 +1118,7 @@ ChefRedundantCode/ProvidesMetadata:
1111
1118
  - '**/metadata.rb'
1112
1119
 
1113
1120
  ChefRedundantCode/ReplacesMetadata:
1114
- Description: Don't use the deprecated 'replaces' metadata value
1121
+ Description: The replaces metadata.rb method is not used and is unnecessary in cookbooks.
1115
1122
  Enabled: true
1116
1123
  VersionAdded: '5.1.0'
1117
1124
  VersionChanged: '5.15.0'
@@ -1119,7 +1126,7 @@ ChefRedundantCode/ReplacesMetadata:
1119
1126
  - '**/metadata.rb'
1120
1127
 
1121
1128
  ChefRedundantCode/AttributeMetadata:
1122
- Description: Don't use the deprecated 'attribute' metadata value
1129
+ Description: The attribute metadata.rb method is not used and is unnecessary in cookbooks.
1123
1130
  Enabled: true
1124
1131
  VersionAdded: '5.1.0'
1125
1132
  VersionChanged: '5.15.0'
@@ -1221,6 +1228,13 @@ ChefRedundantCode/AptRepositoryDistributionDefault:
1221
1228
  - '**/attributes/*.rb'
1222
1229
  - '**/Berksfile'
1223
1230
 
1231
+ ChefRedundantCode/GroupingMetadata:
1232
+ Description: The grouping metadata.rb method is not used and is unnecessary in cookbooks.
1233
+ Enabled: true
1234
+ VersionAdded: '5.19.0'
1235
+ Include:
1236
+ - '**/metadata.rb'
1237
+
1224
1238
  ###############################
1225
1239
  # Migrating to new patterns
1226
1240
  ###############################
@@ -1,4 +1,4 @@
1
1
  module Cookstyle
2
- VERSION = "5.18.4".freeze # rubocop: disable Style/StringLiterals
2
+ VERSION = "5.19.9".freeze # rubocop: disable Style/StringLiterals
3
3
  RUBOCOP_VERSION = '0.75.1'.freeze
4
4
  end
@@ -31,6 +31,8 @@ module RuboCop
31
31
  #
32
32
  module ChefCorrectness
33
33
  class CookbooksDependsOnSelf < Cop
34
+ include RangeHelp
35
+
34
36
  MSG = 'A cookbook cannot depend on itself. This will fail on Chef Infra Client 13+'.freeze
35
37
 
36
38
  def_node_search :dependencies, '(send nil? :depends str ...)'
@@ -49,7 +51,7 @@ module RuboCop
49
51
 
50
52
  def autocorrect(node)
51
53
  lambda do |corrector|
52
- corrector.remove(node.source_range)
54
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
53
55
  end
54
56
  end
55
57
  end
@@ -36,6 +36,7 @@ module RuboCop
36
36
  #
37
37
  class ChefRewind < Cop
38
38
  include RuboCop::Chef::CookbookHelpers
39
+ include RangeHelp
39
40
  extend TargetChefVersion
40
41
 
41
42
  minimum_target_chef_version '12.10'
@@ -83,12 +84,12 @@ module RuboCop
83
84
  lambda do |corrector|
84
85
  rewind_gem_install?(node) do
85
86
  node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
86
- corrector.remove(node.loc.expression)
87
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
87
88
  return
88
89
  end
89
90
 
90
91
  require_rewind?(node) do
91
- corrector.remove(node.loc.expression)
92
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
92
93
  return
93
94
  end
94
95
 
@@ -26,6 +26,7 @@ module RuboCop
26
26
  # depends 'compat_resource'
27
27
  #
28
28
  class CookbookDependsOnCompatResource < Cop
29
+ include RangeHelp
29
30
  extend TargetChefVersion
30
31
 
31
32
  minimum_target_chef_version '12.19'
@@ -44,7 +45,7 @@ module RuboCop
44
45
 
45
46
  def autocorrect(node)
46
47
  lambda do |corrector|
47
- corrector.remove(node.loc.expression)
48
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
48
49
  end
49
50
  end
50
51
  end
@@ -34,6 +34,8 @@ module RuboCop
34
34
  # require 'chef/mixin/language_include_recipe'
35
35
  #
36
36
  class UsesDeprecatedMixins < Cop
37
+ include RangeHelp
38
+
37
39
  MSG = "Don't use deprecated Mixins no longer included in Chef Infra Client 14 and later.".freeze
38
40
 
39
41
  def_node_matcher :deprecated_mixin?, <<-PATTERN
@@ -64,7 +66,7 @@ module RuboCop
64
66
 
65
67
  def autocorrect(node)
66
68
  lambda do |corrector|
67
- corrector.remove(node.loc.expression)
69
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
68
70
  end
69
71
  end
70
72
  end
@@ -29,6 +29,8 @@ module RuboCop
29
29
  # use_inline_resources if respond_to?(:use_inline_resources)
30
30
  #
31
31
  class UseInlineResourcesDefined < Cop
32
+ include RangeHelp
33
+
32
34
  MSG = 'use_inline_resources is now the default for resources in Chef Infra Client 13+ and does not need to be specified.'.freeze
33
35
 
34
36
  def on_send(node)
@@ -47,7 +49,7 @@ module RuboCop
47
49
 
48
50
  def autocorrect(node)
49
51
  lambda do |corrector|
50
- corrector.remove(node.loc.expression)
52
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
51
53
  end
52
54
  end
53
55
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: 2019, Chef Software, Inc.
2
+ # 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");
@@ -30,6 +30,10 @@ module RuboCop
30
30
  # })
31
31
  # end
32
32
  #
33
+ # user 'betty' do
34
+ # supports :manage_home => true
35
+ # end
36
+ #
33
37
  # # good
34
38
  # user "betty" do
35
39
  # manage_home true
@@ -51,7 +55,7 @@ module RuboCop
51
55
  lambda do |corrector|
52
56
  new_text = []
53
57
  node.arguments.first.each_pair do |k, v|
54
- new_text << "#{k.source} #{v.source}"
58
+ new_text << "#{k.value} #{v.source}"
55
59
  end
56
60
 
57
61
  corrector.replace(node.loc.expression, new_text.join("\n "))
@@ -27,6 +27,8 @@ module RuboCop
27
27
  # include_recipe 'yum::dnf_yum_compat'
28
28
  #
29
29
  class IncludingYumDNFCompatRecipe < Cop
30
+ include RangeHelp
31
+
30
32
  MSG = 'Do not include the deprecated yum::dnf_yum_compat default recipe to install yum on dnf systems. Chef Infra Client now includes built in support for DNF packages.'.freeze
31
33
 
32
34
  def_node_matcher :yum_dnf_compat_recipe_usage?, <<-PATTERN
@@ -41,7 +43,7 @@ module RuboCop
41
43
 
42
44
  def autocorrect(node)
43
45
  lambda do |corrector|
44
- corrector.remove(node.loc.expression)
46
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
45
47
  end
46
48
  end
47
49
  end
@@ -47,7 +47,7 @@ module RuboCop
47
47
  return if node.body.nil? # nil body is an empty initialize method
48
48
 
49
49
  node.body.each_node do |x|
50
- if x.assignment? && !x.node_parts.empty? && %i(@actions @allowed_actions).include?(x.node_parts.first)
50
+ if x.assignment? && !x.parent.op_asgn_type? && !x.node_parts.empty? && %i(@actions @allowed_actions).include?(x.node_parts.first)
51
51
  add_offense(x, location: :expression, message: MSG, severity: :refactor)
52
52
  end
53
53
  end
@@ -33,6 +33,7 @@ module RuboCop
33
33
  #
34
34
  class UnnecessaryDependsChef14 < Cop
35
35
  extend TargetChefVersion
36
+ include RangeHelp
36
37
 
37
38
  minimum_target_chef_version '14.0'
38
39
 
@@ -50,7 +51,7 @@ module RuboCop
50
51
 
51
52
  def autocorrect(node)
52
53
  lambda do |corrector|
53
- corrector.remove(node.loc.expression)
54
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
54
55
  end
55
56
  end
56
57
  end
@@ -27,6 +27,7 @@ module RuboCop
27
27
  # chef_gem 'nokogiri'
28
28
  #
29
29
  class ChefGemNokogiri < Cop
30
+ include RangeHelp
30
31
  include RuboCop::Chef::CookbookHelpers
31
32
 
32
33
  MSG = 'The nokogiri gem ships in Chef Infra Client 12+ and does not need to be installed before being used.'.freeze
@@ -50,7 +51,7 @@ module RuboCop
50
51
  def autocorrect(node)
51
52
  lambda do |corrector|
52
53
  node = node.parent if node.parent&.block_type? # make sure we get the whole block not just the method in the block
53
- corrector.remove(node.loc.expression)
54
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
54
55
  end
55
56
  end
56
57
  end
@@ -42,20 +42,19 @@ module RuboCop
42
42
 
43
43
  MSG = 'The default action of a resource can be set with the "default_action" helper instead of using the initialize method.'.freeze
44
44
 
45
- def on_def(node)
46
- return unless node.method_name == :initialize
47
- return if node.body.nil? # nil body is an empty initialize method
45
+ def_node_matcher :action_in_initializer?, <<-PATTERN
46
+ (def :initialize (args ...) <(begin ... $(ivasgn {:@action :@default_action} $(...)))> )
47
+ PATTERN
48
48
 
49
- node.body.each_node do |x|
50
- if x.assignment? && !x.node_parts.empty? && %i(@action @default_action).include?(x.node_parts.first)
51
- add_offense(x, location: :expression, message: MSG, severity: :refactor)
52
- end
53
- end
54
- end
49
+ def_node_search :intialize_method, '(def :initialize ... )'
55
50
 
56
51
  def_node_search :default_action_method?, '(send nil? :default_action ... )'
57
52
 
58
- def_node_search :intialize_method, '(def :initialize ... )'
53
+ def on_def(node)
54
+ action_in_initializer?(node) do |action, _val|
55
+ add_offense(action, location: :expression, message: MSG, severity: :refactor)
56
+ end
57
+ end
59
58
 
60
59
  def autocorrect(node)
61
60
  lambda do |corrector|
@@ -30,6 +30,8 @@ module RuboCop
30
30
  # end
31
31
  #
32
32
  class DefinesChefSpecMatchers < Cop
33
+ include RangeHelp
34
+
33
35
  MSG = 'ChefSpec matchers are now auto generated by ChefSpec 7.1+ and do not need to be defined in a cookbook'.freeze
34
36
 
35
37
  def_node_matcher :chefspec_matcher?, <<-PATTERN
@@ -44,7 +46,7 @@ module RuboCop
44
46
 
45
47
  def autocorrect(node)
46
48
  lambda do |corrector|
47
- corrector.remove(node.loc.expression)
49
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
48
50
  end
49
51
  end
50
52
  end
@@ -27,6 +27,7 @@ module RuboCop
27
27
  #
28
28
  class DependsOnZypperCookbook < Cop
29
29
  extend TargetChefVersion
30
+ include RangeHelp
30
31
 
31
32
  minimum_target_chef_version '13.3'
32
33
 
@@ -44,7 +45,7 @@ module RuboCop
44
45
 
45
46
  def autocorrect(node)
46
47
  lambda do |corrector|
47
- corrector.remove(node.loc.expression)
48
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
48
49
  end
49
50
  end
50
51
  end
@@ -28,6 +28,8 @@ module RuboCop
28
28
  # end
29
29
  #
30
30
  class EmptyResourceInitializeMethod < Cop
31
+ include RangeHelp
32
+
31
33
  MSG = 'There is no need for an empty initialize method in a resource'.freeze
32
34
 
33
35
  def_node_matcher :empty_initialize?, <<-PATTERN
@@ -42,7 +44,7 @@ module RuboCop
42
44
 
43
45
  def autocorrect(node)
44
46
  lambda do |corrector|
45
- corrector.remove(node.loc.expression)
47
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
46
48
  end
47
49
  end
48
50
  end
@@ -30,6 +30,8 @@ module RuboCop
30
30
  # include Chef::Mixin::PowershellOut
31
31
  #
32
32
  class IncludingMixinShelloutInResources < Cop
33
+ include RangeHelp
34
+
33
35
  MSG = 'There is no need to include Chef::Mixin::ShellOut or Chef::Mixin::PowershellOut in resources or providers as this is already done by Chef Infra Client 12.4+.'.freeze
34
36
 
35
37
  def_node_matcher :include_shellout?, <<-PATTERN
@@ -52,7 +54,7 @@ module RuboCop
52
54
 
53
55
  def autocorrect(node)
54
56
  lambda do |corrector|
55
- corrector.remove(node.loc.expression)
57
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
56
58
  end
57
59
  end
58
60
  end
@@ -26,6 +26,8 @@ module RuboCop
26
26
  # depends 'minitest-handler'
27
27
  #
28
28
  class MinitestHandlerUsage < Cop
29
+ include RangeHelp
30
+
29
31
  MSG = 'Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.'.freeze
30
32
 
31
33
  def_node_matcher :minitest_depends?, <<-PATTERN
@@ -40,7 +42,7 @@ module RuboCop
40
42
 
41
43
  def autocorrect(node)
42
44
  lambda do |corrector|
43
- corrector.remove(node.loc.expression)
45
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
44
46
  end
45
47
  end
46
48
  end
@@ -27,6 +27,8 @@ module RuboCop
27
27
  # require 'mixlib/shellout'
28
28
  #
29
29
  class UnnecessaryMixlibShelloutRequire < Cop
30
+ include RangeHelp
31
+
30
32
  MSG = 'Chef Infra Client 12.4+ includes mixlib/shellout automatically in resources and providers.'.freeze
31
33
 
32
34
  def_node_matcher :require_mixlibshellout?, <<-PATTERN
@@ -41,7 +43,7 @@ module RuboCop
41
43
 
42
44
  def autocorrect(node)
43
45
  lambda do |corrector|
44
- corrector.remove(node.loc.expression)
46
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
45
47
  end
46
48
  end
47
49
  end
@@ -29,6 +29,7 @@ module RuboCop
29
29
  #
30
30
  class WhyRunSupportedTrue < Cop
31
31
  extend TargetChefVersion
32
+ include RangeHelp
32
33
 
33
34
  minimum_target_chef_version '13.0'
34
35
 
@@ -42,7 +43,7 @@ module RuboCop
42
43
 
43
44
  def autocorrect(node)
44
45
  lambda do |corrector|
45
- corrector.remove(node.loc.expression)
46
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
46
47
  end
47
48
  end
48
49
  end
@@ -27,6 +27,8 @@ module RuboCop
27
27
  # include_recipe 'windows'
28
28
  #
29
29
  class IncludingWindowsDefaultRecipe < Cop
30
+ include RangeHelp
31
+
30
32
  MSG = 'Do not include the Windows default recipe, which only installs win32 gems already included in Chef Infra Client'.freeze
31
33
 
32
34
  def_node_matcher :windows_recipe_usage?, <<-PATTERN
@@ -41,7 +43,7 @@ module RuboCop
41
43
 
42
44
  def autocorrect(node)
43
45
  lambda do |corrector|
44
- corrector.remove(node.loc.expression)
46
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
45
47
  end
46
48
  end
47
49
  end
@@ -33,6 +33,8 @@ module RuboCop
33
33
  # default: '"127.0.0.1:2181"'
34
34
  #
35
35
  class AttributeMetadata < Cop
36
+ include RangeHelp
37
+
36
38
  MSG = 'The attribute metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
37
39
 
38
40
  def on_send(node)
@@ -41,7 +43,7 @@ module RuboCop
41
43
 
42
44
  def autocorrect(node)
43
45
  lambda do |corrector|
44
- corrector.remove(node.loc.expression)
46
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :right))
45
47
  end
46
48
  end
47
49
  end
@@ -28,6 +28,8 @@ module RuboCop
28
28
  # conflicts "another_cookbook"
29
29
  #
30
30
  class ConflictsMetadata < Cop
31
+ include RangeHelp
32
+
31
33
  MSG = 'The conflicts metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
32
34
 
33
35
  def on_send(node)
@@ -36,7 +38,7 @@ module RuboCop
36
38
 
37
39
  def autocorrect(node)
38
40
  lambda do |corrector|
39
- corrector.remove(node.loc.expression)
41
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :right))
40
42
  end
41
43
  end
42
44
  end
@@ -0,0 +1,48 @@
1
+ #
2
+ # Copyright:: 2019-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
+
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module ChefRedundantCode
22
+ # The grouping metadata.rb method is not used and is unnecessary in cookbooks.
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # grouping 'windows_log_rotate', title: 'Demonstration cookbook with code to switch loggers'
28
+ #
29
+ #
30
+ class GroupingMetadata < Cop
31
+ include RangeHelp
32
+
33
+ MSG = 'The grouping metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
34
+
35
+ def on_send(node)
36
+ add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :grouping
37
+ end
38
+
39
+ def autocorrect(node)
40
+ lambda do |corrector|
41
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -37,7 +37,12 @@ module RuboCop
37
37
 
38
38
  def autocorrect(node)
39
39
  lambda do |corrector|
40
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :right))
40
+ if node.arguments.first.respond_to?(:heredoc?) && node.arguments.first.heredoc?
41
+ total_range = range_with_surrounding_space(range: node.loc.expression.join(node.arguments.first.loc.heredoc_end), side: :left)
42
+ corrector.remove(total_range)
43
+ else
44
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
45
+ end
41
46
  end
42
47
  end
43
48
  end
@@ -28,6 +28,8 @@ module RuboCop
28
28
  # provides "some_thing"
29
29
  #
30
30
  class ProvidesMetadata < Cop
31
+ include RangeHelp
32
+
31
33
  MSG = 'The provides metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
32
34
 
33
35
  def on_send(node)
@@ -36,7 +38,7 @@ module RuboCop
36
38
 
37
39
  def autocorrect(node)
38
40
  lambda do |corrector|
39
- corrector.remove(node.loc.expression)
41
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
40
42
  end
41
43
  end
42
44
  end
@@ -28,6 +28,8 @@ module RuboCop
28
28
  #
29
29
  #
30
30
  class RecipeMetadata < Cop
31
+ include RangeHelp
32
+
31
33
  MSG = "The recipe metadata.rb method is not used and is unnecessary in cookbooks. Recipes should be documented in the cookbook's README.md file instead.".freeze
32
34
 
33
35
  def on_send(node)
@@ -36,7 +38,7 @@ module RuboCop
36
38
 
37
39
  def autocorrect(node)
38
40
  lambda do |corrector|
39
- corrector.remove(node.loc.expression)
41
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
40
42
  end
41
43
  end
42
44
  end
@@ -28,6 +28,8 @@ module RuboCop
28
28
  # replaces "another_cookbook"
29
29
  #
30
30
  class ReplacesMetadata < Cop
31
+ include RangeHelp
32
+
31
33
  MSG = 'The replaces metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
32
34
 
33
35
  def on_send(node)
@@ -36,7 +38,7 @@ module RuboCop
36
38
 
37
39
  def autocorrect(node)
38
40
  lambda do |corrector|
39
- corrector.remove(node.loc.expression)
41
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
40
42
  end
41
43
  end
42
44
  end
@@ -28,6 +28,8 @@ module RuboCop
28
28
  # end
29
29
  #
30
30
  class ResourceWithNothingAction < Cop
31
+ include RangeHelp
32
+
31
33
  MSG = 'There is no need to define a :nothing action in your resource as Chef Infra Client provides the :nothing action by default for every resource.'.freeze
32
34
 
33
35
  def_node_matcher :nothing_action?, <<-PATTERN
@@ -42,7 +44,7 @@ module RuboCop
42
44
 
43
45
  def autocorrect(node)
44
46
  lambda do |corrector|
45
- corrector.remove(node.source_range)
47
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
46
48
  end
47
49
  end
48
50
  end
@@ -28,6 +28,8 @@ module RuboCop
28
28
  # suggests "another_cookbook"
29
29
  #
30
30
  class SuggestsMetadata < Cop
31
+ include RangeHelp
32
+
31
33
  MSG = 'The suggests metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
32
34
 
33
35
  def on_send(node)
@@ -36,7 +38,7 @@ module RuboCop
36
38
 
37
39
  def autocorrect(node)
38
40
  lambda do |corrector|
39
- corrector.remove(node.loc.expression)
41
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
40
42
  end
41
43
  end
42
44
  end
@@ -450,6 +450,7 @@ module RuboCop
450
450
  'gplv2': 'GPL-2.0',
451
451
  'gplv3': 'GPL-3.0',
452
452
  'mit license': 'MIT',
453
+ 'UNLICENSED': 'all rights reserved',
453
454
  }.freeze
454
455
 
455
456
  MSG = 'Cookbook metadata.rb does not use a SPDX compliant license string or "all rights reserved". See https://spdx.org/licenses/ for a complete list of license identifiers.'.freeze
@@ -47,7 +47,10 @@ module RuboCop
47
47
  # If it was an octal literal, make sure we write out the right number.
48
48
  replacement_base = octal?(node) ? 8 : 10
49
49
  replacement_mode = node.children.first.to_s(replacement_base)
50
- corrector.replace(node.loc.expression, replacement_mode.inspect)
50
+
51
+ # we build our own escaped string instead of using .inspect because that way
52
+ # we can use single quotes instead of the double quotes that .inspect adds
53
+ corrector.replace(node.loc.expression, "\'#{replacement_mode}\'")
51
54
  end
52
55
  end
53
56
 
@@ -0,0 +1,73 @@
1
+ #
2
+ # 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 ChefStyle
21
+ # Don't loop over an array to set cookbook dependencies or supported platforms if you have fewer than three values to set. Setting multiple `supports` or `depends` values is simpler and easier to understand for new users.
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ #
27
+ # %w( debian ubuntu ).each do |os|
28
+ # supports os
29
+ # end
30
+ #
31
+ # %w( apt yum ).each do |cb|
32
+ # depends cb
33
+ # end
34
+ #
35
+ # # good
36
+ #
37
+ # supports 'debian'
38
+ # supports 'ubuntu'
39
+ #
40
+ # depends 'apt'
41
+ # depends 'yum'
42
+ #
43
+ class OverlyComplexSupportsDependsMetadata < Cop
44
+ MSG = "Don't loop over an array to set cookbook dependencies or supported platforms if you have fewer than three values to set.".freeze
45
+
46
+ def_node_matcher :supports_depends_array?, <<-PATTERN
47
+ (block
48
+ (send
49
+ $(array ...) :each)
50
+ (args
51
+ (arg _))
52
+ (send nil? ${:supports :depends} (lvar _)))
53
+ PATTERN
54
+
55
+ def on_block(node)
56
+ supports_depends_array?(node) do |array, _type|
57
+ add_offense(node, location: :expression, message: MSG, severity: :refactor) if array.values.count < 3
58
+ end
59
+ end
60
+
61
+ def autocorrect(node)
62
+ lambda do |corrector|
63
+ supports_depends_array?(node) do |array, type|
64
+ corrected_value = array.values.map { |x| "#{type} '#{x.source}'" }
65
+ corrector.replace(node.loc.expression, corrected_value.join("\n"))
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cookstyle
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.18.4
4
+ version: 5.19.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thom May
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-01-03 00:00:00.000000000 Z
12
+ date: 2020-01-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubocop
@@ -179,6 +179,7 @@ files:
179
179
  - lib/rubocop/cop/chef/redundant/attribute_metadata.rb
180
180
  - lib/rubocop/cop/chef/redundant/conflicts_metadata.rb
181
181
  - lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb
182
+ - lib/rubocop/cop/chef/redundant/grouping_metadata.rb
182
183
  - lib/rubocop/cop/chef/redundant/long_description_metadata.rb
183
184
  - lib/rubocop/cop/chef/redundant/name_property_and_required.rb
184
185
  - lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb
@@ -201,6 +202,7 @@ files:
201
202
  - lib/rubocop/cop/chef/style/comments_format.rb
202
203
  - lib/rubocop/cop/chef/style/file_mode.rb
203
204
  - lib/rubocop/cop/chef/style/immediate_notification_timing.rb
205
+ - lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb
204
206
  - lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb
205
207
  - lib/rubocop/cop/chef/style/true_false_resource_properties.rb
206
208
  - lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb