github.com/ladydascalie/elvish@v0.0.0-20170703214355-2964dd3ece7f/edit/nodeutil/nodeutil.go (about)

     1  package nodeutil
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/elves/elvish/parse"
     7  	"github.com/elves/elvish/util"
     8  )
     9  
    10  func SimpleCompound(cn *parse.Compound, upto *parse.Indexing) (bool, string, error) {
    11  	tilde := false
    12  	head := ""
    13  	for _, in := range cn.Indexings {
    14  		if len(in.Indicies) > 0 {
    15  			return false, "", nil
    16  		}
    17  		switch in.Head.Type {
    18  		case parse.Tilde:
    19  			tilde = true
    20  		case parse.Bareword, parse.SingleQuoted, parse.DoubleQuoted:
    21  			head += in.Head.Value
    22  		default:
    23  			return false, "", nil
    24  		}
    25  
    26  		if in == upto {
    27  			break
    28  		}
    29  	}
    30  	if tilde {
    31  		i := strings.Index(head, "/")
    32  		if i == -1 {
    33  			i = len(head)
    34  		}
    35  		uname := head[:i]
    36  		home, err := util.GetHome(uname)
    37  		if err != nil {
    38  			return false, "", err
    39  		}
    40  		head = home + head[i:]
    41  	}
    42  	return true, head, nil
    43  }