From d60bf94d6f085520fa2aa87ff8b3134a49329fb3 Mon Sep 17 00:00:00 2001 From: Matheus Richard Date: Sat, 18 Apr 2020 19:29:46 -0300 Subject: [PATCH 1/4] Support directories on cli --- src/coverage/inject/cli.cr | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/coverage/inject/cli.cr b/src/coverage/inject/cli.cr index 9951535..67077a7 100644 --- a/src/coverage/inject/cli.cr +++ b/src/coverage/inject/cli.cr @@ -1,31 +1,39 @@ require "option_parser" + # require "tempfile" module Coverage module 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 } 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? + raise "You must choose at least one file to compile" unless targets.any? Coverage::SourceFile.outputter = "Coverage::Outputter::#{output_format.camelcase}" first = true output = String::Builder.new(capacity: 2**18) + + filenames = targets.map do |target| + target += "/**/*.cr" if File.directory?(target) + Dir[target] + end.flatten.uniq + filenames.each do |f| v = Coverage::SourceFile.new(path: f, source: ::File.read(f)) output << v.to_covered_source From 3438714d9fad2221cfad1a1ba1a6745b0f35c733 Mon Sep 17 00:00:00 2001 From: Matheus Richard Date: Sat, 18 Apr 2020 19:41:29 -0300 Subject: [PATCH 2/4] Fix help command --- src/coverage/inject/cli.cr | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/coverage/inject/cli.cr b/src/coverage/inject/cli.cr index 67077a7..cdcdeb8 100644 --- a/src/coverage/inject/cli.cr +++ b/src/coverage/inject/cli.cr @@ -10,8 +10,8 @@ module Coverage print_only = false OptionParser.parse! do |parser| - parser.banner = "Usage: crystal-coverage [options] " - parser.on("-h", "--help", "show this help") { puts parser } + 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 } @@ -26,14 +26,14 @@ module Coverage Coverage::SourceFile.outputter = "Coverage::Outputter::#{output_format.camelcase}" - first = true - output = String::Builder.new(capacity: 2**18) - 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 From 105dfcf9aab1aae07eccb7af6e90a6e65b37ad98 Mon Sep 17 00:00:00 2001 From: Matheus Richard Date: Mon, 20 Apr 2020 22:35:23 -0300 Subject: [PATCH 3/4] Add Log module --- src/coverage/inject/cli.cr | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/coverage/inject/cli.cr b/src/coverage/inject/cli.cr index cdcdeb8..8986713 100644 --- a/src/coverage/inject/cli.cr +++ b/src/coverage/inject/cli.cr @@ -1,9 +1,10 @@ require "option_parser" - -# require "tempfile" +require "log" module Coverage module CLI + Log = ::Log.for("cli") + def self.run output_format = "HtmlReport" targets = [] of String @@ -22,7 +23,7 @@ module Coverage end end - raise "You must choose at least one file to compile" unless targets.any? + Log.error { "You must choose at least one file to compile" } unless targets.any? Coverage::SourceFile.outputter = "Coverage::Outputter::#{output_format.camelcase}" From e6c64a32f563526f7118beca9903300829b10699 Mon Sep 17 00:00:00 2001 From: Matheus Richard Date: Tue, 28 Apr 2020 12:46:22 -0300 Subject: [PATCH 4/4] Use uniq! to prevent another array creation --- src/coverage/inject/cli.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coverage/inject/cli.cr b/src/coverage/inject/cli.cr index 8986713..2d1a53a 100644 --- a/src/coverage/inject/cli.cr +++ b/src/coverage/inject/cli.cr @@ -30,7 +30,7 @@ module Coverage filenames = targets.map do |target| target += "/**/*.cr" if File.directory?(target) Dir[target] - end.flatten.uniq + end.flatten.uniq! first = true output = String::Builder.new(capacity: 2**18)