cookstyle 7.28.2 → 7.30.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 205f14a7f600dc2fe712e9407e16165b72cadab5624913efba78a6f0748f65ae
4
- data.tar.gz: c03813392f90967e5036e49a8886d6c1b7e31ea7319da75c12008d3a01c635f8
3
+ metadata.gz: af05586e951fed9a9a11777583d2f8b0ec7634cca38b3b5b9641e2afb11be50b
4
+ data.tar.gz: 8d727e0f4898bf20149fa74ee6d15782840577c98eeb9fe25048ae71ab13c4b1
5
5
  SHA512:
6
- metadata.gz: 6f7f8c8c719dbb83b740882be2f247250c95fb7f330a82a0cf8d7b5b96fa7071ca7b55761a8a599ac4801f2c75eb403f64c04bde4245f31fc12b8f753418d3f5
7
- data.tar.gz: 8a32adeedb7654948337162eeb9a8c660f66ab13655ec537aa584b15a156f726130f16630dddb2f1fa0169d10e5dd4a84b7353392591431490f12129ed0245c4
6
+ metadata.gz: dbd9a0129be207bd120c0ba860260726c4547b8e0356eda5c221b70d29aaf9ec92fdce5af7450b919f8a74774b79820c128220749e883c226de4c82f45c21915
7
+ data.tar.gz: 74e57634c9aef93e952858a542cac3966c849fa3e1deb2dd5b0ef4b7cd9f8167eba767e55635b72c2cbc7f3d08228a3fed26ed4f2e072e4eb6d8c78a09c3b151
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  module Cookstyle
3
- VERSION = "7.28.2" # rubocop: disable Style/StringLiterals
3
+ VERSION = "7.30.1" # rubocop: disable Style/StringLiterals
4
4
  RUBOCOP_VERSION = '1.24.1'
5
5
  end
@@ -111,6 +111,8 @@ module RuboCop
111
111
  case node.type
112
112
  when :send
113
113
  yield(node) if node.receiver.nil? # if it's not nil then we're not in a property foo we're in bar.foo
114
+ when :block # ie: not_if { ruby_foo }
115
+ yield(node)
114
116
  when :while
115
117
  extract_send_types(node.body) { |t| yield(t) }
116
118
  when :if
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright:: 2019, Chef Software, Inc.
3
+ # Copyright:: 2019-2022, Chef Software, Inc.
4
4
  # Author:: Tim Smith (<tsmith@chef.io>)
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,6 +26,7 @@ module RuboCop
26
26
  # #### incorrect
27
27
  # depends 'poise'
28
28
  # depends 'poise-service'
29
+ # depends 'poise-hoist'
29
30
  #
30
31
  class CookbookDependsOnPoise < Base
31
32
  MSG = 'Cookbooks should not depend on the deprecated Poise framework'
@@ -37,7 +38,7 @@ module RuboCop
37
38
 
38
39
  def on_send(node)
39
40
  depends_method?(node) do |arg|
40
- add_offense(node, message: MSG, severity: :warning) if %w(poise poise-service).include?(arg.value)
41
+ add_offense(node, message: MSG, severity: :warning) if %w(poise poise-service poise-hoist).include?(arg.value)
41
42
  end
42
43
  end
43
44
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
- # Copyright:: 2020, Chef Software, Inc.
3
+ # Copyright:: 2020-2022, Chef Software, Inc.
4
4
  # Author:: Tim Smith (<tsmith@chef.io>)
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,7 +19,7 @@ module RuboCop
19
19
  module Cop
20
20
  module Chef
21
21
  module RedundantCode
22
- # Use the :create_if_missing action instead of not_if with a ::File.exist(FOO) check.
22
+ # Use the `:create_if_missing` action instead of `not_if` with a `::File.exist(FOO)` check.
23
23
  #
24
24
  # @example
25
25
  #
@@ -32,6 +32,15 @@ module RuboCop
32
32
  # not_if { ::File.exists?('/logs/foo/error.log') }
33
33
  # end
34
34
  #
35
+ # remote_file 'Download file' do
36
+ # path '/foo/bar'
37
+ # source 'https://foo.com/bar'
38
+ # owner 'root'
39
+ # group 'root'
40
+ # mode '0644'
41
+ # not_if { ::File.exist?('/foo/bar') }
42
+ # end
43
+ #
35
44
  # #### correct
