cookstyle 5.16.11 → 5.17.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1f54db0598a337932e9af4148f10d1b6859e25299c11d768e422447c98fc70a
4
- data.tar.gz: e0cd92fcda91ef0fb6ffde326250b71fa3aafc47cc91fa9d98cd75567931c5bb
3
+ metadata.gz: 9542dd1a3bbc3a2f0f4db8c2108e67ef70cec17da89557746489ccc9dd89d4f5
4
+ data.tar.gz: b2a67152f01ef162bfe42b833e15b627fe361403a2ad450b0f591bc490a1b551
5
5
  SHA512:
6
- metadata.gz: 9f49d0dbab8862ce77c1820c2e02ddbb8c0a5174ee5c665c6655b8534dfc95668e7aeeb0eff86a4dba077f2d8b7c9c74e21c2c383e669f80fca673502bdee515
7
- data.tar.gz: 6f130be8ca5c343e0ea938166848206761a5a8d26e278c68151dee3601be53ca966c1311a7cc7dd415c5790d88005148a232a18216210e6bf8d8ae60fa642844
6
+ metadata.gz: 1432f849f9464fabd9e9b17c559889f1c537671175b5690fb48d2f311030dd51c12746fc1dbad60dfd084fde4377e48ea5ee4c8a3bdd991f486f46ffafa8627e
7
+ data.tar.gz: a0f4c2a88b75f3049967747a8fc183d922800ff0b84d0d11bcb853444d1755bc83c7ee90e02c70a0bdb04b4d65b208ee438093010fbcab184c5bbeb817f7ec62
@@ -801,7 +801,7 @@ ChefModernize/MinitestHandlerUsage:
801
801
  - '**/metadata.rb'
802
802
 
803
803
  ChefModernize/IncludingMixinShelloutInResources:
804
- Description: There is no need to include Chef::Mixin::ShellOut in resources or providers as this is already done by Chef Infra Client.
804
+ Description: 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+.
805
805
  Enabled: true
806
806
  VersionAdded: '5.4.0'
807
807
  Include:
@@ -1056,6 +1056,14 @@ ChefModernize/ExecuteSleep:
1056
1056
  - '**/attributes/*.rb'
1057
1057
  - '**/Berksfile'
1058
1058
 
1059
+ ChefModernize/DslIncludeInResource:
1060
+ Description: 'There is no need to include Chef::DSL::Recipe or Chef::DSL::IncludeRecipe classes in resources or providers as this is done automatically.'
1061
+ Enabled: true
1062
+ VersionAdded: '5.17.0'
1063
+ Include:
1064
+ - '**/resources/*.rb'
1065
+ - '**/providers/*.rb'
1066
+
1059
1067
  ###############################
1060
1068
  # ChefRedundantCode: Cleanup unncessary code in your cookbooks regardless of chef-client release
1061
1069
  ###############################
@@ -1177,6 +1185,24 @@ ChefRedundantCode/UnnecessaryDesiredState:
1177
1185
  - '**/resources/*.rb'
1178
1186
  - '**/libraries/*.rb'
1179
1187
 
1188
+ ChefRedundantCode/AptRepositoryNotifiesAptUpdate:
1189
+ Description: There is no need to notify an apt-get update when an apt_repository is created as this is done automatically by the apt_repository resource.
1190
+ Enabled: true
1191
+ VersionAdded: '5.17.0'
1192
+ Exclude:
1193
+ - '**/metadata.rb'
1194
+ - '**/attributes/*.rb'
1195
+ - '**/Berksfile'
1196
+
1197
+ ChefRedundantCode/AptRepositoryDistributionDefault:
1198
+ Description: There is no need to pass `distribution node['lsb']['codename']` to an apt_repository resource as this is done automatically by the apt_repository resource.
1199
+ Enabled: true
1200
+ VersionAdded: '5.17.0'
1201
+ Exclude:
1202
+ - '**/metadata.rb'
1203
+ - '**/attributes/*.rb'
1204
+ - '**/Berksfile'
1205
+
1180
1206
  ###############################
1181
1207
  # Migrating to new patterns
1182
1208
  ###############################
@@ -1,4 +1,4 @@
1
- require 'cookstyle/version'
1
+ require_relative 'cookstyle/version'
2
2
 
3
3
  require 'pathname'
4
4
  require 'yaml'
@@ -37,11 +37,11 @@ module Cookstyle
37
37
  end
38
38
  end
39
39
 
40
- require 'rubocop/chef'
41
- require 'rubocop/chef/cookbook_helpers'
42
- require 'rubocop/chef/platform_helpers'
43
- require 'rubocop/chef/cookbook_only'
44
- require 'rubocop/cop/target_chef_version'
40
+ require_relative 'rubocop/chef'
41
+ require_relative 'rubocop/chef/cookbook_helpers'
42
+ require_relative 'rubocop/chef/platform_helpers'
43
+ require_relative 'rubocop/chef/cookbook_only'
44
+ require_relative 'rubocop/cop/target_chef_version'
45
45
 
46
46
  # Chef specific cops
47
47
  Dir.glob(File.dirname(__FILE__) + '/rubocop/cop/chef/**/*.rb') do |file|
@@ -1,4 +1,4 @@
1
1
  module Cookstyle
2
- VERSION = "5.16.11".freeze # rubocop: disable Style/StringLiterals
2
+ VERSION = "5.17.4".freeze # rubocop: disable Style/StringLiterals
3
3
  RUBOCOP_VERSION = '0.75.1'.freeze
4
4
  end
@@ -38,6 +38,15 @@ module RuboCop
38
38
 
39
39
  def_node_matcher :supports?, '(send nil? :supports $str ...)'
40
40
 
41
+ def_node_matcher :supports_array?, <<-PATTERN
42
+ (block
43
+ (send
44
+ $(array ...) :each)
45
+ (args
46
+ (arg _))
47
+ (send nil? :supports (lvar _)))
48
+ PATTERN
49
+
41
50
  def on_send(node)
42
51
  supports?(node) do |plat|
43
52
  if INVALID_PLATFORMS[plat.str_content]
@@ -46,19 +55,33 @@ module RuboCop
46
55
  end
47
56
  end
48
57
 
58
+ def on_block(node)
59
+ supports_array?(node) do |plats|
60
+ plats.values.each do |plat|
61
+ if INVALID_PLATFORMS[plat.str_content]
62
+ add_offense(plat, location: :expression, message: MSG, severity: :refactor)
63
+ end
64
+ end
65
+ end
66
+ end
67
+
49
68
  def autocorrect(node)
50
- correct_string = autocorrect_platform_string(node.str_content)
69
+ correct_string = corrected_platform_source(node)
51
70
  if correct_string
52
71
  lambda do |corrector|
53
- corrector.replace(node.loc.expression, "'#{correct_string}'")
72
+ corrector.replace(node.loc.expression, correct_string)
54
73
  end
55
74
  end
56
75
  end
57
76
 
58
77
  # private
59
78
 
60
- def autocorrect_platform_string(bad_string)
61
- INVALID_PLATFORMS[bad_string.delete(',').downcase]
79
+ def corrected_platform_source(node)
80
+ val = INVALID_PLATFORMS[node.str_content.delete(',').downcase]
81
+ return false unless val
82
+
83
+ # if the value was previously quoted make sure to quote it again
84
+ node.source.match?(/^('|")/) ? "'" + val + "'" : val
62
85
  end
63
86
  end
64
87
  end
@@ -0,0 +1,54 @@
1
+ #
2
+ # Copyright:: 2019, 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 ChefModernize
21
+ # Chef Infra Client 12.4+ includes the Chef::DSL::Recipe in the resource and provider classed by default so there is no need to include this DSL in your resources or providers.
22
+ #
23
+ # # bad
24
+ # include Chef::DSL::Recipe
25
+ # include Chef::DSL::IncludeRecipe
26
+ #
27
+ class DslIncludeInResource < Cop
28
+ include RangeHelp
29
+
30
+ MSG = 'Chef Infra Client 12.4+ includes the Chef::DSL::Recipe in the resource and provider classed by default so there is no need to include this DSL in your resources or providers.'.freeze
31
+
32
+ def_node_matcher :dsl_include?, <<-PATTERN
33
+ (send nil? :include
34
+ (const
35
+ (const
36
+ (const nil? :Chef) :DSL) {:Recipe :IncludeRecipe}))
37
+ PATTERN
38
+
39
+ def on_send(node)
40
+ dsl_include?(node) do
41
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
42
+ end
43
+ end
44
+
45
+ def autocorrect(node)
46
+ lambda do |corrector|
47
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -19,23 +19,25 @@ module RuboCop
19
19
  module Cop
20
20
  module Chef
21
21
  module ChefModernize
22
- # There is no need to include Chef::Mixin::ShellOut in resources or providers as this is already done by Chef Infra Client 12.4+.
22
+ # 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+.
23
23
  #
24
24
  # @example
25
25
  #
26
26
  # # bad
27
27
  # require 'chef/mixin/shell_out'
28
28
  # include Chef::Mixin::ShellOut
29
-
29
+ # require 'chef/mixin/powershell_out'
30
+ # include Chef::Mixin::PowershellOut
31
+ #
30
32
  class IncludingMixinShelloutInResources < Cop
31
- MSG = 'There is no need to include Chef::Mixin::ShellOut in resources or providers as this is already done by Chef Infra Client 12.4+.'.freeze
33
+ 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
32
34
 
33
35
  def_node_matcher :include_shellout?, <<-PATTERN
34
- (send nil? :include (const (const (const nil? :Chef) :Mixin) :ShellOut))
36
+ (send nil? :include (const (const (const nil? :Chef) :Mixin) {:ShellOut :PowershellOut}))
35
37
  PATTERN
36
38
 
37
39
  def_node_matcher :require_shellout?, <<-PATTERN
38
- (send nil? :require ( str "chef/mixin/shell_out"))
40
+ (send nil? :require ( str {"chef/mixin/shell_out" "chef/mixin/powershell_out"} ))
39
41
  PATTERN
40
42
 
41
43
  def on_send(node)
@@ -0,0 +1,66 @@
1
+ #
2
+ # Copyright:: 2019, 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 ChefRedundantCode
21
+ # There is no need to pass `distribution node['lsb']['codename']` to an apt_repository resource as this is done automatically by the apt_repository resource.
22
+ #
23
+ # # bad
24
+ # apt_repository 'my repo' do
25
+ # uri 'http://packages.example.com/debian'
26
+ # components %w(stable main)
27
+ # deb_src false
28
+ # distribution node['lsb']['codename']
29
+ # end
30
+ #
31
+ # # good
32
+ # apt_repository 'my repo' do
33
+ # uri 'http://packages.example.com/debian'
34
+ # components %w(stable main)
35
+ # deb_src false
36
+ # end
37
+ #
38
+ class AptRepositoryDistributionDefault < Cop
39
+ include RuboCop::Chef::CookbookHelpers
40
+ include RangeHelp
41
+
42
+ MSG = "There is no need to pass `distribution node['lsb']['codename']` to an apt_repository resource as this is done automatically by the apt_repository resource.".freeze
43
+
44
+ def_node_matcher :default_dist?, <<-PATTERN
45
+ (send nil? :distribution (send (send (send nil? :node) :[] ({sym str} {:lsb "lsb"})) :[] ({sym str} {:codename "codename"})))
46
+ PATTERN
47
+
48
+ def on_block(node)
49
+ match_property_in_resource?(:apt_repository, 'distribution', node) do |dist|
50
+ ## require 'pry'; binding.pry
51
+ default_dist?(dist) do
52
+ add_offense(dist, location: :expression, message: MSG, severity: :refactor)
53
+ end
54
+ end
55
+ end
56
+
57
+ def autocorrect(node)
58
+ lambda do |corrector|
59
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,59 @@
1
+ #
2
+ # Copyright:: 2019, 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 ChefRedundantCode
21
+ # There is no need to notify an apt-get update when an apt_repository is created as this is done automatically by the apt_repository resource.
22
+ #
23
+ # # bad
24
+ # apt_repository 'my repo' do
25
+ # uri 'http://packages.example.com/debian'
26
+ # components %w(stable main)
27
+ # deb_src false
28
+ # notifies :run, 'execute[apt-get update]', :immediately
29
+ # end
30
+ #
31
+ # # good
32
+ # apt_repository 'my repo' do
33
+ # uri 'http://packages.example.com/debian'
34
+ # components %w(stable main)
35
+ # deb_src false
36
+ # end
37
+ #
38
+ class AptRepositoryNotifiesAptUpdate < Cop
39
+ include RuboCop::Chef::CookbookHelpers
40
+ include RangeHelp
41
+
42
+ MSG = 'There is no need to notify an apt-get update when an apt_repository is created as this is done automatically by the apt_repository resource.'.freeze
43
+
44
+ def on_block(node)
45
+ match_property_in_resource?(:apt_repository, 'notifies', node) do |notifies|
46
+ add_offense(notifies, location: :expression, message: MSG, severity: :refactor) if notifies.arguments[1] == s(:str, 'execute[apt-get update]')
47
+ end
48
+ end
49
+
50
+ def autocorrect(node)
51
+ lambda do |corrector|
52
+ corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ 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.16.11
4
+ version: 5.17.4
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: 2019-12-17 00:00:00.000000000 Z
12
+ date: 2019-12-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubocop
@@ -134,6 +134,7 @@ files:
134
134
  - lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb
135
135
  - lib/rubocop/cop/chef/modernize/definitions.rb
136
136
  - lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb
137
+ - lib/rubocop/cop/chef/modernize/dsl_include_in_resource.rb
137
138
  - lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb
138
139
  - lib/rubocop/cop/chef/modernize/execute_apt_update.rb
139
140
  - lib/rubocop/cop/chef/modernize/execute_sc_exe.rb
@@ -171,6 +172,8 @@ files:
171
172
  - lib/rubocop/cop/chef/modernize/windows_zipfile.rb
172
173
  - lib/rubocop/cop/chef/modernize/zipfile_resource.rb
173
174
  - lib/rubocop/cop/chef/modernize/zypper_repo.rb
175
+ - lib/rubocop/cop/chef/redundant/apt_repository_distribution_default.rb
176
+ - lib/rubocop/cop/chef/redundant/apt_repository_notifies_apt_update.rb
174
177
  - lib/rubocop/cop/chef/redundant/attribute_metadata.rb
175
178
  - lib/rubocop/cop/chef/redundant/conflicts_metadata.rb
176
179
  - lib/rubocop/cop/chef/redundant/custom_resource_with_allowed_actions.rb