Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
dennykorsukewitz committed Feb 6, 2024
1 parent 87bd810 commit bdf1b07
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 47 deletions.
12 changes: 7 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
"add",
"folder",
"workflow",
"workspace"
"workspace",
"helper"
],
"categories": [
"Other"
Expand All @@ -48,23 +49,24 @@
"test": "node ./dist/test/runTest.js",
"open-in-browser": "npm run compile-web && npx @vscode/test-web --extensionDevelopmentPath=."
},
"dependencies": {
"glob": "^8.1.0",
"path": "^0.12.7"
},
"devDependencies": {
"@types/glob": "^8.1.0",
"@types/mocha": "^10.0.1",
"@types/node": "^18.19.14",
"@types/vscode": "^1.85.0",
"@typescript-eslint/eslint-plugin": "^6.15.0",
"@typescript-eslint/parser": "^6.20.0",
"@vscode/test-electron": "^2.3.9",
"esbuild": "^0.20.0",
"eslint": "^8.56.0",
"mocha": "^10.2.0",
"typescript": "^5.3.3",
"vscode-test": "^1.6.1"
},
"overrides": {
"minimatch": "5.1.2",
"glob": "8.1.0"
},
"contributes": {
"commands": [
{
Expand Down
91 changes: 49 additions & 42 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export function activate(context: vscode.ExtensionContext) {
initAddFolderToWorkspace(context);

// This function removes the selected folder from workspace (VSC Workspace).
// initRemoveFolderFromWorkspace(context);
initRemoveFolderFromWorkspace(context);
}

function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
Expand All @@ -37,12 +37,9 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
return;
}

// Get all stored workspaces / directories.
// Get all stored directories and recursive directories.
workspaceDirectories = await getWorkspaceDirectories();

console.log('workspaceDirectories getWorkspaceDirectories');
console.log(workspaceDirectories);

// Check if directories are defined.
if (!workspaceDirectories.length) {
vscode.commands.executeCommand('workbench.action.openSettings', 'addFolderToWorkspace');
Expand Down Expand Up @@ -88,7 +85,7 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
if (!URI) {return;}

if (vscode.workspace.workspaceFolders) {
vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {
Array.from(vscode.workspace.workspaceFolders).sort().forEach(function (workspaceFolder: vscode.WorkspaceFolder) {

if (URI.path === workspaceFolder.uri.path) {
URIexists = 1;
Expand Down Expand Up @@ -128,62 +125,69 @@ function initAddFolderToWorkspace(context: vscode.ExtensionContext) {
}));
}

// function initRemoveFolderFromWorkspace(context: vscode.ExtensionContext) {
function initRemoveFolderFromWorkspace(context: vscode.ExtensionContext) {

const removeFolderFromWorkspaceId = 'removeFolderFromWorkspace';
context.subscriptions.push(vscode.commands.registerCommand(removeFolderFromWorkspaceId, async () => {

// const removeFolderFromWorkspaceId = 'removeFolderFromWorkspace';
// context.subscriptions.push(vscode.commands.registerCommand(removeFolderFromWorkspaceId, async () => {
// Check all current workspace folders.
let workspaceFolders: string[] = [];

// // Check all current workspace folders.
// let workspaceFolders = [];
// vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {
// workspaceFolders.push(workspaceFolder.name);
// });
let existingWorkspaceFolders = vscode.workspace.workspaceFolders;
if (!existingWorkspaceFolders) { return; }

Array.from(existingWorkspaceFolders).sort().forEach(function (workspaceFolder: vscode.WorkspaceFolder) {
workspaceFolders.push(workspaceFolder.name);
});

// if (!workspaceFolders.length) {return;}
if (!workspaceFolders.length) {return;}

// Create showQuickPick 'RemoveFolderFromWorkspace' selection.
let workspaces = await vscode.window.showQuickPick(workspaceFolders, {
title: 'RemoveFolderFromWorkspace',
placeHolder: 'RemoveFolderFromWorkspace: Select workspaces to be removed...',
canPickMany: true,
});

// // Create showQuickPick 'RemoveFolderFromWorkspace' selection.
// let workspaces = await vscode.window.showQuickPick(workspaceFolders, {
// title: 'RemoveFolderFromWorkspace',
// placeHolder: 'RemoveFolderFromWorkspace: Select workspaces to be removed...',
// canPickMany: true,
// });
if (!workspaces) {return;}

// if (!workspaces) {return;}
let removeIndexes: number[] = [];

// let removeIndexes = [];
// Sort and reverse selected 'remove' Folder from Workspace.
existingWorkspaceFolders = vscode.workspace.workspaceFolders;
if (!existingWorkspaceFolders) { return; }

// // Sort and reverse selected 'remove' Folder from Workspace.
// vscode.workspace.workspaceFolders.sort().forEach(function (workspaceFolder) {
// // workspaceFolders.push(workspaceFolder.name)
// let removeWorkspace = workspaces.includes(workspaceFolder.name);
Array.from(existingWorkspaceFolders).sort().forEach(function (workspaceFolder: vscode.WorkspaceFolder) {
// workspaceFolders.push(workspaceFolder.name)
let removeWorkspace = workspaces?.includes(workspaceFolder.name);

// if (removeWorkspace) {
// removeIndexes.push(workspaceFolder.index);
// }
// });
if (removeWorkspace) {
removeIndexes.push(workspaceFolder.index);
}
});

// // Remove selected Folder from Workspace.
// for await (const removeIndex of removeIndexes.reverse()) {
// await updateWorkspaceAndWait(removeIndex, 1, []);
// }
// }));
// }
// Remove selected Folder from Workspace.
for await (const removeIndex of removeIndexes.reverse()) {
await updateWorkspaceAndWait(removeIndex, 1, []);
}
}));
}

function updateWorkspaceAndWait(start: number, deleteCount: number, workspaceFoldersToAdd: any[]) {
const success = vscode.workspace.updateWorkspaceFolders(start, deleteCount, ...workspaceFoldersToAdd);

if (success) {
const disps: vscode.Disposable[] = [];
const disposable: vscode.Disposable[] = [];
return new Promise<void>(resolve => {

// Note: it is not valid to call updateWorkspaceFolders() multiple times
// without waiting for the onDidChangeWorkspaceFolders() to fire.
// So we have to always wait in case we want to add or remove multiple folders.
vscode.workspace.onDidChangeWorkspaceFolders(() => {
resolve();
}, null, disps);
}, null, disposable);

}).finally(() => disps.forEach(disp => disp.dispose()));
}).finally(() => disposable.forEach(disp => disp.dispose()));
} else {
return Promise.reject(new Error("Failed to update workspace"));
}
Expand All @@ -197,7 +201,7 @@ async function getWorkspaceDirectories() {
let workspaceDirectory: string[] = [];

// Get all first level directories from given directories.
config.recursiveWorkspaces.forEach(async (myWorkspace: string) => {
let workspaceDirectoriesPromises = config.recursiveWorkspaces.map(async (myWorkspace: string) => {
let workspaceDirectory: string[] = [];
const workspaceDir = await vscode.workspace.fs.readDirectory(vscode.Uri.file(myWorkspace));

Expand All @@ -206,9 +210,12 @@ async function getWorkspaceDirectories() {
workspaceDirectory.push(vscode.Uri.joinPath(vscode.Uri.file(myWorkspace), dir[0]).fsPath);
}
});
workspaceDirectories = workspaceDirectories.concat(workspaceDirectory);
return workspaceDirectory;
});

let recursiveWorkspaceDirectories = (await Promise.all(workspaceDirectoriesPromises)).flat();
workspaceDirectories = workspaceDirectories.concat(recursiveWorkspaceDirectories);

return workspaceDirectories;
}

Expand Down

0 comments on commit bdf1b07

Please sign in to comment.