cookstyle 5.4.13 → 5.5.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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/config/cookstyle.yml +231 -129
  3. data/lib/cookstyle.rb +1 -0
  4. data/lib/cookstyle/version.rb +1 -1
  5. data/lib/rubocop/chef/cookbook_helpers.rb +67 -0
  6. data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +34 -31
  7. data/lib/rubocop/cop/chef/correctness/cb_depends_on_self.rb +16 -14
  8. data/lib/rubocop/cop/chef/correctness/default_maintainer_metadata.rb +22 -20
  9. data/lib/rubocop/cop/chef/correctness/insecure_cookbook_url.rb +32 -30
  10. data/lib/rubocop/cop/chef/correctness/invalid_license_string.rb +454 -453
  11. data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +57 -57
  12. data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +18 -16
  13. data/lib/rubocop/cop/chef/correctness/name_property_and_required.rb +61 -59
  14. data/lib/rubocop/cop/chef/correctness/node_normal.rb +29 -27
  15. data/lib/rubocop/cop/chef/correctness/node_normal_unless.rb +29 -27
  16. data/lib/rubocop/cop/chef/correctness/node_save.rb +46 -0
  17. data/lib/rubocop/cop/chef/correctness/ohai_default_recipe.rb +47 -0
  18. data/lib/rubocop/cop/chef/correctness/property_with_default_and_required.rb +35 -33
  19. data/lib/rubocop/cop/chef/correctness/property_with_name_attribute.rb +29 -27
  20. data/lib/rubocop/cop/chef/correctness/resource_sets_internal_properties.rb +52 -0
  21. data/lib/rubocop/cop/chef/correctness/resource_sets_name_property.rb +51 -0
  22. data/lib/rubocop/cop/chef/correctness/resource_with_none_action.rb +52 -0
  23. data/lib/rubocop/cop/chef/correctness/service_resource.rb +26 -24
  24. data/lib/rubocop/cop/chef/correctness/tmp_path.rb +30 -28
  25. data/lib/rubocop/cop/chef/deprecation/attribute_metadata.rb +22 -21
  26. data/lib/rubocop/cop/chef/deprecation/chef_rest.rb +56 -0
  27. data/lib/rubocop/cop/chef/deprecation/chocolatey_package_uninstall_action.rb +58 -0
  28. data/lib/rubocop/cop/chef/deprecation/conflicts_metadata.rb +18 -16
  29. data/lib/rubocop/cop/chef/deprecation/depends_compat_resource.rb +21 -19
  30. data/lib/rubocop/cop/chef/deprecation/depends_partial_search.rb +17 -15
  31. data/lib/rubocop/cop/chef/deprecation/depends_poise.rb +17 -15
  32. data/lib/rubocop/cop/chef/deprecation/deprecated_mixins.rb +39 -37
  33. data/lib/rubocop/cop/chef/deprecation/easy_install.rb +15 -13
  34. data/lib/rubocop/cop/chef/deprecation/epic_fail.rb +24 -22
  35. data/lib/rubocop/cop/chef/deprecation/erl_call.rb +15 -13
  36. data/lib/rubocop/cop/chef/deprecation/launchd_deprecated_hash_property.rb +55 -0
  37. data/lib/rubocop/cop/chef/deprecation/legacy_yum_cookbook_recipes.rb +24 -22
  38. data/lib/rubocop/cop/chef/deprecation/locale_lc_all_property.rb +45 -0
  39. data/lib/rubocop/cop/chef/deprecation/long_description_metadata.rb +21 -19
  40. data/lib/rubocop/cop/chef/deprecation/node_methods_not_attributes.rb +55 -53
  41. data/lib/rubocop/cop/chef/deprecation/node_set.rb +27 -25
  42. data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +27 -25
  43. data/lib/rubocop/cop/chef/deprecation/provides_metadata.rb +18 -16
  44. data/lib/rubocop/cop/chef/deprecation/replaces_metadata.rb +18 -16
  45. data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +23 -21
  46. data/lib/rubocop/cop/chef/deprecation/suggests_metadata.rb +18 -16
  47. data/lib/rubocop/cop/chef/deprecation/use_inline_resources.rb +56 -0
  48. data/lib/rubocop/cop/chef/deprecation/user_supports_property.rb +53 -0
  49. data/lib/rubocop/cop/chef/deprecation/xml_ruby_recipe.rb +51 -0
  50. data/lib/rubocop/cop/chef/deprecation/yum_dnf_compat_recipe.rb +51 -0
  51. data/lib/rubocop/cop/chef/effortless/data_bags.rb +13 -11
  52. data/lib/rubocop/cop/chef/effortless/search_used.rb +13 -11
  53. data/lib/rubocop/cop/chef/modernize/apt_default_recipe.rb +22 -20
  54. data/lib/rubocop/cop/chef/modernize/berksfile_source.rb +31 -29
  55. data/lib/rubocop/cop/chef/modernize/build_essential.rb +25 -23
  56. data/lib/rubocop/cop/chef/modernize/chef_14_resources.rb +27 -25
  57. data/lib/rubocop/cop/chef/modernize/defines_chefspec_matchers.rb +25 -23
  58. data/lib/rubocop/cop/chef/modernize/execute_apt_update.rb +19 -17
  59. data/lib/rubocop/cop/chef/modernize/includes_mixin_shellout.rb +27 -25
  60. data/lib/rubocop/cop/chef/modernize/libarchive_file.rb +41 -0
  61. data/lib/rubocop/cop/chef/modernize/minitest_handler_usage.rb +21 -19
  62. data/lib/rubocop/cop/chef/modernize/powershell_expand_archive.rb +48 -0
  63. data/lib/rubocop/cop/chef/modernize/powershell_install_package.rb +51 -0
  64. data/lib/rubocop/cop/chef/modernize/powershell_install_windowsfeature.rb +54 -0
  65. data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +25 -23
  66. data/lib/rubocop/cop/chef/modernize/resource_with_allowed_actions.rb +77 -0
  67. data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +37 -35
  68. data/lib/rubocop/cop/chef/modernize/respond_to_metadata.rb +54 -0
  69. data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +25 -23
  70. data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +26 -24
  71. data/lib/rubocop/cop/chef/{effortless/node_save.rb → modernize/seven_zip_archive.rb} +16 -16
  72. data/lib/rubocop/cop/chef/modernize/shellouts_to_chocolatey.rb +59 -0
  73. data/lib/rubocop/cop/chef/modernize/whyrun_supported_true.rb +20 -18
  74. data/lib/rubocop/cop/chef/modernize/windows_default_recipe.rb +23 -21
  75. data/lib/rubocop/cop/chef/modernize/windows_version_helper.rb +20 -18
  76. data/lib/rubocop/cop/chef/modernize/windows_zipfile.rb +15 -13
  77. data/lib/rubocop/cop/chef/style/attribute_keys.rb +59 -57
  78. data/lib/rubocop/cop/chef/style/comment_sentence_spacing.rb +14 -12
  79. data/lib/rubocop/cop/chef/style/comments_copyright_format.rb +65 -63
  80. data/lib/rubocop/cop/chef/style/comments_format.rb +48 -45
  81. data/lib/rubocop/cop/chef/style/file_mode.rb +32 -30
  82. metadata +24 -9
  83. data/lib/rubocop/cop/chef/deprecation/respond_to_metadata.rb +0 -53
  84. data/lib/rubocop/cop/chef/modernize/ohai_default_recipe.rb +0 -45
  85. data/lib/rubocop/cop/chef/modernize/resource_with_allowed_action.rb +0 -75
  86. data/lib/rubocop/cop/chef/modernize/use_inline_resources.rb +0 -54
  87. data/lib/rubocop/cop/chef/modernize/xml_ruby_recipe.rb +0 -49
  88. data/lib/rubocop/cop/chef/modernize/yum_dnf_compat_recipe.rb +0 -49
