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 }