mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Add Excluded property to the rule
This commit is contained in:
parent
a1854c0aa3
commit
8bf5066d6a
8 changed files with 92 additions and 23 deletions
|
@ -17,6 +17,10 @@ module Ameba::Rule
|
||||||
it "has a description property" do
|
it "has a description property" do
|
||||||
subject.description.should_not be_nil
|
subject.description.should_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "has excluded property" do
|
||||||
|
subject.excluded.should be_nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "when a rule does not have defined properties" do
|
describe "when a rule does not have defined properties" do
|
||||||
|
|
|
@ -46,5 +46,24 @@ module Ameba
|
||||||
config.formatter.should eq formatter
|
config.formatter.should eq formatter
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#update_rule" do
|
||||||
|
config = Config.load config_sample
|
||||||
|
|
||||||
|
it "updates enabled property" do
|
||||||
|
name = DummyRule.class_name
|
||||||
|
config.update_rule name, enabled: false
|
||||||
|
rule = config.rules.find(&.name.== name).not_nil!
|
||||||
|
rule.enabled.should be_false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "updates excluded property" do
|
||||||
|
name = DummyRule.class_name
|
||||||
|
excluded = %w(spec/source.cr)
|
||||||
|
config.update_rule name, excluded: excluded
|
||||||
|
rule = config.rules.find(&.name.== name).not_nil!
|
||||||
|
rule.excluded.should eq excluded
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,43 +1,54 @@
|
||||||
require "../../spec_helper"
|
require "../../spec_helper"
|
||||||
|
|
||||||
module Ameba
|
module Ameba
|
||||||
private def create_todo(formatter)
|
private def create_todo
|
||||||
s = Source.new "a = 1"
|
file = IO::Memory.new
|
||||||
|
formatter = Formatter::TODOFormatter.new IO::Memory.new, file
|
||||||
|
|
||||||
|
s = Source.new "a = 1", "source.cr"
|
||||||
s.error DummyRule.new, s.location(1, 2), "message"
|
s.error DummyRule.new, s.location(1, 2), "message"
|
||||||
|
|
||||||
formatter.finished [s]
|
formatter.finished [s]
|
||||||
|
file.to_s
|
||||||
end
|
end
|
||||||
|
|
||||||
describe Formatter::TODOFormatter do
|
describe Formatter::TODOFormatter do
|
||||||
file = IO::Memory.new
|
context "problems not found" do
|
||||||
subject = Formatter::TODOFormatter.new IO::Memory.new, file
|
|
||||||
|
|
||||||
context "problems not reported" do
|
|
||||||
it "does not create todo" do
|
it "does not create todo" do
|
||||||
subject.finished [Source.new ""]
|
file = IO::Memory.new
|
||||||
|
formatter = Formatter::TODOFormatter.new IO::Memory.new, file
|
||||||
|
formatter.finished [Source.new ""]
|
||||||
file.to_s.empty?.should be_true
|
file.to_s.empty?.should be_true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "problems reported" do
|
context "problems found" do
|
||||||
it "creates a todo with header" do
|
it "creates a valid YAML document" do
|
||||||
create_todo subject
|
YAML.parse(create_todo).should_not be_nil
|
||||||
file.to_s.should contain "# This configuration file was generated by"
|
|
||||||
file.to_s.should contain "Ameba version #{VERSION}"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a todo with rule name" do
|
it "creates a todo with header" do
|
||||||
create_todo subject
|
create_todo.should contain "# This configuration file was generated by"
|
||||||
file.to_s.should contain "DummyRule"
|
end
|
||||||
|
|
||||||
|
it "creates a todo with version" do
|
||||||
|
create_todo.should contain "Ameba version #{VERSION}"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "creates a todo with a rule name" do
|
||||||
|
create_todo.should contain "DummyRule"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a todo with problems count" do
|
it "creates a todo with problems count" do
|
||||||
create_todo subject
|
create_todo.should contain "Problems found: 1"
|
||||||
file.to_s.should contain "Problems found: 1"
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "creates a valid YAML document" do
|
it "creates a todo with run details" do
|
||||||
create_todo subject
|
create_todo.should contain "Run `ameba --only #{DummyRule.class_name}`"
|
||||||
YAML.parse(file.to_s).should_not be_nil
|
end
|
||||||
|
|
||||||
|
it "excludes source from this rule" do
|
||||||
|
create_todo.should contain "Excluded:\n - source.cr"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,6 +6,8 @@ module Ameba
|
||||||
config.formatter = formatter
|
config.formatter = formatter
|
||||||
config.files = files
|
config.files = files
|
||||||
|
|
||||||
|
config.update_rule ErrorRule.class_name, enabled: false
|
||||||
|
|
||||||
Runner.new(config)
|
Runner.new(config)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -36,6 +38,19 @@ module Ameba
|
||||||
runner(formatter: formatter).run
|
runner(formatter: formatter).run
|
||||||
formatter.finished_source.should_not be_nil
|
formatter.finished_source.should_not be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "skips rule check if source is excluded" do
|
||||||
|
path = "source.cr"
|
||||||
|
source = Source.new "", path
|
||||||
|
|
||||||
|
rules = ([] of Rule::Base).tap do |rules|
|
||||||
|
rule = ErrorRule.new
|
||||||
|
rule.excluded = [path]
|
||||||
|
rules << rule
|
||||||
|
end
|
||||||
|
|
||||||
|
Runner.new(rules, [source], formatter).run.success?.should be_true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#success?" do
|
describe "#success?" do
|
||||||
|
|
|
@ -11,6 +11,13 @@ module Ameba
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
struct ErrorRule < Rule::Base
|
||||||
|
def test(source)
|
||||||
|
source.error self, source.location(1, 1),
|
||||||
|
"This rule always adds an error"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class DummyFormatter < Formatter::BaseFormatter
|
class DummyFormatter < Formatter::BaseFormatter
|
||||||
property started_sources : Array(Source)?
|
property started_sources : Array(Source)?
|
||||||
property finished_sources : Array(Source)?
|
property finished_sources : Array(Source)?
|
||||||
|
|
|
@ -71,12 +71,13 @@ class Ameba::Config
|
||||||
# config.update_rule "MyRuleName", enabled: false
|
# config.update_rule "MyRuleName", enabled: false
|
||||||
# ```
|
# ```
|
||||||
#
|
#
|
||||||
def update_rule(name, enabled = true)
|
def update_rule(name, enabled = true, excluded = nil)
|
||||||
index = @rules.index { |r| r.name == name }
|
index = @rules.index { |r| r.name == name }
|
||||||
raise ArgumentError.new("Rule `#{name}` does not exist") unless index
|
raise ArgumentError.new("Rule `#{name}` does not exist") unless index
|
||||||
|
|
||||||
rule = @rules[index]
|
rule = @rules[index]
|
||||||
rule.enabled = enabled
|
rule.enabled = enabled
|
||||||
|
rule.excluded = excluded
|
||||||
@rules[index] = rule
|
@rules[index] = rule
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -140,6 +141,10 @@ class Ameba::Config
|
||||||
{% properties["enabled".id] = {key: "Enabled", default: true, type: Bool} %}
|
{% properties["enabled".id] = {key: "Enabled", default: true, type: Bool} %}
|
||||||
{% end %}
|
{% end %}
|
||||||
|
|
||||||
|
{% if properties["excluded".id] == nil %}
|
||||||
|
{% properties["excluded".id] = {key: "Excluded", type: "Array(String)?".id} %}
|
||||||
|
{% end %}
|
||||||
|
|
||||||
YAML.mapping({{properties}})
|
YAML.mapping({{properties}})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ module Ameba::Formatter
|
||||||
@io << header
|
@io << header
|
||||||
rule_errors_map(errors).each do |rule, rule_errors|
|
rule_errors_map(errors).each do |rule, rule_errors|
|
||||||
@io << "\n# Problems found: #{rule_errors.size}"
|
@io << "\n# Problems found: #{rule_errors.size}"
|
||||||
|
@io << "\n# Run `ameba --only #{rule.name}` for details"
|
||||||
@io << rule_todo(rule, rule_errors).gsub("---", "")
|
@io << rule_todo(rule, rule_errors).gsub("---", "")
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
|
@ -47,7 +48,11 @@ module Ameba::Formatter
|
||||||
end
|
end
|
||||||
|
|
||||||
private def rule_todo(rule, errors)
|
private def rule_todo(rule, errors)
|
||||||
rule.enabled = false
|
rule.excluded =
|
||||||
|
errors.map(&.location.try &.filename.try &.to_s)
|
||||||
|
.compact
|
||||||
|
.uniq!
|
||||||
|
|
||||||
YAML.build do |yaml|
|
YAML.build do |yaml|
|
||||||
yaml.mapping do
|
yaml.mapping do
|
||||||
rule.name.to_yaml(yaml)
|
rule.name.to_yaml(yaml)
|
||||||
|
|
|
@ -57,7 +57,10 @@ module Ameba
|
||||||
@sources.each do |source|
|
@sources.each do |source|
|
||||||
@formatter.source_started source
|
@formatter.source_started source
|
||||||
|
|
||||||
@rules.each &.test(source)
|
@rules.each do |rule|
|
||||||
|
next if rule.excluded.try &.any? &.== source.path
|
||||||
|
rule.test(source)
|
||||||
|
end
|
||||||
|
|
||||||
@formatter.source_finished source
|
@formatter.source_finished source
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue