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  }