include resolved autofixes in `--report` output

for unresolved ones, just return a string "resolvable"
This commit is contained in:
WebFreak001 2023-07-09 00:53:43 +02:00
parent cae7d595b8
commit 340a5f59e7
No known key found for this signature in database
GPG Key ID: AEFC88D11109D1AA
3 changed files with 69 additions and 2 deletions

View File

@ -91,6 +91,11 @@ dscanner -S source/
dscanner --report 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 You can also specify custom formats using `-f` / `--errorFormat`, where there
are also built-in formats for GitHub Actions: are also built-in formats for GitHub Actions:
@ -101,7 +106,7 @@ dscanner -S -f github source/
dscanner -S -f '{filepath}({line}:{column})[{type}]: {message}' 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 ```sh
# collecting automatic issue fixes # collecting automatic issue fixes

View File

@ -55,6 +55,9 @@ class DScannerJsonReporter
private static JSONValue toJson(Issue issue) private static JSONValue toJson(Issue issue)
{ {
import std.sumtype : match;
import dscanner.analysis.base : AutoFix;
// dfmt off // dfmt off
JSONValue js = JSONValue([ JSONValue js = JSONValue([
"key": JSONValue(issue.message.key), "key": JSONValue(issue.message.key),
@ -80,6 +83,27 @@ class DScannerJsonReporter
"message": JSONValue(a.message), "message": JSONValue(a.message),
]) ])
).array ).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 context) => JSONValue(
"resolvable"
)
)
])
).array
) )
]); ]);
// dfmt on // dfmt on

View File

@ -15,7 +15,45 @@
"message": "Zero-parameter '@property' function should be marked 'const', 'inout', or 'immutable'.", "message": "Zero-parameter '@property' function should be marked 'const', 'inout', or 'immutable'.",
"name": "function_attribute_check", "name": "function_attribute_check",
"supplemental": [], "supplemental": [],
"type": "warn" "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
]
}
]
}
]
} }
], ],
"lineOfCodeCount": 0, "lineOfCodeCount": 0,