Skip to content

Commit 150cdbd

Browse files
authored
Merge pull request #37 from wader/reuse-gojq-code
Reuse gojq instance in serve loop
2 parents 601c800 + a9c8d32 commit 150cdbd

File tree

1 file changed

+15
-16
lines changed

1 file changed

+15
-16
lines changed

lsp/lsp.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ func queryErrorPosition(v error) int {
6464
}
6565

6666
func Run(env Env) error {
67-
query := ""
67+
query := "serve"
68+
hasQueryArg := false
6869

6970
if len(env.Args) >= 2 && env.Args[1] == "--version" {
7071
fmt.Fprintf(env.Stdout, "%s\n", env.Version)
@@ -81,6 +82,7 @@ Usage: %s [OPTIONS]
8182
return nil
8283
} else if len(env.Args) >= 3 && env.Args[1] == "--query" {
8384
query = env.Args[2]
85+
hasQueryArg = true
8486
}
8587

8688
i := &interp{
@@ -89,19 +91,16 @@ Usage: %s [OPTIONS]
8991

9092
var state interface{}
9193

92-
// TODO: currently the main serve loop is done in go until
93-
// https://github.com/itchyny/gojq/issues/86 has been resolved
94-
// TODO: could probably reuse *gojq.Code instance
94+
gc, err := i.Compile(query)
95+
if err != nil {
96+
return err
97+
}
98+
9599
for {
96-
s := "serve"
97-
if query != "" {
98-
s = query
99-
}
100+
// TODO: currently the main serve loop is done in go until
101+
// https://github.com/itchyny/gojq/issues/86 has been resolved
102+
iter := gc.RunWithContext(context.Background(), state)
100103

101-
iter, err := i.Eval(s, state)
102-
if err != nil {
103-
return err
104-
}
105104
for {
106105
v, ok := iter.Next()
107106
if !ok {
@@ -120,7 +119,7 @@ Usage: %s [OPTIONS]
120119
case [2]interface{}:
121120
fmt.Fprintln(env.Stderr, v[:]...)
122121
default:
123-
if query != "" {
122+
if hasQueryArg {
124123
jd := json.NewEncoder(env.Stdout)
125124
jd.SetIndent("", " ")
126125
jd.Encode(v)
@@ -130,13 +129,13 @@ Usage: %s [OPTIONS]
130129
}
131130
}
132131

133-
if query != "" {
132+
if hasQueryArg {
134133
return nil
135134
}
136135
}
137136
}
138137

139-
func (i *interp) Eval(src string, c interface{}) (gojq.Iter, error) {
138+
func (i *interp) Compile(src string) (*gojq.Code, error) {
140139
gq, err := gojq.Parse(src)
141140
if err != nil {
142141
return nil, err
@@ -183,7 +182,7 @@ func (i *interp) Eval(src string, c interface{}) (gojq.Iter, error) {
183182
return nil, err
184183
}
185184

186-
return gc.RunWithContext(context.Background(), c), nil
185+
return gc, nil
187186
}
188187

189188
func (i *interp) readFile(c interface{}, a []interface{}) interface{} {

0 commit comments

Comments
 (0)