Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
)

parser := sitter.NewParser()
parser.SetLanguage(javascript.GetLanguage())
_ = parser.SetLanguage(javascript.GetLanguage())
```

Parse some code:
Expand Down
2 changes: 1 addition & 1 deletion _examples/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ func main() {
input := []byte("function hello() { console.log('hello') }; function goodbye(){}")

parser := sitter.NewParser()
parser.SetLanguage(javascript.GetLanguage())
_ = parser.SetLanguage(javascript.GetLanguage())

tree := parser.Parse(nil, input)

Expand Down
11 changes: 8 additions & 3 deletions bindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ func Parse(content []byte, lang *Language) *Node {
// returns root node
func ParseCtx(ctx context.Context, content []byte, lang *Language) (*Node, error) {
p := NewParser()
p.SetLanguage(lang)
if err := p.SetLanguage(lang); err != nil {
return nil, fmt.Errorf("error while setting language: %v", err)
}
tree, err := p.ParseCtx(ctx, nil, content)
if err != nil {
return nil, err
Expand All @@ -59,9 +61,12 @@ func NewParser() *Parser {
}

// SetLanguage assignes Language to a parser
func (p *Parser) SetLanguage(lang *Language) {
func (p *Parser) SetLanguage(lang *Language) error {
cLang := (*C.struct_TSLanguage)(lang.ptr)
C.ts_parser_set_language(p.c, cLang)
if !C.ts_parser_set_language(p.c, cLang) {
return fmt.Errorf("could not set the language, make sure the language version is compatible with current tree sitter")
}
return nil
}

// ReadFunc is a function to retrieve a chunk of text at a given byte offset and (row, column) position
Expand Down
34 changes: 17 additions & 17 deletions bindings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func TestTree(t *testing.T) {
parser := NewParser()

parser.Debug()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
tree, err := parser.ParseCtx(context.Background(), nil, []byte("1 + 2"))
assert.NoError(err)
n := tree.RootNode()
Expand Down Expand Up @@ -123,7 +123,7 @@ func TestErrorNodes(t *testing.T) {
parser := NewParser()

parser.Debug()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
tree, err := parser.ParseCtx(context.Background(), nil, []byte("1 + a"))
assert.NoError(err)
n := tree.RootNode()
Expand Down Expand Up @@ -176,7 +176,7 @@ func TestGC(t *testing.T) {

parser := NewParser()

parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
tree, err := parser.ParseCtx(context.Background(), nil, []byte("1 + 2"))
assert.NoError(err)
n := tree.RootNode()
Expand Down Expand Up @@ -206,7 +206,7 @@ func TestOperationLimitParsing(t *testing.T) {

parser := NewParser()
parser.SetOperationLimit(10)
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
items := []string{}
for i := 0; i < 100; i++ {
items = append(items, strconv.Itoa(i))
Expand All @@ -223,7 +223,7 @@ func TestContextCancellationParsing(t *testing.T) {
defer cancel()

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
items := []string{}
// the content needs to be big so that we have enough time to cancel
for i := 0; i < 10000; i++ {
Expand Down Expand Up @@ -267,7 +267,7 @@ func TestIncludedRanges(t *testing.T) {
code := "1 + 2\n//3 + 5"

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
mainTree, err := parser.ParseCtx(context.Background(), nil, []byte(code))
assert.NoError(err)
assert.Equal(
Expand Down Expand Up @@ -301,7 +301,7 @@ func TestSameNode(t *testing.T) {
assert := assert.New(t)

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
tree, err := parser.ParseCtx(context.Background(), nil, []byte("1 + 2"))
assert.NoError(err)

Expand Down Expand Up @@ -332,7 +332,7 @@ func TestQuery(t *testing.T) {

// test match only
parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
tree, err := parser.ParseCtx(context.Background(), nil, []byte(js))
assert.NoError(t, err)
root := tree.RootNode()
Expand Down Expand Up @@ -360,7 +360,7 @@ func testCaptures(t *testing.T, body, sq string, expected []string) {
assert := assert.New(t)

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))
tree, err := parser.ParseCtx(context.Background(), nil, []byte(body))
assert.NoError(err)
root := tree.RootNode()
Expand Down Expand Up @@ -476,7 +476,7 @@ func TestTreeCursor(t *testing.T) {
func TestLeakParse(t *testing.T) {
ctx := context.Background()
parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))

for i := 0; i < 100000; i++ {
_, _ = parser.ParseCtx(ctx, nil, []byte("1 + 2"))
Expand All @@ -494,7 +494,7 @@ func TestLeakParse(t *testing.T) {
func TestLeakRootNode(t *testing.T) {
ctx := context.Background()
parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))

for i := 0; i < 100000; i++ {
tree, err := parser.ParseCtx(ctx, nil, []byte("1 + 2"))
Expand All @@ -515,7 +515,7 @@ func TestParseInput(t *testing.T) {
assert := assert.New(t)

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))

// empty input
input := Input{
Expand Down Expand Up @@ -570,7 +570,7 @@ func TestParseInput(t *testing.T) {
func TestLeakParseInput(t *testing.T) {
ctx := context.Background()
parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))

inputData := []byte("1 + 2")
input := Input{
Expand Down Expand Up @@ -602,7 +602,7 @@ func TestCursorKeepsQuery(t *testing.T) {
source := bytes.Repeat([]byte("1 + 1"), 10000)

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))

tree := parser.Parse(nil, source)
root := tree.RootNode()
Expand Down Expand Up @@ -630,7 +630,7 @@ func TestCursorKeepsQuery(t *testing.T) {
func BenchmarkParse(b *testing.B) {
ctx := context.Background()
parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(b, parser.SetLanguage(getTestGrammar()))
inputData := []byte("1 + 2")

b.ResetTimer()
Expand All @@ -646,7 +646,7 @@ func BenchmarkParseCancellable(b *testing.B) {
defer cancel()

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(b, parser.SetLanguage(getTestGrammar()))
inputData := []byte("1 + 2")

b.ResetTimer()
Expand All @@ -659,7 +659,7 @@ func BenchmarkParseCancellable(b *testing.B) {
func BenchmarkParseInput(b *testing.B) {
ctx := context.Background()
parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(b, parser.SetLanguage(getTestGrammar()))

inputData := []byte("1 + 2")
input := Input{
Expand Down
9 changes: 7 additions & 2 deletions markdown/binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package markdown

import (
"context"
"fmt"

sitter "github.com/smacker/go-tree-sitter"
tree_sitter_markdown "github.com/smacker/go-tree-sitter/markdown/tree-sitter-markdown"
Expand Down Expand Up @@ -82,7 +83,9 @@ type Node struct {

func ParseCtx(ctx context.Context, oldTree *MarkdownTree, content []byte) (*MarkdownTree, error) {
p := sitter.NewParser()
p.SetLanguage(tree_sitter_markdown.GetLanguage())
if err := p.SetLanguage(tree_sitter_markdown.GetLanguage()); err != nil {
return nil, fmt.Errorf("could not set markdown language: %v", err)
}

var old *sitter.Tree
if oldTree != nil {
Expand All @@ -99,7 +102,9 @@ func ParseCtx(ctx context.Context, oldTree *MarkdownTree, content []byte) (*Mark
inlineIndices: map[uintptr]int{},
}

p.SetLanguage(tree_sitter_markdown_inline.GetLanguage())
if err := p.SetLanguage(tree_sitter_markdown_inline.GetLanguage()); err != nil {
return nil, fmt.Errorf("could not set markdown inline language: %v", err)
}

q, err := sitter.NewQuery([]byte(`(inline) @inline`), tree_sitter_markdown.GetLanguage())
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion predicates_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ func TestFilterPredicates(t *testing.T) {
}

parser := NewParser()
parser.SetLanguage(getTestGrammar())
assert.Nil(t, parser.SetLanguage(getTestGrammar()))

for testNum, testCase := range testCases {
tree := parser.Parse(nil, []byte(testCase.input))
Expand Down