Skip to content

Commit b0efe93

Browse files
committed
Allows the user to ignore properties and selectors when matching
1 parent a205b95 commit b0efe93

File tree

4 files changed

+52
-11
lines changed

4 files changed

+52
-11
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## (Unreleased) ##
2+
3+
* Allows the user to specify ignored properties and selectors
4+
15
## 0.2.1 - 3/28/2013 ##
26

37
* Changes coloring to the selectors and declarations

lib/csscss/cli.rb

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
module Csscss
22
class CLI
33
def initialize(argv)
4-
@argv = argv
5-
@verbose = false
6-
@color = true
7-
@minimum = 3
8-
@compass = false
4+
@argv = argv
5+
@verbose = false
6+
@color = true
7+
@minimum = 3
8+
@compass = false
9+
@ignored_properties = []
10+
@ignored_selectors = []
911
end
1012

1113
def run
@@ -40,7 +42,9 @@ def execute
4042
open(filename) {|f| f.read }
4143
end
4244

43-
RedundancyAnalyzer.new(contents).redundancies(@minimum)
45+
RedundancyAnalyzer.new(contents).redundancies(minimum: @minimum,
46+
ignored_properties: @ignored_properties,
47+
ignored_selectors: @ignored_selectors)
4448
end
4549

4650
combined_redundancies = all_redundancies.inject({}) do |combined, redundancies|
@@ -83,6 +87,14 @@ def parse(argv)
8387
@minimum = n
8488
end
8589

90+
opts.on("--ignore-properties property1,property2,...", Array, "Ignore these properties when finding matches") do |ignored_properties|
91+
@ignored_properties = ignored_properties
92+
end
93+
94+
opts.on('--ignore-selectors "selector1","selector2",...', Array, "Ignore these selectors when finding matches") do |ignored_selectors|
95+
@ignored_selectors = ignored_selectors
96+
end
97+
8698
opts.on("-V", "--version", "Show version") do |v|
8799
puts opts.ver
88100
exit

lib/csscss/redundancy_analyzer.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,20 @@ def initialize(raw_css)
55
@raw_css = raw_css
66
end
77

8-
def redundancies(minimum = nil)
8+
def redundancies(opts = {})
9+
minimum = opts[:minimum]
10+
ignored_properties = opts[:ignored_properties] || []
11+
ignored_selectors = opts[:ignored_selectors] || []
12+
913
rule_sets = Parser::Css.parse(@raw_css)
1014
matches = {}
1115
parents = {}
1216
rule_sets.each do |rule_set|
17+
next if ignored_selectors.include?(rule_set.selectors.selectors)
18+
sel = rule_set.selectors
19+
1320
rule_set.declarations.each do |dec|
14-
sel = rule_set.selectors
21+
next if ignored_properties.include?(dec.property)
1522

1623
if parser = shorthand_parser(dec.property)
1724
if new_decs = parser.parse(dec.property, dec.value)

test/csscss/redundancy_analyzer_test.rb

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module Csscss
2222
[sel(".bar"), sel("h1, h2")] , [dec("outline", "none"), dec("position", "relative")]
2323
]
2424

25-
RedundancyAnalyzer.new(css).redundancies(2).must_equal({
25+
RedundancyAnalyzer.new(css).redundancies(minimum:2).must_equal({
2626
[sel(".bar"), sel("h1, h2")] => [dec("outline", "none"), dec("position", "relative")]
2727
})
2828
end
@@ -88,7 +88,7 @@ module Csscss
8888
}
8989
$
9090

91-
redundancies = RedundancyAnalyzer.new(css).redundancies(3)
91+
redundancies = RedundancyAnalyzer.new(css).redundancies(minimum:3)
9292
redundancies[[sel(".bar"), sel(".bar2"), sel(".baz")]].size.must_equal(5)
9393
end
9494

@@ -230,7 +230,7 @@ module Csscss
230230
[sel(".bar"), sel(".baz"), sel(".foo")] => [dec("border-style", "solid"), dec("border-width", "4px")]
231231
})
232232

233-
RedundancyAnalyzer.new(css).redundancies(2).must_equal({
233+
RedundancyAnalyzer.new(css).redundancies(minimum:2).must_equal({
234234
[sel(".bar"), sel(".baz"), sel(".foo")] => [dec("border-style", "solid"), dec("border-width", "4px")]
235235
})
236236
end
@@ -248,6 +248,24 @@ module Csscss
248248
})
249249
end
250250

251+
it "ignores specific properties" do
252+
css = %$
253+
h1, h2 { display: none; position: relative; outline:none}
254+
.foo { DISPLAY: none; width: 1px }
255+
.bar { position: relative; width: 1px; outline: none }
256+
.baz { display: none }
257+
$
258+
259+
RedundancyAnalyzer.new(css).redundancies(ignored_properties:%w(display outline)).must_equal({
260+
[sel(".bar"), sel("h1, h2")] => [dec("position", "relative")],
261+
[sel(".bar"), sel(".foo")] => [dec("width", "1px")],
262+
})
263+
264+
RedundancyAnalyzer.new(css).redundancies(ignored_properties:%w(display outline), ignored_selectors:%w(.foo)).must_equal({
265+
[sel(".bar"), sel("h1, h2")] => [dec("position", "relative")]
266+
})
267+
end
268+
251269
# TODO: someday
252270
# it "reports duplication within the same selector" do
253271
# css = %$

0 commit comments

Comments
 (0)