Remote queries: Open query file/text from webview

This commit is contained in:
shati-patel
2021-12-08 11:00:18 +00:00
committed by Shati Patel
parent 33b1465ccc
commit 4257555c88
7 changed files with 52 additions and 3 deletions

View File

@@ -368,7 +368,8 @@ export interface ParsedResultSets {
export type FromRemoteQueriesMessage =
| RemoteQueryLoadedMessage
| RemoteQueryErrorMessage;
| RemoteQueryErrorMessage
| OpenFileMsg;
export type ToRemoteQueriesMessage =
| SetRemoteQueryResultMessage;

View File

@@ -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<void> {
@@ -143,6 +151,9 @@ export class RemoteQueriesInterfaceManager {
`Remote query error: ${msg.error}`
);
break;
case 'openFile':
await this.openFile(msg.filePath);
break;
default:
assertNever(msg);
}

View File

@@ -3,6 +3,7 @@ import { Repository } from './repository';
export interface RemoteQuery {
queryName: string;
queryFilePath: string;
queryTextTmpFile: string;
controllerRepository: Repository;
repositories: Repository[];
executionStartTime: Date;

View File

@@ -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,

View File

@@ -1,6 +1,8 @@
export interface RemoteQueryResult {
queryTitle: string;
queryFile: string;
queryPath: string;
queryTextTmpFile: string;
totalRepositoryCount: number;
affectedRepositoryCount: number;
totalResultCount: number;

View File

@@ -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) => (
</span>
);
function openFile(filePath: string): void {
vscode.postMessage({
t: 'openFile',
filePath
});
}
export function RemoteQueries(): JSX.Element {
const [queryResult, setQueryResult] = useState<RemoteQueryResult>(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 <div className="vscode-codeql__remote-queries-view">
<h1 className="vscode-codeql__query-title">{queryResult.queryTitle}</h1>
@@ -72,8 +89,16 @@ export function RemoteQueries(): JSX.Element {
({queryResult.executionDuration}), {queryResult.executionTimestamp}
</p>
<p className="vscode-codeql__paragraph">
<span className="vscode-codeql__query-file">{octicons.file} <span>{queryResult.queryFile}</span></span>
<span>{octicons.codeSquare} <span>query</span></span>
<span className="vscode-codeql__query-file">{octicons.file}
<a className="vscode-codeql__query-file-link" href="#" onClick={openQueryFile}>
{queryResult.queryFile}
</a>
</span>
<span>{octicons.codeSquare}
<a className="vscode-codeql__query-file-link" href="#" onClick={openQueryTextTmpFile}>
query
</a>
</span>
</p>
<div className="vscode-codeql__query-summary-container">

View File

@@ -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;
}