@@ -0,0 +1,41 @@
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
+
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module ChefModernize
22
+ # Use the archive_file resource built into Chef Infra Client 15+ instead of the libarchive_file resource
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # libarchive "C:\file.zip" do
28
+ # path 'C:\expand_here'
29
+ # end
30
+ #
31
+ class LibarchiveFileResource < Cop
32
+ MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of the libarchive file resource'.freeze
33
+
34
+ def on_send(node)
35
+ add_offense(node, location: :expression, message: MSG, severity: :refactor) if node.method_name == :libarchive_file
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -17,29 +17,31 @@
17
17
  module RuboCop
18
18
  module Cop
19
19
  module Chef
20
- # Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.
21
- #
22
- # @example
23
- #
24
- # # bad
25
- # depends 'minitest-handler'
26
- #
27
- class MinitestHandlerUsage < Cop
28
- MSG = 'Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.'.freeze
20
+ module ChefModernize
21
+ # Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.
22
+ #
23
+ # @example
24
+ #
25
+ # # bad
26
+ # depends 'minitest-handler'
27
+ #
28
+ class MinitestHandlerUsage < Cop
29
+ MSG = 'Use Chef InSpec for testing instead of the Minitest Handler cookbook pattern.'.freeze
29
30
 
30
- def_node_matcher :minitest_depends?, <<-PATTERN
31
- (send nil? :depends (str "minitest-handler"))
32
- PATTERN
31
+ def_node_matcher :minitest_depends?, <<-PATTERN
32
+ (send nil? :depends (str "minitest-handler"))
33
+ PATTERN
33
34
 
