Skip to content

Commit 6a431b0

Browse files
committed
Fix Gist title in result export
The Gist title in the result export didn't take into account the actual number of exported repositories, it only used the scanned, unfiltered, repositories in the variant analysis. This switches it to use the actual exported repositories for determining the result and repository counts. This is somewhat more complicated than we'd expect it to be since the results are being read in async, so we need to switch the order of operations and store some additional information for being able to compute this information. However, this also makes the code somewhat easier to understand since the summary file is now being created in only 1 location, rather than being split between a method and a for-loop.
1 parent 386e9bb commit 6a431b0

2 files changed

Lines changed: 56 additions & 25 deletions

File tree

extensions/ql-vscode/src/remote-queries/export-results.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
generateMarkdown,
2121
generateVariantAnalysisMarkdown,
2222
MarkdownFile,
23+
RepositorySummary,
2324
} from "./remote-queries-markdown-generation";
2425
import { RemoteQuery } from "./remote-query";
2526
import { AnalysisResults, sumAnalysesResults } from "./shared/analysis-result";
@@ -235,11 +236,14 @@ export async function exportVariantAnalysisAnalysisResults(
235236
>,
236237
exportFormat: "gist" | "local",
237238
) {
238-
const description = buildVariantAnalysisGistDescription(variantAnalysis);
239-
const markdownFiles = await generateVariantAnalysisMarkdown(
239+
const { markdownFiles, summaries } = await generateVariantAnalysisMarkdown(
240240
variantAnalysis,
241241
analysesResults,
242-
"gist",
242+
exportFormat,
243+
);
244+
const description = buildVariantAnalysisGistDescription(
245+
variantAnalysis,
246+
summaries,
243247
);
244248

245249
await exportResults(
@@ -345,20 +349,16 @@ const buildGistDescription = (
345349
*/
346350
const buildVariantAnalysisGistDescription = (
347351
variantAnalysis: VariantAnalysis,
352+
summaries: RepositorySummary[],
348353
) => {
349-
const resultCount =
350-
variantAnalysis.scannedRepos?.reduce(
351-
(acc, item) => acc + (item.resultCount ?? 0),
352-
0,
353-
) ?? 0;
354+
const resultCount = summaries.reduce(
355+
(acc, summary) => acc + (summary.resultCount ?? 0),
356+
0,
357+
);
354358
const resultLabel = pluralize(resultCount, "result", "results");
355359

356-
const repositoryLabel = variantAnalysis.scannedRepos?.length
357-
? `(${pluralize(
358-
variantAnalysis.scannedRepos.length,
359-
"repository",
360-
"repositories",
361-
)})`
360+
const repositoryLabel = summaries.length
361+
? `(${pluralize(summaries.length, "repository", "repositories")})`
362362
: "";
363363
return `${variantAnalysis.query.name} (${variantAnalysis.query.language}) ${resultLabel} ${repositoryLabel}`;
364364
};

extensions/ql-vscode/src/remote-queries/remote-queries-markdown-generation.ts

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
VariantAnalysisScannedRepository,
1919
VariantAnalysisScannedRepositoryResult,
2020
} from "./shared/variant-analysis";
21+
import { RepositoryWithMetadata } from "./shared/repository";
2122

2223
export type MarkdownLinkType = "local" | "gist";
2324

@@ -74,6 +75,17 @@ export function generateMarkdown(
7475
return [summaryFile, ...resultsFiles];
7576
}
7677

78+
export interface RepositorySummary {
79+
fileName: string;
80+
repository: RepositoryWithMetadata;
81+
resultCount: number;
82+
}
83+
84+
export interface VariantAnalysisMarkdown {
85+
markdownFiles: MarkdownFile[];
86+
summaries: RepositorySummary[];
87+
}
88+
7789
/**
7890
* Generates markdown files with variant analysis results.
7991
*/
@@ -83,23 +95,22 @@ export async function generateVariantAnalysisMarkdown(
8395
[VariantAnalysisScannedRepository, VariantAnalysisScannedRepositoryResult]
8496
>,
8597
linkType: MarkdownLinkType,
86-
): Promise<MarkdownFile[]> {
98+
): Promise<VariantAnalysisMarkdown> {
8799
const resultsFiles: MarkdownFile[] = [];
88-
// Generate summary file with links to individual files
89-
const summaryFile: MarkdownFile =
90-
generateVariantAnalysisMarkdownSummary(variantAnalysis);
100+
const summaries: RepositorySummary[] = [];
91101
for await (const [scannedRepo, result] of results) {
92-
if (scannedRepo.resultCount === 0) {
102+
if (!scannedRepo.resultCount || scannedRepo.resultCount === 0) {
93103
continue;
94104
}
95105

96106
// Append nwo and results count to the summary table
97107
const fullName = scannedRepo.repository.fullName;
98108
const fileName = createFileName(fullName);
99-
const link = createRelativeLink(fileName, linkType);
100-
summaryFile.content.push(
101-
`| ${fullName} | [${scannedRepo.resultCount} result(s)](${link}) |`,
102-
);
109+
summaries.push({
110+
fileName,
111+
repository: scannedRepo.repository,
112+
resultCount: scannedRepo.resultCount,
113+
});
103114

104115
// Generate individual markdown file for each repository
105116
const resultsFileContent = [`### ${scannedRepo.repository.fullName}`, ""];
@@ -121,7 +132,18 @@ export async function generateVariantAnalysisMarkdown(
121132
content: resultsFileContent,
122133
});
123134
}
124-
return [summaryFile, ...resultsFiles];
135+
136+
// Generate summary file with links to individual files
137+
const summaryFile: MarkdownFile = generateVariantAnalysisMarkdownSummary(
138+
variantAnalysis,
139+
summaries,
140+
linkType,
141+
);
142+
143+
return {
144+
markdownFiles: [summaryFile, ...resultsFiles],
145+
summaries,
146+
};
125147
}
126148

127149
export function generateMarkdownSummary(query: RemoteQuery): MarkdownFile {
@@ -147,6 +169,8 @@ export function generateMarkdownSummary(query: RemoteQuery): MarkdownFile {
147169

148170
export function generateVariantAnalysisMarkdownSummary(
149171
variantAnalysis: VariantAnalysis,
172+
summaries: RepositorySummary[],
173+
linkType: MarkdownLinkType,
150174
): MarkdownFile {
151175
const lines: string[] = [];
152176
// Title
@@ -165,7 +189,14 @@ export function generateVariantAnalysisMarkdownSummary(
165189

166190
// Summary table
167191
lines.push("### Summary", "", "| Repository | Results |", "| --- | --- |");
168-
// nwo and result count will be appended to this table
192+
193+
for (const summary of summaries) {
194+
// Append nwo and results count to the summary table
195+
const fullName = summary.repository.fullName;
196+
const link = createRelativeLink(summary.fileName, linkType);
197+
lines.push(`| ${fullName} | [${summary.resultCount} result(s)](${link}) |`);
198+
}
199+
169200
return {
170201
fileName: "_summary",
171202
content: lines,

0 commit comments

Comments
 (0)