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: 4c527a3573/extensions/ql-vscode/src/extension.ts (L1242-L1257)
This commit is contained in:
@@ -114,6 +114,7 @@ import {
|
||||
VariantAnalysisScannedRepository as ApiVariantAnalysisScannedRepository
|
||||
} from './remote-queries/gh-api/variant-analysis';
|
||||
import { VariantAnalysisManager } from './remote-queries/variant-analysis-manager';
|
||||
import { createVariantAnalysisContentProvider } from './remote-queries/variant-analysis-content-provider';
|
||||
|
||||
/**
|
||||
* extension.ts
|
||||
@@ -485,6 +486,7 @@ async function activateWithInstalledDistribution(
|
||||
await fs.ensureDir(variantAnalysisStorageDir);
|
||||
const variantAnalysisManager = new VariantAnalysisManager(ctx, cliServer, variantAnalysisStorageDir, logger);
|
||||
ctx.subscriptions.push(variantAnalysisManager);
|
||||
ctx.subscriptions.push(workspace.registerTextDocumentContentProvider('codeql-variant-analysis', createVariantAnalysisContentProvider(variantAnalysisManager)));
|
||||
|
||||
void logger.log('Initializing remote queries manager.');
|
||||
const rqm = new RemoteQueriesManager(ctx, cliServer, queryStorageDir, logger, variantAnalysisManager);
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import { TextDocumentContentProvider, Uri } from 'vscode';
|
||||
import { URLSearchParams } from 'url';
|
||||
import { showAndLogWarningMessage } from '../helpers';
|
||||
import { SHOW_QUERY_TEXT_MSG } from '../query-history';
|
||||
import { VariantAnalysisManager } from './variant-analysis-manager';
|
||||
|
||||
export const createVariantAnalysisContentProvider = (variantAnalysisManager: VariantAnalysisManager): TextDocumentContentProvider => ({
|
||||
async provideTextDocumentContent(uri: Uri): Promise<string | undefined> {
|
||||
const params = new URLSearchParams(uri.query);
|
||||
|
||||
const variantAnalysisIdString = params.get('variantAnalysisId');
|
||||
if (!variantAnalysisIdString) {
|
||||
void showAndLogWarningMessage('No variant analysis ID provided');
|
||||
return undefined;
|
||||
}
|
||||
const variantAnalysisId = parseInt(variantAnalysisIdString);
|
||||
|
||||
const variantAnalysis = await variantAnalysisManager.getVariantAnalysis(variantAnalysisId);
|
||||
if (!variantAnalysis) {
|
||||
void showAndLogWarningMessage('No variant analysis found');
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return SHOW_QUERY_TEXT_MSG + variantAnalysis.query.queryText;
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user