34
- def on_send(node)
35
- minitest_depends?(node) do
36
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
35
+ def on_send(node)
36
+ minitest_depends?(node) do
37
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
38
+ end
37
39
  end
38
- end
39
40
 
40
- def autocorrect(node)
41
- lambda do |corrector|
42
- corrector.remove(node.loc.expression)
41
+ def autocorrect(node)
42
+ lambda do |corrector|
43
+ corrector.remove(node.loc.expression)
44
+ end
43
45
  end
44
46
  end
45
47
  end
@@ -0,0 +1,48 @@
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
+ # Use the archive_file resource built into Chef Infra Client 15+ instead of using the powershell_script
22
+ # resource to run Expand-Archive
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # powershell_script 'Expand website' do
28
+ # code 'Expand-Archive "C:\\file.zip" -DestinationPath "C:\\inetpub\\wwwroot\\" -Force'
29
+ # end
30
+ #
31
+ class PowershellScriptExpandArchive < Cop
32
+ include RuboCop::Chef::CookbookHelpers
33
+
34
+ MSG = 'Use the archive_file resource built into Chef Infra Client 15+ instead of using Expand-Archive in a powershell_script resource'.freeze
35
+
36
+ def on_block(node)
37
+ match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
38
+ property_data = method_arg_ast_to_string(code_property)
39
+ if property_data && property_data.match?(/^expand-archive/i)
40
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,51 @@
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
+ # Use the powershell_package resource built into Chef Infra Client instead of the powershell_script
22
+ # resource to run Install-Package
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # powershell_script 'Expand website' do
28
+ # code 'Install-Package -Name docker'
29
+ # end
30
+ #
31
+ # # good
32
+ # powershell_package 'docker'
33
+ #
34
+ class PowershellInstallPackage < Cop
35
+ include RuboCop::Chef::CookbookHelpers
36
+
37
+ MSG = 'Use the powershell_package resource built into Chef Infra Client 12.16+ instead of using Install-Package in a powershell_script resource'.freeze
38
+
39
+ def on_block(node)
40
+ match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
41
+ property_data = method_arg_ast_to_string(code_property)
42
+ if property_data && property_data.match?(/^install-package\s/i)
43
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ 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
+ # Use the windows_feature resource built into Chef Infra Client 15+ instead of the powershell_script resource
22
+ # to run Install-WindowsFeature or Add-WindowsFeature
23
+ #
24
+ # @example
25
+ #
26
+ # # bad
27
+ # powershell_script 'Install Feature' do
28
+ # code 'Install-WindowsFeature -Name "Net-framework-Core"'
29
+ # end
30
+ #
31
+ # # good
32
+ # windows_feature 'Net-framework-Core' do
33
+ # action :install
34
+ # install_method :windows_feature_powershell
35
+ # end
36
+ #
37
+ class PowershellInstallWindowsFeature < Cop
38
+ include RuboCop::Chef::CookbookHelpers
39
+
40
+ MSG = 'Use the windows_feature resource built into Chef Infra Client 13+ instead of using Install-WindowsFeature or Add-WindowsFeature in a powershell_script resource'.freeze
41
+
42
+ def on_block(node)
43
+ match_property_in_resource?(:powershell_script, 'code', node) do |code_property|
44
+ property_data = method_arg_ast_to_string(code_property)
45
+ if property_data && property_data.match?(/^(install|add)-windowsfeature\s/i)
46
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -18,30 +18,32 @@
18
18
  module RuboCop
