Skip to content

Commit

Permalink
include resolved autofixes in --report output (#915)
Browse files Browse the repository at this point in the history
  • Loading branch information
WebFreak001 authored Jul 9, 2023
1 parent cae7d59 commit 4c759b0
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 3 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,11 @@ dscanner -S source/
dscanner --report source/
```

The `--report` switch includes all information, plus cheap to compute autofixes
that are already resolved ahead of time, as well as the names for the autofixes
that need to be resolved using the `--resolveMessage` switch like described
below.

You can also specify custom formats using `-f` / `--errorFormat`, where there
are also built-in formats for GitHub Actions:

Expand All @@ -101,7 +106,7 @@ dscanner -S -f github source/
dscanner -S -f '{filepath}({line}:{column})[{type}]: {message}' source/
```

To collect automatic issue fixes for a given location use
To resolve automatic issue fixes for a given location use

```sh
# collecting automatic issue fixes
Expand Down
24 changes: 24 additions & 0 deletions src/dscanner/reports.d
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ class DScannerJsonReporter

private static JSONValue toJson(Issue issue)
{
import std.sumtype : match;
import dscanner.analysis.base : AutoFix;

// dfmt off
JSONValue js = JSONValue([
"key": JSONValue(issue.message.key),
Expand All @@ -80,6 +83,27 @@ class DScannerJsonReporter
"message": JSONValue(a.message),
])
).array
),
"autofixes": JSONValue(
issue.message.autofixes.map!(a =>
JSONValue([
"name": JSONValue(a.name),
"replacements": a.replacements.match!(
(const AutoFix.CodeReplacement[] replacements) => JSONValue(
replacements.map!(r => JSONValue([
"range": JSONValue([
JSONValue(r.range[0]),
JSONValue(r.range[1])
]),
"newText": JSONValue(r.newText)
])).array
),
(const AutoFix.ResolveContext _) => JSONValue(
"resolvable"
)
)
])
).array
)
]);
// dfmt on
Expand Down
6 changes: 6 additions & 0 deletions tests/it/source_autofix.d
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,11 @@ struct S
{
int myProp() @property
{
static if (a)
{
}
else if (b)
{
}
}
}
74 changes: 72 additions & 2 deletions tests/it/source_autofix.report.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,81 @@
"message": "Zero-parameter '@property' function should be marked 'const', 'inout', or 'immutable'.",
"name": "function_attribute_check",
"supplemental": [],
"type": "warn",
"autofixes": [
{
"name": "Mark function `const`",
"replacements": [
{
"newText": " const",
"range": [
24,
24
]
}
]
},
{
"name": "Mark function `inout`",
"replacements": [
{
"newText": " inout",
"range": [
24,
24
]
}
]
},
{
"name": "Mark function `immutable`",
"replacements": [
{
"newText": " immutable",
"range": [
24,
24
]
}
]
}
]
},
{
"autofixes": [
{
"name": "Insert `static`",
"replacements": [
{
"newText": "static ",
"range": [
69,
69
]
}
]
},
{
"name": "Wrap '{}' block around 'if'",
"replacements": "resolvable"
}
],
"column": 3,
"endColumn": 10,
"endIndex": 71,
"endLine": 8,
"fileName": "it/source_autofix.d",
"index": 64,
"key": "dscanner.suspicious.static_if_else",
"line": 8,
"message": "Mismatched static if. Use 'else static if' here.",
"name": "static_if_else_check",
"supplemental": [],
"type": "warn"
}
],
"lineOfCodeCount": 0,
"statementCount": 0,
"lineOfCodeCount": 3,
"statementCount": 4,
"structCount": 1,
"templateCount": 0,
"undocumentedPublicSymbols": 0
Expand Down

0 comments on commit 4c759b0

Please sign in to comment.