Skip to content

Instantly share code, notes, and snippets.

@chokolademilch7
Last active March 25, 2021 09:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chokolademilch7/968e8b300720389230336ea375e59541 to your computer and use it in GitHub Desktop.
Save chokolademilch7/968e8b300720389230336ea375e59541 to your computer and use it in GitHub Desktop.
指定したディレクトリの直下にあるフォルダを全てvscodeのワークスペースに追加するcode-workspaceファイルを生成します

使い方

npx https://gist.github.com/chokolademilch7/968e8b300720389230336ea375e59541 対象ディレクトリ 出力後の名前 出力するディレクトリ

引数なしだと currentDirectoryが入ります

第一引数? 対象のディレクトリ

第二引数? 出力後の名前(勝手に.code-workspaceという拡張子がつきます) ex. hoge -> hoge.code-workspace

第三引数? 出力するディレクトリ

{
"name": "vscode-workspace",
"version": "1.0.0",
"bin": "./vscode-workspace.js",
"repository": {
"type": "git",
"url": "git+ssh://git@gist.github.com/968e8b300720389230336ea375e59541.git"
},
"keywords": [
"vscode"
],
"author": "chokolademilch7",
"license": "ISC",
"bugs": {
"url": "https://gist.github.com/968e8b300720389230336ea375e59541"
},
"homepage": "https://gist.github.com/968e8b300720389230336ea375e59541"
}
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
class VscodeProjectCreator {
constructor({inputPath = '.', outputName = 'generated', outputPath = '.', opts}) {
this.inputPath = inputPath;
this.outputName = `${outputName}.code-workspace`;
this.outputPath = outputPath;
this.opts = {opts};
this.__generatedInputPath = this.__generateRelativePath(this.inputPath);
this.__generatedOutputPath = this.__generateRelativePath(this.outputPath);
}
__generateRelativePath(dp) {
if (dp.includes('.')) {
return path.join(process.cwd(), dp);
}
return dp;
}
createWorkspace() {
const { outputName, __generatedInputPath, __generatedOutputPath } = this;
const pathData = fs.readdirSync(__generatedInputPath)
.filter(name => fs.statSync(path.join(__generatedInputPath, name)).isDirectory())
.map(name => {
return {
name,
path: path.join(__generatedInputPath, name)
}
})
const data = {};
data.folders = pathData;
const outputData = JSON.stringify(data, null , "\t");
fs.writeFileSync(path.join(__generatedOutputPath, outputName), outputData);
console.log(`ここに保存したよー ${__generatedOutputPath}`);
}
}
let target = {};
target.inputPath = process.argv[2];
target.outputName = process.argv[3]
target.outputPath = process.argv[4];
target.opts = [...process.argv];
const VscodeProject = new VscodeProjectCreator(target);
VscodeProject.createWorkspace();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment