vgo-support - re-working code generator

This commit is contained in:
jharshman 2019-01-29 00:46:54 -08:00 committed by Steve Francia
parent d658160bdd
commit 80ea2901b6
4 changed files with 90 additions and 31 deletions

View file

@ -15,19 +15,24 @@ package cmd
import (
"fmt"
"github.com/spf13/cobra/cobra/tpl"
"os"
"path"
"path/filepath"
"text/template"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
var initCmd = &cobra.Command{
Use: "init [name]",
Aliases: []string{"initialize", "initialise", "create"},
Short: "Initialize a Cobra Application",
Long: `Initialize (cobra init) will create a new application, with a license
var (
pkgName string
initCmd = &cobra.Command{
Use: "init [name]",
Aliases: []string{"initialize", "initialise", "create"},
Short: "Initialize a Cobra Application",
Long: `Initialize (cobra init) will create a new application, with a license
and the appropriate structure for a Cobra-based CLI application.
* If a name is provided, it will be created in the current directory;
@ -39,37 +44,66 @@ and the appropriate structure for a Cobra-based CLI application.
Init will not use an existing directory with contents.`,
Run: func(cmd *cobra.Command, args []string) {
wd, err := os.Getwd()
if err != nil {
er(err)
}
Run: func(cmd *cobra.Command, args []string) {
var project *Project
if len(args) == 0 {
project = NewProjectFromPath(wd)
} else if len(args) == 1 {
arg := args[0]
if arg[0] == '.' {
arg = filepath.Join(wd, arg)
wd, err := os.Getwd()
if err != nil {
er(err)
}
if filepath.IsAbs(arg) {
project = NewProjectFromPath(arg)
} else {
project = NewProject(arg)
project := &Project{
AbsolutePath: wd,
PkgName: pkgName,
Legal: getLicense(),
Copyright: copyrightLine(),
}
} else {
er("please provide only one argument")
}
initializeProject(project)
// open file for writing
f, err := os.Create(fmt.Sprintf("%s/main.go", project.AbsolutePath))
if err != nil {
er(err)
}
defer f.Close()
fmt.Fprintln(cmd.OutOrStdout(), `Your Cobra application is ready at
`+project.AbsPath()+`
t := template.Must(template.New("init").Parse(string(tpl.MainTemplate())))
err = t.Execute(f, project)
if err != nil {
er(err)
}
/*
wd, err := os.Getwd()
if err != nil {
er(err)
}
Give it a try by going there and running `+"`go run main.go`."+`
Add commands to it by running `+"`cobra add [cmdname]`.")
},
var project *Project
if len(args) == 0 {
project = NewProjectFromPath(wd)
} else if len(args) == 1 {
arg := args[0]
if arg[0] == '.' {
arg = filepath.Join(wd, arg)
}
if filepath.IsAbs(arg) {
project = NewProjectFromPath(arg)
} else {
project = NewProject(arg)
}
} else {
er("please provide only one argument")
}
initializeProject(project)
*/
fmt.Printf("Your Cobra applicaton is ready at\n%s\n", project.AbsolutePath)
},
}
)
func init() {
initCmd.Flags().StringVar(&pkgName, "pkg-name", "", "fully qualified pkg name")
initCmd.MarkFlagRequired("pkg-name")
}
func initializeProject(project *Project) {

View file

@ -9,6 +9,13 @@ import (
// Project contains name, license and paths to projects.
type Project struct {
// v2
PkgName string
Copyright string
AbsolutePath string
Legal License
// v1
absPath string
cmdPath string
srcPath string

View file

@ -23,7 +23,8 @@ import (
var (
// Used for flags.
cfgFile, userLicense string
cfgFile string
userLicense string
rootCmd = &cobra.Command{
Use: "cobra",

17
cobra/tpl/main.go Normal file
View file

@ -0,0 +1,17 @@
package tpl
func MainTemplate() []byte {
return []byte(`
/*
{{ .Copyright }}
{{if .Legal.Header}}{{ .Legal.Header }}{{end}}
*/
package main
import "{{ .PkgName }}/cmd"
func main() {
cmd.Execute()
}
`)
}