Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions extensions/ql-vscode/src/extension.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { commands, Disposable, ExtensionContext, extensions, ProgressLocation, ProgressOptions, window as Window, Uri } from 'vscode';
import { ErrorCodes, LanguageClient, ResponseError } from 'vscode-languageclient';
import { LanguageClient } from 'vscode-languageclient';
import * as archiveFilesystemProvider from './archive-filesystem-provider';
import { DistributionConfigListener, QueryServerConfigListener, QueryHistoryConfigListener } from './config';
import { DatabaseManager } from './databases';
Expand Down Expand Up @@ -275,18 +275,14 @@ async function activateWithInstalledDistribution(ctx: ExtensionContext, distribu
const info = await compileAndRunQueryAgainstDatabase(cliServer, qs, dbItem, quickEval, selectedQuery);
const item = qhm.addQuery(info);
await showResultsForCompletedQuery(item, WebviewReveal.NotForced);
}
catch (e) {
} catch (e) {
if (e instanceof UserCancellationException) {
logger.log(e.message);
}
else if (e instanceof ResponseError && e.code == ErrorCodes.RequestCancelled) {
logger.log(e.message);
}
else if (e instanceof Error)
helpers.showAndLogWarningMessage(e.message);
} else if (e instanceof Error) {
helpers.showAndLogErrorMessage(e.message);
else
} else {
throw e;
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion extensions/ql-vscode/src/query-results.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export class CompletedQuery implements QueryWithResults {
return `timed out after ${this.result.evaluationTime / 1000} seconds`;
case messages.QueryResultType.OTHER_ERROR:
default:
return `failed`;
return this.result.message ? `failed: ${this.result.message}` : 'failed';
}
}

Expand Down
72 changes: 52 additions & 20 deletions extensions/ql-vscode/src/run-queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import * as path from 'path';
import * as tmp from 'tmp';
import { promisify } from 'util';
import * as vscode from 'vscode';
import { ErrorCodes, ResponseError } from 'vscode-languageclient';

import * as cli from './cli';
import { DatabaseItem, getUpgradesDirectories } from './databases';
import * as helpers from './helpers';
Expand Down Expand Up @@ -103,13 +105,19 @@ export class QueryInfo {
} finally {
qs.unRegisterCallback(callbackId);
}
return result || { evaluationTime: 0, message: "No result from server", queryId: -1, runId: callbackId, resultType: messages.QueryResultType.OTHER_ERROR };
return result || {
evaluationTime: 0,
message: "No result from server",
queryId: -1,
runId: callbackId,
resultType: messages.QueryResultType.OTHER_ERROR
};
}

async compile(
qs: qsClient.QueryServerClient,
): Promise<messages.CompilationMessage[]> {
let compiled: messages.CheckQueryResult;
let compiled: messages.CheckQueryResult | undefined;
try {
const params: messages.CompileQueryParams = {
compilationOptions: {
Expand Down Expand Up @@ -140,8 +148,7 @@ export class QueryInfo {
} finally {
qs.logger.log(" - - - COMPILATION DONE - - - ");
}

return (compiled.messages || []).filter(msg => msg.severity == 0);
return (compiled?.messages || []).filter(msg => msg.severity === messages.Severity.ERROR);
}

/**
Expand Down Expand Up @@ -411,10 +418,24 @@ export async function compileAndRunQueryAgainstDatabase(
const query = new QueryInfo(qlProgram, db, packConfig.dbscheme, quickEvalPosition, metadata);
await checkDbschemeCompatibility(cliServer, qs, query);

const errors = await query.compile(qs);
let errors;
try {
errors = await query.compile(qs);
} catch (e) {
if (e instanceof ResponseError && e.code == ErrorCodes.RequestCancelled) {
return createSyntheticResult(query, db, historyItemOptions, 'Query cancelled', messages.QueryResultType.CANCELLATION);
} else {
throw e;
}
}

if (errors.length == 0) {
const result = await query.run(qs);
if (result.resultType !== messages.QueryResultType.SUCCESS) {
const message = result.message || 'Failed to run query';
logger.log(message);
helpers.showAndLogErrorMessage(message);
}
return {
query,
result,
Expand Down Expand Up @@ -448,20 +469,31 @@ export async function compileAndRunQueryAgainstDatabase(
" and choose CodeQL Query Server from the dropdown.");
}

return {
query,
result: {
evaluationTime: 0,
resultType: messages.QueryResultType.OTHER_ERROR,
queryId: -1,
runId: -1,
message: "Query had compilation errors"
},
database: {
name: db.name,
databaseUri: db.databaseUri.toString(true)
},
options: historyItemOptions,
};
return createSyntheticResult(query, db, historyItemOptions, 'Query had compilation errors', messages.QueryResultType.OTHER_ERROR);
}
}

function createSyntheticResult(
query: QueryInfo,
db: DatabaseItem,
historyItemOptions: QueryHistoryItemOptions,
message: string,
resultType: number
) {

return {
query,
result: {
evaluationTime: 0,
resultType: resultType,
queryId: -1,
runId: -1,
message
},
database: {
name: db.name,
databaseUri: db.databaseUri.toString(true)
},
options: historyItemOptions,
};
}
2 changes: 1 addition & 1 deletion extensions/ql-vscode/src/vscode-tests/index-template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,4 @@ export function runTestsInDirectory(testsRoot: string): Promise<void> {
}
});
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ describe('launching with a minimal workspace', async () => {
assert(ext!.isActive);
}, 1000);
});
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { runTestsInDirectory } from '../index-template';
export function run(): Promise<void> {
return runTestsInDirectory(__dirname);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ describe('launching with no specified workspace', () => {
it('should not activate the extension at first', () => {
assert(ext!.isActive === false);
});
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { runTestsInDirectory } from '../index-template';
export function run(): Promise<void> {
return runTestsInDirectory(__dirname);
}
}