parsing-source

SkillFiles & storage

Use when the user wants a tree-sitter syntax tree for a source file — an s-expression dump or JSON tree. Covers `ts-pack parse`, language auto-detection vs `--language`, stdin input, and reading `has_errors`.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the parsing-source skill

What this skill tells your AI

The instructions your AI receives, as published by xberg-io/tree-sitter-language-pack in plugin/skills/parsing-source/SKILL.md and read by ahel’s review.

Parsing source into a syntax tree

ts-pack parse <file> parses one source file with the matching tree-sitter grammar and prints the resulting concrete syntax tree. Use it when the user wants the tree itself — to inspect node structure, debug a grammar, or feed an s-expression to another tool.

Quick recipe

# S-expression (default) — auto-detects language from the file extension
ts-pack parse src/main.rs

# JSON form: { "language", "sexp", "has_errors" }
ts-pack parse src/main.rs --format json

Flag surface

FlagShortDefaultPurpose
--language <name>-lautoOverride the language (skip extension detection).
--format <fmt>-fsexpsexp or json.

The parser library for the language downloads on first use and is cached.

Language detection

The language is auto-detected from the file extension. Override it when the extension is missing, misleading, or you are reading from stdin:

# Misleading extension or no extension:
ts-pack parse script --language bash

# stdin (use "-" as the file):
cat snippet.py | ts-pack parse - --language python

stdin cannot be auto-detected by path; always pass --language with -. For content-based detection without a path, use the SDK (detect_language_from_content) — see the detecting-languages skill.

Output shapes

S-expression

A nested (node_type child ...) tree. Compact, good for eyeballing structure or piping to a grammar tool.

JSON

{
  "language": "rust",
  "sexp": "(source_file (function_item ...))",
  "has_errors": false
}

Read has_errors to know whether the parse produced any error nodes — a fast syntax check. For positioned, per-error detail use ts-pack process <file> --diagnostics (see extracting-code-structure).

Examples

# Inspect a TypeScript file's tree
ts-pack parse src/app.ts

# Machine-readable, then check for syntax errors with jq
ts-pack parse src/app.ts --format json | jq '.has_errors'

# Parse a heredoc as Python
printf 'def f():\n    return 1\n' | ts-pack parse - -l python

When to reach for process instead

parse gives you the raw tree. If the user wants structured metadata (functions, imports, exports, symbols, docstrings) rather than the tree, use ts-pack process — see the extracting-code-structure skill.

Signals

GitHub stars
465
Forks
68
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
parsing-source
Source
github.com/xberg-io/tree-sitter-language-pack