Skip to content

Commit

Permalink
Merge pull request #16 from saurabhdaware/add-editor-forproject
Browse files Browse the repository at this point in the history
v1.2.0-alpha.2
  • Loading branch information
saurabhdaware committed Sep 11, 2019
2 parents da11074 + e85f722 commit 39656bd
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 45 deletions.
1 change: 1 addition & 0 deletions bin/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ program
program
.command('seteditor [commandToOpen]')
.description("Set text editor to use")
.option('-f|--for-project [projectName]', 'set different editor for specific project')
.action(action.setEditor);

program
Expand Down
104 changes: 59 additions & 45 deletions lib/action.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,27 +67,26 @@ function writeSettings(data, command='<command>', successMessage = "Settings upd
async function selectProject(projectName, action){
let selectedProject;
if(!projectName){
const projects = [...settings.projects];
// Ask which project he wants to open
const questions = [
{
type: 'list',
message: `Select project to ${action}`,
message: `Select project to ${action} :`,
name: 'selectedProject',
choices: settings.projects.map(project => {
choices: projects.map(({...project}) => { // Spreading project to make it immutable
project.value = {name:project.name,path:project.path};
return project;
})
}
];

// Redirecting to stderr in order for it to be used with command substitution
var promptModule = inquirer.createPromptModule({ output: process.stderr });
({selectedProject} = await promptModule(questions));
}else{
// If project name is mentioned then open directly
selectedProject = settings.projects.find(project => project.name.toLowerCase() == projectName.toLowerCase());
}
console.log(selectedProject);
return selectedProject;
}

Expand All @@ -104,7 +103,7 @@ async function openProject(projectName){
const selectedProject = await selectProject(projectName, 'open');

if(!selectedProject){
console.error("Project does not exist. Add it using `pm add [projectPath]` or cd till the project folder and type `pm add`");
console.error(`Project does not exist. Add it using ${chalk.yellow('pm add [projectPath]')} or cd till the project folder and type ${chalk.yellow('pm add')}`);
return;
}

Expand All @@ -129,11 +128,54 @@ async function openProject(projectName){

}

// projectman add [projectDirectory]
async function addProject(projectDirectory = '.'){
let newProject = {};
newProject.path = path.resolve(projectDirectory);
const name = newProject.path.split(path.sep).pop();
({finalName:newProject.name} = await inquirer.prompt([{type:'input',message:'Project Name :',name:'finalName',default:name}]))

if(settings.projects.some(project => project.name.toLowerCase() == newProject.name.toLowerCase())){
console.error("Project with this name already exists");
return;
}

settings.projects.push(newProject);

writeSettings(settings, 'add', "Project Added");
}

// pm remove [projectName]
async function removeProject(projectName){
const {name:selectedProjectName} = await selectProject(projectName,'remove');

if(!selectedProjectName){
console.error(`Project with name ${selectedProjectName} does not exist. Try ${chalk.yellow('pm remove')} and select the project you want to remove`);
return;
}
// removing project
settings.projects = settings.projects.filter(project => project.name.toLowerCase() !== selectedProjectName.toLowerCase());

writeSettings(settings, 'remove', "Project Removed");
}


// pm seteditor [command]
async function setEditor(command){
async function setEditor(command,cmdObj=undefined){
let commandToOpen;
let selectedProject;
let selectedIndex = -1; // this will have the index of selectedProject
let projectName;
if(cmdObj.forProject){ // --for-project exists
projectName = (cmdObj.forProject === true)?undefined:cmdObj.forProject; // if only[--for-project], set undefined else if [--for-project [projectName]] set projectName
selectedProject = await selectProject(projectName,'set editor for'); // sending undefined, calls list of projects to select from
// find the index of selectedProject and add editor to that project
selectedIndex = settings.projects.findIndex(project => project.name.toLowerCase() == selectedProject.name.toLowerCase())
}


if(!command){
const editors = [
const questions = [
{
type: 'list',
message: 'Select text editor',
Expand All @@ -158,49 +200,22 @@ async function setEditor(command){
]
}
];

console.log(); // Just wanted to line break; Sorry god of good practices ;_;
console.warn(`If the TextEditor/IDE you are looking for is not listed here, Run ${chalk.yellow('pm seteditor [commandToOpenEditor]')} \n'commandToOpenEditor' is the command you can type in terminal to open project E.g for Webstorm it is 'wstorm' for VSCode it is 'code'\n`);
({selectedEditor:commandToOpen} = await inquirer.prompt(editors));
// console.log(); // Just wanted to line break; Sorry god of good practices ;_;
// console.warn(`If the TextEditor/IDE you are looking for is not listed here, Run ${chalk.yellow('pm seteditor [commandToOpenEditor]')} \n'commandToOpenEditor' is the command you can type in terminal to open project E.g for Webstorm it is 'wstorm' for VSCode it is 'code'\n`);
({selectedEditor:commandToOpen} = await inquirer.prompt(questions));
}else{
commandToOpen = command;
}

settings.commandToOpen = commandToOpen;

writeSettings(settings,'seteditor',"Text Editor Selected");
}

// projectman add [projectDirectory]
async function addProject(projectDirectory = '.'){
let newProject = {};
newProject.path = path.resolve(projectDirectory);
const name = newProject.path.split(path.sep).pop();
({finalName:newProject.name} = await inquirer.prompt([{type:'input',message:'Project Name',name:'finalName',default:name}]))

if(settings.projects.some(project => project.name.toLowerCase() == newProject.name.toLowerCase())){
console.error("Project with this name already exists");
return;
if(selectedIndex < 0){
settings.commandToOpen = commandToOpen;
}else{
settings.projects[selectedIndex].editor = commandToOpen;
}

settings.projects.push(newProject);

writeSettings(settings, 'add', "Project Added");
writeSettings(settings,'seteditor',"Text Editor Selected");
}

// pm remove [projectName]
async function removeProject(projectName){
const {name:selectedProjectName} = await selectProject(projectName,'remove');

if(!selectedProjectName){
console.error(`Project with name ${selectedProjectName} does not exist. Try ${chalk.yellow('pm remove')} and select the project you want to remove`);
return;
}
// removing project
settings.projects = settings.projects.filter(project => project.name.toLowerCase() !== selectedProjectName.toLowerCase());

writeSettings(settings, 'remove', "Project Removed");
}

// projectman edit
async function editConfigurations(){
Expand All @@ -214,7 +229,6 @@ async function editConfigurations(){
}

try{

const {stderr} = await exec(`${openSettingsCommand} "${settingsPath}"`)
if(stderr){
console.error("Error occured while opening the file: "+settingsPath);
Expand All @@ -241,11 +255,11 @@ async function getProjectPath(projectName){
const selectedProject = await selectProject(projectName, "get directory");

if(!selectedProject){
console.error("Project does not exist. Add it using `pm add [projectPath]` or cd till the project folder and type `pm add`");
console.error(`Project does not exist. Add it using ${chalk.yellow('pm add [projectPath]')} or cd till the project folder and type ${chalk.yellow('pm add')}`);
return;
}

console.log(selectedProject.path);
}

module.exports = {openProject, addProject, removeProject, editConfigurations, setEditor, getProjectPath};
module.exports = {openProject, addProject, removeProject, editConfigurations, setEditor, getProjectPath};

0 comments on commit 39656bd

Please sign in to comment.