36
45
  # cookbook_file '/logs/foo/error.log' do
37
46
  # source 'error.log'
@@ -41,30 +50,61 @@ module RuboCop
41
50
  # action :create_if_missing
42
51
  # end
43
52
  #
53
+ # remote_file 'Download file' do
54
+ # path '/foo/bar'
55
+ # source 'https://foo.com/bar'
56
+ # owner 'root'
57
+ # group 'root'
58
+ # mode '0644'
59
+ # action :create_if_missing
60
+ # end
61
+ #
44
62
  class UseCreateIfMissing < Base
45
63
  include RuboCop::Chef::CookbookHelpers
46
64
  extend AutoCorrector
65
+ include RangeHelp
47
66
 
48
67
  MSG = 'Use the :create_if_missing action instead of not_if with a ::File.exist(FOO) check.'
68
+ RESOURCES = %i(cookbook_file file remote_directory cron_d remote_file template).freeze
49
69
 
50
- def_node_matcher :not_if_file_exist?, <<-PATTERN
51
- (block (send nil? :not_if) (args) (send (const {nil? (cbase)} :File) {:exist? :exists?} $(str ...)))
70
+ def_node_matcher :file_exist_value, <<-PATTERN
71
+ (send (const {nil? (cbase)} :File) {:exist? :exists?} $(...))
52
72
  PATTERN
53
73
 
54
- def_node_matcher :file_like_resource?, <<-PATTERN
55
- (block (send nil? {:cookbook_file :file :remote_directory :cron_d :remote_file :template} $str) ... )
56
- PATTERN
74
+ def_node_search :has_action?, '(send nil? :action ...)'
57
75
 
58
- def_node_search :create_action?, '(send nil? :action $sym)'
76
+ def_node_search :create_action, '(send nil? :action $sym)'
77
+
78
+ def_node_search :path_property_node, '(send nil? :path $...)'
59
79
 
60
80
  def on_block(node)
61
- not_if_file_exist?(node) do |props|
62
- file_like_resource?(node.parent.parent) do |resource_blk_name|
63
- # the not_if file name is the same as the resource name and there's no action defined (it's the default)
64
- return unless props == resource_blk_name && create_action?(node.parent.parent).nil?
81
+ match_property_in_resource?(RESOURCES, :not_if, node) do |prop|
82
+ # if it's not a block type then it's not a ruby block with a file.exist
83
+ return unless prop.block_type?
84
+
85
+ file_exist_value(prop.body) do |exists_content| # check the contents of the ruby block that's passed
86
+ # not an offense if:
87
+ # - The resource block name (the last arg of the send) doesn't match the exists check content
88
+ # - If a path property is used it doesn't match the exists check content
89
+ return unless exists_content == node.send_node.last_argument ||
90
+ exists_content == path_property_node(node)&.first&.first
91
+
92
+ # we have an action so check if it is :create. If that's the case we can replace that value
93
+ # and delete the not_if line. Otherwise it's an action like :remove and while the whole resource
94
+ # no longer makes sense that's not our problem here.
95
+ create_action(node) do |create_action|
96
+ return unless create_action == s(:sym, :create)
97
+ add_offense(prop, message: MSG, severity: :refactor) do |corrector|
98
+ corrector.replace(create_action, ':create_if_missing')
99
+ corrector.remove(range_by_whole_lines(prop.source_range, include_final_newline: true))
100
+ end
101
+ return
102
+ end
65
103
 
66
- add_offense(node, message: MSG, severity: :refactor) do |corrector|
67
- corrector.replace(node, 'action :create_if_missing')
104
+ # if we got this far we didn't return above when we had an action
105
+ # so we can just replace the not_if line with a new :create_if_missing action
106
+ add_offense(prop, message: MSG, severity: :refactor) do |corrector|
107
+ corrector.replace(prop, 'action :create_if_missing')
68
108
  end
69
109
  end
70
110
  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: 7.28.2
4
+ version: 7.30.1
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: 2022-01-14 00:00:00.000000000 Z
12
+ date: 2022-01-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rubocop