8ee3ca43aa
The smacker fork has been stale since 2024 and pinned us to an old ABI.
Move every adapter to the upstream bindings (v0.25.0) so we can track
new grammar releases.
* internal/parser/tsitter/ — thin compat shim. Re-exports the upstream
API under smacker-style names (Type/Content/StartPoint/NamedChild(int))
so the ~28 language adapters only needed an import-path swap. Adds
Node.Equal()/Node.Id() for identity, since the new bindings hand back
a fresh *Node on every traversal — pointer comparisons no longer mean
anything.
* internal/parser/treesitter.go — RunQuery / RunPrepared / EachMatch
rewritten on top of the new iterator-based QueryCursor.Matches; pool
*ts.QueryCursor directly (the new API has no per-call state leak).
* Per-grammar shim sub-packages under internal/parser/tsitter/<lang>/
wrap each upstream binding's Language() into a smacker-shaped
GetLanguage() *tsitter.Language. Most pull from
github.com/tree-sitter/tree-sitter-<lang>; a handful use third-party
forks (camdencheek dockerfile, elixir-lang, fwcd kotlin, DerekStride
sql, alex-pinkus swift) where the tree-sitter org has no grammar.
* Locally vendor grammars whose upstream Go bindings are unavailable or
broken: markdown (no Go binding), protobuf (no Go binding), dockerfile
(parent module path conflicts with submodule path), swift + sql
(gitignore the generated parser.c). Each ships parser.c + scanner.c +
tree_sitter/{parser,alloc,array}.h compiled directly through CGO.
* Lua extractor rewritten for tree-sitter-grammars/tree-sitter-lua's
current node vocabulary: function_statement → function_declaration
with field-based name access, variables now under
variable_declaration → assignment_statement → variable_list, method
calls via method_index_expression.
* Kotlin pinned to fwcd/tree-sitter-kotlin: the
tree-sitter-grammars/tree-sitter-kotlin v1.x grammar drops the
type_identifier alias and would force a rewrite of the extractor.
* PHP Laravel middleware extractor: replace pointer-keyed processed map
and pointer comparison on parent.ChildByFieldName("object") with
Node.Id() / Node.Equal() — both broke once *Node became
per-traversal.
go.mod loses smacker entirely and gains the upstream + grammar modules.