Skip to content

Commit d9ce6c7

Browse files
authored
Merge pull request #715 from kuba--/fix-701/uast_extract
uast_extract returns a json for @pos
2 parents 99e2449 + 13bbf15 commit d9ce6c7

File tree

2 files changed

+40
-28
lines changed

2 files changed

+40
-28
lines changed

Diff for: internal/function/uast.go

+3-17
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package function
22

33
import (
44
"crypto/sha1"
5+
"encoding/json"
56
"fmt"
67
"hash"
78
"os"
@@ -559,24 +560,9 @@ func extractCommonProp(node nodes.Object, key string) []interface{} {
559560

560561
func posToString(pos uast.Positions) string {
561562
var b strings.Builder
562-
563-
start := pos.Start()
564-
end := pos.End()
565-
566-
if start != nil {
567-
fmt.Fprintf(&b, "Start: [Offset:%d Line:%d Col:%d]",
568-
start.Offset, start.Line, start.Col)
563+
if data, err := json.Marshal(pos); err == nil {
564+
b.Write(data)
569565
}
570-
571-
if pos.End() != nil {
572-
if pos.Start() != nil {
573-
fmt.Fprint(&b, ", ")
574-
}
575-
576-
fmt.Fprintf(&b, "End: [Offset:%d Line:%d Col:%d]",
577-
end.Offset, end.Line, end.Col)
578-
}
579-
580566
return b.String()
581567
}
582568

Diff for: internal/function/uast_test.go

+37-11
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package function
22

33
import (
44
"context"
5+
"encoding/json"
6+
"reflect"
57
"testing"
68

79
"gopkg.in/bblfsh/sdk.v2/uast"
@@ -209,17 +211,6 @@ func TestUASTExtract(t *testing.T) {
209211
"Identifier", "Expression", "Call", "Callee",
210212
},
211213
},
212-
{
213-
name: "key_" + uast.KeyPos,
214-
key: uast.KeyPos,
215-
expected: []interface{}{
216-
"Start: [Offset:28 Line:4 Col:5], End: [Offset:31 Line:4 Col:8]",
217-
"Start: [Offset:47 Line:5 Col:9], End: [Offset:48 Line:5 Col:10]",
218-
"Start: [Offset:51 Line:5 Col:13], End: [Offset:52 Line:5 Col:14]",
219-
"Start: [Offset:60 Line:7 Col:7], End: [Offset:63 Line:7 Col:10]",
220-
"Start: [Offset:54 Line:7 Col:1], End: [Offset:59 Line:7 Col:6]",
221-
},
222-
},
223214
{
224215
name: "key_ctx",
225216
key: "ctx",
@@ -250,6 +241,41 @@ func TestUASTExtract(t *testing.T) {
250241
require.ElementsMatch(t, test.expected, foo)
251242
})
252243
}
244+
expectedPos := []string{
245+
`{"end":{"offset":31,"line":4,"col":8},"start":{"offset":28,"line":4,"col":5}}`,
246+
`{"end":{"offset":48,"line":5,"col":10},"start":{"offset":47,"line":5,"col":9}}`,
247+
`{"end":{"offset":52,"line":5,"col":14},"start":{"offset":51,"line":5,"col":13}}`,
248+
`{"end":{"offset":63,"line":7,"col":10},"start":{"offset":60,"line":7,"col":7}}`,
249+
`{"end":{"offset":59,"line":7,"col":6},"start":{"offset":54,"line":7,"col":1}}`,
250+
}
251+
t.Run("key_"+uast.KeyRoles, func(t *testing.T) {
252+
row := sql.NewRow(filteredNodes["annotated"], uast.KeyPos)
253+
254+
fn := NewUASTExtract(
255+
expression.NewGetField(0, sql.Blob, "", false),
256+
expression.NewLiteral(uast.KeyPos, sql.Text),
257+
)
258+
259+
pos, err := fn.Eval(ctx, row)
260+
require.NoError(t, err)
261+
262+
arr, ok := pos.([]interface{})
263+
require.True(t, ok)
264+
for i, jsonstr := range expectedPos {
265+
var exp, act uast.Positions
266+
267+
err = json.Unmarshal([]byte(jsonstr), &exp)
268+
require.NoError(t, err)
269+
270+
str, ok := arr[i].(string)
271+
require.True(t, ok)
272+
err = json.Unmarshal([]byte(str), &act)
273+
require.NoError(t, err)
274+
275+
require.True(t, reflect.DeepEqual(exp, act))
276+
}
277+
})
278+
253279
}
254280

255281
func TestUASTChildren(t *testing.T) {

0 commit comments

Comments
 (0)