aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--its/plugin/projects/issues-project/src/cssModules.css32
-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/AtRuleNoUnknown.java2
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/PropertyNoUnknown.java13
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorPseudoClassNoUnknown.java2
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java12
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