github.com/jchengjr77/canaveral@v1.0.1-0.20200715160102-ea9245d1a2fb/vscodesupport/openCode.go (about)

     1  /*Package vscodesupport contains:
     2  - functionality for opening canaveral projects in vscode
     3  */
     4  package vscodesupport
     5  
     6  import (
     7  	"errors"
     8  	"fmt"
     9  	"io/ioutil"
    10  	"os"
    11  	"os/exec"
    12  
    13  	"github.com/jchengjr77/canaveral/lib"
    14  )
    15  
    16  // OpenCode will take in a project name, and open it in vscode.
    17  // If such a project doesn't exist, it will return an error.
    18  // * tested
    19  func OpenCode(projName string, configPath string) (finalErr error) {
    20  	// defer a recover function that returns the thrown error
    21  	defer func() {
    22  		if r := recover(); r != nil {
    23  			finalErr = r.(error)
    24  		}
    25  	}()
    26  	if projName == "" {
    27  		fmt.Println("Please provide a project name.")
    28  		fmt.Println("(For more info, 'canaveral --help')")
    29  		return errors.New("No project name specified")
    30  	} else if !lib.FileExists(configPath) {
    31  		fmt.Println("No canaveral workspace set. Please specify a workspace.")
    32  		fmt.Println(
    33  			"Canaveral needs to know where to look for your projects.")
    34  		fmt.Println("(For help, type 'canaveral --help')")
    35  		return errors.New("No canaveral workspace set")
    36  	}
    37  	fmt.Printf("Attempting to open Project '%s'\n", projName)
    38  	ws, err := ioutil.ReadFile(configPath)
    39  	lib.Check(err)
    40  	if !lib.DirExists(string(ws) + "/" + projName) {
    41  		return errors.New("Project '" + projName + "' not found")
    42  	}
    43  	err = os.Chdir(string(ws) + "/" + projName)
    44  	lib.Check(err)
    45  	openVSCode := exec.Command("code", ".")
    46  	// set correct pipes
    47  	openVSCode.Stdout = os.Stdout
    48  	openVSCode.Stderr = os.Stderr
    49  	err = openVSCode.Run()
    50  	lib.Check(err)
    51  	return nil
    52  }