@jonathan0823/pi-sonarqube 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -11
- package/dist/api.d.ts +38 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +367 -0
- package/dist/api.js.map +1 -0
- package/dist/commands.d.ts +54 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +192 -0
- package/dist/commands.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +278 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -47
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +202 -727
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +64 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +31 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +193 -0
- package/dist/ui.js.map +1 -0
- package/package.json +2 -2
- package/src/api.ts +476 -0
- package/src/commands.ts +248 -0
- package/src/config.ts +340 -0
- package/src/index.ts +330 -959
- package/src/types.ts +79 -0
- package/src/ui.ts +271 -0
package/README.md
CHANGED
|
@@ -34,11 +34,11 @@ Inside a project directory, run:
|
|
|
34
34
|
/sonarqube init
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
For monorepos, you can
|
|
37
|
+
For monorepos, you can point at a path directly:
|
|
38
38
|
|
|
39
39
|
```
|
|
40
|
-
/sonarqube init
|
|
41
|
-
/sonarqube init
|
|
40
|
+
/sonarqube init apps/web
|
|
41
|
+
/sonarqube init apps/api
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
Pi will ask you for:
|
|
@@ -47,14 +47,14 @@ Pi will ask you for:
|
|
|
47
47
|
- **Project key** (default: derived from directory name)
|
|
48
48
|
- **Token** (optional, used when your server requires auth)
|
|
49
49
|
|
|
50
|
-
The config is saved to `<project>/.pi/sonarqube.json`.
|
|
50
|
+
The config is saved to `<project>/.pi/sonarqube.json`.
|
|
51
51
|
|
|
52
52
|
### 2. Run analysis
|
|
53
53
|
|
|
54
54
|
```
|
|
55
55
|
/sonarqube analyze
|
|
56
|
-
/sonarqube analyze fe
|
|
57
56
|
/sonarqube analyze apps/web
|
|
57
|
+
/sonarqube analyze apps/api
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
Pi will:
|
|
@@ -68,26 +68,28 @@ Pi will:
|
|
|
68
68
|
|
|
69
69
|
```
|
|
70
70
|
/sonarqube issues
|
|
71
|
-
/sonarqube issues
|
|
71
|
+
/sonarqube issues apps/web
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
Use **Up/Down** to move, **Enter** to preview the affected source code, and **Esc** to close.
|
|
75
75
|
|
|
76
|
+
Tip: Tab-complete `/sonarqube` subcommands and filters in the editor.
|
|
77
|
+
|
|
76
78
|
### 4. Open a specific issue
|
|
77
79
|
|
|
78
80
|
```
|
|
79
81
|
/sonarqube open 3
|
|
80
|
-
/sonarqube open
|
|
82
|
+
/sonarqube open apps/web 3
|
|
81
83
|
```
|
|
82
84
|
|
|
83
85
|
## Commands
|
|
84
86
|
|
|
85
87
|
| Command | Description |
|
|
86
88
|
| -------------------------------- | ----------------------------------------------- |
|
|
87
|
-
| `/sonarqube init [
|
|
88
|
-
| `/sonarqube analyze [target]` | Run analysis for
|
|
89
|
+
| `/sonarqube init [path]` | Set up project config for a path |
|
|
90
|
+
| `/sonarqube analyze [target]` | Run analysis for a target or path |
|
|
89
91
|
| `/sonarqube issues [target]` | Browse the latest analysis results for a target |
|
|
90
|
-
| `/sonarqube open [target] <n>` | Preview source at issue #n
|
|
92
|
+
| `/sonarqube open [target] <n>` | Preview source at issue #n |
|
|
91
93
|
|
|
92
94
|
## Tool (for the LLM)
|
|
93
95
|
|
|
@@ -97,7 +99,9 @@ The extension also registers a `sonarqube` tool that the LLM can call with actio
|
|
|
97
99
|
- `issues` — list issues
|
|
98
100
|
- `open` — open an issue with its index
|
|
99
101
|
|
|
100
|
-
|
|
102
|
+
The tool accepts optional issue filters (`severities`, `statuses`, `types`, `rules`) so the agent can fetch just blocker/critical context.
|
|
103
|
+
|
|
104
|
+
Use paths directly.
|
|
101
105
|
|
|
102
106
|
## Configuration sources (precedence order)
|
|
103
107
|
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { SonarIssue, SonarAnalysisState, SonarProjectConfig, SonarIssueFetchOptions } from "./types.js";
|
|
3
|
+
export declare function authHeader(token?: string): string | undefined;
|
|
4
|
+
export declare function fetchJson<T>(url: string, token?: string, signal?: AbortSignal): Promise<T>;
|
|
5
|
+
export declare function toIssuePath(component: string, projectKey: string): string;
|
|
6
|
+
export declare function normalizeIssueList(values?: string[], uppercase?: boolean): string[] | undefined;
|
|
7
|
+
export declare function normalizeIssueFilters(filters?: SonarIssueFetchOptions): SonarIssueFetchOptions | undefined;
|
|
8
|
+
export declare function mergeIssueFilters(...filters: Array<Partial<SonarIssueFetchOptions> | undefined>): SonarIssueFetchOptions | undefined;
|
|
9
|
+
export declare function splitFilterValues(value: string): string[];
|
|
10
|
+
export declare function parseIssueFilterToken(token: string): Partial<SonarIssueFetchOptions> | undefined;
|
|
11
|
+
export declare function parseSonarIssueArgs(tokens: string[], allowIssueIndex?: boolean): {
|
|
12
|
+
targetInput?: string;
|
|
13
|
+
issueIndex?: number;
|
|
14
|
+
filters?: SonarIssueFetchOptions;
|
|
15
|
+
};
|
|
16
|
+
export declare function issueFilterLabel(filters?: SonarIssueFetchOptions): string;
|
|
17
|
+
export declare function sonarScannerInstallHint(): string;
|
|
18
|
+
export declare function extractScannerHint(output: string, config: SonarProjectConfig, exitCode?: number): string;
|
|
19
|
+
export declare function runScanner(pi: ExtensionAPI, config: SonarProjectConfig, signal?: AbortSignal): Promise<string>;
|
|
20
|
+
export declare function readReportTask(baseDir: string): Promise<Record<string, string>>;
|
|
21
|
+
export declare function waitForAnalysis(serverUrl: string, token: string | undefined, ceTaskUrl: string, signal?: AbortSignal): Promise<string | undefined>;
|
|
22
|
+
export declare function fetchIssuePage(serverUrl: string, token: string | undefined, projectKey: string, page: number, signal?: AbortSignal, filters?: SonarIssueFetchOptions): Promise<{
|
|
23
|
+
total: number;
|
|
24
|
+
issueRows: Array<{
|
|
25
|
+
key: string;
|
|
26
|
+
rule: string;
|
|
27
|
+
severity: string;
|
|
28
|
+
message: string;
|
|
29
|
+
component: string;
|
|
30
|
+
line?: number;
|
|
31
|
+
status?: string;
|
|
32
|
+
}>;
|
|
33
|
+
}>;
|
|
34
|
+
export declare function fetchIssues(serverUrl: string, token: string | undefined, projectKey: string, signal?: AbortSignal, filters?: SonarIssueFetchOptions): Promise<SonarIssue[]>;
|
|
35
|
+
export declare function fetchRuleName(serverUrl: string, token: string | undefined, ruleKey: string, signal?: AbortSignal): Promise<string | undefined>;
|
|
36
|
+
export declare function createAnalysisState(config: Pick<SonarProjectConfig, "baseDir" | "serverUrl" | "projectKey">, issues: SonarIssue[], extras?: Partial<Pick<SonarAnalysisState, "dashboardUrl" | "ceTaskUrl" | "analysisId" | "filters">>): SonarAnalysisState;
|
|
37
|
+
export declare function hasProjectAnalyses(serverUrl: string, token: string | undefined, projectKey: string, signal?: AbortSignal): Promise<boolean>;
|
|
38
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { SONAR_SEVERITIES, SONAR_STATUSES, SONAR_TYPES } from "./types.js";
|
|
4
|
+
import { parseProperties } from "./config.js";
|
|
5
|
+
// ── Auth / HTTP helpers ─────────────────────────────────────────────────────
|
|
6
|
+
export function authHeader(token) {
|
|
7
|
+
if (!token)
|
|
8
|
+
return undefined;
|
|
9
|
+
const credentials = `${token}:`;
|
|
10
|
+
return `Basic ${Buffer.from(credentials).toString("base64")}`;
|
|
11
|
+
}
|
|
12
|
+
export async function fetchJson(url, token, signal) {
|
|
13
|
+
const headers = { Accept: "application/json" };
|
|
14
|
+
const auth = authHeader(token);
|
|
15
|
+
if (auth)
|
|
16
|
+
headers.Authorization = auth;
|
|
17
|
+
const response = await fetch(url, { headers, signal });
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
const body = await response.text().catch(() => "");
|
|
20
|
+
const suffix = body.trim() ? `: ${body.trim().slice(0, 240)}` : "";
|
|
21
|
+
throw new Error(`SonarQube API request failed (${response.status} ${response.statusText}) for ${url}${suffix}`);
|
|
22
|
+
}
|
|
23
|
+
return (await response.json());
|
|
24
|
+
}
|
|
25
|
+
export function toIssuePath(component, projectKey) {
|
|
26
|
+
const prefix = `${projectKey}:`;
|
|
27
|
+
if (component.startsWith(prefix))
|
|
28
|
+
return component.slice(prefix.length);
|
|
29
|
+
const colon = component.indexOf(":");
|
|
30
|
+
return colon >= 0 ? component.slice(colon + 1) : component;
|
|
31
|
+
}
|
|
32
|
+
// ── Issue filter helpers ────────────────────────────────────────────────────
|
|
33
|
+
export function normalizeIssueList(values, uppercase = false) {
|
|
34
|
+
const cleaned = values
|
|
35
|
+
?.map((v) => v.trim())
|
|
36
|
+
.filter(Boolean)
|
|
37
|
+
.map((v) => (uppercase ? v.toUpperCase() : v));
|
|
38
|
+
if (!cleaned?.length)
|
|
39
|
+
return undefined;
|
|
40
|
+
return [...new Set(cleaned)];
|
|
41
|
+
}
|
|
42
|
+
export function normalizeIssueFilters(filters) {
|
|
43
|
+
const normalized = {
|
|
44
|
+
severities: normalizeIssueList(filters?.severities, true),
|
|
45
|
+
statuses: normalizeIssueList(filters?.statuses, true),
|
|
46
|
+
types: normalizeIssueList(filters?.types, true),
|
|
47
|
+
rules: normalizeIssueList(filters?.rules),
|
|
48
|
+
};
|
|
49
|
+
return normalized.severities || normalized.statuses || normalized.types || normalized.rules ? normalized : undefined;
|
|
50
|
+
}
|
|
51
|
+
export function mergeIssueFilters(...filters) {
|
|
52
|
+
const merged = {};
|
|
53
|
+
for (const filter of filters) {
|
|
54
|
+
if (!filter)
|
|
55
|
+
continue;
|
|
56
|
+
if (filter.severities?.length)
|
|
57
|
+
merged.severities = [...(merged.severities ?? []), ...filter.severities];
|
|
58
|
+
if (filter.statuses?.length)
|
|
59
|
+
merged.statuses = [...(merged.statuses ?? []), ...filter.statuses];
|
|
60
|
+
if (filter.types?.length)
|
|
61
|
+
merged.types = [...(merged.types ?? []), ...filter.types];
|
|
62
|
+
if (filter.rules?.length)
|
|
63
|
+
merged.rules = [...(merged.rules ?? []), ...filter.rules];
|
|
64
|
+
}
|
|
65
|
+
return normalizeIssueFilters(merged);
|
|
66
|
+
}
|
|
67
|
+
export function splitFilterValues(value) {
|
|
68
|
+
return value.split(",").map((p) => p.trim()).filter(Boolean);
|
|
69
|
+
}
|
|
70
|
+
const EXPLICIT_FILTER_RE = /^([^:=]+)[:=](.+)$/;
|
|
71
|
+
export function parseIssueFilterToken(token) {
|
|
72
|
+
const trimmed = token.trim();
|
|
73
|
+
if (!trimmed)
|
|
74
|
+
return undefined;
|
|
75
|
+
const explicit = EXPLICIT_FILTER_RE.exec(trimmed);
|
|
76
|
+
if (explicit) {
|
|
77
|
+
const key = explicit[1].trim().toLowerCase();
|
|
78
|
+
const values = splitFilterValues(explicit[2]);
|
|
79
|
+
if (values.length === 0)
|
|
80
|
+
return undefined;
|
|
81
|
+
if (key === "severity" || key === "severities")
|
|
82
|
+
return { severities: values.map((v) => v.toUpperCase()) };
|
|
83
|
+
if (key === "status" || key === "statuses")
|
|
84
|
+
return { statuses: values.map((v) => v.toUpperCase()) };
|
|
85
|
+
if (key === "type" || key === "types")
|
|
86
|
+
return { types: values.map((v) => v.toUpperCase()) };
|
|
87
|
+
if (key === "rule" || key === "rules")
|
|
88
|
+
return { rules: values };
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const upper = trimmed.toUpperCase();
|
|
92
|
+
if (SONAR_SEVERITIES.includes(upper))
|
|
93
|
+
return { severities: [upper] };
|
|
94
|
+
if (SONAR_STATUSES.includes(upper))
|
|
95
|
+
return { statuses: [upper] };
|
|
96
|
+
if (SONAR_TYPES.includes(upper))
|
|
97
|
+
return { types: [upper] };
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
export function parseSonarIssueArgs(tokens, allowIssueIndex = false) {
|
|
101
|
+
const filters = [];
|
|
102
|
+
let targetInput;
|
|
103
|
+
let issueIndex;
|
|
104
|
+
for (const token of tokens) {
|
|
105
|
+
if (!token)
|
|
106
|
+
continue;
|
|
107
|
+
if (allowIssueIndex && issueIndex === undefined && /^\d+$/.test(token)) {
|
|
108
|
+
issueIndex = Number(token);
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
const parsedFilter = parseIssueFilterToken(token);
|
|
112
|
+
if (parsedFilter) {
|
|
113
|
+
filters.push(parsedFilter);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (!targetInput) {
|
|
117
|
+
targetInput = token;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { targetInput, issueIndex, filters: mergeIssueFilters(...filters) };
|
|
121
|
+
}
|
|
122
|
+
export function issueFilterLabel(filters) {
|
|
123
|
+
if (!filters)
|
|
124
|
+
return "";
|
|
125
|
+
const parts = [
|
|
126
|
+
filters.severities?.length ? `severities=${filters.severities.join(",")}` : "",
|
|
127
|
+
filters.statuses?.length ? `statuses=${filters.statuses.join(",")}` : "",
|
|
128
|
+
filters.types?.length ? `types=${filters.types.join(",")}` : "",
|
|
129
|
+
filters.rules?.length ? `rules=${filters.rules.join(",")}` : "",
|
|
130
|
+
].filter(Boolean);
|
|
131
|
+
return parts.join(" • ");
|
|
132
|
+
}
|
|
133
|
+
function severitySortRank(severity) {
|
|
134
|
+
switch (severity.toUpperCase()) {
|
|
135
|
+
case "BLOCKER":
|
|
136
|
+
return 0;
|
|
137
|
+
case "CRITICAL":
|
|
138
|
+
return 1;
|
|
139
|
+
case "MAJOR":
|
|
140
|
+
return 2;
|
|
141
|
+
case "MINOR":
|
|
142
|
+
return 3;
|
|
143
|
+
case "INFO":
|
|
144
|
+
return 4;
|
|
145
|
+
default:
|
|
146
|
+
return 5;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function compareIssuesForContext(left, right) {
|
|
150
|
+
const severityDiff = severitySortRank(left.severity) - severitySortRank(right.severity);
|
|
151
|
+
if (severityDiff !== 0)
|
|
152
|
+
return severityDiff;
|
|
153
|
+
const fileDiff = left.filePath.localeCompare(right.filePath);
|
|
154
|
+
if (fileDiff !== 0)
|
|
155
|
+
return fileDiff;
|
|
156
|
+
const leftLine = left.line ?? Number.POSITIVE_INFINITY;
|
|
157
|
+
const rightLine = right.line ?? Number.POSITIVE_INFINITY;
|
|
158
|
+
if (leftLine !== rightLine)
|
|
159
|
+
return leftLine - rightLine;
|
|
160
|
+
return left.message.localeCompare(right.message);
|
|
161
|
+
}
|
|
162
|
+
// ── Error hints ─────────────────────────────────────────────────────────────
|
|
163
|
+
export function sonarScannerInstallHint() {
|
|
164
|
+
return [
|
|
165
|
+
"SonarScanner is not installed or not on PATH.",
|
|
166
|
+
"Please install SonarScanner and make sure `sonar-scanner` is available, then retry.",
|
|
167
|
+
].join(" ");
|
|
168
|
+
}
|
|
169
|
+
export function extractScannerHint(output, config, exitCode) {
|
|
170
|
+
const lines = output.toLowerCase();
|
|
171
|
+
const isNotFoundOnPath = exitCode === 127 ||
|
|
172
|
+
/spawn .*enoent|enoent|command not found|is not recognized/i.test(lines);
|
|
173
|
+
if (isNotFoundOnPath) {
|
|
174
|
+
return sonarScannerInstallHint();
|
|
175
|
+
}
|
|
176
|
+
const isUnauthorized = /status code 401|status 401|unauthorized/i.test(lines);
|
|
177
|
+
if (isUnauthorized) {
|
|
178
|
+
const defaultHint = config.serverUrl === "http://localhost:9000" ? " (default: http://localhost:9000)" : "";
|
|
179
|
+
return [
|
|
180
|
+
`Authentication failed for ${config.serverUrl}${defaultHint}.`,
|
|
181
|
+
"Run `/sonarqube init` to set up your server URL and token, then retry.",
|
|
182
|
+
"Or set SONARQUBE_TOKEN in your environment.",
|
|
183
|
+
].join(" ");
|
|
184
|
+
}
|
|
185
|
+
const isForbidden = /status code 403|status 403|forbidden/i.test(lines);
|
|
186
|
+
if (isForbidden) {
|
|
187
|
+
return [
|
|
188
|
+
`Access denied by ${config.serverUrl}.`,
|
|
189
|
+
'Your token may not have the required permissions ("Execute Analysis").',
|
|
190
|
+
"Run `/sonarqube init` to update the token or check server permissions.",
|
|
191
|
+
].join(" ");
|
|
192
|
+
}
|
|
193
|
+
const isConnectionError = /connect econnrefused|connect refused|connect timeout|enotfound|econnreset/i.test(lines);
|
|
194
|
+
if (isConnectionError) {
|
|
195
|
+
return [
|
|
196
|
+
`Cannot reach SonarQube server at ${config.serverUrl}.`,
|
|
197
|
+
"Is the server running? Run `/sonarqube init` to check the server URL.",
|
|
198
|
+
"Default: http://localhost:9000",
|
|
199
|
+
].join(" ");
|
|
200
|
+
}
|
|
201
|
+
if (/not found|unknown url/i.test(lines) && (config.serverUrl === "http://localhost:9000" || /localhost/i.test(config.serverUrl))) {
|
|
202
|
+
return [
|
|
203
|
+
`SonarQube API at ${config.serverUrl} returned "not found".`,
|
|
204
|
+
"The default server URL is http://localhost:9000. Run `/sonarqube init` to configure.",
|
|
205
|
+
].join(" ");
|
|
206
|
+
}
|
|
207
|
+
return "";
|
|
208
|
+
}
|
|
209
|
+
// ── Scanner interaction ─────────────────────────────────────────────────────
|
|
210
|
+
export async function runScanner(pi, config, signal) {
|
|
211
|
+
const scannerCheck = process.platform === "win32"
|
|
212
|
+
? await pi.exec("cmd", ["/d", "/s", "/c", "where", "sonar-scanner"], {
|
|
213
|
+
cwd: config.baseDir,
|
|
214
|
+
signal,
|
|
215
|
+
timeout: 10_000,
|
|
216
|
+
})
|
|
217
|
+
: await pi.exec("sh", ["-lc", "command -v sonar-scanner"], {
|
|
218
|
+
cwd: config.baseDir,
|
|
219
|
+
signal,
|
|
220
|
+
timeout: 10_000,
|
|
221
|
+
});
|
|
222
|
+
if (scannerCheck.code !== 0 || !scannerCheck.stdout.trim()) {
|
|
223
|
+
throw new Error(sonarScannerInstallHint());
|
|
224
|
+
}
|
|
225
|
+
const args = [
|
|
226
|
+
`-Dsonar.projectKey=${config.projectKey}`,
|
|
227
|
+
`-Dsonar.projectBaseDir=${config.baseDir}`,
|
|
228
|
+
`-Dsonar.host.url=${config.serverUrl}`,
|
|
229
|
+
...(config.hasProperties ? [] : [`-Dsonar.sources=.`]),
|
|
230
|
+
`-Dsonar.scm.disabled=true`,
|
|
231
|
+
];
|
|
232
|
+
if (config.token) {
|
|
233
|
+
args.push(`-Dsonar.token=${config.token}`);
|
|
234
|
+
}
|
|
235
|
+
const result = await pi.exec("sonar-scanner", args, {
|
|
236
|
+
cwd: config.baseDir,
|
|
237
|
+
signal,
|
|
238
|
+
timeout: 30 * 60 * 1000,
|
|
239
|
+
});
|
|
240
|
+
if (result.code !== 0) {
|
|
241
|
+
const output = [result.stdout, result.stderr]
|
|
242
|
+
.filter(Boolean)
|
|
243
|
+
.join("\n")
|
|
244
|
+
.trim();
|
|
245
|
+
const hint = extractScannerHint(output, config, result.code);
|
|
246
|
+
const detail = output ? `\n\n${output.slice(-4000)}` : "";
|
|
247
|
+
const message = hint
|
|
248
|
+
? `SonarQube scan failed for ${config.projectKey}. ${hint}`
|
|
249
|
+
: `SonarQube scan failed for ${config.projectKey}${detail}`;
|
|
250
|
+
throw new Error(message);
|
|
251
|
+
}
|
|
252
|
+
return result.stdout || result.stderr;
|
|
253
|
+
}
|
|
254
|
+
export async function readReportTask(baseDir) {
|
|
255
|
+
const path = resolve(baseDir, ".scannerwork", "report-task.txt");
|
|
256
|
+
const text = await readFile(path, "utf8");
|
|
257
|
+
return parseProperties(text);
|
|
258
|
+
}
|
|
259
|
+
export async function waitForAnalysis(serverUrl, token, ceTaskUrl, signal) {
|
|
260
|
+
for (let attempt = 0; attempt < 120; attempt++) {
|
|
261
|
+
const result = await fetchJson(ceTaskUrl, token, signal);
|
|
262
|
+
const status = result.task.status.toUpperCase();
|
|
263
|
+
if (status === "SUCCESS")
|
|
264
|
+
return result.task.analysisId;
|
|
265
|
+
if (status === "FAILED") {
|
|
266
|
+
throw new Error(`SonarQube analysis failed: ${result.task.errorMessage || "unknown error"}`);
|
|
267
|
+
}
|
|
268
|
+
if (status === "CANCELED") {
|
|
269
|
+
throw new Error("SonarQube analysis was canceled by the server");
|
|
270
|
+
}
|
|
271
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
272
|
+
}
|
|
273
|
+
throw new Error(`Timed out waiting for SonarQube analysis at ${serverUrl}`);
|
|
274
|
+
}
|
|
275
|
+
// ── Issue fetching ──────────────────────────────────────────────────────────
|
|
276
|
+
function buildIssueSearchUrl(serverUrl, projectKey, page, filters) {
|
|
277
|
+
const url = new URL("/api/issues/search", serverUrl);
|
|
278
|
+
url.searchParams.set("projects", projectKey);
|
|
279
|
+
url.searchParams.set("resolved", "false");
|
|
280
|
+
url.searchParams.set("ps", "100");
|
|
281
|
+
url.searchParams.set("p", String(page));
|
|
282
|
+
if (filters?.severities?.length)
|
|
283
|
+
url.searchParams.set("severities", filters.severities.join(","));
|
|
284
|
+
if (filters?.statuses?.length)
|
|
285
|
+
url.searchParams.set("statuses", filters.statuses.join(","));
|
|
286
|
+
if (filters?.types?.length)
|
|
287
|
+
url.searchParams.set("types", filters.types.join(","));
|
|
288
|
+
if (filters?.rules?.length)
|
|
289
|
+
url.searchParams.set("rules", filters.rules.join(","));
|
|
290
|
+
return url.toString();
|
|
291
|
+
}
|
|
292
|
+
function mapRawIssue(raw, projectKey, ruleNames) {
|
|
293
|
+
return {
|
|
294
|
+
key: raw.key,
|
|
295
|
+
rule: raw.rule,
|
|
296
|
+
ruleName: ruleNames.get(raw.rule),
|
|
297
|
+
severity: raw.severity,
|
|
298
|
+
message: raw.message,
|
|
299
|
+
filePath: toIssuePath(raw.component, projectKey),
|
|
300
|
+
line: typeof raw.line === "number" ? raw.line : null,
|
|
301
|
+
status: raw.status,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
export async function fetchIssuePage(serverUrl, token, projectKey, page, signal, filters) {
|
|
305
|
+
const url = buildIssueSearchUrl(serverUrl, projectKey, page, filters);
|
|
306
|
+
const result = await fetchJson(url, token, signal);
|
|
307
|
+
return { total: result.total, issueRows: result.issues };
|
|
308
|
+
}
|
|
309
|
+
export async function fetchIssues(serverUrl, token, projectKey, signal, filters) {
|
|
310
|
+
const normalizedFilters = normalizeIssueFilters(filters);
|
|
311
|
+
const issues = [];
|
|
312
|
+
const ruleNames = new Map();
|
|
313
|
+
let page = 1;
|
|
314
|
+
let total = 0;
|
|
315
|
+
for (;;) {
|
|
316
|
+
const { total: pageTotal, issueRows } = await fetchIssuePage(serverUrl, token, projectKey, page, signal, normalizedFilters);
|
|
317
|
+
total = pageTotal;
|
|
318
|
+
for (const raw of issueRows) {
|
|
319
|
+
if (!ruleNames.has(raw.rule)) {
|
|
320
|
+
ruleNames.set(raw.rule, await fetchRuleName(serverUrl, token, raw.rule, signal));
|
|
321
|
+
}
|
|
322
|
+
issues.push(mapRawIssue(raw, projectKey, ruleNames));
|
|
323
|
+
}
|
|
324
|
+
if (issues.length >= total || issueRows.length === 0)
|
|
325
|
+
break;
|
|
326
|
+
page += 1;
|
|
327
|
+
}
|
|
328
|
+
if (normalizedFilters && issues.length > 1) {
|
|
329
|
+
issues.sort(compareIssuesForContext);
|
|
330
|
+
}
|
|
331
|
+
return issues;
|
|
332
|
+
}
|
|
333
|
+
export async function fetchRuleName(serverUrl, token, ruleKey, signal) {
|
|
334
|
+
try {
|
|
335
|
+
const result = await fetchJson(`${serverUrl}/api/rules/show?key=${encodeURIComponent(ruleKey)}`, token, signal);
|
|
336
|
+
return result.rule.name;
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// ── Analysis state ──────────────────────────────────────────────────────────
|
|
343
|
+
export function createAnalysisState(config, issues, extras = {}) {
|
|
344
|
+
return {
|
|
345
|
+
version: 1,
|
|
346
|
+
analyzedAt: new Date().toISOString(),
|
|
347
|
+
baseDir: config.baseDir,
|
|
348
|
+
serverUrl: config.serverUrl,
|
|
349
|
+
projectKey: config.projectKey,
|
|
350
|
+
dashboardUrl: extras.dashboardUrl,
|
|
351
|
+
ceTaskUrl: extras.ceTaskUrl,
|
|
352
|
+
analysisId: extras.analysisId,
|
|
353
|
+
filters: extras.filters,
|
|
354
|
+
totalIssues: issues.length,
|
|
355
|
+
issues,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
export async function hasProjectAnalyses(serverUrl, token, projectKey, signal) {
|
|
359
|
+
try {
|
|
360
|
+
const result = await fetchJson(`${serverUrl}/api/project_analyses/search?project=${encodeURIComponent(projectKey)}&ps=1`, token, signal);
|
|
361
|
+
return (result.analyses?.length ?? 0) > 0;
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { AutocompleteItem, AutocompleteSuggestions } from "@earendil-works/pi-tui";
|
|
2
|
+
import type { SonarIssue, SonarIssueFetchOptions } from "./types.js";
|
|
3
|
+
export declare const STATE_TYPE = "sonarqube-analysis-state";
|
|
4
|
+
export declare function filterAutocompleteItems(items: readonly {
|
|
5
|
+
value: string;
|
|
6
|
+
label: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}[], prefix: string): AutocompleteItem[];
|
|
9
|
+
export declare function mergeAutocompleteSuggestions(prefix: string, current: AutocompleteSuggestions | null, extraItems: AutocompleteItem[]): AutocompleteSuggestions | null;
|
|
10
|
+
export declare function splitSonarArgumentContext(argumentText: string): {
|
|
11
|
+
command: string;
|
|
12
|
+
current: string;
|
|
13
|
+
tokens: string[];
|
|
14
|
+
};
|
|
15
|
+
export declare function sonarArgumentCompletions(argumentText: string, issues?: SonarIssue[]): AutocompleteItem[] | null;
|
|
16
|
+
export type ParsedSonarCommand = {
|
|
17
|
+
action: "help";
|
|
18
|
+
} | {
|
|
19
|
+
action: "init";
|
|
20
|
+
alias?: string;
|
|
21
|
+
targetInput?: string;
|
|
22
|
+
} | {
|
|
23
|
+
action: "analyze";
|
|
24
|
+
targetInput?: string;
|
|
25
|
+
filters?: SonarIssueFetchOptions;
|
|
26
|
+
} | {
|
|
27
|
+
action: "issues";
|
|
28
|
+
targetInput?: string;
|
|
29
|
+
filters?: SonarIssueFetchOptions;
|
|
30
|
+
} | {
|
|
31
|
+
action: "open";
|
|
32
|
+
targetInput?: string;
|
|
33
|
+
issueIndex?: number;
|
|
34
|
+
filters?: SonarIssueFetchOptions;
|
|
35
|
+
};
|
|
36
|
+
export declare function parseCommandArgs(args: string): ParsedSonarCommand;
|
|
37
|
+
export declare function helpText(): string;
|
|
38
|
+
export declare function targetLabel(targetInput?: string): string;
|
|
39
|
+
export declare function sonarErrorMessage(error: unknown): string;
|
|
40
|
+
export declare function formatIssue(issue: SonarIssue, index?: number): string;
|
|
41
|
+
export declare function formatSummary(state: {
|
|
42
|
+
totalIssues: number;
|
|
43
|
+
projectKey: string;
|
|
44
|
+
filters?: SonarIssueFetchOptions;
|
|
45
|
+
}): string;
|
|
46
|
+
export declare function formatReport(state: {
|
|
47
|
+
projectKey: string;
|
|
48
|
+
serverUrl: string;
|
|
49
|
+
baseDir: string;
|
|
50
|
+
totalIssues: number;
|
|
51
|
+
filters?: SonarIssueFetchOptions;
|
|
52
|
+
issues: SonarIssue[];
|
|
53
|
+
}): string;
|
|
54
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAOrE,eAAO,MAAM,UAAU,6BAA6B,CAAC;AAerD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACxE,MAAM,EAAE,MAAM,GACb,gBAAgB,EAAE,CASpB;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,uBAAuB,GAAG,IAAI,EACvC,UAAU,EAAE,gBAAgB,EAAE,GAC7B,uBAAuB,GAAG,IAAI,CAMhC;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoBxD;AAgBD,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,UAAU,EAAE,GACpB,gBAAgB,EAAE,GAAG,IAAI,CAmC3B;AAID,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;CAAE,GAC7E;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;CAAE,GAC5E;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAEpG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAyBjE;AAID,wBAAgB,QAAQ,IAAI,MAAM,CAqBjC;AAED,wBAAgB,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAExD;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;CAAE,GAAG,MAAM,CAQ1H;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB,GAAG,MAAM,CAyBT"}
|