cookstyle 6.7.3 → 6.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80cc2eea05cb8d161ae1849a5c9ccb5c104016d2f855945a38d45ce19e5e514e
4
- data.tar.gz: a9db56d7cddd31470f7ec92326ad3763775d5536089cc70621ad60966eb806b1
3
+ metadata.gz: df67335031d87f8782e6511ad4e1fbbf3dc40e5b9cfdec6f9cee45c6acd3cb38
4
+ data.tar.gz: 52a46161cd9e6d11643ae5b2b945347d69fac127f14878ebe1875d0cb1b34cd4
5
5
  SHA512:
6
- metadata.gz: a2e16c81ad78a74694473ace336016e135552e427a2e8ee2ab697f28678afc038def94552512c37e519fe60459362f31718c180fc01a7fde6aab4f62e5606109
7
- data.tar.gz: 05e491839ef5ada7257e780ec9d105cfed7b027451c78af9435723efc968d2380b5ad604763efceeb003a2a221e03057186ab358133e0145f79728c45c8f414b
6
+ metadata.gz: bb3a7a9c0cd62c6b664d659c565c0a48d3f496fa371e26349030539c8ddbfa6d30c4f7545d5c2b33f5bf268b7348867e4d010626488286c86b9bb1e720cb3ae1
7
+ data.tar.gz: 8af9e42d0f12bc1b0c262a341a60bee272831afb40cf3ff89ddbbf9865115c6d3162d4da4df85636e84c7391c8d75db776b5cd574c7c280aa09971d63674dd03
@@ -946,11 +946,12 @@ ChefDeprecations/LogResourceNotifications:
946
946
  - '**/metadata.rb'
947
947
  - '**/Berksfile'
948
948
 
949
- ChefDeprecations/ResourceWithoutNameOrProvides:
950
- Description: In Chef Infra Client 16 and later legacy HWRP resources must use either `resource_name` or `provides` to define the resource name.
949
+ ChefDeprecations/HWRPWithoutProvides:
950
+ Description: In Chef Infra Client 16 and later a legacy HWRP resource must use `provides` to define how the resource is called in recipes or other resources. To maintain compatibility with Chef Infra Client < 16 use both `resource_name` and `provides`.
951
951
  StyleGuide: '#chefdeprecationsresourcewithoutnameorprovides'
952
952
  Enabled: true
953
953
  VersionAdded: '6.0.0'
954
+ VersionChanged: '6.8.0'
954
955
  Include:
955
956
  - '**/libraries/*.rb'
956
957
 
@@ -1,4 +1,4 @@
1
1
  module Cookstyle
2
- VERSION = "6.7.3".freeze # rubocop: disable Style/StringLiterals
3
- RUBOCOP_VERSION = '0.85.0'.freeze
2
+ VERSION = "6.8.0".freeze # rubocop: disable Style/StringLiterals
3
+ RUBOCOP_VERSION = '0.85.1'.freeze
4
4
  end
@@ -0,0 +1,141 @@
1
+ #
2
+ # Copyright:: Copyright (c) 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 ChefDeprecations
22
+ # Chef Infra Client 16 and later a legacy HWRP resource must use `provides` to define how the resource is called in recipes or other resources. To maintain compatibility with Chef Infra Client < 16 use both `resource_name` and `provides`.
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # class Chef
28
+ # class Resource
29
+ # class UlimitRule < Chef::Resource
30
+ # property :type, [Symbol, String], required: true
31
+ # property :item, [Symbol, String], required: true
32
+ #
33
+ # # additional resource code
34
+ # end
35
+ # end
36
+ # end
37
+ #
38
+ # # bad
39
+ # class Chef
40
+ # class Resource
41
+ # class UlimitRule < Chef::Resource
42
+ # resource_name :ulimit_rule
43
+ #
44
+ # property :type, [Symbol, String], required: true
45
+ # property :item, [Symbol, String], required: true
46
+ #
47
+ # # additional resource code
48
+ # end
49
+ # end
50
+ # end
51
+ #
52
+ # # good when Chef Infra Client < 15 (but compatible with 16+ as well)
53
+ # class Chef
54
+ # class Resource
55
+ # class UlimitRule < Chef::Resource
56
+ # resource_name :ulimit_rule
57
+ # provides :ulimit_rule
58
+ #
59
+ # property :type, [Symbol, String], required: true
60
+ # property :item, [Symbol, String], required: true
61
+ #
62
+ # # additional resource code
63
+ # end
64
+ # end
65
+ # end
66
+ #
67
+ # # good when Chef Infra Client 16+
68
+ # class Chef
69
+ # class Resource
70
+ # class UlimitRule < Chef::Resource
71
+ # provides :ulimit_rule
72
+ #
73
+ # property :type, [Symbol, String], required: true
74
+ # property :item, [Symbol, String], required: true
75
+ #
76
+ # # additional resource code
77
+ # end
78
+ # end
79
+ # end
80
+ #
81
+ # # better
82
+ # Convert your legacy HWRPs to custom resources
83
+ #
84
+ class HWRPWithoutProvides < Cop
85
+ MSG = 'In Chef Infra Client 16 and later a legacy HWRP resource must use `provides` to define how the resource is called in recipes or other resources. To maintain compatibility with Chef Infra Client < 16 use both `resource_name` and `provides`.'.freeze
86
+
87
+ def_node_matcher :HWRP?, <<-PATTERN
88
+ (class
89
+ (const nil? :Chef) nil?
90
+ (class
91
+ (const nil? :Resource) nil?
92
+ $(class
93
+ (const nil? ... )
94
+ (const
95
+ (const nil? :Chef) :Resource)
96
+ (begin ... ))))
97
+ PATTERN
98
+
99
+ def_node_search :provides, '(send nil? :provides (sym $_) ...)'
100
+ def_node_search :resource_name_ast, '$(send nil? :resource_name ...)'
101
+ def_node_search :resource_name, '(send nil? :resource_name (sym $_))'
102
+
103
+ def on_class(node)
104
+ HWRP?(node) do |inherit|
105
+ add_offense(inherit, location: :expression, message: MSG, severity: :warning) unless has_provides?
106
+ end
107
+ end
108
+
109
+ def has_provides?
110
+ provides_ast = provides(processed_source.ast)
111
+ return false if provides_ast.count == 0
112
+
113
+ resource_ast = resource_name(processed_source.ast)
114
+
115
+ if resource_ast.count == 0
116
+ true # no resource_name, but provides
117
+ else
118
+ # since we have a resource and provides make sure the there is a provides that
119
+ # matches the resource name
120
+ provides_ast.include?(resource_ast.first)
121
+ end
122
+ end
123
+
124
+ def indentation(node)
125
+ node.source_range.source_line =~ /\S/
126
+ end
127
+
128
+ def autocorrect(node)
129
+ lambda do |corrector|
130
+ resource_name_ast(node) do |ast_match|
131
+ # build a new string to add after that includes the new line and the proper indentation
132
+ new_string = "\n" + ast_match.source.dup.gsub('resource_name', 'provides').prepend(' ' * indentation(ast_match))
133
+ corrector.insert_after(ast_match.source_range, new_string)
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: 2020, Chef Software, Inc.
2
+ # Copyright:: Copyright (c) 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");
@@ -18,7 +18,7 @@ module RuboCop
18
18
  module Cop
19
19
  module Chef
20
20
  module ChefDeprecations
21
- # Starting with Chef Infra Client 16, using `resource_name` without also using `provides` will result in resource failures. Use `provides` to change the name of the resource instead and omit `resource_name` entirely if it matches the name Chef Infra Client automatically assigns based on COOKBOOKNAME_FILENAME.
21
+ # Starting with Chef Infra Client 16, using `resource_name` without also using `provides` will result in resource failures. Make sure to use both `resource_name` and `provides` to change the name of the resource. You can also omit `resource_name` entirely if the value set matches the name Chef Infra Client automatically assigns based on COOKBOOKNAME_FILENAME.
22
22
  #
23
23
  # @example
24
24
  #
@@ -30,18 +30,17 @@ module RuboCop
30
30
  include RuboCop::Chef::CookbookHelpers
31
31
  include RangeHelp
32
32
 
33
- MSG = 'Starting with Chef Infra Client 16, using `resource_name` without also using `provides` will result in resource failures. Use `provides` to change the name of the resource instead and omit `resource_name` entirely if it matches the name Chef Infra Client automatically assigns based on COOKBOOKNAME_FILENAME.'.freeze
33
+ MSG = 'Starting with Chef Infra Client 16, using `resource_name` without also using `provides` will result in resource failures. Make sure to use both `resource_name` and `provides` to change the name of the resource. You can also omit `resource_name` entirely if the value set matches the name Chef Infra Client automatically assigns based on COOKBOOKNAME_FILENAME.'.freeze
34
34
 
35
- def_node_matcher :resource_name?, <<-PATTERN
36
- (send nil? :resource_name (sym $_ ))
37
- PATTERN
35
+ def_node_matcher :resource_name?, '(send nil? :resource_name (sym $_ ))'
38
36
 
39
- def_node_search :cb_name_match, <<~PATTERN
40
- (send nil? :name (str $_))
41
- PATTERN
37
+ def_node_search :cb_name_match, '(send nil? :name (str $_))'
42
38
 
43
- def_node_search :provides_methods?, '(send nil? {:provides :chef_version_for_provides} ... )'
39
+ def_node_search :provides, '(send nil? :provides (sym $_) ...)'
44
40
 
41
+ # determine the cookbook name either by parsing metdata.rb or by parsing metata.json
42
+ #
43
+ # @returns [String] the cookbook name
45
44
  def cookbook_name
46
45
  cb_path = File.expand_path(File.join(processed_source.file_path, '../..'))
47
46
 
