From ffd44dc77b22b1776f4049c9b9597e133e1d15d2 Mon Sep 17 00:00:00 2001 From: Vitalii Elenhaupt Date: Thu, 26 Oct 2017 22:45:48 +0300 Subject: [PATCH] Simple reporter --- src/ameba.cr | 16 ++++++++++----- src/ameba/formatter.cr | 45 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 src/ameba/formatter.cr diff --git a/src/ameba.cr b/src/ameba.cr index 3a5bc6b2..9f5ca634 100644 --- a/src/ameba.cr +++ b/src/ameba.cr @@ -8,14 +8,20 @@ module Ameba Rule::LineLength, ] - def run - run Dir["**/*.cr"] + def run(formatter = DotFormatter.new) + run Dir["**/*.cr"], formatter end - def run(files) - files.each do |path| - catch Source.new(File.read path) + def run(files, formatter : Formatter) + sources = files.map { |path| Source.new(File.read path) } + + reporter = Reporter.new formatter + reporter.start sources + sources.each do |source| + catch(source) + reporter.report source end + reporter.try &.finish sources end def catch(source : Source) diff --git a/src/ameba/formatter.cr b/src/ameba/formatter.cr new file mode 100644 index 00000000..fc225e45 --- /dev/null +++ b/src/ameba/formatter.cr @@ -0,0 +1,45 @@ +module Ameba + abstract class Formatter + abstract def before(sources) + abstract def format(source : Source) + abstract def after(sources) + end + + class Reporter + property formatter : Formatter + + def initialize(@formatter : Formatter) + end + + def start(sources) + puts formatter.before sources + end + + def report(source) + print formatter.format source + end + + def finish(sources) + puts + puts formatter.after sources + end + end + + class DotFormatter < Formatter + def before(sources) + if (len = sources.size) == 1 + "Inspecting 1 file." + else + "Inspecting #{len} files." + end + end + + def format(source : Source) + source.errors.size == 0 ? "." : "F" + end + + def after(sources) + "Done!" + end + end +end