lib/goodcheck/reporters/text.rb in goodcheck-2.6.1 vs lib/goodcheck/reporters/text.rb in goodcheck-2.7.0

- old
+ new

@@ -3,38 +3,69 @@ class Text attr_reader :stdout def initialize(stdout:) @stdout = stdout + @file_count = 0 + @issue_count = 0 end def analysis yield end def file(path) + @file_count += 1 yield end def rule(rule) yield end def issue(issue) + @issue_count += 1 + + message = issue.rule.message.lines.first.chomp + if issue.location - line = issue.buffer.line(issue.location.start_line) - end_column = if issue.location.start_line == issue.location.end_line - issue.location.end_column - else - line.bytesize - end - colored_line = line.byteslice(0, issue.location.start_column) + Rainbow(line.byteslice(issue.location.start_column, end_column - issue.location.start_column)).red + line.byteslice(end_column, line.bytesize) - stdout.puts "#{issue.path}:#{issue.location.start_line}:#{colored_line.chomp}:\t#{issue.rule.message.lines.first.chomp}" + start_line = issue.location.start_line + start_column = issue.location.start_column + start_column_index = start_column - 1 + line = issue.buffer.line(start_line) + column_size = if issue.location.one_line? + issue.location.column_size + else + line.bytesize - start_column + end + stdout.puts "#{Rainbow(issue.path).cyan}:#{start_line}:#{start_column}: #{message}" + stdout.puts line.chomp + stdout.puts (" " * start_column_index) + Rainbow("^" + "~" * (column_size - 1)).yellow else - line = issue.buffer.line(1)&.chomp - line = line ? Rainbow(line).red : '-' - stdout.puts "#{issue.path}:-:#{line}:\t#{issue.rule.message.lines.first.chomp}" + stdout.puts "#{Rainbow(issue.path).cyan}:-:-: #{message}" end + end + + def summary + files = case @file_count + when 0 + "no files" + when 1 + "1 file" + else + "#{@file_count} files" + end + issues = case @issue_count + when 0 + Rainbow("no issues").green + when 1 + Rainbow("1 issue").red + else + Rainbow("#{@issue_count} issues").red + end + + stdout.puts "" + stdout.puts "#{files} inspected, #{issues} detected" end end end end