code: func (m *Meta) process(args []string, vars bool) ([]string, error) {
  	// We do this so that we retain the ability to technically call
  	// process multiple times, even if we have no plans to do so
  	if m.oldUi != nil {
  		m.Ui = m.oldUi
  	}
  
  	// Set colorization
  	m.color = m.Color
  	for i, v := range args {
  		if v == "-no-color" {
  			m.color = false
  			m.Color = false
  			args = append(args[:i], args[i+1:]...)
  			break
  		}
  	}
  
  	// Set the UI
  	m.oldUi = m.Ui
  	m.Ui = &cli.ConcurrentUi{
  		Ui: &ColorizeUi{
  			Colorize:   m.Colorize(),
  			ErrorColor: "[red]",
  			WarnColor:  "[yellow]",
  			Ui:         m.oldUi,
  		},
  	}
  
  	return args, nil
  }
docs: // process will process the meta-parameters out of the arguments. This
  // will potentially modify the args in-place. It will return the resulting
  // slice.
  //
  // vars is now ignored. It used to control whether to process variables, but
  // that is no longer the responsibility of this function. (That happens
  // instead in Meta.collectVariableValues.)