cookstyle 5.20.0 → 5.21.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5c8af7267fe94ef01b9da1d3b84c221101cdb7e8976217cbca2bd8f43c475858
4
- data.tar.gz: 3f6196cac78246fc8b36a013f4bbb335470824f3ef23974869596087c8082925
3
+ metadata.gz: 415ddd30149c8277cf255cd81ceb26835eb969da515e97e748372dc72ba40840
4
+ data.tar.gz: cf2a3e2be30fff68aabef795aecdb6e489a2ede68f09f21cd3c781c35979846c
5
5
  SHA512:
6
- metadata.gz: ef274262f9b3e41204d9ee5153c9c4022958659b69a6a4d781848a523d6bb37336101fafe5c30ece1d072118b13422803bfa629ba97605c75bd9588c8ef21e36
7
- data.tar.gz: 6fbff49a1400321bee3bec46011d0b3193d8460a702c9749a84e11c9992c5642e75b2e3857ab1c84461c23a31b0e5b4c4dcd186e9ea4a0cc588974fd3e28d4b7
6
+ metadata.gz: 911b2afb60dbf89849e4a3e349ef784d7e2b29a25ed00a9eca07222a4fd002fd7486d9d1e2baac4c94cf486c8423ba53f2d0bd83d85cfa2ba668daf05056cb11
7
+ data.tar.gz: 8f81cdfd43904b11c7651d29dc4f26e5bd930af8d68c2be477cf3c59f9f5d5a37a0f20c5b41640054d5c2ec817d4a4c87ea17be6cda9a486a5c1ffd4f4dbfeb1
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.4
2
+ TargetRubyVersion: 2.3
3
3
  TargetChefVersion: ~
4
4
  Exclude:
5
5
  - '**/files/**/*'
@@ -127,6 +127,11 @@ ChefStyle/ChefWhaaat:
127
127
  Enabled: false
128
128
  VersionAdded: '5.20.0'
129
129
 
130
+ ChefStyle/UnnecessaryOSCheck:
131
+ Description: Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
132
+ Enabled: false
133
+ VersionAdded: '5.21.0'
134
+
130
135
  ###############################
131
136
  # ChefCorrectness: Avoiding potential problems
132
137
  ###############################
@@ -1101,6 +1106,15 @@ ChefModernize/ExecuteSysctl:
1101
1106
  - '**/attributes/*.rb'
1102
1107
  - '**/Berksfile'
1103
1108
 
1109
+ ChefModernize/SimplifyAptPpaSetup:
1110
+ Description: The apt_repository resource allows setting up PPAs without using the full URL to ppa.launchpad.net.
1111
+ Enabled: true
1112
+ VersionAdded: '5.21.0'
1113
+ Exclude:
1114
+ - '**/metadata.rb'
1115
+ - '**/attributes/*.rb'
1116
+ - '**/Berksfile'
1117
+
1104
1118
  ###############################
1105
1119
  # ChefRedundantCode: Cleanup unnecessary code in your cookbooks regardless of Chef Infra Client release
1106
1120
  ###############################
@@ -1247,6 +1261,22 @@ ChefRedundantCode/GroupingMetadata:
1247
1261
  Include:
1248
1262
  - '**/metadata.rb'
1249
1263
 
1264
+ ChefRedundantCode/StringPropertyWithNilDefault:
1265
+ Description: 'Properties have a nil value by default so there is no need to set the default value to nil.'
1266
+ Enabled: true
1267
+ VersionAdded: '5.21.0'
1268
+ Include:
1269
+ - '**/resources/*.rb'
1270
+ - '**/libraries/*.rb'
1271
+
1272
+ ChefRedundantCode/PropertySplatRegex:
1273
+ Description: 'There is no need to validate the input of properties in resources using a regex value that will always pass.'
1274
+ Enabled: true
1275
+ VersionAdded: '5.21.0'
1276
+ Include:
1277
+ - '**/resources/*.rb'
1278
+ - '**/libraries/*.rb'
1279
+
1250
1280
  ###############################
1251
1281
  # Migrating to new patterns
