Skip to content

Commit 9967543

Browse files
Elena VilchikElena Vilchik
authored andcommitted
SONARPY-58 Migrate to sslr-squid-bridge 2.5.3 WIP
1 parent 900b4b4 commit 9967543

61 files changed

Lines changed: 378 additions & 495 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
<dependency>
115115
<groupId>org.codehaus.sonar.sslr-squid-bridge</groupId>
116116
<artifactId>sslr-squid-bridge</artifactId>
117-
<version>2.5</version>
117+
<version>2.5.3</version>
118118
</dependency>
119119
<dependency>
120120
<groupId>junit</groupId>

python-checks/src/main/java/org/sonar/python/checks/BackslashInStringCheck.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,30 @@
2121

2222
import com.sonar.sslr.api.AstNode;
2323
import com.sonar.sslr.api.Grammar;
24+
import org.sonar.api.server.rule.RulesDefinition;
2425
import org.sonar.check.BelongsToProfile;
2526
import org.sonar.check.Priority;
2627
import org.sonar.check.Rule;
2728
import org.sonar.python.api.PythonTokenType;
29+
import org.sonar.squidbridge.annotations.ActivatedByDefault;
30+
import org.sonar.squidbridge.annotations.SqaleConstantRemediation;
31+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
2832
import org.sonar.squidbridge.checks.SquidCheck;
2933

