From dcc0be892a1e09a7e1e8d0f136c3335b6e0dcbae Mon Sep 17 00:00:00 2001 From: Vitalii Elenhaupt Date: Wed, 1 Nov 2017 12:49:03 +0200 Subject: [PATCH] Load list of rules dynamically --- spec/ameba/rule_spec.cr | 12 ++++++------ spec/spec_helper.cr | 2 +- src/ameba.cr | 2 +- src/ameba/rule.cr | 12 ++++-------- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/spec/ameba/rule_spec.cr b/spec/ameba/rule_spec.cr index 9acad23f..91513784 100644 --- a/spec/ameba/rule_spec.cr +++ b/spec/ameba/rule_spec.cr @@ -1,12 +1,6 @@ require "../../spec/spec_helper" module Ameba - describe RULES do - it "contains available rules" do - Ameba::RULES.empty?.should be_false - end - end - describe Rule do describe "#catch" do it "accepts and returns source" do @@ -20,5 +14,11 @@ module Ameba DummyRule.new.name.should eq "DummyRule" end end + + describe ".rules" do + it "returns a list of all defined rules" do + Rule.rules.includes?(DummyRule).should be_true + end + end end end diff --git a/spec/spec_helper.cr b/spec/spec_helper.cr index 3d0d0ca5..519c1729 100644 --- a/spec/spec_helper.cr +++ b/spec/spec_helper.cr @@ -4,4 +4,4 @@ require "../src/ameba" struct DummyRule < Ameba::Rule def test(source) end -end \ No newline at end of file +end diff --git a/src/ameba.cr b/src/ameba.cr index a0e0d2f0..5caa690a 100644 --- a/src/ameba.cr +++ b/src/ameba.cr @@ -25,7 +25,7 @@ module Ameba end def catch(source : Source) - RULES.each do |rule| + Rule.rules.each do |rule| rule.new.test(source) end end diff --git a/src/ameba/rule.cr b/src/ameba/rule.cr index bfa779aa..1ced1c2a 100644 --- a/src/ameba/rule.cr +++ b/src/ameba/rule.cr @@ -1,12 +1,4 @@ module Ameba - RULES = [ - Rules::ComparisonToBoolean, - Rules::LineLength, - Rules::TrailingBlankLines, - Rules::TrailingWhitespace, - Rules::UnlessElse, - ] - abstract struct Rule abstract def test(source : Source) @@ -21,5 +13,9 @@ module Ameba def name self.class.name.gsub("Ameba::Rules::", "") end + + def self.rules + {{ @type.subclasses }} + end end end