Skip to content

Commit 3fe3bc4

Browse files
committed
Fix sonarlint: activate default rules
1 parent ce0c061 commit 3fe3bc4

5 files changed

Lines changed: 59 additions & 16 deletions

File tree

sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonPlugin.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@
1919
*/
2020
package org.sonar.plugins.python;
2121

22-
import com.google.common.collect.ImmutableList;
23-
import java.util.List;
22+
import org.sonar.api.Plugin;
2423
import org.sonar.api.PropertyType;
25-
import org.sonar.api.SonarPlugin;
2624
import org.sonar.api.config.PropertyDefinition;
2725
import org.sonar.api.resources.Qualifiers;
2826
import org.sonar.plugins.python.coverage.PythonCoverageSensor;
@@ -33,7 +31,7 @@
3331
import org.sonar.plugins.python.pylint.PylintSensor;
3432
import org.sonar.plugins.python.xunit.PythonXUnitSensor;
3533

36-
public class PythonPlugin extends SonarPlugin {
34+
public class PythonPlugin implements Plugin {
3735

3836
private static final String PYTHON_CATEGORY = "Python";
3937

@@ -44,10 +42,11 @@ public class PythonPlugin extends SonarPlugin {
4442

4543
public static final String FILE_SUFFIXES_KEY = "sonar.python.file.suffixes";
4644

45+
4746
@Override
48-
public List getExtensions() {
47+
public void define(Context context) {
4948

50-
return ImmutableList.of(
49+
context.addExtensions(
5150

5251
PropertyDefinition.builder(FILE_SUFFIXES_KEY)
5352
.name("File Suffixes")
@@ -145,7 +144,7 @@ public List getExtensions() {
145144
PythonProfile.class,
146145

147146
PythonSquidSensor.class,
148-
PythonRuleRepository.class,
147+
new PythonRuleRepository(context.getSonarQubeVersion()),
149148

150149
PylintConfiguration.class,
151150
PylintSensor.class,

sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonProfile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ private void loadActiveKeysFromJsonProfile(RulesProfile rulesProfile) {
5555
}
5656
}
5757

58-
private static Set<String> activatedRuleKeys() {
58+
public static Set<String> activatedRuleKeys() {
5959
URL profileUrl = PythonProfile.class.getResource("/org/sonar/l10n/py/rules/python/Sonar_way_profile.json");
6060
try {
6161
Gson gson = new Gson();

sonar-python-plugin/src/main/java/org/sonar/plugins/python/PythonRuleRepository.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@
2525
import java.net.URL;
2626
import java.nio.charset.StandardCharsets;
2727
import java.util.Locale;
28+
import java.util.Set;
2829
import javax.annotation.Nullable;
2930
import org.sonar.api.rule.RuleStatus;
3031
import org.sonar.api.rules.RuleType;
3132
import org.sonar.api.server.debt.DebtRemediationFunction;
3233
import org.sonar.api.server.rule.RulesDefinition;
34+
import org.sonar.api.utils.Version;
3335
import org.sonar.python.checks.CheckList;
3436
import org.sonar.squidbridge.annotations.AnnotationBasedRulesDefinition;
3537

@@ -38,6 +40,11 @@ public class PythonRuleRepository implements RulesDefinition {
3840
private static final String REPOSITORY_NAME = "SonarAnalyzer";
3941

4042
private final Gson gson = new Gson();
43+
private final Version sonarRuntimeVersion;
44+
45+
public PythonRuleRepository(Version sonarRuntimeVersion) {
46+
this.sonarRuntimeVersion = sonarRuntimeVersion;
47+
}
4148

4249
@Override
4350
public void define(Context context) {
@@ -51,9 +58,21 @@ public void define(Context context) {
5158
addMetadata(rule, rule.key());
5259
}
5360

61+
setupDefaultActivatedRules(repository);
62+
5463
repository.done();
5564
}
5665

66+
private void setupDefaultActivatedRules(NewRepository repository) {
67+
boolean shouldSetupSonarLintProfile = sonarRuntimeVersion.isGreaterThanOrEqual(Version.parse("6.0"));
68+
if (shouldSetupSonarLintProfile) {
69+
Set<String> activatedRuleKeys = PythonProfile.activatedRuleKeys();
70+
for (NewRule rule : repository.rules()) {
71+
rule.setActivatedByDefault(activatedRuleKeys.contains(rule.key()));
72+
}
73+
}
74+
}
75+
5776
@Nullable
5877
private static String readRuleDefinitionResource(String fileName) {
5978
URL resource = PythonRuleRepository.class.getResource("/org/sonar/l10n/py/rules/python/" + fileName);

sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonPluginTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,22 @@
2020
package org.sonar.plugins.python;
2121

2222
import org.junit.Test;
23+
import org.sonar.api.Plugin;
24+
import org.sonar.api.SonarQubeSide;
25+
import org.sonar.api.SonarRuntime;
26+
import org.sonar.api.internal.SonarRuntimeImpl;
27+
import org.sonar.api.utils.Version;
2328

2429
import static org.assertj.core.api.Assertions.assertThat;
2530

2631
public class PythonPluginTest {
2732

2833
@Test
2934
public void testGetExtensions() {
30-
assertThat(new PythonPlugin().getExtensions()).hasSize(20);
35+
SonarRuntime runtime = SonarRuntimeImpl.forSonarQube(Version.create(5, 6), SonarQubeSide.SERVER);
36+
Plugin.Context context = new Plugin.Context(runtime);
37+
new PythonPlugin().define(context);
38+
assertThat(context.getExtensions()).hasSize(20);
3139
}
3240

3341
}

sonar-python-plugin/src/test/java/org/sonar/plugins/python/PythonRuleRepositoryTest.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,19 @@
1919
*/
2020
package org.sonar.plugins.python;
2121

22+
import java.util.List;
2223
import org.junit.Test;
2324
import org.sonar.api.server.rule.RulesDefinition;
25+
import org.sonar.api.utils.Version;
2426
import org.sonar.python.checks.CheckList;
2527

26-
import java.util.List;
27-
2828
import static org.assertj.core.api.Assertions.assertThat;
2929

3030
public class PythonRuleRepositoryTest {
3131

3232
@Test
3333
public void createRulesTest() {
34-
PythonRuleRepository ruleRepository = new PythonRuleRepository();
35-
RulesDefinition.Context context = new RulesDefinition.Context();
36-
ruleRepository.define(context);
37-
38-
RulesDefinition.Repository repository = context.repository(CheckList.REPOSITORY_KEY);
34+
RulesDefinition.Repository repository = buildRepository(Version.parse("5.6"));
3935

4036
assertThat(repository.language()).isEqualTo("py");
4137
assertThat(repository.name()).isEqualTo("SonarAnalyzer");
@@ -45,4 +41,25 @@ public void createRulesTest() {
4541
assertThat(rules).hasSize(54);
4642
}
4743

44+
@Test
45+
public void sonarqube56() {
46+
RulesDefinition.Repository repository = buildRepository(Version.parse("5.6"));
47+
assertThat(repository.rule("S1578").activatedByDefault()).isFalse();
48+
assertThat(repository.rule("BackticksUsage").activatedByDefault()).isFalse();
49+
}
50+
51+
@Test
52+
public void sonarlint() {
53+
RulesDefinition.Repository repository = buildRepository(Version.parse("6.0"));
54+
assertThat(repository.rule("S1578").activatedByDefault()).isFalse();
55+
assertThat(repository.rule("BackticksUsage").activatedByDefault()).isTrue();
56+
}
57+
58+
private RulesDefinition.Repository buildRepository(Version sonarRuntimeVersion) {
59+
PythonRuleRepository ruleRepository = new PythonRuleRepository(sonarRuntimeVersion);
60+
RulesDefinition.Context context = new RulesDefinition.Context();
61+
ruleRepository.define(context);
62+
return context.repository(CheckList.REPOSITORY_KEY);
63+
}
64+
4865
}

0 commit comments

Comments
 (0)