@jonathan0823/pi-sonarqube 0.4.0 → 0.5.0

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/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jonathan0823/pi-sonarqube",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "SonarQube extension for Pi — run local analysis and browse issues.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/api.ts CHANGED
@@ -12,7 +12,13 @@ import type {
12
12
  FileDuplication,
13
13
  DuplicationBlockGroup,
14
14
  } from "./types.js";
15
- import { SONAR_SEVERITIES, SONAR_STATUSES, SONAR_TYPES, SONAR_SOFTWARE_QUALITIES, SONAR_IMPACT_SEVERITIES } from "./types.js";
15
+ import {
16
+ SONAR_SEVERITIES,
17
+ SONAR_STATUSES,
18
+ SONAR_TYPES,
19
+ SONAR_SOFTWARE_QUALITIES,
20
+ SONAR_IMPACT_SEVERITIES,
21
+ } from "./types.js";
16
22
  import { parseProperties } from "./config.js";
17
23
 
18
24
  // ── Clean code mode detection ────────────────────────────────────────────────
@@ -51,7 +57,11 @@ export function authHeader(token?: string): string | undefined {
51
57
  return `Basic ${Buffer.from(credentials).toString("base64")}`;
52
58
  }
53
59
 
54
- export async function fetchJson<T>(url: string, token?: string, signal?: AbortSignal): Promise<T> {
60
+ export async function fetchJson<T>(
61
+ url: string,
62
+ token?: string,
63
+ signal?: AbortSignal,
64
+ ): Promise<T> {
55
65
  const headers: Record<string, string> = { Accept: "application/json" };
56
66
  const auth = authHeader(token);
57
67
  if (auth) headers.Authorization = auth;
@@ -60,14 +70,20 @@ export async function fetchJson<T>(url: string, token?: string, signal?: AbortSi
60
70
  if (!response.ok) {
61
71
  const body = await response.text().catch(() => "");
62
72
  const suffix = body.trim() ? `: ${body.trim().slice(0, 240)}` : "";
63
- throw new Error(`SonarQube API request failed (${response.status} ${response.statusText}) for ${url}${suffix}`);
73
+ throw new Error(
74
+ `SonarQube API request failed (${response.status} ${response.statusText}) for ${url}${suffix}`,
75
+ );
64
76
  }
65
77
 
66
78
  return (await response.json()) as T;
67
79
  }
68
80
 
69
- export function toIssuePath(component: string | undefined | null, projectKey: string): string {
70
- if (typeof component !== "string" || component.length === 0) return projectKey;
81
+ export function toIssuePath(
82
+ component: string | undefined | null,
83
+ projectKey: string,
84
+ ): string {
85
+ if (typeof component !== "string" || component.length === 0)
86
+ return projectKey;
71
87
  const prefix = `${projectKey}:`;
72
88
  if (component.startsWith(prefix)) return component.slice(prefix.length);
73
89
  const colon = component.indexOf(":");
@@ -76,7 +92,10 @@ export function toIssuePath(component: string | undefined | null, projectKey: st
76
92
 
77
93
  // ── Issue filter helpers ────────────────────────────────────────────────────
78
94
 
79
- export function normalizeIssueList(values?: string[], uppercase = false): string[] | undefined {
95
+ export function normalizeIssueList(
96
+ values?: string[],
97
+ uppercase = false,
98
+ ): string[] | undefined {
80
99
  const cleaned = values
81
100
  ?.map((v) => v.trim())
82
101
  .filter(Boolean)
@@ -85,7 +104,9 @@ export function normalizeIssueList(values?: string[], uppercase = false): string
85
104
  return [...new Set(cleaned)];
86
105
  }
87
106
 
88
- export function normalizeIssueFilters(filters?: SonarIssueFetchOptions): SonarIssueFetchOptions | undefined {
107
+ export function normalizeIssueFilters(
108
+ filters?: SonarIssueFetchOptions,
109
+ ): SonarIssueFetchOptions | undefined {
89
110
  const normalized = {
90
111
  severities: normalizeIssueList(filters?.severities, true),
91
112
  statuses: normalizeIssueList(filters?.statuses, true),
@@ -94,12 +115,19 @@ export function normalizeIssueFilters(filters?: SonarIssueFetchOptions): SonarIs
94
115
  softwareQualities: normalizeIssueList(filters?.softwareQualities, true),
95
116
  impactSeverities: normalizeIssueList(filters?.impactSeverities, true),
96
117
  };
97
- return normalized.severities || normalized.statuses || normalized.types || normalized.rules || normalized.softwareQualities || normalized.impactSeverities
118
+ return normalized.severities ||
119
+ normalized.statuses ||
120
+ normalized.types ||
121
+ normalized.rules ||
122
+ normalized.softwareQualities ||
123
+ normalized.impactSeverities
98
124
  ? normalized
99
125
  : undefined;
100
126
  }
101
127
 
102
- export function assertFiltersNotAmbiguous(filters?: SonarIssueFetchOptions): void {
128
+ export function assertFiltersNotAmbiguous(
129
+ filters?: SonarIssueFetchOptions,
130
+ ): void {
103
131
  if (!filters) return;
104
132
  if (
105
133
  (filters.severities?.length || filters.types?.length) &&
@@ -107,21 +135,26 @@ export function assertFiltersNotAmbiguous(filters?: SonarIssueFetchOptions): voi
107
135
  ) {
108
136
  throw new Error(
109
137
  "Ambiguous filter combination: mixing legacy filters (severity/type) with MQR filters (quality/impactSeverity) is not allowed. " +
110
- "Use one filter family per command.",
138
+ "Use one filter family per command.",
111
139
  );
112
140
  }
113
141
  }
114
142
 
115
143
  const EXPLICIT_FILTER_RE = /^([^:=]+)[:=](.+)$/;
116
144
 
117
- export function parseIssueFilterToken(token: string): Partial<SonarIssueFetchOptions> | undefined {
145
+ export function parseIssueFilterToken(
146
+ token: string,
147
+ ): Partial<SonarIssueFetchOptions> | undefined {
118
148
  const trimmed = token.trim();
119
149
  if (!trimmed) return undefined;
120
150
 
121
151
  const explicit = EXPLICIT_FILTER_RE.exec(trimmed);
122
152
  if (explicit) {
123
153
  const key = explicit[1].trim().toLowerCase();
124
- const values = explicit[2].split(",").map((p) => p.trim()).filter(Boolean);
154
+ const values = explicit[2]
155
+ .split(",")
156
+ .map((p) => p.trim())
157
+ .filter(Boolean);
125
158
  if (values.length === 0) return undefined;
126
159
 
127
160
  switch (key) {
@@ -151,18 +184,35 @@ export function parseIssueFilterToken(token: string): Partial<SonarIssueFetchOpt
151
184
  }
152
185
 
153
186
  const upper = trimmed.toUpperCase();
154
- if (SONAR_SEVERITIES.includes(upper as (typeof SONAR_SEVERITIES)[number])) return { severities: [upper] };
155
- if (SONAR_STATUSES.includes(upper as (typeof SONAR_STATUSES)[number])) return { statuses: [upper] };
156
- if (SONAR_TYPES.includes(upper as (typeof SONAR_TYPES)[number])) return { types: [upper] };
157
- if (SONAR_SOFTWARE_QUALITIES.includes(upper as (typeof SONAR_SOFTWARE_QUALITIES)[number])) return { softwareQualities: [upper] };
158
- if (SONAR_IMPACT_SEVERITIES.includes(upper as (typeof SONAR_IMPACT_SEVERITIES)[number])) return { impactSeverities: [upper] };
187
+ if (SONAR_SEVERITIES.includes(upper as (typeof SONAR_SEVERITIES)[number]))
188
+ return { severities: [upper] };
189
+ if (SONAR_STATUSES.includes(upper as (typeof SONAR_STATUSES)[number]))
190
+ return { statuses: [upper] };
191
+ if (SONAR_TYPES.includes(upper as (typeof SONAR_TYPES)[number]))
192
+ return { types: [upper] };
193
+ if (
194
+ SONAR_SOFTWARE_QUALITIES.includes(
195
+ upper as (typeof SONAR_SOFTWARE_QUALITIES)[number],
196
+ )
197
+ )
198
+ return { softwareQualities: [upper] };
199
+ if (
200
+ SONAR_IMPACT_SEVERITIES.includes(
201
+ upper as (typeof SONAR_IMPACT_SEVERITIES)[number],
202
+ )
203
+ )
204
+ return { impactSeverities: [upper] };
159
205
  return undefined;
160
206
  }
161
207
 
162
208
  export function parseSonarIssueArgs(
163
209
  tokens: string[],
164
210
  allowIssueIndex = false,
165
- ): { targetInput?: string; issueIndex?: number; filters?: SonarIssueFetchOptions } {
211
+ ): {
212
+ targetInput?: string;
213
+ issueIndex?: number;
214
+ filters?: SonarIssueFetchOptions;
215
+ } {
166
216
  const filters: Array<Partial<SonarIssueFetchOptions> | undefined> = [];
167
217
  let targetInput: string | undefined;
168
218
  let issueIndex: number | undefined;
@@ -194,12 +244,24 @@ function mergeFilters(
194
244
  const merged: SonarIssueFetchOptions = {};
195
245
  for (const filter of filters) {
196
246
  if (!filter) continue;
197
- if (filter.severities?.length) merged.severities = [...(merged.severities ?? []), ...filter.severities];
198
- if (filter.statuses?.length) merged.statuses = [...(merged.statuses ?? []), ...filter.statuses];
199
- if (filter.types?.length) merged.types = [...(merged.types ?? []), ...filter.types];
200
- if (filter.rules?.length) merged.rules = [...(merged.rules ?? []), ...filter.rules];
201
- if (filter.softwareQualities?.length) merged.softwareQualities = [...(merged.softwareQualities ?? []), ...filter.softwareQualities];
202
- if (filter.impactSeverities?.length) merged.impactSeverities = [...(merged.impactSeverities ?? []), ...filter.impactSeverities];
247
+ if (filter.severities?.length)
248
+ merged.severities = [...(merged.severities ?? []), ...filter.severities];
249
+ if (filter.statuses?.length)
250
+ merged.statuses = [...(merged.statuses ?? []), ...filter.statuses];
251
+ if (filter.types?.length)
252
+ merged.types = [...(merged.types ?? []), ...filter.types];
253
+ if (filter.rules?.length)
254
+ merged.rules = [...(merged.rules ?? []), ...filter.rules];
255
+ if (filter.softwareQualities?.length)
256
+ merged.softwareQualities = [
257
+ ...(merged.softwareQualities ?? []),
258
+ ...filter.softwareQualities,
259
+ ];
260
+ if (filter.impactSeverities?.length)
261
+ merged.impactSeverities = [
262
+ ...(merged.impactSeverities ?? []),
263
+ ...filter.impactSeverities,
264
+ ];
203
265
  }
204
266
  return normalizeIssueFilters(merged);
205
267
  }
@@ -207,12 +269,16 @@ function mergeFilters(
207
269
  export function issueFilterLabel(filters?: SonarIssueFetchOptions): string {
208
270
  if (!filters) return "";
209
271
  const parts: string[] = [];
210
- if (filters.severities?.length) parts.push(`severities=${filters.severities.join(",")}`);
211
- if (filters.statuses?.length) parts.push(`statuses=${filters.statuses.join(",")}`);
272
+ if (filters.severities?.length)
273
+ parts.push(`severities=${filters.severities.join(",")}`);
274
+ if (filters.statuses?.length)
275
+ parts.push(`statuses=${filters.statuses.join(",")}`);
212
276
  if (filters.types?.length) parts.push(`types=${filters.types.join(",")}`);
213
277
  if (filters.rules?.length) parts.push(`rules=${filters.rules.join(",")}`);
214
- if (filters.softwareQualities?.length) parts.push(`qualities=${filters.softwareQualities.join(",")}`);
215
- if (filters.impactSeverities?.length) parts.push(`impactSeverities=${filters.impactSeverities.join(",")}`);
278
+ if (filters.softwareQualities?.length)
279
+ parts.push(`qualities=${filters.softwareQualities.join(",")}`);
280
+ if (filters.impactSeverities?.length)
281
+ parts.push(`impactSeverities=${filters.impactSeverities.join(",")}`);
216
282
  return parts.join(" • ");
217
283
  }
218
284
 
@@ -237,7 +303,8 @@ function severitySortRank(severity: string): number {
237
303
  }
238
304
 
239
305
  function compareIssuesForContext(left: SonarIssue, right: SonarIssue): number {
240
- const severityDiff = severitySortRank(left.severity) - severitySortRank(right.severity);
306
+ const severityDiff =
307
+ severitySortRank(left.severity) - severitySortRank(right.severity);
241
308
  if (severityDiff !== 0) return severityDiff;
242
309
  const fileDiff = left.filePath.localeCompare(right.filePath);
243
310
  if (fileDiff !== 0) return fileDiff;
@@ -256,7 +323,11 @@ export function sonarScannerInstallHint(): string {
256
323
  ].join(" ");
257
324
  }
258
325
 
259
- export function extractScannerHint(output: string, config: SonarProjectConfig, exitCode?: number): string {
326
+ export function extractScannerHint(
327
+ output: string,
328
+ config: SonarProjectConfig,
329
+ exitCode?: number,
330
+ ): string {
260
331
  const lines = output.toLowerCase();
261
332
 
262
333
  const isNotFoundOnPath =
@@ -268,7 +339,10 @@ export function extractScannerHint(output: string, config: SonarProjectConfig, e
268
339
 
269
340
  const isUnauthorized = /status code 401|status 401|unauthorized/i.test(lines);
270
341
  if (isUnauthorized) {
271
- const defaultHint = config.serverUrl === "http://localhost:9000" ? " (default: http://localhost:9000)" : "";
342
+ const defaultHint =
343
+ config.serverUrl === "http://localhost:9000"
344
+ ? " (default: http://localhost:9000)"
345
+ : "";
272
346
  return [
273
347
  `Authentication failed for ${config.serverUrl}${defaultHint}.`,
274
348
  "Run `/sonarqube init` to set up your server URL and token, then retry.",
@@ -285,7 +359,10 @@ export function extractScannerHint(output: string, config: SonarProjectConfig, e
285
359
  ].join(" ");
286
360
  }
287
361
 
288
- const isConnectionError = /connect econnrefused|connect refused|connect timeout|enotfound|econnreset/i.test(lines);
362
+ const isConnectionError =
363
+ /connect econnrefused|connect refused|connect timeout|enotfound|econnreset/i.test(
364
+ lines,
365
+ );
289
366
  if (isConnectionError) {
290
367
  return [
291
368
  `Cannot reach SonarQube server at ${config.serverUrl}.`,
@@ -294,7 +371,11 @@ export function extractScannerHint(output: string, config: SonarProjectConfig, e
294
371
  ].join(" ");
295
372
  }
296
373
 
297
- if (/not found|unknown url/i.test(lines) && (config.serverUrl === "http://localhost:9000" || /localhost/i.test(config.serverUrl))) {
374
+ if (
375
+ /not found|unknown url/i.test(lines) &&
376
+ (config.serverUrl === "http://localhost:9000" ||
377
+ /localhost/i.test(config.serverUrl))
378
+ ) {
298
379
  return [
299
380
  `SonarQube API at ${config.serverUrl} returned "not found".`,
300
381
  "The default server URL is http://localhost:9000. Run `/sonarqube init` to configure.",
@@ -306,7 +387,11 @@ export function extractScannerHint(output: string, config: SonarProjectConfig, e
306
387
 
307
388
  // ── Scanner interaction ─────────────────────────────────────────────────────
308
389
 
309
- export async function runScanner(pi: ExtensionAPI, config: SonarProjectConfig, signal?: AbortSignal): Promise<string> {
390
+ export async function runScanner(
391
+ pi: ExtensionAPI,
392
+ config: SonarProjectConfig,
393
+ signal?: AbortSignal,
394
+ ): Promise<string> {
310
395
  const scannerCheck =
311
396
  process.platform === "win32"
312
397
  ? await pi.exec("cmd", ["/d", "/s", "/c", "where", "sonar-scanner"], {
@@ -356,7 +441,9 @@ export async function runScanner(pi: ExtensionAPI, config: SonarProjectConfig, s
356
441
  return result.stdout || result.stderr;
357
442
  }
358
443
 
359
- export async function readReportTask(baseDir: string): Promise<Record<string, string>> {
444
+ export async function readReportTask(
445
+ baseDir: string,
446
+ ): Promise<Record<string, string>> {
360
447
  const path = resolve(baseDir, ".scannerwork", "report-task.txt");
361
448
  const text = await readFile(path, "utf8");
362
449
  return parseProperties(text);
@@ -375,7 +462,9 @@ export async function waitForAnalysis(
375
462
  const status = result.task.status.toUpperCase();
376
463
  if (status === "SUCCESS") return result.task.analysisId;
377
464
  if (status === "FAILED") {
378
- throw new Error(`SonarQube analysis failed: ${result.task.errorMessage || "unknown error"}`);
465
+ throw new Error(
466
+ `SonarQube analysis failed: ${result.task.errorMessage || "unknown error"}`,
467
+ );
379
468
  }
380
469
  if (status === "CANCELED") {
381
470
  throw new Error("SonarQube analysis was canceled by the server");
@@ -398,12 +487,24 @@ function buildIssueSearchUrl(
398
487
  url.searchParams.set("resolved", "false");
399
488
  url.searchParams.set("ps", "100");
400
489
  url.searchParams.set("p", String(page));
401
- if (filters?.severities?.length) url.searchParams.set("severities", filters.severities.join(","));
402
- if (filters?.statuses?.length) url.searchParams.set("statuses", filters.statuses.join(","));
403
- if (filters?.types?.length) url.searchParams.set("types", filters.types.join(","));
404
- if (filters?.rules?.length) url.searchParams.set("rules", filters.rules.join(","));
405
- if (filters?.softwareQualities?.length) url.searchParams.set("impactSoftwareQualities", filters.softwareQualities.join(","));
406
- if (filters?.impactSeverities?.length) url.searchParams.set("impactSeverities", filters.impactSeverities.join(","));
490
+ if (filters?.severities?.length)
491
+ url.searchParams.set("severities", filters.severities.join(","));
492
+ if (filters?.statuses?.length)
493
+ url.searchParams.set("statuses", filters.statuses.join(","));
494
+ if (filters?.types?.length)
495
+ url.searchParams.set("types", filters.types.join(","));
496
+ if (filters?.rules?.length)
497
+ url.searchParams.set("rules", filters.rules.join(","));
498
+ if (filters?.softwareQualities?.length)
499
+ url.searchParams.set(
500
+ "impactSoftwareQualities",
501
+ filters.softwareQualities.join(","),
502
+ );
503
+ if (filters?.impactSeverities?.length)
504
+ url.searchParams.set(
505
+ "impactSeverities",
506
+ filters.impactSeverities.join(","),
507
+ );
407
508
  return url.toString();
408
509
  }
409
510
 
@@ -439,7 +540,18 @@ export async function fetchIssuePage(
439
540
  page: number,
440
541
  signal?: AbortSignal,
441
542
  filters?: SonarIssueFetchOptions,
442
- ): Promise<{ total: number; issueRows: Array<{ key: string; rule: string; severity: string; message: string; component: string; line?: number; status?: string }> }> {
543
+ ): Promise<{
544
+ total: number;
545
+ issueRows: Array<{
546
+ key: string;
547
+ rule: string;
548
+ severity: string;
549
+ message: string;
550
+ component: string;
551
+ line?: number;
552
+ status?: string;
553
+ }>;
554
+ }> {
443
555
  const url = buildIssueSearchUrl(serverUrl, projectKey, page, filters);
444
556
  const result = await fetchJson<{
445
557
  total: number;
@@ -472,13 +584,21 @@ export async function fetchIssues(
472
584
 
473
585
  for (;;) {
474
586
  const { total: pageTotal, issueRows } = await fetchIssuePage(
475
- serverUrl, token, projectKey, page, signal, normalizedFilters,
587
+ serverUrl,
588
+ token,
589
+ projectKey,
590
+ page,
591
+ signal,
592
+ normalizedFilters,
476
593
  );
477
594
  total = pageTotal;
478
595
 
479
596
  for (const raw of issueRows) {
480
597
  if (!ruleNames.has(raw.rule)) {
481
- ruleNames.set(raw.rule, await fetchRuleName(serverUrl, token, raw.rule, signal));
598
+ ruleNames.set(
599
+ raw.rule,
600
+ await fetchRuleName(serverUrl, token, raw.rule, signal),
601
+ );
482
602
  }
483
603
  issues.push(mapRawIssue(raw, projectKey, ruleNames));
484
604
  }
@@ -517,7 +637,17 @@ export async function fetchRuleName(
517
637
  export function createAnalysisState(
518
638
  config: Pick<SonarProjectConfig, "baseDir" | "serverUrl" | "projectKey">,
519
639
  issues: SonarIssue[],
520
- extras: Partial<Pick<SonarAnalysisState, "dashboardUrl" | "ceTaskUrl" | "analysisId" | "filters" | "measures" | "cleanCodeMode">> = {},
640
+ extras: Partial<
641
+ Pick<
642
+ SonarAnalysisState,
643
+ | "dashboardUrl"
644
+ | "ceTaskUrl"
645
+ | "analysisId"
646
+ | "filters"
647
+ | "measures"
648
+ | "cleanCodeMode"
649
+ >
650
+ > = {},
521
651
  ): SonarAnalysisState {
522
652
  return {
523
653
  version: 1,
@@ -554,15 +684,20 @@ export async function fetchDuplicationMeasures(
554
684
  const m = measures.find((m) => m.metric === key);
555
685
  return m ? Number.parseFloat(m.value) : 0;
556
686
  };
557
- const hasMetric = (key: string): boolean => measures.some((m) => m.metric === key);
687
+ const hasMetric = (key: string): boolean =>
688
+ measures.some((m) => m.metric === key);
558
689
  return {
559
690
  duplicatedLinesDensity: getValue("duplicated_lines_density"),
560
691
  duplicatedLines: getValue("duplicated_lines"),
561
692
  duplicatedBlocks: getValue("duplicated_blocks"),
562
693
  duplicatedFiles: getValue("duplicated_files"),
563
694
  coverage: hasMetric("coverage") ? getValue("coverage") : undefined,
564
- linesToCover: hasMetric("lines_to_cover") ? getValue("lines_to_cover") : undefined,
565
- uncoveredLines: hasMetric("uncovered_lines") ? getValue("uncovered_lines") : undefined,
695
+ linesToCover: hasMetric("lines_to_cover")
696
+ ? getValue("lines_to_cover")
697
+ : undefined,
698
+ uncoveredLines: hasMetric("uncovered_lines")
699
+ ? getValue("uncovered_lines")
700
+ : undefined,
566
701
  };
567
702
  } catch {
568
703
  return undefined;
@@ -580,7 +715,10 @@ export async function fetchIssueSeverityCounts(
580
715
  const facetKey = mode === "MQR" ? "impactSeverities" : "severities";
581
716
  const url = `${serverUrl}/api/issues/search?projects=${encodeURIComponent(projectKey)}&resolved=false&ps=1&facets=${facetKey}`;
582
717
  const result = await fetchJson<{
583
- facets: Array<{ property: string; values: Array<{ val: string; count: number }> }>;
718
+ facets: Array<{
719
+ property: string;
720
+ values: Array<{ val: string; count: number }>;
721
+ }>;
584
722
  }>(url, token, signal);
585
723
  const facet = result.facets?.find((f) => f.property === facetKey);
586
724
  if (!facet) return undefined;
@@ -617,9 +755,14 @@ export async function fetchIssueQualityCounts(
617
755
  try {
618
756
  const url = `${serverUrl}/api/issues/search?projects=${encodeURIComponent(projectKey)}&resolved=false&ps=1&facets=impactSoftwareQualities`;
619
757
  const result = await fetchJson<{
620
- facets: Array<{ property: string; values: Array<{ val: string; count: number }> }>;
758
+ facets: Array<{
759
+ property: string;
760
+ values: Array<{ val: string; count: number }>;
761
+ }>;
621
762
  }>(url, token, signal);
622
- const facet = result.facets?.find((f) => f.property === "impactSoftwareQualities");
763
+ const facet = result.facets?.find(
764
+ (f) => f.property === "impactSoftwareQualities",
765
+ );
623
766
  if (!facet) return undefined;
624
767
  const getCount = (q: string): number => {
625
768
  const entry = facet.values.find((v) => v.val === q);
@@ -643,7 +786,7 @@ export async function fetchFileDuplications(
643
786
  projectKey: string,
644
787
  signal?: AbortSignal,
645
788
  ): Promise<FileDuplication[]> {
646
- const treeUrl = `${serverUrl}/api/measures/component_tree?component=${encodeURIComponent(projectKey)}&qualifiers=FIL&metricKeys=duplicated_lines,duplicated_blocks&ps=500`;
789
+ const treeUrl = `${serverUrl}/api/measures/component_tree?component=${encodeURIComponent(projectKey)}&qualifiers=FIL&metricKeys=duplicated_lines,duplicated_lines_density,duplicated_blocks&ps=500`;
647
790
  const treeResult = await fetchJson<{
648
791
  components: Array<{
649
792
  key: string;
@@ -658,18 +801,31 @@ export async function fetchFileDuplications(
658
801
  const measures = component.measures ?? [];
659
802
  const getValue = (metric: string): number => {
660
803
  const m = measures.find((item) => item.metric === metric);
661
- return m ? Number.parseInt(m.value, 10) : 0;
804
+ return m ? Number.parseFloat(m.value) : 0;
662
805
  };
663
806
  const duplicatedBlocks = getValue("duplicated_blocks");
664
807
  if (duplicatedBlocks <= 0) return null;
665
808
  return {
666
- filePath: component.path ?? toIssuePath(component.key, projectKey) ?? component.name ?? component.key,
809
+ filePath:
810
+ component.path ??
811
+ toIssuePath(component.key, projectKey) ??
812
+ component.name ??
813
+ component.key,
667
814
  fileKey: component.key,
668
815
  duplicatedLines: getValue("duplicated_lines"),
816
+ duplicatedLinesDensity: getValue("duplicated_lines_density"),
669
817
  duplicatedBlocks,
670
818
  };
671
819
  })
672
- .filter((f): f is FileDuplication => f !== null);
820
+ .filter((f): f is FileDuplication => f !== null)
821
+ .sort((left, right) => {
822
+ const densityDiff =
823
+ right.duplicatedLinesDensity - left.duplicatedLinesDensity;
824
+ if (densityDiff !== 0) return densityDiff;
825
+ const linesDiff = right.duplicatedLines - left.duplicatedLines;
826
+ if (linesDiff !== 0) return linesDiff;
827
+ return left.filePath.localeCompare(right.filePath);
828
+ });
673
829
 
674
830
  return results;
675
831
  }
@@ -695,5 +851,3 @@ export async function fetchFileDuplicationBlocks(
695
851
  })),
696
852
  }));
697
853
  }
698
-
699
-