diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index facd38f6787..34d87f4f348 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -117,6 +117,7 @@ import { import { VariantAnalysisManager } from './remote-queries/variant-analysis-manager'; import { createVariantAnalysisContentProvider } from './remote-queries/variant-analysis-content-provider'; import { MockGitHubApiServer } from './mocks/mock-gh-api-server'; +import { VariantAnalysisResultsManager } from './remote-queries/variant-analysis-results-manager'; /** * extension.ts @@ -490,8 +491,10 @@ async function activateWithInstalledDistribution( void logger.log('Initializing variant analysis manager.'); const variantAnalysisStorageDir = path.join(ctx.globalStorageUri.fsPath, 'variant-analyses'); await fs.ensureDir(variantAnalysisStorageDir); - const variantAnalysisManager = new VariantAnalysisManager(ctx, cliServer, variantAnalysisStorageDir, logger); + const variantAnalysisResultsManager = new VariantAnalysisResultsManager(cliServer, logger); + const variantAnalysisManager = new VariantAnalysisManager(ctx, variantAnalysisStorageDir, variantAnalysisResultsManager); ctx.subscriptions.push(variantAnalysisManager); + ctx.subscriptions.push(variantAnalysisResultsManager); ctx.subscriptions.push(workspace.registerTextDocumentContentProvider('codeql-variant-analysis', createVariantAnalysisContentProvider(variantAnalysisManager))); void logger.log('Initializing remote queries manager.'); diff --git a/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts b/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts index 80921270fba..7a56b20bc73 100644 --- a/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts +++ b/extensions/ql-vscode/src/remote-queries/variant-analysis-manager.ts @@ -3,7 +3,6 @@ import * as path from 'path'; import * as ghApiClient from './gh-api/gh-api-client'; import { CancellationToken, commands, EventEmitter, ExtensionContext, window } from 'vscode'; import { DisposableObject } from '../pure/disposable-object'; -import { Logger } from '../logging'; import { Credentials } from '../authentication'; import { VariantAnalysisMonitor } from './variant-analysis-monitor'; import { @@ -21,7 +20,6 @@ import { getErrorMessage } from '../pure/helpers-pure'; import { VariantAnalysisView } from './variant-analysis-view'; import { VariantAnalysisViewManager } from './variant-analysis-view-manager'; import { VariantAnalysisResultsManager } from './variant-analysis-results-manager'; -import { CodeQLCliServer } from '../cli'; import { getControllerRepo } from './run-remote-query'; import { processUpdatedVariantAnalysis } from './variant-analysis-processor'; import PQueue from 'p-queue'; @@ -40,7 +38,6 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA public readonly onVariantAnalysisRemoved = this._onVariantAnalysisRemoved.event; private readonly variantAnalysisMonitor: VariantAnalysisMonitor; - private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager; private readonly variantAnalyses = new Map(); private readonly views = new Map(); private static readonly maxConcurrentDownloads = 3; @@ -48,21 +45,20 @@ export class VariantAnalysisManager extends DisposableObject implements VariantA constructor( private readonly ctx: ExtensionContext, - cliServer: CodeQLCliServer, private readonly storagePath: string, - logger: Logger, + private readonly variantAnalysisResultsManager: VariantAnalysisResultsManager ) { super(); this.variantAnalysisMonitor = this.push(new VariantAnalysisMonitor(ctx)); this.variantAnalysisMonitor.onVariantAnalysisChange(this.onVariantAnalysisUpdated.bind(this)); - this.variantAnalysisResultsManager = this.push(new VariantAnalysisResultsManager(cliServer, logger)); + this.variantAnalysisResultsManager = variantAnalysisResultsManager; this.variantAnalysisResultsManager.onResultLoaded(this.onRepoResultLoaded.bind(this)); } public async rehydrateVariantAnalysis(variantAnalysis: VariantAnalysis, status: QueryStatus) { if (!(await this.variantAnalysisRecordExists(variantAnalysis.id))) { - // In this case, the variant analysis was deleted from disk, most likely because + // In this case, the variant analysis was deleted from disk, most likely because // it was purged by another workspace. this._onVariantAnalysisRemoved.fire(variantAnalysis); } else if (status === QueryStatus.InProgress) { diff --git a/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/run-remote-query.test.ts b/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/run-remote-query.test.ts index a72e63bda3c..2dc42fa9103 100644 --- a/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/run-remote-query.test.ts +++ b/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/run-remote-query.test.ts @@ -24,6 +24,7 @@ import { createMockApiResponse } from '../../factories/remote-queries/gh-api/var import { createMockExtensionContext } from '../../no-workspace'; import { VariantAnalysisManager } from '../../../remote-queries/variant-analysis-manager'; import { OutputChannelLogger } from '../../../logging'; +import { VariantAnalysisResultsManager } from '../../../remote-queries/variant-analysis-results-manager'; describe('Remote queries', function() { const baseDir = path.join(__dirname, '../../../../src/vscode-tests/cli-integration'); @@ -43,6 +44,7 @@ describe('Remote queries', function() { let ctx: ExtensionContext; let logger: any; let variantAnalysisManager: VariantAnalysisManager; + let variantAnalysisResultsManager: VariantAnalysisResultsManager; // use `function` so we have access to `this` beforeEach(async function() { @@ -57,7 +59,8 @@ describe('Remote queries', function() { ctx = createMockExtensionContext(); logger = new OutputChannelLogger('test-logger'); - variantAnalysisManager = new VariantAnalysisManager(ctx, cli, 'fake-storage-dir', logger); + variantAnalysisResultsManager = new VariantAnalysisResultsManager(cli, logger); + variantAnalysisManager = new VariantAnalysisManager(ctx, 'fake-storage-dir', variantAnalysisResultsManager); if (!(await cli.cliConstraints.supportsRemoteQueries())) { console.log(`Remote queries are not supported on CodeQL CLI v${CliVersionConstraint.CLI_VERSION_REMOTE_QUERIES diff --git a/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-manager.test.ts b/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-manager.test.ts index b9463e7c143..dd155369852 100644 --- a/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-manager.test.ts +++ b/extensions/ql-vscode/src/vscode-tests/cli-integration/remote-queries/variant-analysis-manager.test.ts @@ -20,6 +20,7 @@ import { createMockScannedRepos } from '../../factories/remote-queries/gh-api/sc import { createMockVariantAnalysisRepoTask } from '../../factories/remote-queries/gh-api/variant-analysis-repo-task'; import { CodeQLCliServer } from '../../../cli'; import { storagePath } from '../global.helper'; +import { VariantAnalysisResultsManager } from '../../../remote-queries/variant-analysis-results-manager'; describe('Variant Analysis Manager', async function() { let sandbox: sinon.SinonSandbox; @@ -30,6 +31,7 @@ describe('Variant Analysis Manager', async function() { let scannedRepos: ApiVariantAnalysisScannedRepository[]; let getVariantAnalysisRepoStub: sinon.SinonStub; let getVariantAnalysisRepoResultStub: sinon.SinonStub; + let variantAnalysisResultsManager: VariantAnalysisResultsManager; beforeEach(async () => { sandbox = sinon.createSandbox(); @@ -46,7 +48,8 @@ describe('Variant Analysis Manager', async function() { try { const extension = await extensions.getExtension>('GitHub.vscode-codeql')!.activate(); cli = extension.cliServer; - variantAnalysisManager = new VariantAnalysisManager(extension.ctx, cli, storagePath, logger); + variantAnalysisResultsManager = new VariantAnalysisResultsManager(cli, logger); + variantAnalysisManager = new VariantAnalysisManager(extension.ctx, storagePath, variantAnalysisResultsManager); } catch (e) { fail(e as Error); }