aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElena Vilchik2019-06-14 10:37:59 +0200
committerGitHub2019-06-14 10:37:59 +0200
commitd27a1ac47a343ff76cc1135b0fdde9c89c1b3455 (patch)
tree367c93f0392853175b62555ca525f9e3857ba956
parenteb017c3b5e0b4652210fb7bcd0a68fe0c36b29cf (diff)
downloadsonar-css-d27a1ac47a343ff76cc1135b0fdde9c89c1b3455.tar.bz2
S4670: add parameter for ignored types (#182)
-rw-r--r--its/plugin/projects/issues-project/src/file1.css6
-rw-r--r--its/plugin/src/test/java/org/sonar/css/its/IssuesTest.java5
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java8
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java1
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/RuleUtils.java35
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorTypeNoUnknown.java19
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java14
7 files changed, 78 insertions, 10 deletions
diff --git a/its/plugin/projects/issues-project/src/file1.css b/its/plugin/projects/issues-project/src/file1.css
index a6de7ce..f595c3a 100644
--- a/its/plugin/projects/issues-project/src/file1.css
+++ b/its/plugin/projects/issues-project/src/file1.css
@@ -72,8 +72,12 @@ mat-form-field { /* Angular Materia
width: 100%;
}
+fa-icon { /* Font Awesome, ignored by S4670 | selector-type-no-unknown due to parameter */
+ width: 100%;
+}
+
div {
background-image: image-set(
- '/images/some-image-1x.jpg' 1x, /* 'x' is synonym to 'dppx', ignored by S4653 | unit-no-unknown */
+ '/images/some-image-1x.jpg' 1x, /* 'x' is synonym to 'dppx', ignored by S4653 | unit-no-unknown */
);
}
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 c65df09..81fd40c 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
@@ -32,6 +32,7 @@ import org.sonar.css.plugin.CssRules;
import org.sonarqube.ws.Issues.Issue;
import org.sonarqube.ws.client.issues.SearchRequest;
import org.sonarsource.analyzer.commons.ProfileGenerator;
+import org.sonarsource.analyzer.commons.ProfileGenerator.RulesConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.css.its.Tests.newWsClient;
@@ -45,7 +46,9 @@ public class IssuesTest {
@BeforeClass
public static void prepare() {
- File profile = ProfileGenerator.generateProfile(orchestrator.getServer().getUrl(), "css", "css", new ProfileGenerator.RulesConfiguration(), Collections.emptySet());
+ RulesConfiguration rulesConfiguration = new RulesConfiguration();
+ rulesConfiguration.add("S4670", "ignoreTypes", "/^mat-/, /^fa-/");
+ File profile = ProfileGenerator.generateProfile(orchestrator.getServer().getUrl(), "css", "css", rulesConfiguration, Collections.emptySet());
orchestrator.getServer().restoreProfile(FileLocation.of(profile));
orchestrator.getServer().provisionProject(PROJECT_KEY, PROJECT_KEY);
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 bed6846..e4690d2 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
@@ -24,6 +24,8 @@ 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 = "S4662")
public class AtRuleNoUnknown implements CssRule {
@@ -42,14 +44,14 @@ public class AtRuleNoUnknown implements CssRule {
@Override
public List<Object> stylelintOptions() {
- return Arrays.asList(true, new StylelintIgnoreOption(ignoredAtRules.split(",")));
+ return Arrays.asList(true, new StylelintIgnoreOption(splitAndTrim(ignoredAtRules)));
}
private static class StylelintIgnoreOption {
// Used by GSON serialization
- private final String[] ignoreAtRules;
+ private final List<String> ignoreAtRules;
- StylelintIgnoreOption(String[] ignoreAtRules) {
+ StylelintIgnoreOption(List<String> ignoreAtRules) {
this.ignoreAtRules = ignoreAtRules;
}
}
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java
index 14f1483..7df90a3 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java
@@ -29,4 +29,5 @@ public interface CssRule {
default List<Object> stylelintOptions() {
return Collections.emptyList();
}
+
}
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/RuleUtils.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/RuleUtils.java
new file mode 100644
index 0000000..1383ac6
--- /dev/null
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/RuleUtils.java
@@ -0,0 +1,35 @@
+/*
+ * SonarCSS
+ * Copyright (C) 2018-2019 SonarSource SA
+ * mailto:info AT sonarsource DOT 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.plugin.rules;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class RuleUtils {
+
+ private RuleUtils(){
+ }
+
+ public static List<String> splitAndTrim(String parameterValue) {
+ String[] split = parameterValue.split(",");
+ return Arrays.stream(split).map(String::trim).collect(Collectors.toList());
+ }
+}
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorTypeNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorTypeNoUnknown.java
index a42fa9a..abcf430 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorTypeNoUnknown.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/SelectorTypeNoUnknown.java
@@ -22,10 +22,21 @@ 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 = "S4670")
public class SelectorTypeNoUnknown implements CssRule {
+ private static final String DEFAULT_IGNORED_TYPES = "/^mat-/";
+
+ @RuleProperty(
+ key = "ignoreTypes",
+ description = "Comma-separated list of regular expressions for selector types to consider as valid.",
+ defaultValue = "" + DEFAULT_IGNORED_TYPES)
+ String ignoreTypes = DEFAULT_IGNORED_TYPES;
+
@Override
public String stylelintKey() {
return "selector-type-no-unknown";
@@ -33,11 +44,15 @@ public class SelectorTypeNoUnknown implements CssRule {
@Override
public List<Object> stylelintOptions() {
- return Arrays.asList(true, new StylelintIgnoreOption());
+ return Arrays.asList(true, new StylelintIgnoreOption(splitAndTrim(ignoreTypes)));
}
private static class StylelintIgnoreOption {
// Used by GSON serialization
- private final String[] ignoreTypes = {"/^mat-/"};
+ private final List<String> ignoreTypes;
+
+ StylelintIgnoreOption(List<String> ignoreTypes) {
+ this.ignoreTypes = ignoreTypes;
+ }
}
}
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 6a147bc..044f4f4 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
@@ -72,12 +72,20 @@ public class CssRuleTest {
}
@Test
- public void selector_type_no_unknown_options() {
+ public void selector_type_no_unknown_default() {
String optionsAsJson = new Gson().toJson(new SelectorTypeNoUnknown().stylelintOptions());
assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreTypes\":[\"/^mat-/\"]}]");
}
@Test
+ public void selector_type_no_unknown_custom() {
+ SelectorTypeNoUnknown selectorTypeNoUnknown = new SelectorTypeNoUnknown();
+ selectorTypeNoUnknown.ignoreTypes = "/^mat-/, /^fa-/";
+ String optionsAsJson = new Gson().toJson(selectorTypeNoUnknown.stylelintOptions());
+ assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreTypes\":[\"/^mat-/\",\"/^fa-/\"]}]");
+ }
+
+ @Test
public void units_no_unknown_options() {
String optionsAsJson = new Gson().toJson(new UnitNoUnknown().stylelintOptions());
assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreUnits\":[\"x\"]}]");
@@ -92,9 +100,9 @@ public class CssRuleTest {
@Test
public void at_rule_unknown_custom() {
AtRuleNoUnknown instance = new AtRuleNoUnknown();
- instance.ignoredAtRules = "foo";
+ instance.ignoredAtRules = "foo, bar";
String optionsAsJson = new Gson().toJson(instance.stylelintOptions());
- assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreAtRules\":[\"foo\"]}]");
+ assertThat(optionsAsJson).isEqualTo("[true,{\"ignoreAtRules\":[\"foo\",\"bar\"]}]");
}
@Test