diff options
Diffstat (limited to 'sonar-css-plugin')
11 files changed, 88 insertions, 16 deletions
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 4fdf3f5..1dac08c 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,17 +19,19 @@ */ package org.sonar.css.plugin; +import org.sonar.api.batch.rule.CheckFactory; +import org.sonar.api.batch.rule.Checks; +import org.sonar.api.rule.RuleKey; +import org.sonar.css.plugin.rules.ColorNoInvalidHex; +import org.sonar.css.plugin.rules.CssRule; +import org.sonar.css.plugin.rules.UnitNoUnknown; + 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 org.sonar.api.batch.rule.CheckFactory; -import org.sonar.api.batch.rule.Checks; -import org.sonar.api.rule.RuleKey; -import org.sonar.css.plugin.rules.ColorNoInvalidHex; -import org.sonar.css.plugin.rules.CssRule; public class CssRules { @@ -37,7 +39,8 @@ public class CssRules { private final StylelintConfig config = new StylelintConfig(); public CssRules(CheckFactory checkFactory) { - Checks<CssRule> checks = checkFactory.<CssRule>create(CssRulesDefinition.REPOSITORY_KEY).addAnnotatedChecks((Iterable) getRuleClasses()); + Checks<CssRule> checks = checkFactory.<CssRule>create(CssRulesDefinition.REPOSITORY_KEY) + .addAnnotatedChecks((Iterable) getRuleClasses()); Collection<CssRule> enabledRules = checks.all(); stylelintKeyToRuleKey = new HashMap<>(); for (CssRule rule : enabledRules) { @@ -48,7 +51,8 @@ public class CssRules { public static List<Class> getRuleClasses() { return Collections.unmodifiableList(Arrays.asList( - ColorNoInvalidHex.class + ColorNoInvalidHex.class, + UnitNoUnknown.class )); } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java index 196252f..a338d7f 100644 --- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/CssRulesDefinition.java @@ -19,9 +19,7 @@ */ package org.sonar.css.plugin; -import java.util.Collections; import org.sonar.api.server.rule.RulesDefinition; -import org.sonar.css.plugin.rules.ColorNoInvalidHex; import org.sonarsource.analyzer.commons.RuleMetadataLoader; import static org.sonar.css.plugin.SonarWayProfile.PROFILE_PATH; @@ -40,7 +38,7 @@ public class CssRulesDefinition implements RulesDefinition { .setName(RULE_REPOSITORY_NAME); RuleMetadataLoader ruleMetadataLoader = new RuleMetadataLoader(RESOURCE_FOLDER, PROFILE_PATH); - ruleMetadataLoader.addRulesByAnnotatedClass(repository, Collections.singletonList(ColorNoInvalidHex.class)); + ruleMetadataLoader.addRulesByAnnotatedClass(repository, CssRules.getRuleClasses()); repository.done(); } } diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/UnitNoUnknown.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/UnitNoUnknown.java new file mode 100644 index 0000000..eee43db --- /dev/null +++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/rules/UnitNoUnknown.java @@ -0,0 +1,31 @@ +/* + * SonarCSS + * Copyright (C) 2018-2018 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 org.sonar.check.Rule; + +@Rule(key = "S4653") +public class UnitNoUnknown implements CssRule { + + @Override + public String stylelintKey() { + return "unit-no-unknown"; + } +} diff --git a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.html b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.html new file mode 100644 index 0000000..283bf5d --- /dev/null +++ b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.html @@ -0,0 +1,20 @@ +<p>The W3C specifications define the <code>units</code> that can be used with lengths. A unit that is not part of the list of supported ones is likely +to be a typo and will be seen as a UI bug by the user.</p> +<p>This rule raises an issue each time a unit is not officially supported.</p> +<h2>Noncompliant Code Example</h2> +<pre> +a { + width: 10pixels; +} +</pre> +<h2>Compliant Solution</h2> +<pre> +a { + width: 10px; +} +</pre> +<h2>See</h2> +<ul> + <li> https://www.w3.org/TR/css3-values/#lengths </li> +</ul> + diff --git a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.json b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.json new file mode 100644 index 0000000..b6ee0e2 --- /dev/null +++ b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/S4653.json @@ -0,0 +1,16 @@ +{ + "title": "Units should be valid", + "type": "BUG", + "status": "ready", + "remediation": { + "func": "Constant\/Issue", + "constantCost": "5min" + }, + "tags": [ + + ], + "defaultSeverity": "Blocker", + "ruleSpecification": "RSPEC-4653", + "sqKey": "S4653", + "scope": "Main" +} diff --git a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json index ba5ce46..a0e81bb 100644 --- a/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json +++ b/sonar-css-plugin/src/main/resources/org/sonar/l10n/css/rules/css/Sonar_way_profile.json @@ -1,6 +1,7 @@ { "name": "Sonar way", "ruleKeys": [ - "S4647" + "S4647", + "S4653" ] } diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java index cf5c65a..8ebbbc0 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssLanguageTest.java @@ -27,7 +27,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class CssLanguageTest { @Test - public void test() throws Exception { + public void test() { MapSettings settings = new MapSettings(); settings.setProperty(CssPlugin.FILE_SUFFIXES_KEY, CssPlugin.FILE_SUFFIXES_DEFVALUE); CssLanguage language = new CssLanguage(settings.asConfig()); diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java index 5c9e5ae..d176688 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/CssRuleSensorTest.java @@ -49,7 +49,7 @@ public class CssRuleSensorTest { public TemporaryFolder tmpDir = new TemporaryFolder(); @Test - public void test_descriptor() throws Exception { + public void test_descriptor() { CssRuleSensor sensor = new CssRuleSensor(new CssBundleHandler(), checkFactory, new StylelintCommandProvider()); DefaultSensorDescriptor sensorDescriptor = new DefaultSensorDescriptor(); sensor.describe(sensorDescriptor); @@ -59,7 +59,7 @@ public class CssRuleSensorTest { } @Test - public void test_execute() throws Exception { + public void test_execute() throws IOException { SensorContextTester context = SensorContextTester.create(BASE_DIR); context.fileSystem().setWorkDir(tmpDir.getRoot().toPath()); DefaultInputFile inputFile = createInputFile(context, "some css content\n on 2 lines", "dir/file.css"); diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java index eba68f5..a726858 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/SonarWayProfileTest.java @@ -38,7 +38,7 @@ public class SonarWayProfileTest { assertThat(profile.language()).isEqualTo(CssLanguage.KEY); assertThat(profile.name()).isEqualTo(SonarWayProfile.PROFILE_NAME); assertThat(profile.rules()).extracting("repoKey").containsOnly(CssRulesDefinition.REPOSITORY_KEY); - assertThat(profile.rules()).extracting("ruleKey").contains("S4647"); + assertThat(profile.rules()).extracting("ruleKey").hasSize(CssRules.getRuleClasses().size()); } } diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java index 76c4617..a0cf508 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/TokenizerTest.java @@ -22,6 +22,8 @@ package org.sonar.css.plugin; import java.util.List; import org.junit.Test; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; public class TokenizerTest { diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java index b55d050..fe56c89 100644 --- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java +++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/bundle/CssBundleHandlerTest.java @@ -44,7 +44,7 @@ public class CssBundleHandlerTest { } @Test - public void test() throws Exception { + public void test() { CssBundleHandler bundleHandler = new CssBundleHandler(); bundleHandler.bundleLocation = "/bundle/test-bundle.zip"; bundleHandler.deployBundle(DEPLOY_DESTINATION); |