19
19
  module Cop
20
20
  module Chef
21
- # set_or_return within a method should not be used to define property in a resource. Instead use
22
- # the property method which properly validates and defines properties in a way that works with
23
- # reporting and documentation functionality in Chef Infra Client
24
- #
25
- # @example
26
- #
27
- # # bad
28
- # def severity(arg = nil)
29
- # set_or_return(
30
- # :severity, arg,
31
- # :kind_of => String,
32
- # :default => nil
33
- # )
34
- # end
35
- #
36
- # # good
37
- # property :severity, String
38
- #
39
- class SetOrReturnInResources < Cop
40
- MSG = 'Do not use set_or_return within a method to define a property for a resource. Use the property method instead, which supports validation, reporting, and documentation functionality'.freeze
21
+ module ChefModernize
22
+ # set_or_return within a method should not be used to define property in a resource. Instead use
23
+ # the property method which properly validates and defines properties in a way that works with
24
+ # reporting and documentation functionality in Chef Infra Client
25
+ #
26
+ # @example
27
+ #
28
+ # # bad
29
+ # def severity(arg = nil)
30
+ # set_or_return(
31
+ # :severity, arg,
32
+ # :kind_of => String,
33
+ # :default => nil
34
+ # )
35
+ # end
36
+ #
37
+ # # good
38
+ # property :severity, String
39
+ #
40
+ class SetOrReturnInResources < Cop
41
+ MSG = 'Do not use set_or_return within a method to define a property for a resource. Use the property method instead, which supports validation, reporting, and documentation functionality'.freeze
41
42
 
42
- def on_send(node)
43
- if node.method_name == :set_or_return
44
- add_offense(node, location: :expression, message: MSG, severity: :refactor)
43
+ def on_send(node)
44
+ if node.method_name == :set_or_return
45
+ add_offense(node, location: :expression, message: MSG, severity: :refactor)
46
+ end
45
47
  end
46
48
  end
47
49
  end
