lib/rubocop/cop/chef/style/use_platform_helpers.rb in cookstyle-5.11.0 vs lib/rubocop/cop/chef/style/use_platform_helpers.rb in cookstyle-5.12.12

- old
+ new

@@ -16,38 +16,44 @@ # module RuboCop module Cop module Chef module ChefStyle - # Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo' - # and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple - # platform arguments, which greatly simplifies complex platform logic. + # Use the platform?() and platform_family?() helpers instead of node['platform] == 'foo' and node['platform_family'] == 'bar'. These helpers are easier to read and can accept multiple platform arguments, which greatly simplifies complex platform logic. # # @example # # # bad # node['platform'] == 'ubuntu' + # node['platform_family'] == 'debian' + # node['platform'] != 'ubuntu' + # node['platform_family'] != 'debian' # # # good # platform?('ubuntu') + # !platform?('ubuntu') + # platform_family?('debian') + # !platform_family?('debian') # class UsePlatformHelpers < Cop - MSG = 'Use platform? and platform_family? helpers for checking node platform'.freeze + MSG = "Use platform? and platform_family? helpers for checking a node's platform".freeze def_node_matcher :platform_check?, <<-PATTERN - ( send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) :== $str ) + ( send (send (send nil? :node) :[] $(str {"platform" "platform_family"}) ) ${:== :!=} $str ) PATTERN def on_send(node) platform_check?(node) do add_offense(node, location: :expression, message: MSG, severity: :refactor) end end def autocorrect(node) lambda do |corrector| - platform_check?(node) do |type, plat| - corrector.replace(node.loc.expression, "#{type.value}?('#{plat.value}')") + platform_check?(node) do |type, operator, plat| + corrected_string = operator == :!= ? '!' : '' + corrected_string << "#{type.value}?('#{plat.value}')" + corrector.replace(node.loc.expression, corrected_string) end end end end end