From e87ee76e9400b1e571c6a23e100c460b28b32a39 Mon Sep 17 00:00:00 2001 From: Onno van der Zee Date: Mon, 21 Sep 2015 11:32:28 +0200 Subject: [PATCH 1/2] check equal uses more than once --- src/rules/overqualified-elements.js | 17 ++++++++++++----- tests/rules/overqualified-elements.js | 7 +++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/rules/overqualified-elements.js b/src/rules/overqualified-elements.js index 13e21274..4d551cb3 100644 --- a/src/rules/overqualified-elements.js +++ b/src/rules/overqualified-elements.js @@ -48,13 +48,20 @@ CSSLint.addRule({ parser.addListener("endstylesheet", function(){ - var prop; + var equalParts, + lines, + prop; for (prop in classes){ if (classes.hasOwnProperty(prop)){ - - //one use means that this is overqualified - if (classes[prop].length === 1 && classes[prop][0].part.elementName){ - reporter.report("Element (" + classes[prop][0].part + ") is overqualified, just use " + classes[prop][0].modifier + " without element name.", classes[prop][0].part.line, classes[prop][0].part.col, rule); + equalParts = true; + lines = []; + for (var i = 0; i < classes[prop].length; i++) { + lines.push(classes[prop][i].part.line); + equalParts = equalParts && (classes[prop][i].part.text === classes[prop][0].part.text); + } + //one use or multiple equal uses means that this is overqualified + if (classes[prop][0].part.elementName && equalParts) { + reporter.report("Element (" + classes[prop][0].part + ") is overqualified, just use " + classes[prop][0].modifier + " without element name, line " + lines.join(', ') + ".", classes[prop][0].part.line, classes[prop][0].part.col, rule); } } } diff --git a/tests/rules/overqualified-elements.js b/tests/rules/overqualified-elements.js index 368fcaee..3bc2615d 100644 --- a/tests/rules/overqualified-elements.js +++ b/tests/rules/overqualified-elements.js @@ -33,6 +33,13 @@ "Using a class with an element and without should not result in a warning": function(){ var result = CSSLint.verify("li.foo { float: left;} .foo { float: right; }", { "overqualified-elements": 1 }); Assert.areEqual(0, result.messages.length); + }, + + "Using a class with the same element more than once should result in a warning": function(){ + var result = CSSLint.verify("li.foo { float: left;} li.foo { float: right; }", { "overqualified-elements": 1 }); + Assert.areEqual(1, result.messages.length); + Assert.areEqual("warning", result.messages[0].type); + Assert.areEqual("Element (li.foo) is overqualified, just use .foo without element name (found 2x).", result.messages[0].message); } })); From 7e6a3a69fce4b69290756a36b4e330f662f8639a Mon Sep 17 00:00:00 2001 From: Onno van der Zee Date: Mon, 21 Sep 2015 12:00:15 +0200 Subject: [PATCH 2/2] warning message less cryptic --- src/rules/overqualified-elements.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rules/overqualified-elements.js b/src/rules/overqualified-elements.js index 4d551cb3..17b3e60e 100644 --- a/src/rules/overqualified-elements.js +++ b/src/rules/overqualified-elements.js @@ -61,7 +61,7 @@ CSSLint.addRule({ } //one use or multiple equal uses means that this is overqualified if (classes[prop][0].part.elementName && equalParts) { - reporter.report("Element (" + classes[prop][0].part + ") is overqualified, just use " + classes[prop][0].modifier + " without element name, line " + lines.join(', ') + ".", classes[prop][0].part.line, classes[prop][0].part.col, rule); + reporter.report("Element (" + classes[prop][0].part + ") is overqualified, just use " + classes[prop][0].modifier + " without element name" + ((lines.length > 1) ? " (found " + lines.length + "x)" : "") + ".", classes[prop][0].part.line, classes[prop][0].part.col, rule); } } }