You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
809 B
38 lines
809 B
#!/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
|