diff --git a/spec/ameba/rule/lint/syntax_spec.cr b/spec/ameba/rule/lint/syntax_spec.cr index 52c7cabe..f7402e76 100644 --- a/spec/ameba/rule/lint/syntax_spec.cr +++ b/spec/ameba/rule/lint/syntax_spec.cr @@ -33,5 +33,9 @@ module Ameba::Rule::Lint issue.location.to_s.should eq "source.cr:1:11" issue.message.should eq "unexpected token: end (expected ';' or newline)" end + + it "has highest severity" do + subject.severity.should eq Severity::Error + end end end diff --git a/spec/ameba/severity_spec.cr b/spec/ameba/severity_spec.cr index 275d5059..db77d197 100644 --- a/spec/ameba/severity_spec.cr +++ b/spec/ameba/severity_spec.cr @@ -2,12 +2,6 @@ require "../spec_helper" module Ameba describe Severity do - describe ".default" do - it "returns default severity" do - Severity.default.should eq Severity::Refactoring - end - end - describe ".from_name" do it "creates error severity by name" do Severity.from_name("Error").should eq Severity::Error @@ -31,46 +25,60 @@ module Ameba struct SeverityConvertable YAML.mapping( - severity: { type: Severity, converter: SeverityYamlConverter } + severity: {type: Severity, converter: SeverityYamlConverter} ) end describe SeverityYamlConverter do describe ".from_yaml" do it "converts from yaml to Severity::Error" do - yaml = { severity: "error" }.to_yaml + yaml = {severity: "error"}.to_yaml converted = SeverityConvertable.from_yaml(yaml) converted.severity.should eq Severity::Error end it "converts from yaml to Severity::Warning" do - yaml = { severity: "warning" }.to_yaml + yaml = {severity: "warning"}.to_yaml converted = SeverityConvertable.from_yaml(yaml) converted.severity.should eq Severity::Warning end it "converts from yaml to Severity::Refactoring" do - yaml = { severity: "refactoring" }.to_yaml + yaml = {severity: "refactoring"}.to_yaml converted = SeverityConvertable.from_yaml(yaml) converted.severity.should eq Severity::Refactoring end + + it "raises if severity is not a scalar" do + yaml = {severity: {refactoring: true}}.to_yaml + expect_raises(Exception, "Severity must be a scalar") do + SeverityConvertable.from_yaml(yaml) + end + end + + it "raises if severity has a wrong type" do + yaml = {severity: [1, 2, 3]}.to_yaml + expect_raises(Exception, "Severity must be a scalar") do + SeverityConvertable.from_yaml(yaml) + end + end end describe ".to_yaml" do it "converts Severity::Error to yaml" do - yaml = { severity: "error" }.to_yaml + yaml = {severity: "error"}.to_yaml converted = SeverityConvertable.from_yaml(yaml).to_yaml converted.should eq "---\nseverity: Error\n" end it "converts Severity::Warning to yaml" do - yaml = { severity: "warning" }.to_yaml + yaml = {severity: "warning"}.to_yaml converted = SeverityConvertable.from_yaml(yaml).to_yaml converted.should eq "---\nseverity: Warning\n" end it "converts Severity::Refactoring to yaml" do - yaml = { severity: "refactoring" }.to_yaml + yaml = {severity: "refactoring"}.to_yaml converted = SeverityConvertable.from_yaml(yaml).to_yaml converted.should eq "---\nseverity: Refactoring\n" end diff --git a/src/ameba/config.cr b/src/ameba/config.cr index e8fdac23..6150a6ad 100644 --- a/src/ameba/config.cr +++ b/src/ameba/config.cr @@ -227,6 +227,11 @@ class Ameba::Config {% properties["enabled".id] = {key: "Enabled", default: true, type: Bool} %} {% end %} + {% if properties["severity".id] == nil %} + {% default = @type.name.starts_with?("Ameba::Rule::Lint") ? "Severity::Warning".id : "Severity::Refactoring".id %} + {% properties["severity".id] = {key: "Severity", default: default, type: Severity, converter: SeverityYamlConverter} %} + {% end %} + {% if properties["excluded".id] == nil %} {% properties["excluded".id] = {key: "Excluded", type: "Array(String)?".id} %} {% end %} diff --git a/src/ameba/rule/lint/syntax.cr b/src/ameba/rule/lint/syntax.cr index 070476ae..f5c2addc 100644 --- a/src/ameba/rule/lint/syntax.cr +++ b/src/ameba/rule/lint/syntax.cr @@ -20,7 +20,10 @@ module Ameba::Rule::Lint # ``` # struct Syntax < Base - getter description = "Reports invalid Crystal syntax." + properties do + description "Reports invalid Crystal syntax" + severity Severity::Error + end def test(source) source.ast diff --git a/src/ameba/severity.cr b/src/ameba/severity.cr index 66de0763..e826901d 100644 --- a/src/ameba/severity.cr +++ b/src/ameba/severity.cr @@ -4,10 +4,6 @@ module Ameba Warning Refactoring - def self.default - Refactoring - end - def self.from_name(name : String) case name.downcase when "error" @@ -37,7 +33,7 @@ module Ameba end def self.to_yaml(value : Severity, yaml : YAML::Nodes::Builder) - yaml.scalar value.to_s + yaml.scalar value end end end