aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmaury Levé2018-06-28 12:17:58 +0200
committerGitHub2018-06-28 12:17:58 +0200
commit1e0fc32ad10d840b4d38b2eb61926a6dc7fbfcaf (patch)
tree219e996832b2279f5aeb236023ac66179a948db1
parentdae85f367d76550968d3756ba234bd07c559a6b6 (diff)
downloadsonar-css-1e0fc32ad10d840b4d38b2eb61926a6dc7fbfcaf.tar.bz2
Improve the way rules are serialized into stylelint json (#98)
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java6
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java26
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/AtRuleNoUnknown.java3
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/CssRule.java7
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java4
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/rules/CssRuleTest.java8
6 files changed, 41 insertions, 13 deletions
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java
index ce98ede..57b6d0d 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRuleSensor.java
@@ -20,6 +20,7 @@
package org.sonar.css.plugin;
import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import java.io.File;
import java.io.IOException;
@@ -140,7 +141,10 @@ public class CssRuleSensor implements Sensor {
private void createConfig(File deployDestination) throws IOException {
String configPath = linterCommandProvider.configPath(deployDestination);
StylelintConfig config = cssRules.getConfig();
- String configAsJson = new Gson().toJson(config);
+ final GsonBuilder gsonBuilder = new GsonBuilder();
+ gsonBuilder.registerTypeAdapter(StylelintConfig.class, config);
+ final Gson gson = gsonBuilder.create();
+ String configAsJson = gson.toJson(config);
Files.write(Paths.get(configPath), Collections.singletonList(configAsJson), StandardCharsets.UTF_8);
}
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java
index 926fff0..de51192 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRules.java
@@ -19,12 +19,18 @@
*/
package org.sonar.css.plugin;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import javax.annotation.Nullable;
import org.sonar.api.batch.rule.CheckFactory;
import org.sonar.api.batch.rule.Checks;
@@ -113,7 +119,23 @@ public class CssRules {
return stylelintKeyToRuleKey.isEmpty();
}
- public static class StylelintConfig {
- Map<String, Object> rules = new HashMap<>();
+ public static class StylelintConfig implements JsonSerializer<StylelintConfig> {
+ Map<String, List<Object>> rules = new HashMap<>();
+
+ @Override
+ public JsonElement serialize(StylelintConfig src, Type typeOfSrc, JsonSerializationContext context) {
+ JsonObject stylelintJson = new JsonObject();
+ JsonObject rulesJson = new JsonObject();
+ stylelintJson.add("rules", rulesJson);
+ for (Entry<String, List<Object>> stylelintOptions : rules.entrySet()) {
+ List<Object> config = stylelintOptions.getValue();
+ if(config.isEmpty()) {
+ rulesJson.addProperty(stylelintOptions.getKey(), true);
+ } else {
+ rulesJson.add(stylelintOptions.getKey(), context.serialize(stylelintOptions.getValue()));
+ }
+ }
+ return stylelintJson;
+ }
}
}
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 756d822..36fb364 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
@@ -20,6 +20,7 @@
package org.sonar.css.plugin.rules;
import java.util.Arrays;
+import java.util.List;
import org.sonar.check.Rule;
import org.sonar.check.RuleProperty;
@@ -40,7 +41,7 @@ public class AtRuleNoUnknown implements CssRule {
}
@Override
- public Object stylelintOptions() {
+ public List<Object> stylelintOptions() {
return Arrays.asList(true, new StylelintIgnoreOption(ignoredAtRules.split(",")));
}
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 fdc577b..eba3a70 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
@@ -19,11 +19,14 @@
*/
package org.sonar.css.plugin.rules;
+import java.util.Collections;
+import java.util.List;
+
public interface CssRule {
String stylelintKey();
- default Object stylelintOptions() {
- return true;
+ default List<Object> stylelintOptions() {
+ return Collections.emptyList();
}
}
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java
index 474ee09..46c451e 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/DeclarationBlockNoDuplicateProperties.java
@@ -42,8 +42,8 @@ public class DeclarationBlockNoDuplicateProperties implements CssRule {
}
@Override
- public Object stylelintOptions() {
- return ignoreFallbacks ? Arrays.asList(true, new StylelintIgnoreOption()) : true;
+ public List<Object> stylelintOptions() {
+ return ignoreFallbacks ? Arrays.asList(true, new StylelintIgnoreOption()) : Collections.emptyList();
}
private static class StylelintIgnoreOption {
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 f839e49..670ffbf 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
@@ -38,15 +38,14 @@ public class CssRuleTest {
}
@Test
- public void rules_default_json_is_true() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
+ public void rules_default_is_empty() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
for (Class ruleClass : CssRules.getRuleClasses()) {
CssRule rule = (CssRule)ruleClass.getConstructor().newInstance();
if (rule instanceof AtRuleNoUnknown || rule instanceof DeclarationBlockNoDuplicateProperties) {
continue;
}
- String optionsAsJson = new Gson().toJson(rule.stylelintOptions());
- assertThat(optionsAsJson).isEqualTo("true");
+ assertThat(rule.stylelintOptions()).isEmpty();
}
}
@@ -74,7 +73,6 @@ public class CssRuleTest {
public void declaration_block_no_duplicate_properties_custom() {
DeclarationBlockNoDuplicateProperties instance = new DeclarationBlockNoDuplicateProperties();
instance.ignoreFallbacks = false;
- String optionsAsJson = new Gson().toJson(instance.stylelintOptions());
- assertThat(optionsAsJson).isEqualTo("true");
+ assertThat(instance.stylelintOptions()).isEmpty();
}
}