Skip to content

Commit cd67ce9

Browse files
committed
Add text document content provider for variant analysis
This will add a new text document content provider for showing variant analyses. This is separate from the remote queries content provider to allow this to evolve separately. It also retrieves the query text from the manager rather than passing the text directly to prevent the webview from opening a tab with arbitrary content. See: https://github.com/github/vscode-codeql/blob/4c527a3573bdb91c413e29b82fb8729ee47d21d5/extensions/ql-vscode/src/extension.ts#L1242-L1257
1 parent cd8d82d commit cd67ce9

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

extensions/ql-vscode/src/extension.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ import {
114114
VariantAnalysisScannedRepository as ApiVariantAnalysisScannedRepository
115115
} from './remote-queries/gh-api/variant-analysis';
116116
import { VariantAnalysisManager } from './remote-queries/variant-analysis-manager';
117+
import { createVariantAnalysisContentProvider } from './remote-queries/variant-analysis-content-provider';
117118

118119
/**
119120
* extension.ts
@@ -485,6 +486,7 @@ async function activateWithInstalledDistribution(
485486
await fs.ensureDir(variantAnalysisStorageDir);
486487
const variantAnalysisManager = new VariantAnalysisManager(ctx, cliServer, variantAnalysisStorageDir, logger);
487488
ctx.subscriptions.push(variantAnalysisManager);
489+
ctx.subscriptions.push(workspace.registerTextDocumentContentProvider('codeql-variant-analysis', createVariantAnalysisContentProvider(variantAnalysisManager)));
488490

489491
void logger.log('Initializing remote queries manager.');
490492
const rqm = new RemoteQueriesManager(ctx, cliServer, queryStorageDir, logger, variantAnalysisManager);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { TextDocumentContentProvider, Uri } from 'vscode';
2+
import { URLSearchParams } from 'url';
3+
import { showAndLogWarningMessage } from '../helpers';
4+
import { SHOW_QUERY_TEXT_MSG } from '../query-history';
5+
import { VariantAnalysisManager } from './variant-analysis-manager';
6+
7+
export const createVariantAnalysisContentProvider = (variantAnalysisManager: VariantAnalysisManager): TextDocumentContentProvider => ({
8+
async provideTextDocumentContent(uri: Uri): Promise<string | undefined> {
9+
const params = new URLSearchParams(uri.query);
10+
11+
const variantAnalysisIdString = params.get('variantAnalysisId');
12+
if (!variantAnalysisIdString) {
13+
void showAndLogWarningMessage('No variant analysis ID provided');
14+
return undefined;
15+
}
16+
const variantAnalysisId = parseInt(variantAnalysisIdString);
17+
18+
const variantAnalysis = await variantAnalysisManager.getVariantAnalysis(variantAnalysisId);
19+
if (!variantAnalysis) {
20+
void showAndLogWarningMessage('No variant analysis found');
21+
return undefined;
22+
}
23+
24+
return SHOW_QUERY_TEXT_MSG + variantAnalysis.query.queryText;
25+
}
26+
});

0 commit comments

Comments
 (0)