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