github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/complete/string.go (about)

     1  // Copyright 2012-2018 the u-root Authors. All rights reserved
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package complete
     6  
     7  import (
     8  	"strings"
     9  )
    10  
    11  // A StringCompleter performs completions against an array of strings.
    12  // It can be used for, e.g., shell builtins.
    13  type StringCompleter struct {
    14  	// Names is the list of possible completions.
    15  	Names []string
    16  }
    17  
    18  // NewStringCompleter returns a StringCompleter from the
    19  // []string.
    20  func NewStringCompleter(s []string) Completer {
    21  	return &StringCompleter{Names: s}
    22  }
    23  
    24  // Complete returns a []string for each string of which the
    25  // passed in string is a prefix. The error for now is always nil.
    26  // If there is an exact match, only that match is returned,
    27  // which is arguably wrong.
    28  func (f *StringCompleter) Complete(s string) (string, []string, error) {
    29  	var names []string
    30  	for _, n := range f.Names {
    31  		if n == s {
    32  			return s, []string{}, nil
    33  		}
    34  		Debug("Check %v against %v", n, s)
    35  		if strings.HasPrefix(n, s) {
    36  			Debug("Add %v", n)
    37  			names = append(names, n)
    38  		}
    39  	}
    40  	return "", names, nil
    41  }