Add DisabledFormatter to trace disabled lines

This commit is contained in:
Vitalii Elenhaupt 2018-01-30 15:46:11 +02:00 committed by V. Elenhaupt
parent 9f85b16e09
commit 69cff77970
5 changed files with 63 additions and 4 deletions

View File

@ -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

View File

@ -17,6 +17,7 @@ class Ameba::Config
todo: Formatter::TODOFormatter,
flycheck: Formatter::FlycheckFormatter,
silent: Formatter::BaseFormatter,
disabled: Formatter::DisabledFormatter,
}
PATH = ".ameba.yml"

View File

@ -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

View File

@ -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

View File

@ -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"