Go/repl: improve completion
This commit is contained in:
parent
b3e27a5df3
commit
1ae1b9bb98
|
@ -39,21 +39,24 @@ func run(L *ell.Ell, program *ell.V) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func complete(L *ell.Ell, line string) (res []string) {
|
func complete(L *ell.Ell, line string, pos int) (
|
||||||
// This never actually completes anything, just shows the options,
|
head string, completions []string, tail string) {
|
||||||
// we'd have to figure out the longest common prefix.
|
tail = string([]rune(line)[pos:])
|
||||||
res = append(res, line)
|
|
||||||
|
lastSpace := strings.LastIndexAny(string([]rune(line)[:pos]), " ()[]{};\n")
|
||||||
|
if lastSpace > -1 {
|
||||||
|
head, line = line[:lastSpace+1], line[lastSpace+1:]
|
||||||
|
}
|
||||||
|
|
||||||
line = strings.ToLower(line)
|
|
||||||
for v := L.Globals; v != nil; v = v.Next {
|
for v := L.Globals; v != nil; v = v.Next {
|
||||||
name := v.Head.String
|
name := v.Head.String
|
||||||
if strings.HasPrefix(strings.ToLower(name), line) {
|
if strings.HasPrefix(strings.ToLower(name), line) {
|
||||||
res = append(res, name)
|
completions = append(completions, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for name := range L.Native {
|
for name := range L.Native {
|
||||||
if strings.HasPrefix(strings.ToLower(name), line) {
|
if strings.HasPrefix(strings.ToLower(name), line) {
|
||||||
res = append(res, name)
|
completions = append(completions, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -66,7 +69,10 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
line := liner.NewLiner()
|
line := liner.NewLiner()
|
||||||
line.SetCompleter(func(line string) []string { return complete(L, line) })
|
line.SetWordCompleter(func(line string, pos int) (
|
||||||
|
string, []string, string) {
|
||||||
|
return complete(L, line, pos)
|
||||||
|
})
|
||||||
line.SetMultiLineMode(true)
|
line.SetMultiLineMode(true)
|
||||||
line.SetTabCompletionStyle(liner.TabPrints)
|
line.SetTabCompletionStyle(liner.TabPrints)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue