Skip to content

Commit ab6db71

Browse files
committed
Move workspace folder functions to separate file
1 parent fe29a1a commit ab6db71

2 files changed

Lines changed: 61 additions & 56 deletions

File tree

extensions/ql-vscode/src/data-extensions-editor/extension-pack-picker.ts

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@ import { join, relative, resolve, sep } from "path";
22
import { outputFile, pathExists, readFile } from "fs-extra";
33
import { dump as dumpYaml, load as loadYaml } from "js-yaml";
44
import { minimatch } from "minimatch";
5-
import { CancellationToken, window, WorkspaceFolder } from "vscode";
5+
import { CancellationToken, window } from "vscode";
66
import { CodeQLCliServer, QlpacksInfo } from "../codeql-cli/cli";
7-
import {
8-
getOnDiskWorkspaceFolders,
9-
getOnDiskWorkspaceFoldersObjects,
10-
} from "../common/vscode/workspace-folders";
7+
import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders";
118
import { ProgressCallback } from "../common/vscode/progress";
129
import { DatabaseItem } from "../databases/local-databases";
1310
import { getQlPackPath, QLPACK_FILENAMES } from "../pure/ql";
@@ -23,6 +20,10 @@ import {
2320
parsePackName,
2421
validatePackName,
2522
} from "./extension-pack-name";
23+
import {
24+
askForWorkspaceFolder,
25+
autoPickWorkspaceFolder,
26+
} from "./extensions-workspace-folder";
2627

2728
const maxStep = 3;
2829

@@ -395,57 +396,6 @@ async function autoCreateExtensionPack(
395396
return writeExtensionPack(packPath, packName, language);
396397
}
397398

398-
async function autoPickWorkspaceFolder(
399-
language: string,
400-
): Promise<WorkspaceFolder | undefined> {
401-
const workspaceFolders = getOnDiskWorkspaceFoldersObjects();
402-
403-
// If there's only 1 workspace folder, use that
404-
if (workspaceFolders.length === 1) {
405-
return workspaceFolders[0];
406-
}
407-
408-
// In the vscode-codeql-starter repository, all workspace folders are named "codeql-custom-queries-<language>",
409-
// so we can use that to find the workspace folder for the language
410-
const starterWorkspaceFolderForLanguage = workspaceFolders.find(
411-
(folder) => folder.name === `codeql-custom-queries-${language}`,
412-
);
413-
if (starterWorkspaceFolderForLanguage) {
414-
return starterWorkspaceFolderForLanguage;
415-
}
416-
417-
// Otherwise, try to find one that ends with "-<language>"
418-
const workspaceFolderForLanguage = workspaceFolders.find((folder) =>
419-
folder.name.endsWith(`-${language}`),
420-
);
421-
if (workspaceFolderForLanguage) {
422-
return workspaceFolderForLanguage;
423-
}
424-
425-
// If we can't find one, just ask the user
426-
return askForWorkspaceFolder();
427-
}
428-
429-
async function askForWorkspaceFolder(): Promise<WorkspaceFolder | undefined> {
430-
const workspaceFolders = getOnDiskWorkspaceFoldersObjects();
431-
const workspaceFolderOptions = workspaceFolders.map((folder) => ({
432-
label: folder.name,
433-
detail: folder.uri.fsPath,
434-
folder,
435-
}));
436-
437-
// We're not using window.showWorkspaceFolderPick because that also includes the database source folders while
438-
// we only want to include on-disk workspace folders.
439-
const workspaceFolder = await window.showQuickPick(workspaceFolderOptions, {
440-
title: "Select workspace folder to create extension pack in",
441-
});
442-
if (!workspaceFolder) {
443-
return undefined;
444-
}
445-
446-
return workspaceFolder.folder;
447-
}
448-
449399
async function writeExtensionPack(
450400
packPath: string,
451401
packName: ExtensionPackName,
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { window, WorkspaceFolder } from "vscode";
2+
import { getOnDiskWorkspaceFoldersObjects } from "../common/vscode/workspace-folders";
3+
4+
export async function autoPickWorkspaceFolder(
5+
language: string,
6+
): Promise<WorkspaceFolder | undefined> {
7+
const workspaceFolders = getOnDiskWorkspaceFoldersObjects();
8+
9+
// If there's only 1 workspace folder, use that
10+
if (workspaceFolders.length === 1) {
11+
return workspaceFolders[0];
12+
}
13+
14+
// In the vscode-codeql-starter repository, all workspace folders are named "codeql-custom-queries-<language>",
15+
// so we can use that to find the workspace folder for the language
16+
const starterWorkspaceFolderForLanguage = workspaceFolders.find(
17+
(folder) => folder.name === `codeql-custom-queries-${language}`,
18+
);
19+
if (starterWorkspaceFolderForLanguage) {
20+
return starterWorkspaceFolderForLanguage;
21+
}
22+
23+
// Otherwise, try to find one that ends with "-<language>"
24+
const workspaceFolderForLanguage = workspaceFolders.find((folder) =>
25+
folder.name.endsWith(`-${language}`),
26+
);
27+
if (workspaceFolderForLanguage) {
28+
return workspaceFolderForLanguage;
29+
}
30+
31+
// If we can't find one, just ask the user
32+
return askForWorkspaceFolder();
33+
}
34+
35+
export async function askForWorkspaceFolder(): Promise<
36+
WorkspaceFolder | undefined
37+
> {
38+
const workspaceFolders = getOnDiskWorkspaceFoldersObjects();
39+
const workspaceFolderOptions = workspaceFolders.map((folder) => ({
40+
label: folder.name,
41+
detail: folder.uri.fsPath,
42+
folder,
43+
}));
44+
45+
// We're not using window.showWorkspaceFolderPick because that also includes the database source folders while
46+
// we only want to include on-disk workspace folders.
47+
const workspaceFolder = await window.showQuickPick(workspaceFolderOptions, {
48+
title: "Select workspace folder to create extension pack in",
49+
});
50+
if (!workspaceFolder) {
51+
return undefined;
52+
}
53+
54+
return workspaceFolder.folder;
55+
}

0 commit comments

Comments
 (0)