Skip to content

Commit 29df3e0

Browse files
committed
Use TextRange
1 parent 404e40a commit 29df3e0

File tree

4 files changed

+30
-15
lines changed

4 files changed

+30
-15
lines changed

src/main/java/org/elegoff/plugins/rust/externalreport/clippy/ClippyJsonReportReader.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
import javax.annotation.Nullable;
44
import java.io.*;
5-
import java.util.HashMap;
6-
import java.util.Map;
7-
import java.util.List;
8-
import java.util.ArrayList;
95
import java.util.stream.Stream;
106
import java.util.function.Consumer;
7+
8+
import org.sonar.api.utils.log.Logger;
9+
import org.sonar.api.utils.log.Loggers;
1110
import org.sonarsource.analyzer.commons.internal.json.simple.JSONArray;
1211
import org.sonarsource.analyzer.commons.internal.json.simple.JSONObject;
1312
import org.sonarsource.analyzer.commons.internal.json.simple.parser.JSONParser;
@@ -18,6 +17,7 @@
1817
public class ClippyJsonReportReader {
1918
private final JSONParser jsonParser = new JSONParser();
2019
private final Consumer<Issue> consumer;
20+
private static final Logger LOG = Loggers.get(ClippyJsonReportReader.class);
2121

2222
public static class Issue {
2323
@Nullable
@@ -31,6 +31,10 @@ public static class Issue {
3131
@Nullable
3232
Integer lineNumberEnd;
3333
@Nullable
34+
Integer colNumberStart;
35+
@Nullable
36+
Integer colNumberEnd;
37+
@Nullable
3438
String severity;
3539
}
3640

@@ -59,7 +63,7 @@ private void onResult(JSONObject result) {
5963
if (code == null) return;
6064
issue.ruleKey = (String) code.get("code");
6165

62-
System.out.println("[ELG] rule found : " + issue.ruleKey);
66+
LOG.debug("Clippy rule found : " + issue.ruleKey);
6367

6468

6569
JSONArray spans = (JSONArray) message.get("spans");
@@ -70,8 +74,10 @@ private void onResult(JSONObject result) {
7074

7175
issue.message = (String) message.get("message");
7276

73-
issue.lineNumberStart = toInteger(span.get("line_start"));
77+
issue.lineNumberStart = toInteger(span.get("line_start")) ;
7478
issue.lineNumberEnd = toInteger(span.get("line_end"));
79+
issue.colNumberStart = toInteger(span.get("column_start"));
80+
issue.colNumberEnd = toInteger(span.get("column_end")) ;
7581

7682
issue.severity = (String) message.get("level");
7783

src/main/java/org/elegoff/plugins/rust/externalreport/clippy/ClippySensor.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private static void saveIssue(SensorContext context, ClippyJsonReportReader.Issu
104104
.on(inputFile);
105105

106106
if (issue.lineNumberStart != null) {
107-
primaryLocation.at(inputFile.selectLine(issue.lineNumberStart));
107+
primaryLocation.at(inputFile.newRange(issue.lineNumberStart, issue.colNumberStart -1, issue.lineNumberEnd , issue.colNumberEnd -1));
108108
}
109109

110110
newExternalIssue.at(primaryLocation);
@@ -114,11 +114,20 @@ private static void saveIssue(SensorContext context, ClippyJsonReportReader.Issu
114114

115115
private static Severity toSonarQubeSeverity(String severity) {
116116
if ("error".equalsIgnoreCase(severity)) {
117-
return Severity.CRITICAL;
118-
} else if ("MEDIUM".equalsIgnoreCase(severity)) {
119117
return Severity.MAJOR;
120-
} else {
118+
} else
121119
return Severity.MINOR;
120+
}
121+
122+
123+
124+
private static RuleType toSonarQubeType(String severity) {
125+
if ("error".equalsIgnoreCase(severity)) {
126+
return RuleType.BUG;
127+
} else if ("help".equalsIgnoreCase(severity)) {
128+
return RuleType.CODE_SMELL;
129+
} else {
130+
return RuleType.CODE_SMELL;
122131
}
123132
}
124133

src/main/resources/org/sonar/plugins/rust/clippy/rules.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@
2121
},
2222
{
2323
"key": "clippy::assertions_on_constants",
24-
"name": "TODO",
24+
"name": "Checks for assert!(true) and assert!(false) calls.",
2525
"url": "https://rust-lang.github.io/rust-clippy/master/index.html#assertions_on_constants"
2626
},
2727
{
2828
"key": "clippy::assign_op_pattern",
29-
"name": "TODO",
29+
"name": "Checks for a = a op b or a = b commutative_op a patterns.",
3030
"url": "https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern"
3131
},
3232
{

src/test/java/org/elegoff/plugins/rust/externalreport/clippy/ClippySensorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public void issues_with_sonarqube() throws IOException {
6060
ExternalIssue first = externalIssues.get(0);
6161
assertThat(first.ruleKey().toString()).isEqualTo(CLIPPY_AEC);
6262
assertThat(first.type()).isEqualTo(RuleType.CODE_SMELL);
63-
assertThat(first.severity()).isEqualTo(Severity.CRITICAL);
63+
assertThat(first.severity()).isEqualTo(Severity.MAJOR);
6464
IssueLocation firstPrimaryLoc = first.primaryLocation();
6565
assertThat(firstPrimaryLoc.inputComponent().key()).isEqualTo(CLIPPY_FILE);
6666
assertThat(firstPrimaryLoc.message())
@@ -73,7 +73,7 @@ public void issues_with_sonarqube() throws IOException {
7373
ExternalIssue second = externalIssues.get(1);
7474
assertThat(second.ruleKey().toString()).isEqualTo("external_clippy:clippy::absurd_extreme_comparisons");
7575
assertThat(second.type()).isEqualTo(RuleType.CODE_SMELL);
76-
assertThat(second.severity()).isEqualTo(Severity.CRITICAL);
76+
assertThat(second.severity()).isEqualTo(Severity.MAJOR);
7777
IssueLocation secondPrimaryLoc = second.primaryLocation();
7878
assertThat(secondPrimaryLoc.inputComponent().key()).isEqualTo(CLIPPY_FILE);
7979
assertThat(secondPrimaryLoc.message()).isEqualTo("this comparison involving the minimum or maximum element for this type contains a case that is always true or always false");
@@ -117,7 +117,7 @@ public void clippy_report_with_unknown_rule_key() throws IOException {
117117
public static void assertNoErrorWarnDebugLogs(LogTester logTester) {
118118
org.assertj.core.api.Assertions.assertThat(logTester.logs(LoggerLevel.ERROR)).isEmpty();
119119
org.assertj.core.api.Assertions.assertThat(logTester.logs(LoggerLevel.WARN)).isEmpty();
120-
org.assertj.core.api.Assertions.assertThat(logTester.logs(LoggerLevel.DEBUG)).isEmpty();
120+
//org.assertj.core.api.Assertions.assertThat(logTester.logs(LoggerLevel.DEBUG)).isEmpty();
121121
}
122122

123123
private static List<ExternalIssue> executeSensorImporting(int majorVersion, int minorVersion, @Nullable String fileName) throws IOException {

0 commit comments

Comments
 (0)