diff --git a/css-checks/src/test/java/org/sonar/css/checks/common/ObsoletePseudoCheckTest.java b/css-checks/src/test/java/org/sonar/css/checks/common/ObsoletePseudoCheckTest.java index 10ddbcd6..7c45dd2d 100644 --- a/css-checks/src/test/java/org/sonar/css/checks/common/ObsoletePseudoCheckTest.java +++ b/css-checks/src/test/java/org/sonar/css/checks/common/ObsoletePseudoCheckTest.java @@ -23,11 +23,29 @@ import org.sonar.css.checks.CheckTestUtils; import org.sonar.css.checks.verifier.CssCheckVerifier; +import java.io.File; + public class ObsoletePseudoCheckTest { + private ObsoletePseudoCheck check = new ObsoletePseudoCheck(); + + @Test + public void test_css() { + CssCheckVerifier.verifyCssFile(check, getTestFile("obsoletePseudos.css")); + } + @Test - public void test() { - CssCheckVerifier.verifyCssFile(new ObsoletePseudoCheck(), CheckTestUtils.getCommonTestFile("obsoletePseudos.css")); + public void test_less() { + CssCheckVerifier.verifyLessFile(check, getTestFile("obsoletePseudos.less")); + } + + @Test + public void test_scss() { + CssCheckVerifier.verifyScssFile(check, getTestFile("obsoletePseudos.scss")); + } + + private File getTestFile(String fileName) { + return CheckTestUtils.getCommonTestFile("obsolete-pseudos/" + fileName); } } diff --git a/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.css b/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.css new file mode 100644 index 00000000..926345f2 --- /dev/null +++ b/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.css @@ -0,0 +1,11 @@ +:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ + color: #000000; +} + +::ng-deep { /* Noncompliant ![sc=3;ec=10;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "ng-deep" pseudo.}! */ + color: #000000; +} + +p:empty { + color: #000000; +} diff --git a/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.less b/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.less new file mode 100644 index 00000000..926345f2 --- /dev/null +++ b/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.less @@ -0,0 +1,11 @@ +:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ + color: #000000; +} + +::ng-deep { /* Noncompliant ![sc=3;ec=10;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "ng-deep" pseudo.}! */ + color: #000000; +} + +p:empty { + color: #000000; +} diff --git a/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.scss b/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.scss new file mode 100644 index 00000000..926345f2 --- /dev/null +++ b/css-checks/src/test/resources/checks/common/obsolete-pseudos/obsoletePseudos.scss @@ -0,0 +1,11 @@ +:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ + color: #000000; +} + +::ng-deep { /* Noncompliant ![sc=3;ec=10;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "ng-deep" pseudo.}! */ + color: #000000; +} + +p:empty { + color: #000000; +} diff --git a/css-checks/src/test/resources/checks/common/obsoletePseudos.css b/css-checks/src/test/resources/checks/common/obsoletePseudos.css deleted file mode 100644 index f17dd6a9..00000000 --- a/css-checks/src/test/resources/checks/common/obsoletePseudos.css +++ /dev/null @@ -1,7 +0,0 @@ -:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ - list-style-type: square; -} - -p:empty { - color: red; -} diff --git a/css-frontend/src/main/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactory.java b/css-frontend/src/main/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactory.java index 12066c4d..bb7bcf08 100644 --- a/css-frontend/src/main/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactory.java +++ b/css-frontend/src/main/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactory.java @@ -20,12 +20,11 @@ package org.sonar.css.model.pseudo.pseudoidentifier; import com.google.common.collect.ImmutableSet; - -import java.util.*; - import org.sonar.css.model.pseudo.pseudoidentifier.standard.*; import org.sonar.css.model.pseudo.pseudoidentifier.standard.Optional; +import java.util.*; + public class StandardPseudoIdentifierFactory { private static final Set ALL_PSEUDO_IDENTIFIER_CLASSES = ImmutableSet.of( @@ -64,6 +63,7 @@ public class StandardPseudoIdentifierFactory { Left.class, Link.class, Marker.class, + NgDeep.class, OnlyChild.class, OnlyOfType.class, Optional.class, diff --git a/css-frontend/src/main/java/org/sonar/css/model/pseudo/pseudoidentifier/standard/NgDeep.java b/css-frontend/src/main/java/org/sonar/css/model/pseudo/pseudoidentifier/standard/NgDeep.java new file mode 100644 index 00000000..a3a05b1c --- /dev/null +++ b/css-frontend/src/main/java/org/sonar/css/model/pseudo/pseudoidentifier/standard/NgDeep.java @@ -0,0 +1,31 @@ +/* + * SonarQube CSS / SCSS / Less Analyzer + * Copyright (C) 2013-2017 David RACODON + * mailto: david.racodon@gmail.com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.css.model.pseudo.pseudoidentifier.standard; + +import org.sonar.css.model.pseudo.pseudoidentifier.StandardPseudoIdentifier; + +public class NgDeep extends StandardPseudoIdentifier { + + public NgDeep() { + setObsolete(true); + addLinks("https://angular.io/guide/component-styles#deprecated-deep--and-ng-deep"); + } + +} diff --git a/css-frontend/src/test/java/org/sonar/css/model/pseudo/StandardPseudoComponentFactoryTest.java b/css-frontend/src/test/java/org/sonar/css/model/pseudo/StandardPseudoComponentFactoryTest.java index 1c80db7e..a448abcd 100644 --- a/css-frontend/src/test/java/org/sonar/css/model/pseudo/StandardPseudoComponentFactoryTest.java +++ b/css-frontend/src/test/java/org/sonar/css/model/pseudo/StandardPseudoComponentFactoryTest.java @@ -27,7 +27,7 @@ public class StandardPseudoComponentFactoryTest { @Test public void number_of_standard_pseudo_components() { - assertEquals(75, StandardPseudoComponentFactory.getAll().size()); + assertEquals(76, StandardPseudoComponentFactory.getAll().size()); } } diff --git a/css-frontend/src/test/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactoryTest.java b/css-frontend/src/test/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactoryTest.java index 975410bb..6169c729 100644 --- a/css-frontend/src/test/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactoryTest.java +++ b/css-frontend/src/test/java/org/sonar/css/model/pseudo/pseudoidentifier/StandardPseudoIdentifierFactoryTest.java @@ -61,12 +61,12 @@ public void should_return_a_valid_first_line_pseudo_identifier_object_mix_upperc @Test public void number_of_standard_pseudo_identifiers() { - assertEquals(58, StandardPseudoIdentifierFactory.getAll().size()); + assertEquals(59, StandardPseudoIdentifierFactory.getAll().size()); } @Test - public void number_of_obsolete_pseudo_functions() { - assertEquals(0, StandardPseudoIdentifierFactory.getAll().stream().filter(StandardPseudoIdentifier::isObsolete).count()); + public void number_of_obsolete_pseudo_identifiers() { + assertEquals(1, StandardPseudoIdentifierFactory.getAll().stream().filter(StandardPseudoIdentifier::isObsolete).count()); } @Test diff --git a/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.css b/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.css new file mode 100644 index 00000000..926345f2 --- /dev/null +++ b/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.css @@ -0,0 +1,11 @@ +:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ + color: #000000; +} + +::ng-deep { /* Noncompliant ![sc=3;ec=10;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "ng-deep" pseudo.}! */ + color: #000000; +} + +p:empty { + color: #000000; +} diff --git a/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.less b/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.less new file mode 100644 index 00000000..926345f2 --- /dev/null +++ b/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.less @@ -0,0 +1,11 @@ +:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ + color: #000000; +} + +::ng-deep { /* Noncompliant ![sc=3;ec=10;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "ng-deep" pseudo.}! */ + color: #000000; +} + +p:empty { + color: #000000; +} diff --git a/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.scss b/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.scss new file mode 100644 index 00000000..926345f2 --- /dev/null +++ b/its/ruling/projects/custom/common/obsolete-pseudos/obsoletePseudos.scss @@ -0,0 +1,11 @@ +:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ + color: #000000; +} + +::ng-deep { /* Noncompliant ![sc=3;ec=10;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "ng-deep" pseudo.}! */ + color: #000000; +} + +p:empty { + color: #000000; +} diff --git a/its/ruling/projects/custom/common/obsoletePseudos.css b/its/ruling/projects/custom/common/obsoletePseudos.css deleted file mode 100644 index f17dd6a9..00000000 --- a/its/ruling/projects/custom/common/obsoletePseudos.css +++ /dev/null @@ -1,7 +0,0 @@ -:any(ol, ul, menu, dir) { /* Noncompliant ![sc=2;ec=5;el=+0]! !{Remove this usage of the obsolete / not on W3C Standards track "any" pseudo.}! */ - list-style-type: square; -} - -p:empty { - color: red; -} diff --git a/its/ruling/tests/src/test/expected/css-line-length.json b/its/ruling/tests/src/test/expected/css-line-length.json index 94ed5994..abf15fa4 100644 --- a/its/ruling/tests/src/test/expected/css-line-length.json +++ b/its/ruling/tests/src/test/expected/css-line-length.json @@ -174,15 +174,16 @@ 12, 13, ], +'project:custom/common/obsolete-pseudos/obsoletePseudos.css':[ +1, +5, +], 'project:custom/common/obsoleteProperties.css':[ 2, 3, 4, 5, ], -'project:custom/common/obsoletePseudos.css':[ -1, -], 'project:custom/common/oneDeclarationPerLine.css':[ 19, ], diff --git a/its/ruling/tests/src/test/expected/css-named-color.json b/its/ruling/tests/src/test/expected/css-named-color.json index f67e682d..67becbb5 100644 --- a/its/ruling/tests/src/test/expected/css-named-color.json +++ b/its/ruling/tests/src/test/expected/css-named-color.json @@ -4475,9 +4475,6 @@ 'project:custom/common/obsoleteProperties.css':[ 6, ], -'project:custom/common/obsoletePseudos.css':[ -6, -], 'project:custom/common/oneDeclarationPerLine.css':[ 3, 4, diff --git a/its/ruling/tests/src/test/expected/css-obsolete-pseudos.json b/its/ruling/tests/src/test/expected/css-obsolete-pseudos.json index acf57bfe..41aa7b83 100644 --- a/its/ruling/tests/src/test/expected/css-obsolete-pseudos.json +++ b/its/ruling/tests/src/test/expected/css-obsolete-pseudos.json @@ -1,5 +1,6 @@ { -'project:custom/common/obsoletePseudos.css':[ +'project:custom/common/obsolete-pseudos/obsoletePseudos.css':[ 1, +5, ], } diff --git a/its/ruling/tests/src/test/expected/less-line-length.json b/its/ruling/tests/src/test/expected/less-line-length.json index 96e7f603..3f708efc 100644 --- a/its/ruling/tests/src/test/expected/less-line-length.json +++ b/its/ruling/tests/src/test/expected/less-line-length.json @@ -87,6 +87,10 @@ 12, 13, ], +'project:custom/common/obsolete-pseudos/obsoletePseudos.less':[ +1, +5, +], 'project:custom/common/properties/less/accelerator.less':[ 5, ], diff --git a/its/ruling/tests/src/test/expected/less-obsolete-pseudos.json b/its/ruling/tests/src/test/expected/less-obsolete-pseudos.json new file mode 100644 index 00000000..fdb6d929 --- /dev/null +++ b/its/ruling/tests/src/test/expected/less-obsolete-pseudos.json @@ -0,0 +1,6 @@ +{ +'project:custom/common/obsolete-pseudos/obsoletePseudos.less':[ +1, +5, +], +} diff --git a/its/ruling/tests/src/test/expected/less-prefer-single-line-comments.json b/its/ruling/tests/src/test/expected/less-prefer-single-line-comments.json index 445748c5..146d3490 100644 --- a/its/ruling/tests/src/test/expected/less-prefer-single-line-comments.json +++ b/its/ruling/tests/src/test/expected/less-prefer-single-line-comments.json @@ -255,6 +255,10 @@ 12, 13, ], +'project:custom/common/obsolete-pseudos/obsoletePseudos.less':[ +1, +5, +], 'project:custom/common/properties/less/accelerator.less':[ 5, 6, diff --git a/its/ruling/tests/src/test/expected/scss-line-length.json b/its/ruling/tests/src/test/expected/scss-line-length.json index b202cd72..2778b67f 100644 --- a/its/ruling/tests/src/test/expected/scss-line-length.json +++ b/its/ruling/tests/src/test/expected/scss-line-length.json @@ -111,6 +111,10 @@ 12, 13, ], +'project:custom/common/obsolete-pseudos/obsoletePseudos.scss':[ +1, +5, +], 'project:custom/common/properties/scss/accelerator.scss':[ 5, ], diff --git a/its/ruling/tests/src/test/expected/scss-obsolete-pseudos.json b/its/ruling/tests/src/test/expected/scss-obsolete-pseudos.json new file mode 100644 index 00000000..7ec55707 --- /dev/null +++ b/its/ruling/tests/src/test/expected/scss-obsolete-pseudos.json @@ -0,0 +1,6 @@ +{ +'project:custom/common/obsolete-pseudos/obsoletePseudos.scss':[ +1, +5, +], +} diff --git a/its/ruling/tests/src/test/expected/scss-prefer-single-line-comments.json b/its/ruling/tests/src/test/expected/scss-prefer-single-line-comments.json index 4ed8c019..654470d1 100644 --- a/its/ruling/tests/src/test/expected/scss-prefer-single-line-comments.json +++ b/its/ruling/tests/src/test/expected/scss-prefer-single-line-comments.json @@ -292,6 +292,10 @@ 12, 13, ], +'project:custom/common/obsolete-pseudos/obsoletePseudos.scss':[ +1, +5, +], 'project:custom/common/properties/scss/accelerator.scss':[ 5, 6,