diff options
| author | Elena Vilchik | 2019-06-05 12:57:59 +0200 |
|---|---|---|
| committer | GitHub | 2019-06-05 12:57:59 +0200 |
| commit | 04a1a6ca30161306a4ce8668ea00d94786d12d1c (patch) | |
| tree | 87ac8578bc54cabb2e73eb051a61decfceca95e4 | |
| parent | 7e040f65512919f37742e5a7f8adb1a660efd637 (diff) | |
| download | sonar-css-04a1a6ca30161306a4ce8668ea00d94786d12d1c.tar.bz2 | |
Avoid false-positive due to CSS Modules specific syntax (#171)
6 files changed, 57 insertions, 5 deletions
diff --git a/its/plugin/projects/issues-project/src/cssModules.css b/its/plugin/projects/issues-project/src/cssModules.css new file mode 100644 index 0000000..01508ea --- /dev/null +++ b/its/plugin/projects/issues-project/src/cssModules.css @@ -0,0 +1,32 @@ +/* Adding one standard issue to make sure we analyze this file */ +@unknown { /* S4662 | at-rule-no-unknown */ + width: 1px; +} + +/* ignored by S4662 | at-rule-no-unknown */ +@value colors: "./colors.css"; +@value blue, red, green from colors; + +.className { + color: green; + background: red; +} +.otherClassName { + /* ignored by S4654 | property-no-unknown */ + composes: className; + color: yellow; +} + +/* ignored by S4659 | selector-pseudo-class-no-unknown */ +:export { + /* ignored by S4654 | property-no-unknown */ + exportedKey: exportedValue; + /* ... */ +} + +/* ignored by S4659 | selector-pseudo-class-no-unknown */ +:import("path/to/dep.css") { + /* ignored by S4654 | property-no-unknown */ + localAlias: keyFromDep; + /* ... */ +} 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 077a564..9294357 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 @@ -62,6 +62,7 @@ public class IssuesTest { assertThat(issuesList).extracting("rule").hasSize( CssRules.getRuleClasses().size() * 3 /* issues are raised against .css, .less and .scss */ + 1 /* issue S4654 is raised for comment */ + + 1 /* issue S4662 is raised for cssModules.css */ - 2 /* issue S4668 not raised on .less nor .scss */); } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java index 224b39d..bed6846 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java @@ -27,7 +27,7 @@ import org.sonar.check.RuleProperty; @Rule(key = "S4662") public class AtRuleNoUnknown implements CssRule { - private static final String DEFAULT_IGNORED_AT_RULES = "at-root,content,debug,each,else,error,for,function,if,include,mixin,return,warn,while,extend"; + private static final String DEFAULT_IGNORED_AT_RULES = "value,at-root,content,debug,each,else,error,for,function,if,include,mixin,return,warn,while,extend"; @RuleProperty( key = "ignoreAtRules", diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/PropertyNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/PropertyNoUnknown.java index 9c9f75a..670a6b4 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/PropertyNoUnknown.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/PropertyNoUnknown.java @@ -21,6 +21,9 @@ package org.sonar.css.plugin.rules; import org.sonar.check.Rule; +import java.util.Arrays; +import java.util.List; + @Rule(key = "S4654") public class PropertyNoUnknown implements CssRule { @@ -28,4 +31,14 @@ public class PropertyNoUnknown implements CssRule { public String stylelintKey() { return "property-no-unknown"; } + + @Override + public List<Object> stylelintOptions() { + return Arrays.asList(true, new StylelintIgnoreOption()); + } + + private static class StylelintIgnoreOption { + // Used by GSON serialization + private final String[] ignoreProperties = {"composes", "exportedKey", "localAlias"}; + } } 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 56d254a..a669a33 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 @@ -39,6 +39,6 @@ public class SelectorPseudoClassNoUnknown implements CssRule { private static class StylelintIgnoreOption { // Used by GSON serialization - private final String[] ignorePseudoClasses = {"local", "global"}; + private final String[] ignorePseudoClasses = {"local", "global", "export", "import"}; } } 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 195f7c6..feca51e 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,6 @@ 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; @@ -45,6 +44,7 @@ public class CssRuleTest { Set<Class> rulesWithStylelintOptions = Sets.newSet( AtRuleNoUnknown.class, DeclarationBlockNoDuplicateProperties.class, + PropertyNoUnknown.class, SelectorPseudoClassNoUnknown.class); for (Class ruleClass : CssRules.getRuleClasses()) { @@ -60,13 +60,19 @@ public class CssRuleTest { @Test public void selector_pseudo_class_options() { String optionsAsJson = new Gson().toJson(new SelectorPseudoClassNoUnknown().stylelintOptions()); - assertThat(optionsAsJson).isEqualTo("[true,{\"ignorePseudoClasses\":[\"local\",\"global\"]}]"); + assertThat(optionsAsJson).isEqualTo("[true,{\"ignorePseudoClasses\":[\"local\",\"global\",\"export\",\"import\"]}]"); + } + + @Test + public void property_no_unknown_options() { + String optionsAsJson = new Gson().toJson(new PropertyNoUnknown().stylelintOptions()); + assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreProperties\":[\"composes\",\"exportedKey\",\"localAlias\"]}]"); } @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\"]}]"); + assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreAtRules\":[\"value\",\"at-root\",\"content\",\"debug\",\"each\",\"else\",\"error\",\"for\",\"function\",\"if\",\"include\",\"mixin\",\"return\",\"warn\",\"while\",\"extend\"]}]"); } @Test |
