From e93f7d9258b836a803f1b597da599a9ae8d1f2f1 Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Wed, 8 Dec 2021 11:00:18 +0000 Subject: [PATCH 1/5] Remote queries: Open query file/text from webview --- .../ql-vscode/src/pure/interface-types.ts | 3 +- .../remote-queries-interface.ts | 11 +++++++ .../src/remote-queries/remote-query.ts | 1 + .../src/remote-queries/run-remote-query.ts | 4 +++ .../shared/remote-query-result.ts | 2 ++ .../src/remote-queries/view/RemoteQueries.tsx | 29 +++++++++++++++++-- .../src/remote-queries/view/remoteQueries.css | 5 ++++ 7 files changed, 52 insertions(+), 3 deletions(-) diff --git a/extensions/ql-vscode/src/pure/interface-types.ts b/extensions/ql-vscode/src/pure/interface-types.ts index 7413778fd35..6a3e4efd51b 100644 --- a/extensions/ql-vscode/src/pure/interface-types.ts +++ b/extensions/ql-vscode/src/pure/interface-types.ts @@ -368,7 +368,8 @@ export interface ParsedResultSets { export type FromRemoteQueriesMessage = | RemoteQueryLoadedMessage - | RemoteQueryErrorMessage; + | RemoteQueryErrorMessage + | OpenFileMsg; export type ToRemoteQueriesMessage = | SetRemoteQueryResultMessage; diff --git a/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts b/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts index d707712e8b9..c26dc9fe28f 100644 --- a/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts +++ b/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts @@ -4,6 +4,7 @@ import { window as Window, ViewColumn, Uri, + workspace, } from 'vscode'; import * as path from 'path'; @@ -62,6 +63,8 @@ export class RemoteQueriesInterfaceManager { return { queryTitle: query.queryName, queryFile: queryFile, + queryPath: query.queryFilePath, + queryTextTmpFile: query.queryTextTmpFile, totalRepositoryCount: query.repositories.length, affectedRepositoryCount: affectedRepositories.length, totalResultCount: totalResultCount, @@ -129,6 +132,11 @@ export class RemoteQueriesInterfaceManager { }); } + public async openFile(filePath: string) { + const textDocument = await workspace.openTextDocument(filePath); + await Window.showTextDocument(textDocument, ViewColumn.One); + } + private async handleMsgFromView( msg: FromRemoteQueriesMessage ): Promise { @@ -143,6 +151,9 @@ export class RemoteQueriesInterfaceManager { `Remote query error: ${msg.error}` ); break; + case 'openFile': + await this.openFile(msg.filePath); + break; default: assertNever(msg); } diff --git a/extensions/ql-vscode/src/remote-queries/remote-query.ts b/extensions/ql-vscode/src/remote-queries/remote-query.ts index 314a95a0485..d0ba5d495cb 100644 --- a/extensions/ql-vscode/src/remote-queries/remote-query.ts +++ b/extensions/ql-vscode/src/remote-queries/remote-query.ts @@ -3,6 +3,7 @@ import { Repository } from './repository'; export interface RemoteQuery { queryName: string; queryFilePath: string; + queryTextTmpFile: string; controllerRepository: Repository; repositories: Repository[]; executionStartTime: Date; diff --git a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts index 20d0d9a185c..a80b708f527 100644 --- a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts +++ b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts @@ -467,9 +467,13 @@ function buildRemoteQueryEntity( return { owner: owner, name: repo }; }); + // TODO: Get query text from query file and save it in a temporary .ql file. + const queryTextTmpFile = ''; + return { queryName, queryFilePath, + queryTextTmpFile, controllerRepository: { owner: controllerRepoOwner, name: controllerRepoName, diff --git a/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts b/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts index cd81acaa481..4e09c4bb4d2 100644 --- a/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts +++ b/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts @@ -1,6 +1,8 @@ export interface RemoteQueryResult { queryTitle: string; queryFile: string; + queryPath: string; + queryTextTmpFile: string; totalRepositoryCount: number; affectedRepositoryCount: number; totalResultCount: number; diff --git a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx index d027b5e0bf1..5b93e8c8a65 100644 --- a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx +++ b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx @@ -12,6 +12,8 @@ const numOfReposInContractedMode = 10; const emptyQueryResult: RemoteQueryResult = { queryTitle: '', queryFile: '', + queryPath: '', + queryTextTmpFile: '', totalRepositoryCount: 0, affectedRepositoryCount: 0, totalResultCount: 0, @@ -38,6 +40,13 @@ const AnalysisResultItem = (props: AnalysisResult) => ( ); +function openFile(filePath: string): void { + vscode.postMessage({ + t: 'openFile', + filePath + }); +} + export function RemoteQueries(): JSX.Element { const [queryResult, setQueryResult] = useState(emptyQueryResult); @@ -64,6 +73,14 @@ export function RemoteQueries(): JSX.Element { const numOfReposToShow = repoListExpanded ? queryResult.results.length : numOfReposInContractedMode; try { + const openQueryFile = () => { + openFile(queryResult.queryPath); + }; + + const openQueryTextTmpFile = () => { + openFile(queryResult.queryTextTmpFile); + }; + return

{queryResult.queryTitle}

@@ -72,8 +89,16 @@ export function RemoteQueries(): JSX.Element { ({queryResult.executionDuration}), {queryResult.executionTimestamp}

- {octicons.file} {queryResult.queryFile} - {octicons.codeSquare} query + {octicons.file} + + {queryResult.queryFile} + + + {octicons.codeSquare} + + query + +

diff --git a/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css b/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css index 2de5e9f33c3..cfeedb621ba 100644 --- a/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css +++ b/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css @@ -39,6 +39,11 @@ padding-right: 1em; } +.vscode-codeql__query-file-link { + text-decoration: none; + padding-left: 0.3em; +} + .vscode-codeql__query-summary-container { padding-top: 1.5em; } From b0df9b1e0b6756645cd9ef4d7c880dfafa9b18a8 Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Thu, 9 Dec 2021 12:37:50 +0000 Subject: [PATCH 2/5] Rename properties and handle missing files --- .../remote-queries-interface.ts | 19 ++++++++++++------- .../src/remote-queries/remote-query.ts | 2 +- .../src/remote-queries/run-remote-query.ts | 4 ++-- .../shared/remote-query-result.ts | 6 +++--- .../src/remote-queries/view/RemoteQueries.tsx | 12 ++++++------ 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts b/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts index c26dc9fe28f..93b22296cbf 100644 --- a/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts +++ b/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts @@ -20,6 +20,7 @@ import { AnalysisResult, RemoteQueryResult } from './remote-query-result'; import { RemoteQuery } from './remote-query'; import { RemoteQueryResult as RemoteQueryResultViewModel } from './shared/remote-query-result'; import { AnalysisResult as AnalysisResultViewModel } from './shared/remote-query-result'; +import { showAndLogWarningMessage } from '../helpers'; export class RemoteQueriesInterfaceManager { private panel: WebviewPanel | undefined; @@ -54,7 +55,7 @@ export class RemoteQueriesInterfaceManager { * @returns A fully created view model. */ private buildViewModel(query: RemoteQuery, queryResult: RemoteQueryResult): RemoteQueryResultViewModel { - const queryFile = path.basename(query.queryFilePath); + const queryFileName = path.basename(query.queryFilePath); const totalResultCount = queryResult.analysisResults.reduce((acc, cur) => acc + cur.resultCount, 0); const executionDuration = this.getDuration(queryResult.executionEndTime, query.executionStartTime); const analysisResults = this.buildAnalysisResults(queryResult.analysisResults); @@ -62,9 +63,9 @@ export class RemoteQueriesInterfaceManager { return { queryTitle: query.queryName, - queryFile: queryFile, - queryPath: query.queryFilePath, - queryTextTmpFile: query.queryTextTmpFile, + queryFileName: queryFileName, + queryFilePath: query.queryFilePath, + queryTextTmpFilePath: query.queryTextTmpFilePath, totalRepositoryCount: query.repositories.length, affectedRepositoryCount: affectedRepositories.length, totalResultCount: totalResultCount, @@ -132,9 +133,13 @@ export class RemoteQueriesInterfaceManager { }); } - public async openFile(filePath: string) { - const textDocument = await workspace.openTextDocument(filePath); - await Window.showTextDocument(textDocument, ViewColumn.One); + private async openFile(filePath: string) { + try { + const textDocument = await workspace.openTextDocument(filePath); + await Window.showTextDocument(textDocument, ViewColumn.One); + } catch (error) { + void showAndLogWarningMessage(`Could not open file: ${filePath}`); + } } private async handleMsgFromView( diff --git a/extensions/ql-vscode/src/remote-queries/remote-query.ts b/extensions/ql-vscode/src/remote-queries/remote-query.ts index d0ba5d495cb..8e1e1e15686 100644 --- a/extensions/ql-vscode/src/remote-queries/remote-query.ts +++ b/extensions/ql-vscode/src/remote-queries/remote-query.ts @@ -3,7 +3,7 @@ import { Repository } from './repository'; export interface RemoteQuery { queryName: string; queryFilePath: string; - queryTextTmpFile: string; + queryTextTmpFilePath: string; controllerRepository: Repository; repositories: Repository[]; executionStartTime: Date; diff --git a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts index a80b708f527..298565db9cc 100644 --- a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts +++ b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts @@ -468,12 +468,12 @@ function buildRemoteQueryEntity( }); // TODO: Get query text from query file and save it in a temporary .ql file. - const queryTextTmpFile = ''; + const queryTextTmpFilePath = ''; return { queryName, queryFilePath, - queryTextTmpFile, + queryTextTmpFilePath, controllerRepository: { owner: controllerRepoOwner, name: controllerRepoName, diff --git a/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts b/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts index 4e09c4bb4d2..2043ce7dd1a 100644 --- a/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts +++ b/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts @@ -1,8 +1,8 @@ export interface RemoteQueryResult { queryTitle: string; - queryFile: string; - queryPath: string; - queryTextTmpFile: string; + queryFileName: string; + queryFilePath: string; + queryTextTmpFilePath: string; totalRepositoryCount: number; affectedRepositoryCount: number; totalResultCount: number; diff --git a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx index 5b93e8c8a65..64e233cc950 100644 --- a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx +++ b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx @@ -11,9 +11,9 @@ const numOfReposInContractedMode = 10; const emptyQueryResult: RemoteQueryResult = { queryTitle: '', - queryFile: '', - queryPath: '', - queryTextTmpFile: '', + queryFileName: '', + queryFilePath: '', + queryTextTmpFilePath: '', totalRepositoryCount: 0, affectedRepositoryCount: 0, totalResultCount: 0, @@ -74,11 +74,11 @@ export function RemoteQueries(): JSX.Element { try { const openQueryFile = () => { - openFile(queryResult.queryPath); + openFile(queryResult.queryFilePath); }; const openQueryTextTmpFile = () => { - openFile(queryResult.queryTextTmpFile); + openFile(queryResult.queryTextTmpFilePath); }; return
@@ -91,7 +91,7 @@ export function RemoteQueries(): JSX.Element {

{octicons.file} - {queryResult.queryFile} + {queryResult.queryFileName} {octicons.codeSquare} From 7e21be08eaffdb101afc16d9f64623a93c59778a Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Thu, 9 Dec 2021 16:12:51 +0000 Subject: [PATCH 3/5] Save query text in a temporary file --- .../src/remote-queries/run-remote-query.ts | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts index 298565db9cc..a6ff2d24e05 100644 --- a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts +++ b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts @@ -331,7 +331,7 @@ export async function runRemoteQuery( return; } - const remoteQuery = buildRemoteQueryEntity(repositories, queryFile, owner, repo, queryStartTime, workflowRunId); + const remoteQuery = await buildRemoteQueryEntity(repositories, queryFile, owner, repo, queryStartTime, workflowRunId); // don't return the path because it has been deleted return { query: remoteQuery }; @@ -451,14 +451,14 @@ async function ensureNameAndSuite(queryPackDir: string, packRelativePath: string await fs.writeFile(packPath, yaml.safeDump(qlpack)); } -function buildRemoteQueryEntity( +async function buildRemoteQueryEntity( repositories: string[], queryFilePath: string, controllerRepoOwner: string, controllerRepoName: string, queryStartTime: Date, workflowRunId: number -): RemoteQuery { +): Promise { // For now, just use the file name as the query name. const queryName = path.basename(queryFilePath); @@ -467,8 +467,21 @@ function buildRemoteQueryEntity( return { owner: owner, name: repo }; }); - // TODO: Get query text from query file and save it in a temporary .ql file. - const queryTextTmpFilePath = ''; + // Get the query text from query file and save it in a temporary .ql file. + const queryTextTmpFilePath = path.join(tmpDir.name, `tmp-${queryName}`); + const queryText = await fs.readFile(queryFilePath, 'utf8'); + await fs.writeFile( + queryTextTmpFilePath, `\ +//////////////////////////////////////////////////////////////////////////////////// +// This is the text of the entire query file when it was executed for this query // +// run. The text or dependent libraries may have changed since then. // +// // +// To make changes to the query and the dependent libraries, save this file in a // +// suitable, permanent location. // +//////////////////////////////////////////////////////////////////////////////////// + +${queryText}` + ); return { queryName, From 4d97015d141e4d8f672098c74fd99c961a5667ed Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Fri, 10 Dec 2021 21:57:53 +0000 Subject: [PATCH 4/5] Display query text in "virtual" (readonly) file --- extensions/ql-vscode/src/extension.ts | 24 ++++++++++++++++++- .../ql-vscode/src/pure/interface-types.ts | 8 ++++++- extensions/ql-vscode/src/query-history.ts | 2 +- .../remote-queries-interface.ts | 23 +++++++++++++++++- .../src/remote-queries/remote-query.ts | 2 +- .../src/remote-queries/run-remote-query.ts | 16 +------------ .../shared/remote-query-result.ts | 2 +- .../src/remote-queries/view/RemoteQueries.tsx | 19 +++++++-------- 8 files changed, 65 insertions(+), 31 deletions(-) diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index ba13a44fb32..85bc7771cfd 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -12,7 +12,9 @@ import { env, window, QuickPickItem, - Range + Range, + workspace, + ProviderResult } from 'vscode'; import { LanguageClient } from 'vscode-languageclient'; import * as os from 'os'; @@ -78,6 +80,7 @@ import { CodeQlStatusBarHandler } from './status-bar'; import { Credentials } from './authentication'; import { RemoteQueriesManager } from './remote-queries/remote-queries-manager'; import { RemoteQuery } from './remote-queries/remote-query'; +import { URLSearchParams } from 'url'; /** * extension.ts @@ -773,6 +776,8 @@ async function activateWithInstalledDistribution( void logger.log('Initializing remote queries interface.'); const rqm = new RemoteQueriesManager(ctx, logger, cliServer); + registerTextProvider(); + // The "runRemoteQuery" command is internal-only. ctx.subscriptions.push( commandRunnerWithProgress('codeQL.runRemoteQuery', async ( @@ -980,3 +985,20 @@ async function initializeLogging(ctx: ExtensionContext): Promise { } const checkForUpdatesCommand = 'codeQL.checkForUpdatesToCLI'; + +/** + * This text provider lets us open readonly files in the editor. + * + * TODO: Consolidate this with the 'codeql' text provider in query-history.ts. + */ +function registerTextProvider() { + workspace.registerTextDocumentContentProvider('remote-query', { + provideTextDocumentContent( + uri: Uri + ): ProviderResult { + const params = new URLSearchParams(uri.query); + + return params.get('queryText'); + }, + }); +} diff --git a/extensions/ql-vscode/src/pure/interface-types.ts b/extensions/ql-vscode/src/pure/interface-types.ts index 6a3e4efd51b..8f2f4b3aa52 100644 --- a/extensions/ql-vscode/src/pure/interface-types.ts +++ b/extensions/ql-vscode/src/pure/interface-types.ts @@ -181,6 +181,11 @@ export interface OpenFileMsg { filePath: string; } +export interface OpenVirtualFileMsg { + t: 'openVirtualFile'; + queryText: string; +} + /** * Message from the results view to toggle the display of * query diagnostics. @@ -369,7 +374,8 @@ export interface ParsedResultSets { export type FromRemoteQueriesMessage = | RemoteQueryLoadedMessage | RemoteQueryErrorMessage - | OpenFileMsg; + | OpenFileMsg + | OpenVirtualFileMsg; export type ToRemoteQueriesMessage = | SetRemoteQueryResultMessage; diff --git a/extensions/ql-vscode/src/query-history.ts b/extensions/ql-vscode/src/query-history.ts index 32323ce7bab..cd097ffa840 100644 --- a/extensions/ql-vscode/src/query-history.ts +++ b/extensions/ql-vscode/src/query-history.ts @@ -32,7 +32,7 @@ export type QueryHistoryItemOptions = { isQuickQuery?: boolean; }; -const SHOW_QUERY_TEXT_MSG = `\ +export const SHOW_QUERY_TEXT_MSG = `\ //////////////////////////////////////////////////////////////////////////////////// // This is the text of the entire query file when it was executed for this query // // run. The text or dependent libraries may have changed since then. // diff --git a/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts b/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts index 93b22296cbf..142d0d8ebeb 100644 --- a/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts +++ b/extensions/ql-vscode/src/remote-queries/remote-queries-interface.ts @@ -21,6 +21,8 @@ import { RemoteQuery } from './remote-query'; import { RemoteQueryResult as RemoteQueryResultViewModel } from './shared/remote-query-result'; import { AnalysisResult as AnalysisResultViewModel } from './shared/remote-query-result'; import { showAndLogWarningMessage } from '../helpers'; +import { URLSearchParams } from 'url'; +import { SHOW_QUERY_TEXT_MSG } from '../query-history'; export class RemoteQueriesInterfaceManager { private panel: WebviewPanel | undefined; @@ -65,7 +67,7 @@ export class RemoteQueriesInterfaceManager { queryTitle: query.queryName, queryFileName: queryFileName, queryFilePath: query.queryFilePath, - queryTextTmpFilePath: query.queryTextTmpFilePath, + queryText: query.queryText, totalRepositoryCount: query.repositories.length, affectedRepositoryCount: affectedRepositories.length, totalResultCount: totalResultCount, @@ -142,6 +144,22 @@ export class RemoteQueriesInterfaceManager { } } + private async openVirtualFile(text: string) { + try { + const params = new URLSearchParams({ + queryText: encodeURIComponent(SHOW_QUERY_TEXT_MSG + text) + }); + const uri = Uri.parse( + `remote-query:query-text.ql?${params.toString()}`, + true + ); + const doc = await workspace.openTextDocument(uri); + await Window.showTextDocument(doc, { preview: false }); + } catch (error) { + void showAndLogWarningMessage('Could not open query text'); + } + } + private async handleMsgFromView( msg: FromRemoteQueriesMessage ): Promise { @@ -159,6 +177,9 @@ export class RemoteQueriesInterfaceManager { case 'openFile': await this.openFile(msg.filePath); break; + case 'openVirtualFile': + await this.openVirtualFile(msg.queryText); + break; default: assertNever(msg); } diff --git a/extensions/ql-vscode/src/remote-queries/remote-query.ts b/extensions/ql-vscode/src/remote-queries/remote-query.ts index 8e1e1e15686..d97efd66def 100644 --- a/extensions/ql-vscode/src/remote-queries/remote-query.ts +++ b/extensions/ql-vscode/src/remote-queries/remote-query.ts @@ -3,7 +3,7 @@ import { Repository } from './repository'; export interface RemoteQuery { queryName: string; queryFilePath: string; - queryTextTmpFilePath: string; + queryText: string; controllerRepository: Repository; repositories: Repository[]; executionStartTime: Date; diff --git a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts index a6ff2d24e05..41e8ee62947 100644 --- a/extensions/ql-vscode/src/remote-queries/run-remote-query.ts +++ b/extensions/ql-vscode/src/remote-queries/run-remote-query.ts @@ -467,26 +467,12 @@ async function buildRemoteQueryEntity( return { owner: owner, name: repo }; }); - // Get the query text from query file and save it in a temporary .ql file. - const queryTextTmpFilePath = path.join(tmpDir.name, `tmp-${queryName}`); const queryText = await fs.readFile(queryFilePath, 'utf8'); - await fs.writeFile( - queryTextTmpFilePath, `\ -//////////////////////////////////////////////////////////////////////////////////// -// This is the text of the entire query file when it was executed for this query // -// run. The text or dependent libraries may have changed since then. // -// // -// To make changes to the query and the dependent libraries, save this file in a // -// suitable, permanent location. // -//////////////////////////////////////////////////////////////////////////////////// - -${queryText}` - ); return { queryName, queryFilePath, - queryTextTmpFilePath, + queryText, controllerRepository: { owner: controllerRepoOwner, name: controllerRepoName, diff --git a/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts b/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts index 2043ce7dd1a..5a86e56a945 100644 --- a/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts +++ b/extensions/ql-vscode/src/remote-queries/shared/remote-query-result.ts @@ -2,7 +2,7 @@ export interface RemoteQueryResult { queryTitle: string; queryFileName: string; queryFilePath: string; - queryTextTmpFilePath: string; + queryText: string; totalRepositoryCount: number; affectedRepositoryCount: number; totalResultCount: number; diff --git a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx index 64e233cc950..b26b5596343 100644 --- a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx +++ b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx @@ -13,7 +13,7 @@ const emptyQueryResult: RemoteQueryResult = { queryTitle: '', queryFileName: '', queryFilePath: '', - queryTextTmpFilePath: '', + queryText: '', totalRepositoryCount: 0, affectedRepositoryCount: 0, totalResultCount: 0, @@ -40,13 +40,6 @@ const AnalysisResultItem = (props: AnalysisResult) => ( ); -function openFile(filePath: string): void { - vscode.postMessage({ - t: 'openFile', - filePath - }); -} - export function RemoteQueries(): JSX.Element { const [queryResult, setQueryResult] = useState(emptyQueryResult); @@ -74,11 +67,17 @@ export function RemoteQueries(): JSX.Element { try { const openQueryFile = () => { - openFile(queryResult.queryFilePath); + vscode.postMessage({ + t: 'openFile', + filePath: queryResult.queryFilePath + }); }; const openQueryTextTmpFile = () => { - openFile(queryResult.queryTextTmpFilePath); + vscode.postMessage({ + t: 'openVirtualFile', + queryText: queryResult.queryText + }); }; return

From dd7a59c41e5c8dbd9b24c788cc030620e5c921a7 Mon Sep 17 00:00:00 2001 From: shati-patel <42641846+shati-patel@users.noreply.github.com> Date: Tue, 14 Dec 2021 08:12:33 +0000 Subject: [PATCH 5/5] Style link text + tidy up functions --- extensions/ql-vscode/src/extension.ts | 4 +-- .../src/remote-queries/view/RemoteQueries.tsx | 28 +++++++++---------- .../src/remote-queries/view/remoteQueries.css | 5 ++++ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 85bc7771cfd..624465a4e6c 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -776,7 +776,7 @@ async function activateWithInstalledDistribution( void logger.log('Initializing remote queries interface.'); const rqm = new RemoteQueriesManager(ctx, logger, cliServer); - registerTextProvider(); + registerRemoteQueryTextProvider(); // The "runRemoteQuery" command is internal-only. ctx.subscriptions.push( @@ -991,7 +991,7 @@ const checkForUpdatesCommand = 'codeQL.checkForUpdatesToCLI'; * * TODO: Consolidate this with the 'codeql' text provider in query-history.ts. */ -function registerTextProvider() { +function registerRemoteQueryTextProvider() { workspace.registerTextDocumentContentProvider('remote-query', { provideTextDocumentContent( uri: Uri diff --git a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx index b26b5596343..9305d85a6e6 100644 --- a/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx +++ b/extensions/ql-vscode/src/remote-queries/view/RemoteQueries.tsx @@ -65,21 +65,21 @@ export function RemoteQueries(): JSX.Element { const [repoListExpanded, setRepoListExpanded] = useState(false); const numOfReposToShow = repoListExpanded ? queryResult.results.length : numOfReposInContractedMode; - try { - const openQueryFile = () => { - vscode.postMessage({ - t: 'openFile', - filePath: queryResult.queryFilePath - }); - }; + const openQueryFile = () => { + vscode.postMessage({ + t: 'openFile', + filePath: queryResult.queryFilePath + }); + }; - const openQueryTextTmpFile = () => { - vscode.postMessage({ - t: 'openVirtualFile', - queryText: queryResult.queryText - }); - }; + const openQueryTextVirtualFile = () => { + vscode.postMessage({ + t: 'openVirtualFile', + queryText: queryResult.queryText + }); + }; + try { return

{queryResult.queryTitle}

@@ -94,7 +94,7 @@ export function RemoteQueries(): JSX.Element { {octicons.codeSquare} - + query diff --git a/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css b/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css index cfeedb621ba..a6afc8ca2bd 100644 --- a/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css +++ b/extensions/ql-vscode/src/remote-queries/view/remoteQueries.css @@ -42,6 +42,11 @@ .vscode-codeql__query-file-link { text-decoration: none; padding-left: 0.3em; + color: var(--vscode-editor-foreground); +} + +.vscode-codeql__query-file-link:hover { + color: var(--vscode-editor-foreground); } .vscode-codeql__query-summary-container {