Skip to content

Commit a265a16

Browse files
committed
Merge pull request #19 from codeclimate/pb-categories
Raise default remediation, categorize checks
2 parents a5d4f2e + e17113a commit a265a16

File tree

5 files changed

+84
-5
lines changed

5 files changed

+84
-5
lines changed

Diff for: lib/cc/engine/csslint.rb

+7-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
module CC
55
module Engine
66
class CSSlint
7+
autoload :CheckDetails, "cc/engine/csslint/check_details"
8+
79
def initialize(directory: , io: , engine_config: )
810
@directory = directory
911
@engine_config = engine_config
@@ -18,13 +20,15 @@ def run
1820
next unless node.name == "error"
1921

2022
lint = node.attributes
23+
check_name = lint["source"].value
24+
check_details = CheckDetails.fetch(check_name)
2125

2226
issue = {
2327
type: "issue",
24-
check_name: lint["source"].value,
28+
check_name: check_name,
2529
description: lint["message"].value,
26-
categories: ["Style"],
27-
remediation_points: 500,
30+
categories: check_details.categories,
31+
remediation_points: check_details.remediation_points,
2832
location: {
2933
path: path,
3034
positions: {

Diff for: lib/cc/engine/csslint/check_details.rb

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
module CC
2+
module Engine
3+
class CSSlint
4+
class CheckDetails
5+
ALL_RULES = {
6+
# https://github.com/CSSLint/csslint/wiki/Rules
7+
"net.csslint.Adjoiningclasses" => { categories: "Compatability" },
8+
"net.csslint.Boxmodel" => { categories: "Bug Risk" },
9+
"net.csslint.Boxsizing" => { categories: "Compatability" },
10+
"net.csslint.Bulletprooffontface" => { categories: "Compatability" },
11+
"net.csslint.Compatiblevendorprefixes" => { categories: "Compatability" },
12+
"net.csslint.Displaypropertygrouping" => { categories: "Bug Risk" },
13+
"net.csslint.Duplicatebackgroundimages" => { categories: "Bug Risk" },
14+
"net.csslint.Duplicateproperties" => { categories: "Bug Risk" },
15+
"net.csslint.Emptyrules" => { categories: "Bug Risk" },
16+
"net.csslint.Fallbackcolors" => { categories: "Compatability" },
17+
"net.csslint.Fontfaces" => { categories: "Bug Risk" },
18+
"net.csslint.Gradients" => { categories: "Compatability" },
19+
"net.csslint.Import" => { categories: "Bug Risk" },
20+
"net.csslint.Knownproperties" => { categories: "Bug Risk" },
21+
"net.csslint.Overqualifiedelements" => { categories: "Bug Risk" },
22+
"net.csslint.Regexselectors" => { categories: "Bug Risk" },
23+
"net.csslint.Shorthand" => { categories: "Bug Risk" },
24+
"net.csslint.Starpropertyhack" => { categories: "Compatability" },
25+
"net.csslint.Textindent" => { categories: "Compatability" },
26+
"net.csslint.Underscorepropertyhack" => { categories: "Compatability" },
27+
"net.csslint.Uniqueheadings" => { categories: "Duplication" },
28+
"net.csslint.Universalselector" => { categories: "Bug Risk" },
29+
"net.csslint.Unqualifiedattributes" => { categories: "Bug Risk" },
30+
"net.csslint.Vendorprefix" => { categories: "Compatability" },
31+
"net.csslint.Zerounits" => { categories: "Bug Risk" },
32+
}.freeze
33+
34+
DEFAULT_CATEGORY = "Style".freeze
35+
DEFAULT_REMEDIATION_POINTS = 50_000.freeze
36+
37+
attr_reader :categories, :remediation_points
38+
39+
def self.fetch(check_name)
40+
new(ALL_RULES.fetch(check_name, {}))
41+
end
42+
43+
def initialize(
44+
categories: DEFAULT_CATEGORY,
45+
remediation_points: DEFAULT_REMEDIATION_POINTS
46+
)
47+
@categories = Array(categories)
48+
@remediation_points = remediation_points
49+
end
50+
end
51+
end
52+
end
53+
end

Diff for: spec/cc/engine/csslint/check_details_spec.rb

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
require "spec_helper"
2+
3+
class CC::Engine::CSSlint
4+
describe CheckDetails do
5+
describe ".fetch" do
6+
it "returns details for customized checks" do
7+
details = CheckDetails.fetch("net.csslint.Import")
8+
9+
expect(details.categories).to eq ["Bug Risk"]
10+
expect(details.remediation_points).to eq 50_000
11+
end
12+
13+
it "returns defaults for unknown checks" do
14+
details = CheckDetails.fetch("made-up")
15+
16+
expect(details.categories).to eq ["Style"]
17+
expect(details.remediation_points).to eq 50_000
18+
end
19+
end
20+
end
21+
end

Diff for: spec/cc/engine/csslint_spec.rb

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
require 'cc/engine/csslint'
2-
require 'tmpdir'
1+
require "spec_helper"
32

43
module CC
54
module Engine

Diff for: spec/spec_helper.rb

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
require "cc/engine/csslint"
2+
require "tmpdir"

0 commit comments

Comments
 (0)