From 69cff7797032da0a25754b5958fb3344a18ea57f Mon Sep 17 00:00:00 2001 From: Vitalii Elenhaupt Date: Tue, 30 Jan 2018 15:46:11 +0200 Subject: [PATCH] Add DisabledFormatter to trace disabled lines --- .../formatter/disabled_formatter_spec.cr | 41 +++++++++++++++++++ src/ameba/config.cr | 1 + src/ameba/formatter/disabled_formatter.cr | 17 ++++++++ src/ameba/inline_comments.cr | 2 +- src/ameba/source.cr | 6 +-- 5 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 spec/ameba/formatter/disabled_formatter_spec.cr create mode 100644 src/ameba/formatter/disabled_formatter.cr diff --git a/spec/ameba/formatter/disabled_formatter_spec.cr b/spec/ameba/formatter/disabled_formatter_spec.cr new file mode 100644 index 00000000..5d38899c --- /dev/null +++ b/spec/ameba/formatter/disabled_formatter_spec.cr @@ -0,0 +1,41 @@ +require "../../spec_helper" + +module Ameba::Formatter + describe DisabledFormatter do + output = IO::Memory.new + subject = DisabledFormatter.new output + + describe "#finished" do + it "writes a final message" do + subject.finished [Source.new ""] + output.to_s.should contain "Disabled rules using inline directives:" + end + + it "writes disabled rules if any" do + Colorize.enabled = false + + path = "source.cr" + s = Source.new("", path).tap do |s| + s.error(ErrorRule.new, 1, 2, "ErrorRule", :disabled) + s.error(NamedRule.new, 2, 2, "NamedRule", :disabled) + end + subject.finished [s] + log = output.to_s + log.should contain "#{path}:1 #{ErrorRule.name}" + log.should contain "#{path}:2 #{NamedRule.name}" + ensure + output.clear + Colorize.enabled = true + end + + it "does not write not-disabled rules" do + s = Source.new("", "source.cr").tap do |s| + s.error(ErrorRule.new, 1, 2, "ErrorRule") + s.error(NamedRule.new, 2, 2, "NamedRule", :disabled) + end + subject.finished [s] + output.to_s.should_not contain ErrorRule.name + end + end + end +end diff --git a/src/ameba/config.cr b/src/ameba/config.cr index 41a2635f..7d8ececf 100644 --- a/src/ameba/config.cr +++ b/src/ameba/config.cr @@ -17,6 +17,7 @@ class Ameba::Config todo: Formatter::TODOFormatter, flycheck: Formatter::FlycheckFormatter, silent: Formatter::BaseFormatter, + disabled: Formatter::DisabledFormatter, } PATH = ".ameba.yml" diff --git a/src/ameba/formatter/disabled_formatter.cr b/src/ameba/formatter/disabled_formatter.cr new file mode 100644 index 00000000..8c4e03f6 --- /dev/null +++ b/src/ameba/formatter/disabled_formatter.cr @@ -0,0 +1,17 @@ +module Ameba::Formatter + # A formatter that shows all disabled line using inline directives. + class DisabledFormatter < BaseFormatter + def finished(sources) + output << "Disabled rules using inline directives: \n\n" + + sources.each do |source| + source.errors.select(&.disabled?).each do |e| + if loc = e.location + output << "#{source.path}:#{loc.line_number}".colorize(:cyan) + output << " #{e.rule.name}\n" + end + end + end + end + end +end diff --git a/src/ameba/inline_comments.cr b/src/ameba/inline_comments.cr index bcfbc4c3..9eaa22ab 100644 --- a/src/ameba/inline_comments.cr +++ b/src/ameba/inline_comments.cr @@ -10,7 +10,7 @@ module Ameba # 1. The line of the location ends with a comment directive. # 2. The line above the location is a comment directive. # - # For example, here is two examples of disabled location: + # For example, here are two examples of disabled location: # # ``` # # ameba:disable LargeNumbers diff --git a/src/ameba/source.cr b/src/ameba/source.cr index 6f9eb9a8..d706ccfb 100644 --- a/src/ameba/source.cr +++ b/src/ameba/source.cr @@ -7,7 +7,7 @@ module Ameba # Represents an error caught by Ameba. # # Each error has the rule that created this error, - # location of the issue and a message. + # location of the issue, message and status. record Error, rule : Rule::Base, location : Crystal::Location?, @@ -43,7 +43,7 @@ module Ameba def initialize(@code : String, @path = "") end - # Adds new error to the list of errors. + # Adds a new error to the list of errors. # # ``` # source.error rule, location, "Line too long" @@ -54,7 +54,7 @@ module Ameba errors << Error.new rule, location, message, status end - # Adds new error to the list of errors using line and column number. + # Adds a new error to the list of errors using line and column number. # # ``` # source.error rule, line_number, column_number, "Bad code"