diff options
| author | Amaury Levé | 2018-06-28 12:17:58 +0200 |
|---|---|---|
| committer | GitHub | 2018-06-28 12:17:58 +0200 |
| commit | 1e0fc32ad10d840b4d38b2eb61926a6dc7fbfcaf (patch) | |
| tree | 219e996832b2279f5aeb236023ac66179a948db1 /sonar-css-plugin/src | |
| parent | dae85f367d76550968d3756ba234bd07c559a6b6 (diff) | |
| download | sonar-css-1e0fc32ad10d840b4d38b2eb61926a6dc7fbfcaf.tar.bz2 | |
Improve the way rules are serialized into stylelint json (#98)
Diffstat (limited to 'sonar-css-plugin/src')
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(); } } |