@@ -53,9 +52,19 @@ module RuboCop
53
52
  end
54
53
  end
55
54
 
55
+ # given a resource name make sure there's a provides that matches that name
56
+ #
57
+ # @returns [TrueClass, FalseClass]
58
+ def valid_provides?(resource_name)
59
+ provides_ast = provides(processed_source.ast)
60
+ return false unless provides_ast
61
+
62
+ provides_ast.include?(resource_name)
63
+ end
64
+
56
65
  def on_send(node)
57
- resource_name?(node) do |_name|
58
- add_offense(node, location: :expression, message: MSG, severity: :warning) unless provides_methods?(processed_source.ast)
66
+ resource_name?(node) do |r_name|
67
+ add_offense(node, location: :expression, message: MSG, severity: :warning) unless valid_provides?(r_name)
59
68
  end
60
69
  end
61
70
 
@@ -65,7 +74,7 @@ module RuboCop
65
74
  if name.to_s == "#{cookbook_name}_#{File.basename(processed_source.path, '.rb')}"
66
75
  corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
67
76
  else
68
- corrector.replace(node.loc.expression, node.source.gsub('resource_name', 'provides'))
77
+ corrector.insert_after(node.source_range, "\n#{node.source.gsub('resource_name', 'provides')}")
69
78
  end
70
79
  end
71
80
  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: 6.7.3
4
+ version: 6.8.0
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-06-02 00:00:00.000000000 Z
12
+ date: 2020-06-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubocop
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 0.85.0
20
+ version: 0.85.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 0.85.0
27
+ version: 0.85.1
28
28
  description:
29
29
  email:
30
30
  - thom@chef.io
@@ -100,6 +100,7 @@ files:
100
100
  - lib/rubocop/cop/chef/deprecation/eol_audit_mode.rb
101
101
  - lib/rubocop/cop/chef/deprecation/epic_fail.rb
102
102
  - lib/rubocop/cop/chef/deprecation/erl_call.rb
103
+ - lib/rubocop/cop/chef/deprecation/hwrp_without_provides.rb
103
104
  - lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb
104
105
  - lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb
105
106
  - lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb
@@ -122,7 +123,6 @@ files:
122
123
  - lib/rubocop/cop/chef/deprecation/resource_uses_only_resource_name.rb
123
124
  - lib/rubocop/cop/chef/deprecation/resource_uses_provider_base_method.rb
124
125
  - lib/rubocop/cop/chef/deprecation/resource_uses_updated_method.rb
125
- - lib/rubocop/cop/chef/deprecation/resource_without_name_or_provides.rb
126
126
  - lib/rubocop/cop/chef/deprecation/ruby_27_keyword_argument_warnings.rb
127
127
  - lib/rubocop/cop/chef/deprecation/ruby_block_create_action.rb
128
128
  - lib/rubocop/cop/chef/deprecation/run_command_helper.rb
@@ -1,81 +0,0 @@
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
-
18
- module RuboCop
19
- module Cop
20
- module Chef
21
- module ChefDeprecations
22
- # In Chef Infra Client 16 and later a legacy HWRP resource must use either `resource_name` or `provides` to define the resource name.
23
- #
24
- # @example
25
- #
26
- # # bad
27
- # class Chef
28
- # class Resource
29
- # class UlimitRule < Chef::Resource
30
- # property :type, [Symbol, String], required: true
31
- # property :item, [Symbol, String], required: true
32
- #
33
- # # additional resource code
34
- # end
35
- # end
36
- # end
37
- #
38
- # # good
39
- # class Chef
40
- # class Resource
41
- # class UlimitRule < Chef::Resource
42
- # resource_name :ulimit_rule
43
- #
44
- # property :type, [Symbol, String], required: true
45
- # property :item, [Symbol, String], required: true
46
- #
47
- # # additional resource code
48
- # end
49
- # end
50
- # end
51
- #
52
- # # better
53
- # Convert your legacy HWRPs to custom resources
54
- #
55
- class ResourceWithoutNameOrProvides < Cop
56
- MSG = 'In Chef Infra Client 16 and later legacy HWRP resources must use either `resource_name` or `provides` to define the resource name.'.freeze
57
-
58
- def_node_matcher :HWRP?, <<-PATTERN
59
- (class
60
- (const nil? :Chef) nil?
61
- (class
62
- (const nil? :Resource) nil?
63
- $(class
64
- (const nil? ... )
65
- (const
66
- (const nil? :Chef) :Resource)
67
- (begin ... ))))
68
- PATTERN
69
-
70
- def_node_search :provides_or_resource_name?, '(send nil? {:provides :resource_name} ...)'
71
-
72
- def on_class(node)
73
- HWRP?(node) do |inherit|
74
- add_offense(inherit, location: :expression, message: MSG, severity: :warning) if provides_or_resource_name?(processed_source.ast).nil?
75
- end
76
- end
77
- end
78
- end
79
- end
80
- end
81
- end