Skip to content

Commit 47ba8d9

Browse files
authored
Merge pull request #222 from jcreedcmu/jcreed/pr/184
Create diagnostics messages using sarif.
2 parents d6b7889 + 5b2b34a commit 47ba8d9

File tree

17 files changed

+735
-660
lines changed

17 files changed

+735
-660
lines changed

extensions/ql-vscode/src/cli.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import * as util from 'util';
66
import { Logger, ProgressReporter } from "./logging";
77
import { Disposable } from "vscode";
88
import { DistributionProvider } from "./distribution";
9-
import { SortDirection } from "./interface-types";
9+
import { SortDirection, QueryMetadata } from "./interface-types";
1010
import { assertNever } from "./helpers-pure";
1111

1212
/**
@@ -55,16 +55,6 @@ export interface UpgradesInfo {
5555
*/
5656
export type QlpacksInfo = { [name: string]: string[] };
5757

58-
/**
59-
* The expected output of `codeql resolve metadata`.
60-
*/
61-
export interface QueryMetadata {
62-
name?: string,
63-
description?: string,
64-
id?: string,
65-
kind?: string
66-
}
67-
6858
// `codeql bqrs interpret` requires both of these to be present or
6959
// both absent.
7060
export interface SourceInfo {
@@ -159,7 +149,7 @@ export class CodeQLCliServer implements Disposable {
159149
if (!config) {
160150
throw new Error("Failed to find codeql distribution")
161151
}
162-
return spawnServer(config, "CodeQL CLI Server", ["execute", "cli-server"], [], this.logger, _data => {})
152+
return spawnServer(config, "CodeQL CLI Server", ["execute", "cli-server"], [], this.logger, _data => { })
163153
}
164154

165155
private async runCodeQlCliInternal(command: string[], commandArgs: string[], description: string): Promise<string> {

extensions/ql-vscode/src/databases-ui.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import * as path from 'path';
2-
import { DisposableObject } from "semmle-vscode-utils";
3-
import { commands, Event, EventEmitter, ExtensionContext, ProviderResult, TreeDataProvider, TreeItem, Uri, window } from "vscode";
2+
import { DisposableObject } from 'semmle-vscode-utils';
3+
import { commands, Event, EventEmitter, ExtensionContext, ProviderResult, TreeDataProvider, TreeItem, Uri, window } from 'vscode';
44
import * as cli from './cli';
5-
import { DatabaseItem, DatabaseManager, getUpgradesDirectories } from "./databases";
6-
import { logger } from "./logging";
7-
import { clearCacheInDatabase, upgradeDatabase, UserCancellationException } from "./queries";
5+
import { DatabaseItem, DatabaseManager, getUpgradesDirectories } from './databases';
6+
import { getOnDiskWorkspaceFolders } from './helpers';
7+
import { logger } from './logging';
8+
import { clearCacheInDatabase, UserCancellationException } from './run-queries';
89
import * as qsClient from './queryserver-client';
9-
import { getOnDiskWorkspaceFolders } from "./helpers";
10+
import { upgradeDatabase } from './upgrades';
1011

1112
type ThemableIconPath = { light: string, dark: string } | string;
1213

extensions/ql-vscode/src/extension.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import * as helpers from './helpers';
1212
import { spawnIdeServer } from './ide-server';
1313
import { InterfaceManager, WebviewReveal } from './interface';
1414
import { ideServerLogger, logger, queryServerLogger } from './logging';
15-
import { compileAndRunQueryAgainstDatabase, EvaluationInfo, tmpDirDisposal, UserCancellationException } from './queries';
15+
import { compileAndRunQueryAgainstDatabase, tmpDirDisposal, UserCancellationException } from './run-queries';
16+
import { CompletedQuery } from './query-results';
1617
import { QueryHistoryManager } from './query-history';
1718
import * as qsClient from './queryserver-client';
1819
import { CodeQLCliServer } from './cli';
@@ -254,14 +255,14 @@ async function activateWithInstalledDistribution(ctx: ExtensionContext, distribu
254255
const qhm = new QueryHistoryManager(
255256
ctx,
256257
queryHistoryConfigurationListener,
257-
async item => showResultsForInfo(item.info, WebviewReveal.Forced)
258+
async item => showResultsForCompletedQuery(item, WebviewReveal.Forced)
258259
);
259260
const intm = new InterfaceManager(ctx, dbm, cliServer, queryServerLogger);
260261
ctx.subscriptions.push(intm);
261262
archiveFilesystemProvider.activate(ctx);
262263

263-
async function showResultsForInfo(info: EvaluationInfo, forceReveal: WebviewReveal): Promise<void> {
264-
await intm.showResults(info, forceReveal, false);
264+
async function showResultsForCompletedQuery(query: CompletedQuery, forceReveal: WebviewReveal): Promise<void> {
265+
await intm.showResults(query, forceReveal, false);
265266
}
266267

267268
async function compileAndRunQuery(quickEval: boolean, selectedQuery: Uri | undefined) {
@@ -272,8 +273,8 @@ async function activateWithInstalledDistribution(ctx: ExtensionContext, distribu
272273
throw new Error('Can\'t run query without a selected database');
273274
}
274275
const info = await compileAndRunQueryAgainstDatabase(cliServer, qs, dbItem, quickEval, selectedQuery);
275-
await showResultsForInfo(info, WebviewReveal.NotForced);
276-
qhm.push(info);
276+
const item = qhm.addQuery(info);
277+
await showResultsForCompletedQuery(item, WebviewReveal.NotForced);
277278
}
278279
catch (e) {
279280
if (e instanceof UserCancellationException) {

extensions/ql-vscode/src/helpers.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as path from 'path';
22
import { CancellationToken, ExtensionContext, ProgressOptions, window as Window, workspace } from 'vscode';
33
import { logger } from './logging';
4-
import { EvaluationInfo } from './queries';
4+
import { QueryInfo } from './run-queries';
55

66
export interface ProgressUpdate {
77
/**
@@ -121,17 +121,17 @@ export function getOnDiskWorkspaceFolders() {
121121
* Gets a human-readable name for an evaluated query.
122122
* Uses metadata if it exists, and defaults to the query file name.
123123
*/
124-
export function getQueryName(info: EvaluationInfo) {
124+
export function getQueryName(query: QueryInfo) {
125125
// Queries run through quick evaluation are not usually the entire query file.
126126
// Label them differently and include the line numbers.
127-
if (info.query.quickEvalPosition !== undefined) {
128-
const { line, endLine, fileName } = info.query.quickEvalPosition;
127+
if (query.quickEvalPosition !== undefined) {
128+
const { line, endLine, fileName } = query.quickEvalPosition;
129129
const lineInfo = line === endLine ? `${line}` : `${line}-${endLine}`;
130130
return `Quick evaluation of ${path.basename(fileName)}:${lineInfo}`;
131-
} else if (info.query.metadata && info.query.metadata.name) {
132-
return info.query.metadata.name;
131+
} else if (query.metadata && query.metadata.name) {
132+
return query.metadata.name;
133133
} else {
134-
return path.basename(info.query.program.queryPath);
134+
return path.basename(query.program.queryPath);
135135
}
136136
}
137137

extensions/ql-vscode/src/interface-types.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ export interface DatabaseInfo {
1616
databaseUri: string;
1717
}
1818

19+
/** Arbitrary query metadata */
20+
export interface QueryMetadata {
21+
name?: string,
22+
description?: string,
23+
id?: string,
24+
kind?: string
25+
}
26+
1927
export interface PreviousExecution {
2028
queryName: string;
2129
time: string;
@@ -29,7 +37,7 @@ export interface Interpretation {
2937
sarif: sarif.Log;
3038
}
3139

32-
export interface ResultsInfo {
40+
export interface ResultsPaths {
3341
resultsPath: string;
3442
interpretedResultsPath: string;
3543
}
@@ -53,10 +61,11 @@ export interface ResultsUpdatingMsg {
5361
export interface SetStateMsg {
5462
t: 'setState';
5563
resultsPath: string;
64+
origResultsPaths: ResultsPaths;
5665
sortedResultsMap: SortedResultsMap;
5766
interpretation: undefined | Interpretation;
5867
database: DatabaseInfo;
59-
kind?: string;
68+
metadata?: QueryMetadata
6069
/**
6170
* Whether to keep displaying the old results while rendering the new results.
6271
*
@@ -86,7 +95,8 @@ interface ViewSourceFileMsg {
8695
interface ToggleDiagnostics {
8796
t: 'toggleDiagnostics';
8897
databaseUri: string;
89-
resultsPath: string;
98+
metadata?: QueryMetadata
99+
origResultsPaths: ResultsPaths;
90100
visible: boolean;
91101
kind?: string;
92102
};

0 commit comments

Comments
 (0)