#!/usr/bin/env ruby

if ARGV[0].nil?
  $stderr.puts "Usage: #{File.basename $0} <file>"
  exit 1
end

if not system "which shellcheck >/dev/null 2>&1"
  $stderr.puts "Error: program shellcheck does not exist."
  exit 1
end

file = ARGV[0]

if not File.exists? file
  $stderr.puts "Error: file #{file} could not be read."
  exit 1
end

# Make sure we're looking at sh code.
mimetype = `file -b -i --keep-going #{file}`.gsub(/\n/,"")
if not /.*x-shellscript/i.match(mimetype)
  $stderr.puts "File #{file} doesn't look like sh code [#{mimetype}]. Ignoring."
  exit 0
end

output = %x{shellcheck --format=gcc #{file} 2>&1}

num_lines = output.lines.count
counter = 1

# output result in TAP format
puts "1..#{num_lines}"
output.each_line do |critic|
  puts "not ok #{counter}        #{critic}"
  counter += 1
end
