Add inline directives parsing and disabling

This commit is contained in:
Vitalii Elenhaupt 2018-01-30 00:25:36 +02:00 committed by V. Elenhaupt
parent 55b66e7975
commit 9f85b16e09
9 changed files with 212 additions and 7 deletions

View file

@ -36,6 +36,27 @@ module Ameba::Formatter
subject.finished [Source.new ""]
output.to_s.should contain "Finished in"
end
context "when errors found" do
it "writes each error" do
s = Source.new("").tap do |s|
s.error(DummyRule.new, 1, 1, "DummyRuleError")
s.error(NamedRule.new, 1, 2, "NamedRuleError")
end
subject.finished [s]
log = output.to_s
log.should contain "1 inspected, 2 failures."
log.should contain "DummyRuleError"
log.should contain "NamedRuleError"
end
it "does not write disabled errors" do
s = Source.new ""
s.error(DummyRule.new, 1, 1, "DummyRuleError", :disabled)
subject.finished [s]
output.to_s.should contain "1 inspected, 0 failures."
end
end
end
end
end

View file

@ -0,0 +1,87 @@
require "../spec_helper"
module Ameba
describe InlineComments do
it "disables a rule with a comment directive" do
s = Source.new %Q(
# ameba:disable #{NamedRule.name}
Time.epoch(1483859302)
)
s.error(NamedRule.new, 3, 12, "Error!")
s.should be_valid
end
it "disables a rule with a line that ends with a comment directive" do
s = Source.new %Q(
Time.epoch(1483859302) # ameba:disable #{NamedRule.name}
)
s.error(NamedRule.new, 2, 12, "Error!")
s.should be_valid
end
it "does not disable a rule of a different name" do
s = Source.new %Q(
# ameba:disable WrongName
Time.epoch(1483859302)
)
s.error(NamedRule.new, 3, 12, "Error!")
s.should_not be_valid
end
it "disables a rule if multiple rule names provided" do
s = Source.new %Q(
# ameba:disable SomeRule LargeNumbers #{NamedRule.name} SomeOtherRule
Time.epoch(1483859302)
)
s.error(NamedRule.new, 3, 12, "")
s.should be_valid
end
it "disables a rule if multiple rule names are separated by comma" do
s = Source.new %Q(
# ameba:disable SomeRule, LargeNumbers, #{NamedRule.name}, SomeOtherRule
Time.epoch(1483859302)
)
s.error(NamedRule.new, 3, 12, "")
s.should be_valid
end
it "does not disable if multiple rule names used without required one" do
s = Source.new %(
# ameba:disable SomeRule, SomeOtherRule LargeNumbers
Time.epoch(1483859302)
)
s.error(NamedRule.new, 3, 12, "")
s.should_not be_valid
end
it "does not disable if comment directive has wrong place" do
s = Source.new %Q(
# ameba:disable #{NamedRule.name}
#
Time.epoch(1483859302)
)
s.error(NamedRule.new, 4, 12, "")
s.should_not be_valid
end
it "does not disable if comment directive added to the wrong line" do
s = Source.new %Q(
if use_epoch? # ameba:disable #{NamedRule.name}
Time.epoch(1483859302)
end
)
s.error(NamedRule.new, 3, 12, "")
s.should_not be_valid
end
it "does not disable if that is not a comment directive" do
s = Source.new %Q(
"ameba:disable #{NamedRule.name}"
Time.epoch(1483859302)
)
s.error(NamedRule.new, 3, 12, "")
s.should_not be_valid
end
end
end