Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
nikandfor committed Aug 20, 2024
1 parent 80a09fe commit 623ae52
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 18 deletions.
2 changes: 2 additions & 0 deletions jq/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ func (f *Index) Next(w, r []byte, st int, state State) (_ []byte, i int, _ State
if err != nil {
return w[:wreset], i, nil, pe(err, i)
}

return w, i, nil, nil
}

var stateok *indexState
Expand Down
35 changes: 23 additions & 12 deletions jq/index_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,7 @@ func TestIndex(tb *testing.T) {
assert.Equal(tb, j == 0, state == nil)

w, i, state, err = f.Next(w[:0], r, i, state)
if !assert.NoError(tb, err) {
pref := r[:i]
suff := r[i:]

tb.Logf("%s|%s", pref, suff)
}
assertBytesErr(tb, r, i, err)

assert.Equal(tb, exp, string(w))

Expand All @@ -35,17 +30,22 @@ func TestIndex(tb *testing.T) {
}

w, i, state, err = f.Next(w[:0], r, i, state)

Check failure on line 32 in jq/index_test.go

View workflow job for this annotation

GitHub Actions / lint

SA4006: this value of `w` is never used (staticcheck)
if !assert.NoError(tb, err) {
pref := r[:i]
suff := r[i:]

tb.Logf("%s|%s", pref, suff)
}
assertBytesErr(tb, r, i, err)

assert.Nil(tb, state)
assert.Equal(tb, len(r), i)
}

func TestIndexEmpty(tb *testing.T) {
r := []byte(`{"results":[],"key":"b"}`)
f := NewIndex()

w, i, err := NextAll(f, nil, r, 0, nil)
assertBytesErr(tb, r, i, err)
assert.Equal(tb, len(r), i)
assert.Equal(tb, r, w)
}

func TestIndexIterEmpty(tb *testing.T) {
var w []byte
r := []byte(`{"a":[],"b":{}}`)
Expand All @@ -64,3 +64,14 @@ func TestIndexIterEmpty(tb *testing.T) {
assert.Nil(tb, state)
assert.Len(tb, w, 0)
}

func assertBytesErr(tb *testing.T, r []byte, i int, err error) {
if assert.NoError(tb, err) {
return
}

pref := r[:i]
suff := r[i:]

tb.Logf("%s|%s", pref, suff)
}
28 changes: 23 additions & 5 deletions jq/select.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
type (
Select struct {
Filter Filter
Buf []byte
}

Map struct {
Expand All @@ -17,33 +16,50 @@ type (
}
)

func NewSelect(f Filter) *Select { return &Select{Filter: f} }

func (f *Select) Next(w, r []byte, st int, state State) (_ []byte, i int, _ State, err error) {
var p json.Decoder

wreset := len(w)

raw, i, err := p.Raw(r, st)
if err != nil {
return w, i, state, err
}

if f.Filter == nil {
ok, _, err := IsTrue(raw, 0)
if err != nil {
return w, st, state, err
}

if ok {
w = append(w, raw...)
}

return w, i, nil, nil
}

ff := cfilter(f.Filter, Dot{})

var sub State
var ok bool

for {
f.Buf, i, sub, err = ff.Next(f.Buf[:0], r, st, sub)
w, i, sub, err = ff.Next(w[:wreset], r, st, sub)
if err != nil {
return w, i, state, err
}

if len(f.Buf) == 0 && sub == nil {
if len(w[wreset:]) == 0 && sub == nil {
break
}
if len(f.Buf) == 0 {
if len(w[wreset:]) == 0 {
continue
}

ok, _, err = IsTrue(f.Buf, 0)
ok, _, err = IsTrue(w[wreset:], 0)
// log.Printf("select istrue %v %v <- %q", ok, err, f.Buf)
if err != nil {
return w, i, state, err
Expand All @@ -57,6 +73,8 @@ func (f *Select) Next(w, r []byte, st int, state State) (_ []byte, i int, _ Stat
}
}

w = w[:wreset]

if ok {
w = append(w, raw...)
}
Expand Down
2 changes: 1 addition & 1 deletion jq/select_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func TestSelect(t *testing.T) {
for _, exp := range []string{
"1", ``, `"a"`, `[4]`, `{"b":true}`,
} {
w, i, state, err = (&Select{}).Next(w[:0], []byte(data), i, state)
w, i, state, err = NewSelect(nil).Next(w[:0], []byte(data), i, state)
assert.NoError(t, err)
// assert.Len(t, data, i)
assert.Equal(t, exp, string(w))
Expand Down

0 comments on commit 623ae52

Please # to comment.