This repository contains Go bindings for the Tree-sitter parsing library.
To use this in your Go project, run:
go get github.com/tree-sitter/go-tree-sitter@latest
Example usage:
package main
import (
"fmt"
tree_sitter "github.com/tree-sitter/go-tree-sitter"
tree_sitter_javascript "github.com/tree-sitter/tree-sitter-javascript/bindings/go"
)
func main() {
code := []byte("const foo = 1 + 2")
parser := tree_sitter.NewParser()
defer parser.Close()
parser.SetLanguage(tree_sitter.NewLanguage(tree_sitter_javascript.Language()))
tree := parser.Parse(code, nil)
defer tree.Close()
root := tree.RootNode()
fmt.Println(root.ToSexp())
}
By default, none of the grammars are included in this package.
This way, you can only bring in what you need, but it's at the slight cost of having to call go get
n times.
In the example above, to fetch the JavaScript grammar, you can run the following:
go get github.com/tree-sitter/tree-sitter-javascript@latest
Due to bugs with runtime.SetFinalizer
and CGO, you must always call Close
on an object that allocates memory from C. This must be done for the Parser
, Tree
, TreeCursor
, Query
, QueryCursor
, and LookaheadIterator
objects.
For more information, see the documentation.