package syntax import ( "testing" sitter "github.com/tree-sitter/go-tree-sitter" ts_bash "github.com/tree-sitter/tree-sitter-bash/bindings/go" ts_csharp "github.com/tree-sitter/tree-sitter-c-sharp/bindings/go" ts_c "github.com/tree-sitter/tree-sitter-c/bindings/go" ts_cpp "github.com/tree-sitter/tree-sitter-cpp/bindings/go" ts_css "github.com/tree-sitter/tree-sitter-css/bindings/go" ts_go "github.com/tree-sitter/tree-sitter-go/bindings/go" ts_html "github.com/tree-sitter/tree-sitter-html/bindings/go" ts_java "github.com/tree-sitter/tree-sitter-java/bindings/go" ts_js "github.com/tree-sitter/tree-sitter-javascript/bindings/go" ts_json "github.com/tree-sitter/tree-sitter-json/bindings/go" ts_python "github.com/tree-sitter/tree-sitter-python/bindings/go" ts_ruby "github.com/tree-sitter/tree-sitter-ruby/bindings/go" ts_rust "github.com/tree-sitter/tree-sitter-rust/bindings/go" ts_ts "github.com/tree-sitter/tree-sitter-typescript/bindings/go" ) func TestEmbeddedQueriesLoadAndCompile(t *testing.T) { tests := []struct { name string loadQuery func() ([]byte, error) expectNonNil bool }{ {name: "go", loadQuery: loadGoHighlightsQuery, expectNonNil: true}, {name: "javascript", loadQuery: loadJavaScriptHighlightsQuery, expectNonNil: true}, {name: "typescript", loadQuery: loadTypeScriptHighlightsQuery, expectNonNil: true}, {name: "tsx", loadQuery: loadTSXHighlightsQuery, expectNonNil: true}, {name: "python", loadQuery: loadPythonHighlightsQuery, expectNonNil: true}, {name: "rust", loadQuery: loadRustHighlightsQuery, expectNonNil: true}, {name: "bash", loadQuery: loadBashHighlightsQuery, expectNonNil: true}, {name: "json", loadQuery: loadJSONHighlightsQuery, expectNonNil: true}, {name: "css", loadQuery: loadCSSHighlightsQuery, expectNonNil: true}, {name: "html", loadQuery: loadHTMLHighlightsQuery, expectNonNil: true}, {name: "c", loadQuery: loadCHighlightsQuery, expectNonNil: true}, {name: "cpp", loadQuery: loadCppHighlightsQuery, expectNonNil: true}, {name: "java", loadQuery: loadJavaHighlightsQuery, expectNonNil: true}, {name: "csharp", loadQuery: loadCSharpHighlightsQuery, expectNonNil: true}, {name: "ruby", loadQuery: loadRubyHighlightsQuery, expectNonNil: true}, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { b, err := tc.loadQuery() if err != nil { t.Fatalf("failed loading embedded query: %v", err) } if tc.expectNonNil && b == nil { t.Fatalf("expected non-nil embedded query bytes") } }) } } func TestEmbeddedQueriesCompileKnownGood(t *testing.T) { compileTests := []struct { name string loadQuery func() ([]byte, error) newLanguage func() *sitter.Language }{ {name: "go", loadQuery: loadGoHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_go.Language()) }}, {name: "javascript", loadQuery: loadJavaScriptHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_js.Language()) }}, {name: "typescript", loadQuery: loadTypeScriptHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_ts.LanguageTypescript()) }}, {name: "tsx", loadQuery: loadTSXHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_ts.LanguageTSX()) }}, {name: "python", loadQuery: loadPythonHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_python.Language()) }}, {name: "rust", loadQuery: loadRustHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_rust.Language()) }}, {name: "bash", loadQuery: loadBashHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_bash.Language()) }}, {name: "json", loadQuery: loadJSONHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_json.Language()) }}, {name: "css", loadQuery: loadCSSHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_css.Language()) }}, {name: "html", loadQuery: loadHTMLHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_html.Language()) }}, {name: "c", loadQuery: loadCHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_c.Language()) }}, {name: "cpp", loadQuery: loadCppHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_cpp.Language()) }}, {name: "java", loadQuery: loadJavaHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_java.Language()) }}, {name: "csharp", loadQuery: loadCSharpHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_csharp.Language()) }}, {name: "ruby", loadQuery: loadRubyHighlightsQuery, newLanguage: func() *sitter.Language { return sitter.NewLanguage(ts_ruby.Language()) }}, } for _, tc := range compileTests { t.Run(tc.name, func(t *testing.T) { b, err := tc.loadQuery() if err != nil { t.Fatalf("failed loading embedded query: %v", err) } lang := tc.newLanguage() if lang == nil { t.Fatalf("language handle is nil") } q, qErr := sitter.NewQuery(lang, string(b)) if qErr != nil { t.Fatalf("embedded query failed to compile: %v", qErr) } q.Close() }) } }