Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 9da9360

Browse files
committed
Raise default remediation, categorize checks
Categorize checks loosely based on the CSSLint wiki[1]. The most obvious departure was categorizing Performance rules as Bug Risk checks. 1: https://github.com/CSSLint/csslint/wiki/Rules Default remediation was at an abysmal 500, upped it to the "trivial" baseline for now and built a small class allowing us to easily override these later. I chose keyword arguments in the CheckDetails class so we can easily create an override object for one, the other, or both of categories and remediation points.
1 parent a5d4f2e commit 9da9360

File tree

5 files changed

+86
-5
lines changed

5 files changed

+86
-5
lines changed

lib/cc/engine/csslint.rb

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

spec/cc/engine/csslint_spec.rb

Lines changed: 1 addition & 2 deletions
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

spec/spec_helper.rb

Lines changed: 2 additions & 0 deletions
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)