3034
@Rule(
31-
key = "S1717",
32-
priority = Priority.MAJOR)
35+
key = BackslashInStringCheck.CHECK_KEY,
36+
priority = Priority.MAJOR,
37+
name = "\"\\\" should only be used as an escape character outside of raw strings"
38+
)
39+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.LOGIC_RELIABILITY)
40+
@SqaleConstantRemediation("2min")
3341
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
42+
@ActivatedByDefault
3443
public class BackslashInStringCheck extends SquidCheck<Grammar> {
3544

3645
private static final String MESSAGE = "Remove this \"\\\", add another \"\\\" to escape it, or make this a raw string.";
3746
private static final String VALID_ESCAPED_CHARACTERS = "abfnrtvxnNrtuU\\'\"0123456789\n\r";
47+
public static final String CHECK_KEY = "S1717";
3848

3949
@Override
4050
public void init() {

python-checks/src/main/java/org/sonar/python/checks/BackticksUsageCheck.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,27 @@
2121

2222
import com.sonar.sslr.api.AstNode;
2323
import com.sonar.sslr.api.Grammar;
24+
import org.sonar.api.server.rule.RulesDefinition;
2425
import org.sonar.check.BelongsToProfile;
2526
import org.sonar.check.Priority;
2627
import org.sonar.check.Rule;
2728
import org.sonar.python.api.PythonPunctuator;
29+
import org.sonar.squidbridge.annotations.ActivatedByDefault;
30+
import org.sonar.squidbridge.annotations.SqaleConstantRemediation;
31+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
2832
import org.sonar.squidbridge.checks.SquidCheck;
2933

3034
@Rule(
31-
key = "BackticksUsage",
32-
priority = Priority.MAJOR)
35+
key = BackticksUsageCheck.CHECK_KEY,
36+
priority = Priority.MAJOR,
37+
name = "Backticks should not be used"
38+
)
39+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.LANGUAGE_RELATED_PORTABILITY)
40+
@SqaleConstantRemediation("5min")
3341
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
42+
@ActivatedByDefault
3443
public class BackticksUsageCheck extends SquidCheck<Grammar> {
35-
44+
public static final String CHECK_KEY = "S2316";
3645
private int prevLine = -1;
3746

3847
@Override
@@ -44,7 +53,7 @@ public void init() {
4453
public void visitNode(AstNode astNode) {
4554
if (prevLine != astNode.getTokenLine()) {
4655
prevLine = astNode.getTokenLine();
47-
getContext().createLineViolation(this, "Replace backticks by call to repr().", astNode);
56+
getContext().createLineViolation(this, "Use \"repr\" instead.", astNode);
4857
}
4958
}
5059

python-checks/src/main/java/org/sonar/python/checks/ClassComplexityCheck.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,37 @@
2121

2222
import com.sonar.sslr.api.AstNode;
2323
import com.sonar.sslr.api.Grammar;
24-
import org.sonar.python.api.PythonGrammar;
25-
import org.sonar.squidbridge.checks.ChecksHelper;
26-
import org.sonar.squidbridge.checks.SquidCheck;
24+
import org.sonar.api.server.rule.RulesDefinition;
2725
import org.sonar.check.BelongsToProfile;
2826
import org.sonar.check.Priority;
2927
import org.sonar.check.Rule;
3028
import org.sonar.check.RuleProperty;
29+
import org.sonar.python.api.PythonGrammar;
3130
import org.sonar.python.api.PythonMetric;
31+
import org.sonar.squidbridge.annotations.SqaleLinearWithOffsetRemediation;
32+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
3233
import org.sonar.squidbridge.api.SourceClass;
34+
import org.sonar.squidbridge.checks.ChecksHelper;
35+
import org.sonar.squidbridge.checks.SquidCheck;
3336

3437
@Rule(
35-
key = "ClassComplexity",
36-
priority = Priority.MAJOR,
37-
tags = Tags.BRAIN_OVERLOAD
38+
key = ClassComplexityCheck.CHECK_KEY,
39+
priority = Priority.MAJOR,
40+
name = "Classes should not be too complex",
41+
tags = Tags.BRAIN_OVERLOAD
3842
)
43+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.UNDERSTANDABILITY)
44+
@SqaleLinearWithOffsetRemediation(
45+
coeff = "1min",
46+
offset = "10min",
47+
effortToFixDescription = "per complexity point over the threshold")
3948
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
4049
public class ClassComplexityCheck extends SquidCheck<Grammar> {
41-
50+
public static final String CHECK_KEY = "S1311";
51+
//todo change on 200
4252
private static final int DEFAULT_MAXIMUM_CLASS_COMPLEXITY_THRESHOLD = 80;
4353

44-
@RuleProperty(
45-
key = "maximumClassComplexityThreshold",
46-
defaultValue = "" + DEFAULT_MAXIMUM_CLASS_COMPLEXITY_THRESHOLD)
54+
@RuleProperty(key = "max", defaultValue = "" + DEFAULT_MAXIMUM_CLASS_COMPLEXITY_THRESHOLD)
4755
private int maximumClassComplexityThreshold = DEFAULT_MAXIMUM_CLASS_COMPLEXITY_THRESHOLD;
4856

4957
@Override

python-checks/src/main/java/org/sonar/python/checks/ClassNameCheck.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,33 @@
2121

2222
import com.sonar.sslr.api.AstNode;
2323
import com.sonar.sslr.api.Grammar;
24+
import org.sonar.api.server.rule.RulesDefinition;
2425
import org.sonar.check.BelongsToProfile;
2526
import org.sonar.check.Priority;
2627
import org.sonar.check.Rule;
2728
import org.sonar.check.RuleProperty;
2829
import org.sonar.python.api.PythonGrammar;
30+
import org.sonar.squidbridge.annotations.ActivatedByDefault;
31+
import org.sonar.squidbridge.annotations.SqaleConstantRemediation;
32+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
2933
import org.sonar.squidbridge.checks.SquidCheck;
3034

3135
import java.util.regex.Pattern;
3236

3337
@Rule(
34-
key = ClassNameCheck.KEY,
35-
priority = Priority.MAJOR,
36-
tags = Tags.CONVENTION
38+
key = ClassNameCheck.CHECK_KEY,
39+
priority = Priority.MINOR,
40+
name = "Class names should comply with a naming convention",
41+
tags = Tags.CONVENTION
3742
)
43+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.READABILITY)
44+
@SqaleConstantRemediation("5min")
45+
//todo should priority be the same?
3846
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
47+
@ActivatedByDefault
3948
public class ClassNameCheck extends SquidCheck<Grammar> {
4049

41-
public static final String KEY = "S101";
50+
public static final String CHECK_KEY = "S101";
4251
private static final String DEFAULT = "^[A-Z_][a-zA-Z0-9]+$";
4352

4453
@RuleProperty(

python-checks/src/main/java/org/sonar/python/checks/CollapsibleIfStatementsCheck.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,32 @@
2121

2222
import com.sonar.sslr.api.AstNode;
2323
import com.sonar.sslr.api.Grammar;
24+
import org.sonar.api.server.rule.RulesDefinition;
2425
import org.sonar.check.BelongsToProfile;
2526
import org.sonar.check.Priority;
2627
import org.sonar.check.Rule;
2728
import org.sonar.python.api.PythonGrammar;
2829
import org.sonar.python.api.PythonKeyword;
30+
import org.sonar.squidbridge.annotations.ActivatedByDefault;
31+
import org.sonar.squidbridge.annotations.SqaleConstantRemediation;
32+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
2933
import org.sonar.squidbridge.checks.SquidCheck;
3034
import org.sonar.sslr.ast.AstSelect;
3135

3236
import java.util.List;
3337

3438
@Rule(
35-
key = "S1066",
36-
priority = Priority.MAJOR,
37-
tags = Tags.CLUMSY
39+
key = CollapsibleIfStatementsCheck.CHECK_KEY,
40+
priority = Priority.MAJOR,
41+
name = "Collapsible \"if\" statements should be merged",
42+
tags = Tags.CLUMSY
3843
)
44+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.READABILITY)
45+
@SqaleConstantRemediation("5min")
3946
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
47+
@ActivatedByDefault
4048
public class CollapsibleIfStatementsCheck extends SquidCheck<Grammar> {
49+
public static final String CHECK_KEY = "S1066";
4150

4251
@Override
4352
public void init() {

python-checks/src/main/java/org/sonar/python/checks/CommentRegularExpressionCheck.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,22 @@
2020
package org.sonar.python.checks;
2121

2222
import com.sonar.sslr.api.Grammar;
23-
import org.sonar.check.Cardinality;
2423
import org.sonar.check.Priority;
2524
import org.sonar.check.Rule;
2625
import org.sonar.check.RuleProperty;
26+
import org.sonar.squidbridge.annotations.NoSqale;
27+
import org.sonar.squidbridge.annotations.RuleTemplate;
2728
import org.sonar.squidbridge.checks.AbstractCommentRegularExpressionCheck;
2829

2930
@Rule(
30-
key = "CommentRegularExpression",
31-
priority = Priority.MAJOR,
32-
cardinality = Cardinality.MULTIPLE)
31+
key = CommentRegularExpressionCheck.CHECK_KEY,
32+
priority = Priority.MAJOR,
33+
name = "Regular expression on comment"
34+
)
35+
@NoSqale
36+
@RuleTemplate
3337
public class CommentRegularExpressionCheck extends AbstractCommentRegularExpressionCheck<Grammar> {
34-
38+
public static final String CHECK_KEY = "S124";
3539
private static final String DEFAULT_REGULAR_EXPRESSION = "";
3640
private static final String DEFAULT_MESSAGE = "The regular expression matches this comment";
3741

python-checks/src/main/java/org/sonar/python/checks/EmptyNestedBlockCheck.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,29 @@
2424
import com.sonar.sslr.api.Grammar;
2525
import com.sonar.sslr.api.Token;
2626
import com.sonar.sslr.api.Trivia;
27+
import org.sonar.api.server.rule.RulesDefinition;
2728
import org.sonar.check.BelongsToProfile;
2829
import org.sonar.check.Priority;
2930
import org.sonar.check.Rule;
3031
import org.sonar.python.api.PythonGrammar;
32+
import org.sonar.squidbridge.annotations.ActivatedByDefault;
33+
import org.sonar.squidbridge.annotations.SqaleConstantRemediation;
34+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
3135
import org.sonar.squidbridge.checks.SquidCheck;
3236
import org.sonar.sslr.ast.AstSelect;
3337

3438
@Rule(
35-
key = "S108",
36-
priority = Priority.MAJOR,
37-
tags = Tags.BUG
39+
key = EmptyNestedBlockCheck.CHECK_KEY,
40+
priority = Priority.MAJOR,
41+
name = "Nested blocks of code should not be left empty",
42+
tags = Tags.BUG
3843
)
44+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.LOGIC_RELIABILITY)
45+
@SqaleConstantRemediation("5min")
46+
@ActivatedByDefault
3947
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
4048
public class EmptyNestedBlockCheck extends SquidCheck<Grammar> {
41-
49+
public static final String CHECK_KEY = "S108";
4250
private static final Predicate<AstNode> NOT_PASS_PREDICATE = new NotPassPredicate();
4351
private static final String MESSAGE = "Either remove or fill this block of code.";
4452

python-checks/src/main/java/org/sonar/python/checks/ExecStatementUsageCheck.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,28 @@
2121

2222
import com.sonar.sslr.api.AstNode;
2323
import com.sonar.sslr.api.Grammar;
24+
import org.sonar.api.server.rule.RulesDefinition;
2425
import org.sonar.check.BelongsToProfile;
2526
import org.sonar.check.Priority;
2627
import org.sonar.check.Rule;
2728
import org.sonar.python.api.PythonGrammar;
29+
import org.sonar.squidbridge.annotations.ActivatedByDefault;
30+
import org.sonar.squidbridge.annotations.SqaleConstantRemediation;
31+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
2832
import org.sonar.squidbridge.checks.SquidCheck;
2933

3034
@Rule(
31-
key = "ExecStatementUsage",
32-
priority = Priority.MAJOR,
33-
tags = Tags.OBSOLETE
35+
key = ExecStatementUsageCheck.CHECK_KEY,
36+
priority = Priority.MAJOR,
37+
name = "The \"exec\" statement should not be used",
38+
tags = Tags.OBSOLETE
3439
)
40+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.INSTRUCTION_RELIABILITY)
41+
@SqaleConstantRemediation("10min")
42+
@ActivatedByDefault
3543
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
3644
public class ExecStatementUsageCheck extends SquidCheck<Grammar> {
37-
45+
public static final String CHECK_KEY = "S2317";
3846
@Override
3947
public void init() {
4048
subscribeTo(PythonGrammar.EXEC_STMT);

python-checks/src/main/java/org/sonar/python/checks/FileComplexityCheck.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,37 @@
2121

2222
import com.sonar.sslr.api.AstNode;
2323
import com.sonar.sslr.api.Grammar;
24-
import org.sonar.squidbridge.checks.ChecksHelper;
25-
import org.sonar.squidbridge.checks.SquidCheck;
24+
import org.sonar.api.server.rule.RulesDefinition;
2625
import org.sonar.check.BelongsToProfile;
2726
import org.sonar.check.Priority;
2827
import org.sonar.check.Rule;
2928
import org.sonar.check.RuleProperty;
3029
import org.sonar.python.api.PythonMetric;
30+
import org.sonar.squidbridge.annotations.SqaleLinearWithOffsetRemediation;
31+
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
3132
import org.sonar.squidbridge.api.SourceFile;
33+
import org.sonar.squidbridge.checks.ChecksHelper;
34+
import org.sonar.squidbridge.checks.SquidCheck;
3235

3336
@Rule(
34-
key = "FileComplexity",
35-
priority = Priority.MAJOR,
36-
tags = Tags.BRAIN_OVERLOAD
37+
key = FileComplexityCheck.CHECK_KEY,
38+
priority = Priority.MAJOR,
39+
name = "Files should not be too complex",
40+
tags = Tags.BRAIN_OVERLOAD
3741
)
42+
@SqaleSubCharacteristic(RulesDefinition.SubCharacteristics.READABILITY)
43+
@SqaleLinearWithOffsetRemediation(
44+
coeff = "1min",
45+
offset = "30min",
46+
effortToFixDescription = "per complexity point above the threshold")
3847
@BelongsToProfile(title = CheckList.SONAR_WAY_PROFILE, priority = Priority.MAJOR)
3948
public class FileComplexityCheck extends SquidCheck<Grammar> {
40-
49+
public static final String CHECK_KEY = "S1908";
50+
//todo change on 200
4151
private static final int DEFAULT_MAXIMUM_FILE_COMPLEXITY_THRESHOLD = 80;
4252

4353
@RuleProperty(
44-
key = "maximumFileComplexityThreshold",
54+
key = "max",
4555
defaultValue = "" + DEFAULT_MAXIMUM_FILE_COMPLEXITY_THRESHOLD)
4656
private int maximumFileComplexityThreshold = DEFAULT_MAXIMUM_FILE_COMPLEXITY_THRESHOLD;
4757

0 commit comments

Comments
 (0)