cookstyle 5.12.13 → 5.13.7
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/config/cookstyle.yml +23 -0
- data/lib/cookstyle.rb +1 -0
- data/lib/cookstyle/version.rb +1 -1
- data/lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb +85 -0
- data/lib/rubocop/cop/chef/deprecation/node_set_without_level.rb +66 -0
- data/lib/rubocop/cop/chef/modernize/default_action_initializer.rb +7 -3
- data/lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb +52 -0
- data/lib/rubocop/monkey_patches/json_formatter.rb +20 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 536183d50b038f3bd9db265813f38f29502167e80aca88124b8419d5124b786d
|
4
|
+
data.tar.gz: a13c369bc38ce2c8dda503438d86988bff7d6899972df4b3b8f2773d3b96d631
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6d0cd3db208a387271bbb6afd4c8ba4afc5e5f625e6e715c03cffe2360f0ef16de1d9d1c6e7e1d3b7d610a891b0cf40281e2691ca47b56931a9144e18ffd260
|
7
|
+
data.tar.gz: 76d0d91643ed7837f8c2316a811e79adf68dc6092ef2b764c4f41c9c4c96bead89db404fdc83bc75f485d83c11b3f8980691208fb8b393f9b08ee82af3afb3ab
|
data/config/cookstyle.yml
CHANGED
@@ -610,6 +610,21 @@ ChefDeprecations/Cheffile:
|
|
610
610
|
Include:
|
611
611
|
- '**/Cheffile'
|
612
612
|
|
613
|
+
ChefDeprecations/LegacyNotifySyntax:
|
614
|
+
Description: Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.
|
615
|
+
Enabled: true
|
616
|
+
VersionAdded: '5.13.0'
|
617
|
+
Exclude:
|
618
|
+
- '**/metadata.rb'
|
619
|
+
|
620
|
+
ChefDeprecations/NodeSetWithoutLevel:
|
621
|
+
Description: When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.
|
622
|
+
Enabled: true
|
623
|
+
VersionAdded: '5.13.0'
|
624
|
+
Exclude:
|
625
|
+
- '**/metadata.rb'
|
626
|
+
- '**/attributes/*.rb'
|
627
|
+
|
613
628
|
###############################
|
614
629
|
# ChefModernize: Cleaning up legacy code and using new built-in resources
|
615
630
|
###############################
|
@@ -905,6 +920,14 @@ ChefModernize/UnnecessaryMixlibShelloutRequire:
|
|
905
920
|
- '**/resources/*.rb'
|
906
921
|
- '**/providers/*.rb'
|
907
922
|
|
923
|
+
ChefModernize/EmptyResourceInitializeMethod:
|
924
|
+
Description: There is no need for an empty initialize method in a resource
|
925
|
+
Enabled: true
|
926
|
+
VersionAdded: '5.13.0'
|
927
|
+
Include:
|
928
|
+
- '**/resources/*.rb'
|
929
|
+
- '**/providers/*.rb'
|
930
|
+
|
908
931
|
###############################
|
909
932
|
# Migrating to new patterns
|
910
933
|
###############################
|
data/lib/cookstyle.rb
CHANGED
data/lib/cookstyle/version.rb
CHANGED
@@ -0,0 +1,85 @@
|
|
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 ChefDeprecations
|
21
|
+
# Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# template '/etc/www/configures-apache.conf' do
|
27
|
+
# notifies :restart, resources(service: 'apache')
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# template '/etc/www/configures-apache.conf' do
|
31
|
+
# notifies :restart, resources(service: 'apache'), :immediately
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# template '/etc/www/configures-apache.conf' do
|
35
|
+
# notifies :restart, resources(service: service_name_variable), :immediately
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# # good
|
39
|
+
# template '/etc/www/configures-apache.conf' do
|
40
|
+
# notifies :restart, 'service[apache]'
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# template '/etc/www/configures-apache.conf' do
|
44
|
+
# notifies :restart, 'service[apache]', :immediately
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# template '/etc/www/configures-apache.conf' do
|
48
|
+
# notifies :restart, "service[#{service_name_variable}]", :immediately
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
class LegacyNotifySyntax < Cop
|
52
|
+
MSG = 'Use the new-style notification syntax which allows you to notify resources defined later in a recipe or resource.'.freeze
|
53
|
+
|
54
|
+
def_node_matcher :legacy_notify?, <<-PATTERN
|
55
|
+
(send nil? :notifies $(sym _) (send nil? :resources (hash (pair $(sym _) $(...) ) ) ) $... )
|
56
|
+
PATTERN
|
57
|
+
|
58
|
+
def on_send(node)
|
59
|
+
legacy_notify?(node) do
|
60
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def autocorrect(node)
|
65
|
+
lambda do |corrector|
|
66
|
+
legacy_notify?(node) do |action, type, name, timing|
|
67
|
+
service_value = case name.type
|
68
|
+
when :str
|
69
|
+
"'#{type.source}[#{name.value}]'"
|
70
|
+
when :dstr
|
71
|
+
"\"#{type.source}[#{name.value.source}]\""
|
72
|
+
else
|
73
|
+
"\"#{type.source}[\#{#{name.source}}]\""
|
74
|
+
end
|
75
|
+
new_val = "notifies #{action.source}, #{service_value}"
|
76
|
+
new_val << ", #{timing.first.source}" unless timing.empty?
|
77
|
+
corrector.replace(node.loc.expression, new_val)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
module RuboCop
|
17
|
+
module Cop
|
18
|
+
module Chef
|
19
|
+
module ChefDeprecations
|
20
|
+
# When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
#
|
24
|
+
# # bad
|
25
|
+
# node['foo']['bar'] = 1
|
26
|
+
# node['foo']['bar'] << 1
|
27
|
+
# node['foo']['bar'] += 1
|
28
|
+
# node['foo']['bar'] -= 1
|
29
|
+
#
|
30
|
+
# # good
|
31
|
+
# node.default['foo']['bar'] = 1
|
32
|
+
# node.default['foo']['bar'] << 1
|
33
|
+
# node.default['foo']['bar'] += 1
|
34
|
+
# node.default['foo']['bar'] -= 1
|
35
|
+
#
|
36
|
+
class NodeSetWithoutLevel < Cop
|
37
|
+
MSG = 'When setting a node attribute in Chef Infra Client 11 and later you must specify the precedence level.'.freeze
|
38
|
+
|
39
|
+
def on_op_asgn(node)
|
40
|
+
# make sure it was a += or -=
|
41
|
+
if %i(- +).include?(node.node_parts[1])
|
42
|
+
add_offense_for_bare_assignment(node.children&.first)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def on_send(node)
|
47
|
+
# make sure the method being send is []= and then make sure the receiver is a send
|
48
|
+
if %i([]= <<).include?(node.method_name) && node.receiver.send_type?
|
49
|
+
add_offense_for_bare_assignment(node)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def add_offense_for_bare_assignment(sub_node)
|
56
|
+
if sub_node.receiver == s(:send, nil, :node) # node['foo'] scenario
|
57
|
+
add_offense(sub_node.receiver, location: :selector, message: MSG, severity: :refactor)
|
58
|
+
elsif sub_node.receiver && sub_node.receiver&.node_parts[0] == s(:send, nil, :node) && sub_node.receiver&.node_parts[1] == :[] # node['foo']['bar'] scenario
|
59
|
+
add_offense(sub_node.receiver.node_parts.first, location: :selector, message: MSG, severity: :refactor)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -47,13 +47,17 @@ module RuboCop
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
def_node_search :default_action_method?, '(send nil? :default_action ... )'
|
51
|
+
|
50
52
|
def_node_search :intialize_method, '(def :initialize ... )'
|
51
53
|
|
52
54
|
def autocorrect(node)
|
53
55
|
lambda do |corrector|
|
54
|
-
# insert the new default_action call above the initialize method
|
55
|
-
|
56
|
-
|
56
|
+
# insert the new default_action call above the initialize method, but not if one already exists (this is sadly common)
|
57
|
+
unless default_action_method?(processed_source.ast)
|
58
|
+
initialize_node = intialize_method(processed_source.ast).first
|
59
|
+
corrector.insert_before(initialize_node.source_range, "default_action #{node.descendants.first.source}\n\n")
|
60
|
+
end
|
57
61
|
|
58
62
|
# remove the variable from the initialize method
|
59
63
|
corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
|
@@ -0,0 +1,52 @@
|
|
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
|
+
# There is no need for an empty initialize method in a resource
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# def initialize(*args)
|
27
|
+
# super
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
class EmptyResourceInitializeMethod < Cop
|
31
|
+
MSG = 'There is no need for an empty initialize method in a resource'.freeze
|
32
|
+
|
33
|
+
def_node_matcher :empty_initialize?, <<-PATTERN
|
34
|
+
(def :initialize (args (restarg :args)) (zsuper))
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def on_def(node)
|
38
|
+
empty_initialize?(node) do
|
39
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def autocorrect(node)
|
44
|
+
lambda do |corrector|
|
45
|
+
corrector.remove(node.loc.expression)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Formatter
|
5
|
+
# This formatter formats the report data in JSON format.
|
6
|
+
class JSONFormatter < BaseFormatter
|
7
|
+
# We need to expose the correctable status until https://github.com/rubocop-hq/rubocop/pull/7514 is merged
|
8
|
+
def hash_for_offense(offense)
|
9
|
+
{
|
10
|
+
severity: offense.severity.name,
|
11
|
+
message: offense.message,
|
12
|
+
cop_name: offense.cop_name,
|
13
|
+
corrected: offense.corrected?,
|
14
|
+
correctable: offense.status != :unsupported,
|
15
|
+
location: hash_for_location(offense),
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
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.
|
4
|
+
version: 5.13.7
|
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-11-
|
12
|
+
date: 2019-11-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubocop
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- lib/rubocop/cop/chef/deprecation/erl_call.rb
|
92
92
|
- lib/rubocop/cop/chef/deprecation/inherits_compat_resource.rb
|
93
93
|
- lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb
|
94
|
+
- lib/rubocop/cop/chef/deprecation/legacy_notify_syntax.rb
|
94
95
|
- lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb
|
95
96
|
- lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb
|
96
97
|
- lib/rubocop/cop/chef/deprecation/long_description_metadata.rb
|
@@ -99,6 +100,7 @@ files:
|
|
99
100
|
- lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb
|
100
101
|
- lib/rubocop/cop/chef/deprecation/node_set.rb
|
101
102
|
- lib/rubocop/cop/chef/deprecation/node_set_unless.rb
|
103
|
+
- lib/rubocop/cop/chef/deprecation/node_set_without_level.rb
|
102
104
|
- lib/rubocop/cop/chef/deprecation/partial_search_class_usage.rb
|
103
105
|
- lib/rubocop/cop/chef/deprecation/partial_search_helper_usage.rb
|
104
106
|
- lib/rubocop/cop/chef/deprecation/poise_archive.rb
|
@@ -135,6 +137,7 @@ files:
|
|
135
137
|
- lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb
|
136
138
|
- lib/rubocop/cop/chef/modernize/definitions.rb
|
137
139
|
- lib/rubocop/cop/chef/modernize/depends_zypper_cookbook.rb
|
140
|
+
- lib/rubocop/cop/chef/modernize/empty_resource_initialize.rb
|
138
141
|
- lib/rubocop/cop/chef/modernize/execute_apt_update.rb
|
139
142
|
- lib/rubocop/cop/chef/modernize/execute_tzutil.rb
|
140
143
|
- lib/rubocop/cop/chef/modernize/if_provides_default_action.rb
|
@@ -175,6 +178,7 @@ files:
|
|
175
178
|
- lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb
|
176
179
|
- lib/rubocop/cop/chef/style/use_platform_helpers.rb
|
177
180
|
- lib/rubocop/monkey_patches/comment_config.rb
|
181
|
+
- lib/rubocop/monkey_patches/json_formatter.rb
|
178
182
|
homepage: https://github.com/chef/cookstyle
|
179
183
|
licenses:
|
180
184
|
- Apache-2.0
|