-
Notifications
You must be signed in to change notification settings - Fork 1
/
suggester.go
68 lines (55 loc) · 1.39 KB
/
suggester.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package advisor
import (
"github.com/c-bata/go-prompt"
)
var abortIndex int = 1145141919810
type SuggesterContext struct {
index int
handlers []SuggesterFunc
Document *prompt.Document
result []prompt.Suggest
}
func (s *SuggesterContext) Next() {
s.index++
for s.index < len(s.handlers) {
s.handlers[s.index](s)
s.index++
}
}
func (s *SuggesterContext) Abort() {
s.index = abortIndex
}
func (s *SuggesterContext) IsAborted() bool {
return s.index >= abortIndex
}
func (s *SuggesterContext) Result() []prompt.Suggest {
if s.result == nil {
s.result = []prompt.Suggest{}
}
return s.result
}
func (s *SuggesterContext) AppendSuggestBefore(appends ...prompt.Suggest) {
//fmt.Println("before:", s.result)
s.result = append(appends, s.result...)
//fmt.Println("after:", s.result)
}
func (s *SuggesterContext) AppendSuggestAfter(appends ...prompt.Suggest) {
//fmt.Println("before:", s.result)
s.result = append(s.result, appends...)
//fmt.Println("after:", s.result)
}
func (s *SuggesterContext) ToCompleter() func(d prompt.Document) []prompt.Suggest {
s.Next()
return func(d prompt.Document) []prompt.Suggest {
return s.Result()
}
}
func NewContext(d *prompt.Document, handlers ...SuggesterFunc) *SuggesterContext {
return &SuggesterContext{
index: -1,
handlers: handlers,
Document: d,
result: []prompt.Suggest{},
}
}
type SuggesterFunc func(ctx *SuggesterContext)