1252
1282
  ###############################
@@ -1444,8 +1474,6 @@ Style/MethodDefParentheses:
1444
1474
  Enabled: true
1445
1475
  Naming/MethodName:
1446
1476
  Enabled: true
1447
- Style/ModuleFunction:
1448
- Enabled: true
1449
1477
  Style/MultilineBlockChain:
1450
1478
  Enabled: true
1451
1479
  Layout/MultilineBlockLayout:
@@ -1625,6 +1653,7 @@ Layout/ConditionPosition:
1625
1653
  Lint/Debugger:
1626
1654
  Enabled: true
1627
1655
  Layout/DefEndAlignment:
1656
+ AutoCorrect: true
1628
1657
  Enabled: true
1629
1658
  Lint/DeprecatedClassMethods:
1630
1659
  Enabled: true
@@ -1642,6 +1671,7 @@ Lint/EmptyInterpolation:
1642
1671
  Enabled: true
1643
1672
  Layout/EndAlignment:
1644
1673
  Enabled: true
1674
+ AutoCorrect: true
1645
1675
  Lint/EndInMethod:
1646
1676
  Enabled: true
1647
1677
  Lint/EnsureReturn:
@@ -1958,3 +1988,8 @@ Style/IfUnlessModifier:
1958
1988
  # in general cookbooks shouldn't include a gemfile, but if they do they can do with it as they wish
1959
1989
  Bundler/OrderedGems:
1960
1990
  Enabled: false
1991
+
1992
+ # extend self and module_function are not the same. module_function makes all the methods private
1993
+ # and this rule will break any library that worked with extend self.
1994
+ Style/ModuleFunction:
1995
+ Enabled: false
@@ -38,6 +38,7 @@ module Cookstyle
38
38
  end
39
39
 
40
40
  require_relative 'rubocop/chef'
41
+ require_relative 'rubocop/chef/autocorrect_helpers'
41
42
  require_relative 'rubocop/chef/cookbook_helpers'
42
43
  require_relative 'rubocop/chef/platform_helpers'
43
44
  require_relative 'rubocop/chef/cookbook_only'
@@ -1,4 +1,4 @@
1
1
  module Cookstyle
2
- VERSION = "5.20.0".freeze # rubocop: disable Style/StringLiterals
2
+ VERSION = "5.21.9".freeze # rubocop: disable Style/StringLiterals
3
3
  RUBOCOP_VERSION = '0.75.1'.freeze
4
4
  end
@@ -0,0 +1,32 @@
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 Chef
19
+ # Helpers for use in autocorrection
20
+ module AutocorrectHelpers
21
+ # if the node has a heredoc as an argument you'll only get the start of the heredoc and removing
22
+ # the node will result in broken ruby. This way we match the node and the entire heredoc for removal
23
+ def expression_including_heredocs(node)
24
+ if node.arguments.last.respond_to?(:heredoc?) && node.arguments.last.heredoc?
25
+ node.loc.expression.join(node.arguments.last.loc.heredoc_end)
26
+ else
27
+ node.loc.expression
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -73,7 +73,9 @@ module RuboCop
73
73
  private
74
74
 
75
75
  def check_action(ast_obj)
76
- add_offense(ast_obj, location: :expression, message: MSG, severity: :refactor) if ast_obj.value == :change
76
+ if ast_obj.respond_to?(:value) && ast_obj.value == :change
77
+ add_offense(ast_obj, location: :expression, message: MSG, severity: :refactor)
78
+ end
77
79
  end
78
80
  end
79
81
  end
@@ -37,6 +37,7 @@ module RuboCop
37
37
 
38
38
  def on_send(node)
39
39
  yum_dnf_compat_recipe_usage?(node) do
40
+ node = node.parent if node.parent&.conditional? && node.parent&.single_line?
40
41
  add_offense(node, location: :expression, message: MSG, severity: :refactor)
41
42
  end
42
43
  end
