PuppetLint.new_check(:file_ensure) do def check resource_indexes.each do |resource| next unless resource[:type].value == 'file' attr = resource[:tokens].select do |t| t.type == :NAME && t.value == 'ensure' && t.next_code_token.type == :FARROW end next if attr.empty? val_token = attr[0].next_code_token.next_code_token next unless val_token.value == 'present' next unless %i[NAME STRING SSTRING].include? val_token.type notify :warning, { message: 'ensure set to present on file resource', line: val_token.line, column: val_token.column, token: val_token, resource: resource, } end end def fix(problem) target_attr = problem[:resource][:tokens].select do |t| t.type == :NAME && t.value == 'target' && t.next_code_token.type == :FARROW end problem[:token].value = if target_attr.empty? 'file' else 'link' end end end