Skip to content

Commit d54ee0c

Browse files
authored
Merge pull request #2508 from github/koesie10/split-helpers-4
Split helpers.ts [Part 4]
2 parents fa7d85e + ccf38a9 commit d54ee0c

File tree

25 files changed

+169
-175
lines changed

25 files changed

+169
-175
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import { CodeQLCliServer } from "./cli";
2+
import { Uri, window } from "vscode";
3+
import { isQueryLanguage, QueryLanguage } from "../common/query-language";
4+
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
5+
import { extLogger } from "../common";
6+
import { UserCancellationException } from "../common/vscode/progress";
7+
import { showAndLogErrorMessage } from "../common/vscode/log";
8+
9+
/**
10+
* Finds the language that a query targets.
11+
* If it can't be autodetected, prompt the user to specify the language manually.
12+
*/
13+
export async function findLanguage(
14+
cliServer: CodeQLCliServer,
15+
queryUri: Uri | undefined,
16+
): Promise<QueryLanguage | undefined> {
17+
const uri = queryUri || window.activeTextEditor?.document.uri;
18+
if (uri !== undefined) {
19+
try {
20+
const queryInfo = await cliServer.resolveQueryByLanguage(
21+
getOnDiskWorkspaceFolders(),
22+
uri,
23+
);
24+
const language = Object.keys(queryInfo.byLanguage)[0];
25+
void extLogger.log(`Detected query language: ${language}`);
26+
27+
if (isQueryLanguage(language)) {
28+
return language;
29+
}
30+
31+
void extLogger.log(
32+
"Query language is unsupported. Select language manually.",
33+
);
34+
} catch (e) {
35+
void extLogger.log(
36+
"Could not autodetect query language. Select language manually.",
37+
);
38+
}
39+
}
40+
41+
// will be undefined if user cancels the quick pick.
42+
return await askForLanguage(cliServer, false);
43+
}
44+
45+
export async function askForLanguage(
46+
cliServer: CodeQLCliServer,
47+
throwOnEmpty = true,
48+
): Promise<QueryLanguage | undefined> {
49+
const language = await window.showQuickPick(
50+
await cliServer.getSupportedLanguages(),
51+
{
52+
placeHolder: "Select target language for your query",
53+
ignoreFocusOut: true,
54+
},
55+
);
56+
if (!language) {
57+
// This only happens if the user cancels the quick pick.
58+
if (throwOnEmpty) {
59+
throw new UserCancellationException("Cancelled.");
60+
} else {
61+
void showAndLogErrorMessage(
62+
"Language not found. Language must be specified manually.",
63+
);
64+
}
65+
return undefined;
66+
}
67+
68+
if (!isQueryLanguage(language)) {
69+
void showAndLogErrorMessage(
70+
`Language '${language}' is not supported. Only languages ${Object.values(
71+
QueryLanguage,
72+
).join(", ")} are supported.`,
73+
);
74+
return undefined;
75+
}
76+
77+
return language;
78+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { CodeQLCliServer } from "./cli";
2+
import { QueryMetadata } from "../pure/interface-types";
3+
import { extLogger } from "../common";
4+
5+
/**
6+
* Gets metadata for a query, if it exists.
7+
* @param cliServer The CLI server.
8+
* @param queryPath The path to the query.
9+
* @returns A promise that resolves to the query metadata, if available.
10+
*/
11+
export async function tryGetQueryMetadata(
12+
cliServer: CodeQLCliServer,
13+
queryPath: string,
14+
): Promise<QueryMetadata | undefined> {
15+
try {
16+
return await cliServer.resolveMetadata(queryPath);
17+
} catch (e) {
18+
// Ignore errors and provide no metadata.
19+
void extLogger.log(`Couldn't resolve metadata for ${queryPath}: ${e}`);
20+
return;
21+
}
22+
}

extensions/ql-vscode/src/common/vscode/abstract-webview.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
import { join } from "path";
1111

1212
import { DisposableObject, DisposeHandler } from "../../pure/disposable-object";
13-
import { tmpDir } from "../../helpers";
13+
import { tmpDir } from "../../tmp-dir";
1414
import { getHtmlForWebview, WebviewMessage, WebviewView } from "./webview-html";
1515

1616
export type WebviewPanelConfig = {

extensions/ql-vscode/src/databases/database-fetcher.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import * as Octokit from "@octokit/rest";
1717
import { retry } from "@octokit/plugin-retry";
1818

1919
import { DatabaseManager, DatabaseItem } from "./local-databases";
20-
import { tmpDir } from "../helpers";
20+
import { tmpDir } from "../tmp-dir";
2121
import {
2222
reportStreamProgress,
2323
ProgressCallback,

extensions/ql-vscode/src/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ import {
5555
GithubApiError,
5656
GithubRateLimitedError,
5757
} from "./codeql-cli/distribution";
58-
import { tmpDir, tmpDirDisposal } from "./helpers";
58+
import { tmpDir, tmpDirDisposal } from "./tmp-dir";
5959
import { prepareCodeTour } from "./code-tour";
6060
import {
6161
showBinaryChoiceDialog,

extensions/ql-vscode/src/helpers.ts

Lines changed: 0 additions & 135 deletions
This file was deleted.

extensions/ql-vscode/src/local-queries/local-queries.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import { extLogger, TeeLogger } from "../common";
1616
import { isCanary, MAX_QUERIES } from "../config";
1717
import { gatherQlFiles } from "../pure/files";
1818
import { basename } from "path";
19-
import { createTimestampFile, findLanguage } from "../helpers";
2019
import { showBinaryChoiceDialog } from "../common/vscode/dialog";
2120
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
2221
import { displayQuickQuery } from "./quick-query";
@@ -27,6 +26,7 @@ import { ResultsView } from "./results-view";
2726
import { DatabaseItem, DatabaseManager } from "../databases/local-databases";
2827
import {
2928
createInitialQueryInfo,
29+
createTimestampFile,
3030
getQuickEvalContext,
3131
promptUserToSaveChanges,
3232
QueryOutputDir,
@@ -47,6 +47,7 @@ import {
4747
showAndLogErrorMessage,
4848
showAndLogWarningMessage,
4949
} from "../common/vscode/log";
50+
import { findLanguage } from "../codeql-cli/query-language";
5051

5152
interface DatabaseQuickPickItem extends QuickPickItem {
5253
databaseItem: DatabaseItem;

extensions/ql-vscode/src/local-queries/local-query-run.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { BaseLogger, Logger } from "../common";
2-
import { tryGetQueryMetadata } from "../helpers";
32
import { CoreQueryResults } from "../query-server";
43
import { QueryHistoryManager } from "../query-history/query-history-manager";
54
import { DatabaseItem } from "../databases/local-databases";
@@ -21,6 +20,7 @@ import {
2120
showAndLogExceptionWithTelemetry,
2221
showAndLogWarningMessage,
2322
} from "../common/vscode/log";
23+
import { tryGetQueryMetadata } from "../codeql-cli/query-metadata";
2424

2525
function formatResultMessage(result: CoreQueryResults): string {
2626
switch (result.resultType) {

extensions/ql-vscode/src/query-server/legacy/run-queries.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as tmp from "tmp-promise";
2-
import { basename } from "path";
2+
import { basename, join } from "path";
33
import { CancellationToken, Uri } from "vscode";
44
import { LSPErrorCodes, ResponseError } from "vscode-languageclient";
55

@@ -9,7 +9,7 @@ import {
99
DatabaseItem,
1010
DatabaseResolver,
1111
} from "../../databases/local-databases";
12-
import { upgradesTmpDir } from "../../helpers";
12+
import { tmpDir } from "../../tmp-dir";
1313
import { ProgressCallback } from "../../common/vscode/progress";
1414
import { QueryMetadata } from "../../pure/interface-types";
1515
import { extLogger, Logger } from "../../common";
@@ -26,6 +26,10 @@ import {
2626
showAndLogExceptionWithTelemetry,
2727
showAndLogWarningMessage,
2828
} from "../../common/vscode/log";
29+
import { ensureDirSync } from "fs-extra";
30+
31+
const upgradesTmpDir = join(tmpDir.name, "upgrades");
32+
ensureDirSync(upgradesTmpDir);
2933

3034
export async function compileQuery(
3135
qs: qsClient.QueryServerClient,

extensions/ql-vscode/src/query-server/legacy/upgrades.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as vscode from "vscode";
2-
import { tmpDir } from "../../helpers";
2+
import { tmpDir } from "../../tmp-dir";
33
import { getOnDiskWorkspaceFolders } from "../../common/vscode/workspace-folders";
44
import {
55
ProgressCallback,

0 commit comments

Comments
 (0)