diff --git a/src/coverage/inject/cli.cr b/src/coverage/inject/cli.cr index 9951535..2d1a53a 100644 --- a/src/coverage/inject/cli.cr +++ b/src/coverage/inject/cli.cr @@ -1,31 +1,40 @@ require "option_parser" -# require "tempfile" +require "log" module Coverage module CLI + Log = ::Log.for("cli") + def self.run output_format = "HtmlReport" - filenames = [] of String + targets = [] of String print_only = false OptionParser.parse! do |parser| - parser.banner = "Usage: crystal-cover [options] " + parser.banner = "Usage: crystal-coverage [options] " + parser.on("-h", "--help", "show this help") { puts parser; exit } parser.on("-o FORMAT", "--output-format=FORMAT", "The output format used (default: HtmlReport): HtmlReport, Coveralls ") { |f| output_format = f } parser.on("-p", "--print-only", "output the generated source code") { |_p| print_only = true } parser.on("--use-require=REQUIRE", "change the require of cover library in runtime") { |r| Coverage::SourceFile.use_require = r } parser.unknown_args do |args| args.each do - filenames << ARGV.shift + targets << ARGV.shift end end end - raise "You must choose a file to compile" unless filenames.any? + Log.error { "You must choose at least one file to compile" } unless targets.any? Coverage::SourceFile.outputter = "Coverage::Outputter::#{output_format.camelcase}" + filenames = targets.map do |target| + target += "/**/*.cr" if File.directory?(target) + Dir[target] + end.flatten.uniq! + first = true output = String::Builder.new(capacity: 2**18) + filenames.each do |f| v = Coverage::SourceFile.new(path: f, source: ::File.read(f)) output << v.to_covered_source