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/main | |
| 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/main')
5 files changed, 38 insertions, 8 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 {  | 
