tree-sitter-go
A fast, incremental Go grammar for the tree-sitter parsing library
Repository Health
Technical Analysis
tree-sitter-go is the official Go language grammar for tree-sitter, the incremental parsing library used by editors and developer tools to build concrete syntax trees. It defines Go’s syntax (structs, interfaces, goroutines, generics) in a declarative grammar that compiles to a generated C parser plus bindings for Rust, Node.js, Python, Go, and Swift.
Editors, linters, and static-analysis tools consume this grammar to parse Go source incrementally and error-tolerantly, powering features like syntax highlighting, code folding, and structural navigation without invoking the full Go compiler toolchain.
What You Get
- A complete, actively maintained Go grammar covering modern syntax including generics and goroutine/channel constructs
- A generated, dependency-free C parser (
parser.c) compiled from the grammar for use in any host language - Official bindings for Rust, Go, Node.js, Python, and Swift for embedding the grammar directly in tooling
- Highlight and tag queries (
queries/highlights.scm) mapping syntax nodes to editor highlighting categories - A corpus of test fixtures (
test/corpus) validating grammar correctness against real Go code samples
Common Use Cases
- Editor syntax highlighting - power tree-sitter-based highlighting for Go files in editors like Neovim, Helix, and Zed
- Code navigation tooling - build ‘jump to definition’ and structural outlines by querying the parsed Go syntax tree
- Static analysis and linters - traverse the concrete syntax tree to implement custom Go lint rules without invoking
go/parser - Language server implementations - use the grammar as the incremental parsing layer underneath a Go LSP server
Under The Hood
Architecture - The grammar is authored in grammar.js as a JavaScript DSL describing Go’s syntax rules (declarations, statements, expressions, generics). The tree-sitter CLI compiles this into a generated, table-driven src/parser.c, with src/node-types.json describing the resulting AST node schema; unlike some other grammars, Go needs minimal external scanning since its syntax is largely context-free.
Tech Stack - The grammar source is JavaScript, but the shipped artifact is generated C code with zero runtime dependencies beyond tree-sitter-language; the repo ships first-class bindings for Rust (Cargo.toml), Go (go.mod), Node.js (package.json, binding.gyp), Python (pyproject.toml, setup.py), and Swift (Package.swift).
Code Quality - Correctness is validated through a test/corpus directory of annotated Go snippets paired with expected parse trees; CI runs across the various language bindings before each Cargo/npm/PyPI release, keeping the grammar in sync as Go language features (like generics) evolve.
API Design - Consumers interact through a minimal surface: a single exported language constant handed to the generic tree-sitter runtime API, so there’s effectively no Go-specific API to learn beyond tree-sitter’s own parser/query interface, keeping integration overhead low.
Used by 3 apps in this directory
cocoindex
Data Engineering · AI Development
An incremental data indexing engine that keeps AI agent context perpetually fresh by reprocessing only what changed.
codegraph
Developer Tools · AI Code Assistants
A pre-indexed code knowledge graph that cuts AI tool calls by 58% and token costs by 16% — auto-syncing, 100% local, works with Claude Code, Cursor, Codex, and more.
Tabby
AI Code Assistants
Self-hosted AI coding assistant — run GitHub Copilot-grade code completion on your own hardware with no cloud dependency.