diff options
3 files changed, 36 insertions, 5 deletions
diff --git a/its/plugin/projects/issues-project/src/file1.css b/its/plugin/projects/issues-project/src/file1.css index f98d608..0c95e3d 100644 --- a/its/plugin/projects/issues-project/src/file1.css +++ b/its/plugin/projects/issues-project/src/file1.css @@ -61,4 +61,8 @@ unknown { /* S4670 | selecto @media screen and (unknown) { /* S4661 | media-feature-name-no-unknown */ width: 2px; -}
\ No newline at end of file +} + +:global(.nestedClassParent) { /* ignored by S4659 | selector-pseudo-class-no-unknown */ + color: blue; +} diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java index d647499..0f37f84 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java @@ -19,6 +19,8 @@ */ package org.sonar.css.plugin.rules; +import java.util.Arrays; +import java.util.List; import org.sonar.check.Rule; @Rule(key = "S4659") @@ -28,4 +30,15 @@ public class SelectorPseudoClassNoUnknown implements CssRule { public String stylelintKey() { return "selector-pseudo-class-no-unknown"; } + + @Override + public List<Object> stylelintOptions() { + return Arrays.asList(true, new StylelintIgnoreOption()); + } + + + private static class StylelintIgnoreOption { + // Used by GSON serialization + private final String[] ignorePseudoClasses = {"local", "global"}; + } } 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 a929abf..21cc76a 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 @@ -21,7 +21,10 @@ package org.sonar.css.plugin.rules; import com.google.gson.Gson; import java.lang.reflect.InvocationTargetException; +import java.util.Collections; +import java.util.Set; import org.junit.Test; +import org.mockito.internal.util.collections.Sets; import org.sonar.css.plugin.CssRules; import static org.assertj.core.api.Assertions.assertThat; @@ -39,17 +42,28 @@ public class CssRuleTest { @Test public void rules_default_is_empty() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { + Set<Class> rulesWithStylelintOptions = Sets.newSet( + AtRuleNoUnknown.class, + DeclarationBlockNoDuplicateProperties.class, + SelectorPseudoClassNoUnknown.class); + for (Class ruleClass : CssRules.getRuleClasses()) { CssRule rule = (CssRule)ruleClass.getConstructor().newInstance(); - if (rule instanceof AtRuleNoUnknown || rule instanceof DeclarationBlockNoDuplicateProperties) { - continue; + if (rulesWithStylelintOptions.contains(rule.getClass())) { + assertThat(rule.stylelintOptions()).isNotEmpty(); + } else { + assertThat(rule.stylelintOptions()).isEmpty(); } - - assertThat(rule.stylelintOptions()).isEmpty(); } } @Test + public void selector_pseudo_class_options() { + String optionsAsJson = new Gson().toJson(new SelectorPseudoClassNoUnknown().stylelintOptions()); + assertThat(optionsAsJson).isEqualTo("[true,{\"ignorePseudoClasses\":[\"local\",\"global\"]}]"); + } + + @Test public void at_rule_unknown_default() { String optionsAsJson = new Gson().toJson(new AtRuleNoUnknown().stylelintOptions()); assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreAtRules\":[\"at-root\",\"content\",\"debug\",\"each\",\"else\",\"error\",\"for\",\"function\",\"if\",\"include\",\"mixin\",\"return\",\"warn\",\"while\",\"extend\"]}]"); |