@@ -0,0 +1,67 @@
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 ChefModernize
22
+ # The apt_repository resource allows setting up PPAs without using the full URL to ppa.launchpad.net, which should be used to simplify the resource code in your cookbooks.
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # apt_repository 'atom-ppa' do
28
+ # uri 'http://ppa.launchpad.net/webupd8team/atom/ubuntu'
29
+ # components ['main']
30
+ # keyserver 'keyserver.ubuntu.com'
31
+ # key 'C2518248EEA14886'
32
+ # end
33
+ #
34
+ # # good
35
+ # apt_repository 'atom-ppa' do
36
+ # uri 'ppa:webupd8team/atom'
37
+ # components ['main']
38
+ # keyserver 'keyserver.ubuntu.com'
39
+ # key 'C2518248EEA14886'
40
+ # end
41
+ #
42
+ class SimplifyAptPpaSetup < Cop
43
+ include RangeHelp
44
+ include RuboCop::Chef::CookbookHelpers
45
+
46
+ MSG = 'The apt_repository resource allows setting up PPAs without using the full URL to ppa.launchpad.net.'.freeze
47
+
48
+ def on_block(node)
49
+ match_property_in_resource?(:apt_repository, 'uri', node) do |uri|
50
+ if %r{http(s)*://ppa.launchpad.net/(.*)/ubuntu$}.match?(uri.arguments&.first&.str_content)
51
+ add_offense(uri, location: :expression, message: MSG, severity: :refactor)
52
+ end
53
+ end
54
+ end
55
+
56
+ def autocorrect(node)
57
+ if (replacement_val = %r{http(s)*://ppa.launchpad.net/(.*)/ubuntu}.match(node.source)[2])
58
+ lambda do |corrector|
59
+ corrector.replace(node.loc.expression, "uri 'ppa:#{replacement_val}'")
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -34,6 +34,7 @@ module RuboCop
34
34
  #
35
35
  class AttributeMetadata < Cop
36
36
  include RangeHelp
37
+ include RuboCop::Chef::AutocorrectHelpers
37
38
 
38
39
  MSG = 'The attribute metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
39
40
 
@@ -43,7 +44,7 @@ module RuboCop
43
44
 
44
45
  def autocorrect(node)
45
46
  lambda do |corrector|
46
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :right))
47
+ corrector.remove(range_with_surrounding_space(range: expression_including_heredocs(node), side: :left))
47
48
  end
48
49
  end
49
50
  end
@@ -29,6 +29,7 @@ module RuboCop
29
29
  #
30
30
  class GroupingMetadata < Cop
31
31
  include RangeHelp
32
+ include RuboCop::Chef::AutocorrectHelpers
32
33
 
33
34
  MSG = 'The grouping metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
34
35
 
@@ -38,7 +39,7 @@ module RuboCop
38
39
 
39
40
  def autocorrect(node)
40
41
  lambda do |corrector|
41
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
42
+ corrector.remove(range_with_surrounding_space(range: expression_including_heredocs(node), side: :left))
42
43
  end
43
44
  end
44
45
  end
@@ -28,6 +28,7 @@ module RuboCop
28
28
  #
29
29
  class LongDescriptionMetadata < Cop
30
30
  include RangeHelp
31
+ include RuboCop::Chef::AutocorrectHelpers
31
32
 
32
33
  MSG = 'The long_description metadata.rb method is not used and is unnecessary in cookbooks.'.freeze
33
34
 
@@ -37,12 +38,7 @@ module RuboCop
37
38
 
38
39
  def autocorrect(node)
39
40
  lambda do |corrector|
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
+ corrector.remove(range_with_surrounding_space(range: expression_including_heredocs(node), side: :left))
46
42
  end
47
43
  end
48
44
  end
@@ -0,0 +1,58 @@
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 ChefRedundantCode
21
+ # When a property has a type of String it can accept any string. There is no need to also validate string inputs against a regex that accept all values.
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ # property :config_file, String, regex: /.*/
27
+ # attribute :config_file, String, regex: /.*/
28
+ #
29
+ # # good
30
+ # property :config_file, String
31
+ # attribute :config_file, String
32
+ #
33
+ class PropertySplatRegex < Cop
34
+ include RangeHelp
35
+
36
+ MSG = 'There is no need to validate the input of properties in resources using a regex value that will always pass.'.freeze
37
+
38
+ def_node_matcher :property_with_regex_splat?, <<-PATTERN
39
+ (send nil? {:property :attribute} (sym _) ... (hash <$(pair (sym :regex) (regexp (str ".*") (regopt))) ...>))
40
+ PATTERN
41
+
42
+ def on_send(node)
43
+ property_with_regex_splat?(node) do |splat|
44
+ add_offense(splat, location: :expression, message: MSG, severity: :refactor)
45
+ end
46
+ end
47
+
48
+ def autocorrect(node)
49
+ lambda do |corrector|
50
+ range = range_with_surrounding_comma(range_with_surrounding_space(range: node.loc.expression, side: :left), :left)
51
+ corrector.remove(range)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -29,6 +29,7 @@ module RuboCop
29
29
  #
30
30
  class RecipeMetadata < Cop
31
31
  include RangeHelp
32
+ include RuboCop::Chef::AutocorrectHelpers
32
33
 
33
34
  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
34
35
 
@@ -38,7 +39,7 @@ module RuboCop
38
39
 
39
40
  def autocorrect(node)
40
41
  lambda do |corrector|
41
- corrector.remove(range_with_surrounding_space(range: node.loc.expression, side: :left))
42
+ corrector.remove(range_with_surrounding_space(range: expression_including_heredocs(node), side: :left))
42
43
  end
43
44
  end
44
45
  end
@@ -0,0 +1,65 @@
1
+ #
2
+ # Copyright:: 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
+ module RuboCop
18
+ module Cop
19
+ module Chef
20
+ module ChefRedundantCode
21
+ # Properties have a nil value by default so there is no need to set the default value to nil.
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ # property :config_file, String, default: nil
27
+ # property :config_file, [String, NilClass], default: nil
28
+ #
29
+ # # good
30
+ # property :config_file, String
31
+ # property :config_file, [String, NilClass]
32
+ #
33
+ class StringPropertyWithNilDefault < Cop
34
+ include RangeHelp
35
+
36
+ MSG = 'Properties have a nil value by default so there is no need to set the default value to nil.'.freeze
37
+
38
+ def_node_matcher :string_property_with_nil_default?, <<-PATTERN
39
+ (send nil? :property (sym _)
40
+ {(const nil? :String) #string_and_nil_like?}
41
+ (hash <$(pair (sym :default) (nil)) ...>))
42
+ PATTERN
43
+
44
+ # An array of types that includes String & either NilClass or nil
45
+ def_node_matcher :string_and_nil_like?, <<-PATTERN
46
+ (array <(const nil? :String) {(const nil? :NilClass) (nil)}>)
47
+ PATTERN
48
+
49
+ def on_send(node)
50
+ string_property_with_nil_default?(node) do |nil_default|
51
+ add_offense(nil_default, location: :expression, message: MSG, severity: :refactor)
52
+ end
53
+ end
54
+
55
+ def autocorrect(node)
56
+ lambda do |corrector|
57
+ range = range_with_surrounding_comma(range_with_surrounding_space(range: node.loc.expression, side: :left), :left)
58
+ corrector.remove(range)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -439,6 +439,7 @@ module RuboCop
439
439
  COMMON_TYPOS = {
440
440
  "all_rights": 'all rights reserved',
441
441
  "apache 2.0": 'Apache-2.0',
442
+ "apache v2": 'Apache-2.0',
442
443
  "apache v2.0": 'Apache-2.0',
443
444
  "apache license version 2.0": 'Apache-2.0',
444
445
  "apache2": 'Apache-2.0',
@@ -0,0 +1,113 @@
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
+ # Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic.
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ # node['os'] == 'darwin'
27
+ # node['os'] == 'windows'
28
+ # node['os'].eql?('aix')
29
+ # %w(netbsd openbsd freebsd).include?(node['os'])
30
+ #
31
+ # # good
32
+ # platform_family?('mac_os_x')
33
+ # platform_family?('windows')
34
+ # platform_family?('aix')
35
+ # platform_family?('netbsd', 'openbsd', 'freebsd)
36
+ #
37
+ class UnnecessaryOSCheck < Cop
38
+ MSG = "Use the platform_family?() helpers instead of node['os] == 'foo' for platform_families that match 1:1 with OS values.".freeze
39
+
40
+ # sorted list of all the os values that match 1:1 with a platform_family
41
+ UNNECESSARY_OS_VALUES = %w(aix darwin dragonflybsd freebsd netbsd openbsd solaris2 windows).freeze
42
+
43
+ def_node_matcher :os_equals?, <<-PATTERN
44
+ (send (send (send nil? :node) :[] (str "os") ) ${:== :!=} $str )
45
+ PATTERN
46
+
47
+ def_node_matcher :os_eql?, <<-PATTERN
48
+ (send (send (send nil? :node) :[] (str "os") ) :eql? $str )
49
+ PATTERN
50
+
51
+ def_node_matcher :os_include?, <<-PATTERN
52
+ (send $(array ...) :include? (send (send nil? :node) :[] (str "os")))
53
+ PATTERN
54
+
55
+ def on_send(node)
56
+ os_equals?(node) do |_operator, val|
57
+ if UNNECESSARY_OS_VALUES.include?(val.value)
58
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
59
+ end
60
+ end
61
+
62
+ os_eql?(node) do |val|
63
+ if UNNECESSARY_OS_VALUES.include?(val.value)
64
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
65
+ end
66
+ end
67
+
68
+ os_include?(node) do |val|
69
+ array_of_plats = array_from_ast(val)
70
+ # see if all the values in the .include? usage are in our list of 1:1 platform family to os values
71
+ if (UNNECESSARY_OS_VALUES & array_of_plats) == array_of_plats
72
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
73
+ end
74
+ end
75
+ end
76
+
77
+ # return the passed value unless the value is darwin and then return mac_os_x
78
+ def sanitized_platform(plat)
79
+ plat == 'darwin' ? 'mac_os_x' : plat
80
+ end
81
+
82
+ # given an ast array spit out a ruby array
83
+ def array_from_ast(ast)
84
+ vals = []
85
+ ast.each_child_node { |x| vals << x.value }
86
+ vals.sort
87
+ end
88
+
89
+ def autocorrect(node)
90
+ lambda do |corrector|
91
+ os_equals?(node) do |operator, plat|
92
+ corrected_string = operator == :!= ? '!' : ''
93
+ corrected_string << "platform_family?('#{sanitized_platform(plat.value)}')"
94
+ corrector.replace(node.loc.expression, corrected_string)
95
+ end
96
+
97
+ os_include?(node) do |plats|
98
+ platforms = plats.values.map { |x| x.str_type? ? "'#{sanitized_platform(x.value)}'" : x.source }
99
+ corrected_string = "platform_family?(#{platforms.join(', ')})"
100
+ corrector.replace(node.loc.expression, corrected_string)
101
+ end
102
+
103
+ os_eql?(node) do |plat|
104
+ corrected_string = "platform_family?('#{sanitized_platform(plat.value)}')"
105
+ corrector.replace(node.loc.expression, corrected_string)
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -28,6 +28,7 @@ module RuboCop
28
28
  # node['platform'] != 'ubuntu'
29
29
  # node['platform_family'] != 'debian'
30
30
  # %w(rhel suse).include?(node['platform_family'])
31
+ # node['platform'].eql?('ubuntu')
31
32
  #
32
33
  # # good
33
34
  # platform?('ubuntu')
@@ -47,6 +48,10 @@ module RuboCop
47
48
  (send $(array ...) :include? (send (send nil? :node) :[] $(str {"platform" "platform_family"})))
48
49
  PATTERN
49
50
 
51
+ def_node_matcher :platform_eql?, <<-PATTERN
52
+ (send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) :eql? $str )
53
+ PATTERN
54
+
50
55
  def on_send(node)
51
56
  platform_equals?(node) do
52
57
  add_offense(node, location: :expression, message: MSG, severity: :refactor)
@@ -55,6 +60,10 @@ module RuboCop
55
60
  platform_include?(node) do
56
61
  add_offense(node, location: :expression, message: MSG, severity: :refactor)
57
62
  end
63
+
64
+ platform_eql?(node) do
65
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
66
+ end
58
67
  end
59
68
 
60
69
  def autocorrect(node)
@@ -70,6 +79,11 @@ module RuboCop
70
79
  corrected_string = "#{type.value}?(#{platforms.join(', ')})"
71
80
  corrector.replace(node.loc.expression, corrected_string)
72
81
  end
82
+
83
+ platform_eql?(node) do |type, plat|
84
+ corrected_string = "#{type.value}?('#{plat.value}')"
85
+ corrector.replace(node.loc.expression, corrected_string)
86
+ end
73
87
  end
74
88
  end
75
89
  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.20.0
4
+ version: 5.21.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-23 00:00:00.000000000 Z
12
+ date: 2020-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubocop
@@ -45,6 +45,7 @@ files:
45
45
  - lib/cookstyle.rb
46
46
  - lib/cookstyle/version.rb
47
47
  - lib/rubocop/chef.rb
48
+ - lib/rubocop/chef/autocorrect_helpers.rb
48
49
  - lib/rubocop/chef/cookbook_helpers.rb
49
50
  - lib/rubocop/chef/cookbook_only.rb
50
51
  - lib/rubocop/chef/platform_helpers.rb
@@ -167,6 +168,7 @@ files:
167
168
  - lib/rubocop/cop/chef/modernize/sc_windows_resource.rb
168
169
  - lib/rubocop/cop/chef/modernize/seven_zip_archive.rb
169
170
  - lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb
171
+ - lib/rubocop/cop/chef/modernize/simplify_apt_ppa_setup.rb
170
172
  - lib/rubocop/cop/chef/modernize/systctl_param_resource.rb
171
173
  - lib/rubocop/cop/chef/modernize/unnecessary_mixlib_shellout_require.rb
172
174
  - lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb
@@ -183,12 +185,14 @@ files:
183
185
  - lib/rubocop/cop/chef/redundant/grouping_metadata.rb
184
186
  - lib/rubocop/cop/chef/redundant/long_description_metadata.rb
185
187
  - lib/rubocop/cop/chef/redundant/name_property_and_required.rb
188
+ - lib/rubocop/cop/chef/redundant/property_splat_regex.rb
186
189
  - lib/rubocop/cop/chef/redundant/property_with_default_and_required.rb
187
190
  - lib/rubocop/cop/chef/redundant/provides_metadata.rb
188
191
  - lib/rubocop/cop/chef/redundant/recipe_metadata.rb
189
192
  - lib/rubocop/cop/chef/redundant/replaces_metadata.rb
190
193
  - lib/rubocop/cop/chef/redundant/resource_with_nothing_action.rb
191
194
  - lib/rubocop/cop/chef/redundant/sensitive_property_in_resource.rb
195
+ - lib/rubocop/cop/chef/redundant/string_property_with_nil_default.rb
192
196
  - lib/rubocop/cop/chef/redundant/suggests_metadata.rb
193
197
  - lib/rubocop/cop/chef/redundant/unnecessary_desired_state.rb
194
198
  - lib/rubocop/cop/chef/redundant/unnecessary_name_property.rb
@@ -207,6 +211,7 @@ files:
207
211
  - lib/rubocop/cop/chef/style/overly_complex_supports_depends_metadata.rb
208
212
  - lib/rubocop/cop/chef/style/simplify_platform_major_version_check.rb
209
213
  - lib/rubocop/cop/chef/style/true_false_resource_properties.rb
214
+ - lib/rubocop/cop/chef/style/unnecessary_os_check.rb
210
215
  - lib/rubocop/cop/chef/style/unnecessary_platform_case_statement.rb
211
216
  - lib/rubocop/cop/chef/style/use_platform_helpers.rb
212
217
  - lib/rubocop/cop/target_chef_version.rb