@@ -0,0 +1,77 @@
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
+
18
+ module RuboCop
19
+ module Cop
20
+ module Chef
21
+ module ChefModernize
22
+ # In HWRPs and LWRPs it was necessary to define the allowed actions within the resource.
23
+ # In custom resources this is no longer necessary as Chef will determine it based on the
24
+ # actions defined in the resource.
25
+ #
26
+ # @example
27
+ #
28
+ # # bad
29
+ # property :something, String
30
+ #
31
+ # allowed_actions [:create, :remove]
32
+ # action :create do
33
+ # # some action code because we're in a custom resource
34
+ # end
35
+ #
36
+ # # also bad
37
+ # property :something, String
38
+ #
39
+ # actions [:create, :remove]
40
+ # action :create do
41
+ # # some action code because we're in a custom resource
42
+ # end
43
+ #
44
+ # # good
45
+ # property :something, String
46
+ #
47
+ # action :create do
48
+ # # some action code because we're in a custom resource
49
+ # end
50
+ #
51
+ class CustomResourceWithAllowedActions < Cop
52
+ MSG = "Custom Resources don't need to define the allowed actions with allowed_actions or actions methods".freeze
53
+
54
+ def_node_matcher :allowed_actions?, <<-PATTERN
55
+ (send nil? {:allowed_actions :actions} ... )
56
+ PATTERN
57
+
58
+ def_node_search :resource_actions?, <<-PATTERN
59
+ (block (send nil? :action ... ) ... )
60
+ PATTERN
61
+
62
+ def on_send(node)
63
+ allowed_actions?(node) do
64
+ add_offense(node, location: :expression, message: MSG, severity: :refactor) if resource_actions?(processed_source.ast)
65
+ end
66
+ end
67
+
68
+ def autocorrect(node)
69
+ lambda do |corrector|
70
+ corrector.remove(node.loc.expression)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -18,46 +18,48 @@
18
18
  module RuboCop
19
19
  module Cop
20
20
  module Chef
21
- # In HWRPs and LWRPs you defined attributes, but custom resources changed the name to
22
- # be properties to avoid confusion with chef recipe attributes. When writing a custom resource
23
- # they should be called properties even though the two are aliased.
24
- #
25
- # @example
26
- #
27
- # # bad
28
- # attribute :something, String
29
- #
30
- # action :create do
31
- # # some action code because we're in a custom resource
32
- # end
33
- #
34
- # # good
35
- # property :something, String
36
- #
37
- # action :create do
38
- # # some action code because we're in a custom resource
39
- # end
40
- #
41
- class CustomResourceWithAttributes < Cop
42
- MSG = 'Custom Resources should contain properties not attributes'.freeze
21
+ module ChefModernize
22
+ # In HWRPs and LWRPs you defined attributes, but custom resources changed the name to
23
+ # be properties to avoid confusion with chef recipe attributes. When writing a custom resource
24
+ # they should be called properties even though the two are aliased.
25
+ #
26
+ # @example
27
+ #
28
+ # # bad
29
+ # attribute :something, String
30
+ #
31
+ # action :create do
32
+ # # some action code because we're in a custom resource
33
+ # end
34
+ #
35
+ # # good
36
+ # property :something, String
37
+ #
38
+ # action :create do
39
+ # # some action code because we're in a custom resource
40
+ # end
41
+ #
42
+ class CustomResourceWithAttributes < Cop
43
+ MSG = 'Custom Resources should contain properties not attributes'.freeze
43
44
 
44
- def_node_matcher :attribute?, <<-PATTERN
45
- (send nil? $:attribute ... )
46
- PATTERN
45
+ def_node_matcher :attribute?, <<-PATTERN
46
+ (send nil? $:attribute ... )
47
+ PATTERN
47
48
 
48
- def_node_search :resource_actions?, <<-PATTERN
49
- (block (send nil? :action ... ) ... )
50
- PATTERN
49
+ def_node_search :resource_actions?, <<-PATTERN
50
+ (block (send nil? :action ... ) ... )
51
+ PATTERN
51
52
 
52
- def on_send(node)
53
- attribute?(node) do
54
- add_offense(node, location: :selector, message: MSG, severity: :refactor) if resource_actions?(processed_source.ast)
53
+ def on_send(node)
54
+ attribute?(node) do
55
+ add_offense(node, location: :selector, message: MSG, severity: :refactor) if resource_actions?(processed_source.ast)
56
+ end
55
57
  end
56
- end
57
58
 
58
- def autocorrect(node)
59
- lambda do |corrector|
60
- corrector.replace(node.loc.selector, 'property')
59
+ def autocorrect(node)
60
+ lambda do |corrector|
61
+ corrector.replace(node.loc.selector, 'property')
62
+ end
61
63
  end
62
64
  end
63
65
  end