github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/fix/cmd.go (about)

     1  package fix
     2  
     3  import (
     4  	"github.com/gobuffalo/plugins"
     5  	"github.com/gobuffalo/plugins/plugcmd"
     6  	"github.com/gobuffalo/plugins/plugprint"
     7  	"github.com/spf13/pflag"
     8  )
     9  
    10  var _ plugcmd.SubCommander = &Cmd{}
    11  var _ plugins.Needer = &Cmd{}
    12  var _ plugins.Plugin = &Cmd{}
    13  var _ plugins.Scoper = &Cmd{}
    14  var _ plugprint.Describer = &Cmd{}
    15  
    16  type Cmd struct {
    17  	flags     *pflag.FlagSet
    18  	help      bool
    19  	pluginsFn plugins.Feeder
    20  }
    21  
    22  func (fc *Cmd) WithPlugins(f plugins.Feeder) {
    23  	fc.pluginsFn = f
    24  }
    25  
    26  func (fc *Cmd) PluginName() string {
    27  	return "fix"
    28  }
    29  
    30  func (fc *Cmd) Description() string {
    31  	return "Attempt to fix a Buffalo application's API to match version in go.mod"
    32  }
    33  
    34  func (fc *Cmd) SubCommands() []plugins.Plugin {
    35  	var plugs []plugins.Plugin
    36  	for _, p := range fc.ScopedPlugins() {
    37  		if c, ok := p.(Fixer); ok {
    38  			plugs = append(plugs, c)
    39  		}
    40  	}
    41  	return plugs
    42  }
    43  
    44  func (fc *Cmd) ScopedPlugins() []plugins.Plugin {
    45  	var plugs []plugins.Plugin
    46  	if fc.pluginsFn == nil {
    47  		return plugs
    48  	}
    49  
    50  	for _, p := range fc.pluginsFn() {
    51  		switch p.(type) {
    52  		case Fixer:
    53  			plugs = append(plugs, p)
    54  		case Flagger:
    55  			plugs = append(plugs, p)
    56  		case Pflagger:
    57  			plugs = append(plugs, p)
    58  		case Stdouter:
    59  			plugs = append(plugs, p)
    60  		}
    61  	}
    62  	return plugs
    63  }