Skip to content

Commit 2ad0b73

Browse files
committed
Consider selectors containg #id or .class qualified
1 parent 5436a1e commit 2ad0b73

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/rules/unqualified-attributes.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ CSSLint.addRule({
1313
//initialization
1414
init: function(parser, reporter) {
1515
"use strict";
16+
1617
var rule = this;
1718

1819
parser.addListener("startrule", function(event) {
1920

2021
var selectors = event.selectors,
22+
selectorContainsClassOrId = false,
2123
selector,
2224
part,
2325
modifier,
@@ -30,8 +32,19 @@ CSSLint.addRule({
3032
if (part.type === parser.SELECTOR_PART_TYPE) {
3133
for (k=0; k < part.modifiers.length; k++) {
3234
modifier = part.modifiers[k];
33-
if (modifier.type === "attribute" && (!part.elementName || part.elementName === "*")) {
34-
reporter.report(rule.desc, part.line, part.col, rule);
35+
36+
if (modifier.type === "class" || modifier.type === "id") {
37+
selectorContainsClassOrId = true;
38+
break;
39+
}
40+
}
41+
42+
if (!selectorContainsClassOrId) {
43+
for (k=0; k < part.modifiers.length; k++) {
44+
modifier = part.modifiers[k];
45+
if (modifier.type === "attribute" && (!part.elementName || part.elementName === "*")) {
46+
reporter.report(rule.desc, part.line, part.col, rule);
47+
}
3548
}
3649
}
3750
}

tests/rules/unqualified-attributes.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@
1313
Assert.areEqual("Unqualified attribute selectors are known to be slow.", result.messages[0].message);
1414
},
1515

16+
"A selector that contains a class is considered qualified": function(){
17+
var result = CSSLint.verify("p [href].fancy[type=text] { font-size: 10px; }", {"unqualified-attributes": 1 });
18+
Assert.areEqual(0, result.messages.length);
19+
},
20+
21+
"A selector that contains an ID is considered qualified": function(){
22+
var result = CSSLint.verify("p [href]#fancy[type=text] { font-size: 10px; }", {"unqualified-attributes": 1 });
23+
Assert.areEqual(0, result.messages.length);
24+
},
25+
1626
"Using an unqualified attribute selector as the right-most part should result in a warning": function() {
1727
var result = CSSLint.verify("p div [type=text] { font-size: 10px; }", {"unqualified-attributes": 1 });
1828
Assert.areEqual(1, result.messages.length);

0 commit comments

Comments
 (0)