aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--its/plugin/projects/issues-project/src/file1.css4
-rw-r--r--its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java1
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoElementNoUnknown.java28
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java15
-rw-r--r--yarn.lock4
5 files changed, 52 insertions, 0 deletions
diff --git a/its/plugin/projects/issues-project/src/file1.css b/its/plugin/projects/issues-project/src/file1.css
index aea7607..fc08fd4 100644
--- a/its/plugin/projects/issues-project/src/file1.css
+++ b/its/plugin/projects/issues-project/src/file1.css
@@ -13,6 +13,10 @@ a::pseudo { /* S4660 | selecto
color: red;
}
+a::ng-deep, a::custom-element { /* "ng-deep" and "custom-element" ignored by S4660 | selector-pseudo-element-no-unknown */
+ color: red;
+}
+
a:unknown { /* S4659 | selector-pseudo-class-no-unknown */
background-color: #ffw; /* S4647 | color-no-invalid-hex */
/* */ /* S4663 | comment-no-empty */
diff --git a/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java b/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java
index a81230a..cb6b9c1 100644
--- a/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java
+++ b/its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java
@@ -51,6 +51,7 @@ public class IssuesTest {
@BeforeClass
public static void prepare() {
RulesConfiguration rulesConfiguration = new RulesConfiguration();
+ rulesConfiguration.add("S4660", "ignorePseudoElements", "ng-deep, /^custom-/");
File profile = ProfileGenerator.generateProfile(orchestrator.getServer().getUrl(), "css", "css", rulesConfiguration, Collections.emptySet());
orchestrator.getServer().restoreProfile(FileLocation.of(profile));
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoElementNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoElementNoUnknown.java
index c26dfc2..8682859 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoElementNoUnknown.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoElementNoUnknown.java
@@ -19,13 +19,41 @@
*/
package org.sonar.css.plugin.rules;
+import java.util.Arrays;
+import java.util.List;
import org.sonar.check.Rule;
+import org.sonar.check.RuleProperty;
+
+import static org.sonar.css.plugin.rules.RuleUtils.splitAndTrim;
@Rule(key = "S4660")
public class SelectorPseudoElementNoUnknown implements CssRule {
+ private static final String DEFAULT_IGNORE_PSEUDO_ELEMENTS = "ng-deep";
+
@Override
public String stylelintKey() {
return "selector-pseudo-element-no-unknown";
}
+
+ @RuleProperty(
+ key = "ignorePseudoElements",
+ description = "Comma-separated list of regular expressions or strings to ignore (e.g. /^custom-/).",
+ defaultValue = "" + DEFAULT_IGNORE_PSEUDO_ELEMENTS)
+ String ignorePseudoElements = DEFAULT_IGNORE_PSEUDO_ELEMENTS;
+
+ @Override
+ public List<Object> stylelintOptions() {
+ return Arrays.asList(true, new StylelintIgnorePseudoElementsOption(splitAndTrim(ignorePseudoElements)));
+ }
+
+ private static class StylelintIgnorePseudoElementsOption {
+ // Used by GSON serialization
+ private final List<String> ignorePseudoElements;
+
+ StylelintIgnorePseudoElementsOption(List<String> ignorePseudoElements) {
+ this.ignorePseudoElements = ignorePseudoElements;
+ }
+ }
+
}
diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java
index e7945b7..bd18c4b 100644
--- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java
+++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java
@@ -46,6 +46,7 @@ public class CssRuleTest {
DeclarationBlockNoDuplicateProperties.class,
PropertyNoUnknown.class,
SelectorPseudoClassNoUnknown.class,
+ SelectorPseudoElementNoUnknown.class,
SelectorTypeNoUnknown.class,
UnitNoUnknown.class);
@@ -86,6 +87,20 @@ public class CssRuleTest {
}
@Test
+ public void selector_pseudo_element_no_unknown_default() {
+ String optionsAsJson = new Gson().toJson(new SelectorPseudoElementNoUnknown().stylelintOptions());
+ assertThat(optionsAsJson).isEqualTo("[true,{\"ignorePseudoElements\":[\"ng-deep\"]}]");
+ }
+
+ @Test
+ public void selector_pseudo_element_no_unknown_custom() {
+ SelectorPseudoElementNoUnknown selectorPseudoElementNoUnknown = new SelectorPseudoElementNoUnknown();
+ selectorPseudoElementNoUnknown.ignorePseudoElements = "ng-deep, /^custom-/";
+ String optionsAsJson = new Gson().toJson(selectorPseudoElementNoUnknown.stylelintOptions());
+ assertThat(optionsAsJson).isEqualTo("[true,{\"ignorePseudoElements\":[\"ng-deep\",\"/^custom-/\"]}]");
+ }
+
+ @Test
public void units_no_unknown_options() {
String optionsAsJson = new Gson().toJson(new UnitNoUnknown().stylelintOptions());
assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreUnits\":[\"x\"]}]");
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..fb57ccd
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,4 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+