github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/internal/plugins/golang/mod/init.go (about) 1 package mod 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "path/filepath" 8 9 "github.com/gobuffalo/plugins" 10 ) 11 12 var _ plugins.Plugin = &Initer{} 13 var _ plugins.Needer = &Initer{} 14 var _ plugins.Scoper = &Initer{} 15 16 type Initer struct { 17 pluginsFn plugins.Feeder 18 } 19 20 func (i *Initer) WithPlugins(f plugins.Feeder) { 21 i.pluginsFn = f 22 } 23 24 func (i *Initer) ScopedPlugins() []plugins.Plugin { 25 if i.pluginsFn == nil { 26 return nil 27 } 28 29 var plugs []plugins.Plugin 30 for _, p := range i.pluginsFn() { 31 switch p.(type) { 32 case Stderrer: 33 plugs = append(plugs, p) 34 case Stdiner: 35 plugs = append(plugs, p) 36 case Stdouter: 37 plugs = append(plugs, p) 38 case Requirer: 39 plugs = append(plugs, p) 40 case Replacer: 41 plugs = append(plugs, p) 42 } 43 } 44 45 return plugs 46 } 47 48 func (i Initer) PluginName() string { 49 return "go/mod/init" 50 } 51 52 func (i *Initer) ModInit(ctx context.Context, root string, name string) error { 53 mr := filepath.Join(root, "go.mod") 54 f, err := os.Create(mr) 55 if err != nil { 56 return plugins.Wrap(i, err) 57 } 58 defer f.Close() 59 60 f.WriteString(fmt.Sprintf("module %s\n", name)) 61 62 plugs := i.ScopedPlugins() 63 64 if len(plugs) == 0 { 65 return nil 66 } 67 68 for _, p := range plugs { 69 switch t := p.(type) { 70 case Replacer: 71 m := t.ModReplace(root) 72 for k, v := range m { 73 s := fmt.Sprintf("\nreplace %s => %s", k, v) 74 f.WriteString(s) 75 } 76 } 77 } 78 return nil 79 }