github.com/jgarto/itcv@v0.0.0-20180826224514-4eea09c1aa0d/cmd/stateGen/state_gen.go (about) 1 /* 2 3 stateGen is a go generate generator that helps to automate the process of 4 creating state trees for use in GopherJS React web applications. 5 6 For more information see https://github.com/myitcv/react/wiki 7 8 */ 9 package main // import "myitcv.io/react/cmd/stateGen" 10 11 import ( 12 "flag" 13 "fmt" 14 "log" 15 "os" 16 17 "myitcv.io/gogenerate" 18 ) 19 20 const ( 21 stateGenCmd = "stateGen" 22 ) 23 24 var ( 25 fLicenseFile = gogenerate.LicenseFileFlag() 26 fGoGenLog = gogenerate.LogFlag() 27 ) 28 29 func main() { 30 log.SetFlags(0) 31 log.SetPrefix(stateGenCmd + ": ") 32 33 flag.Parse() 34 35 gogenerate.DefaultLogLevel(fGoGenLog, gogenerate.LogFatal) 36 37 envFile, ok := os.LookupEnv(gogenerate.GOFILE) 38 if !ok { 39 fatalf("env not correct; missing %v", gogenerate.GOFILE) 40 } 41 42 wd, err := os.Getwd() 43 if err != nil { 44 fatalf("unable to get working directory: %v", err) 45 } 46 47 dirFiles, err := gogenerate.FilesContainingCmd(wd, stateGenCmd) 48 if err != nil { 49 fatalf("could not determine if we are the first file: %v", err) 50 } 51 52 if dirFiles == nil { 53 fatalf("cannot find any files containing the %v directive", stateGenCmd) 54 } 55 56 if dirFiles[envFile] != 1 { 57 fatalf("expected a single occurrence of %v directive in %v. Got: %v", stateGenCmd, envFile, dirFiles) 58 } 59 60 license, err := gogenerate.CommentLicenseHeader(fLicenseFile) 61 if err != nil { 62 fatalf("could not comment license file: %v", err) 63 } 64 65 // if we get here, we know we are the first file... 66 67 dogen(os.Stderr, wd, license) 68 } 69 70 func fatalf(format string, args ...interface{}) { 71 panic(fmt.Errorf(format, args...)) 72 } 73 74 func infof(format string, args ...interface{}) { 75 if *fGoGenLog == string(gogenerate.LogInfo) { 76 log.Printf(format, args...) 77 } 78 }