tsq
SKILL.md
Purpose
Use this skill when you need structured, language-aware insight into code: declarations, references, outlines, and precise AST pattern matches. tsq is best for targeted extraction and analysis that would be noisy with text search.
When to use what
tsq query: Use for custom AST patterns and precise structural matching. Best when you need specific constructs or relationships in the syntax tree.tsq symbols: Use to catalog declarations (functions, types, methods, variables) across files for indexing or summaries.tsq outline: Use to get a high-level file structure (package/module, imports, top-level symbols) when you need quick orientation.tsq refs: Use to find usages of a symbol across a codebase.tsq example-queries: Use only to discover query syntax and patterns. It is a reference, not a required step.
Core concepts
- Tree-sitter queries use capture names (e.g.,
@name) to extract data. Queries without captures return matches with no usable payload. - Use
--filefor a single file,--pathto scan a directory. - Prefer
symbolsoroutlinewhen you do not need a custom query.
Recommended workflow
- Start with
outlinefor a quick map of a file. - Use
symbolsto gather relevant declarations. - Use
refsto trace usage. - Use
queryfor precise AST patterns or advanced filtering.
Minimal cross-language examples
These patterns are representative; adjust node types and names for the target language grammar.
; Function declarations (capture the whole node)
(function_declaration) @fn
; Function names only
(function_declaration name: (identifier) @name)
; Method calls (object.method())
(call_expression
function: (selector_expression
operand: (_) @receiver
field: (field_identifier) @method))
; Type definitions (struct/class-like)
(type_declaration
(type_spec
name: (type_identifier) @name
type: (_) @type_def))
; Imports (module paths)
(import_spec path: (interpreted_string_literal) @path)
JSON output schemas
Tip: pipe tsq ... output into jq to extract exactly what you need, e.g.
tsq symbols --path . --compact | jq '.[].symbols[] | select(.kind=="function") | .name'
tsq query -> []QueryMatch
[
{
"file": "path/to/file.go",
"pattern": 0,
"captures": [
{
"name": "name",
"node_type": "identifier",
"text": "Foo",
"range": {
"start": { "line": 12, "column": 6 },
"end": { "line": 12, "column": 9 }
}
}
]
}
]
tsq symbols -> []SymbolsResult
[
{
"file": "path/to/file.go",
"symbols": [
{
"name": "Foo",
"kind": "function|type|method|var|const|interface|struct|field",
"visibility": "public|private",
"file": "path/to/file.go",
"range": {
"start": { "line": 12, "column": 1 },
"end": { "line": 20, "column": 2 }
},
"signature": "func Foo(...) ...",
"source": "func Foo() { ... }",
"receiver": "MyType",
"doc": "Doc comment text"
}
]
}
]
tsq outline -> FileOutline
{
"file": "path/to/file.go",
"package": "main",
"imports": [{ "path": "fmt", "alias": "f" }],
"symbols": [
{
"name": "Foo",
"kind": "function|method|struct|interface|type|const|var",
"visibility": "public|private",
"file": "path/to/file.go",
"range": {
"start": { "line": 12, "column": 1 },
"end": { "line": 20, "column": 2 }
},
"source": "func Foo() { ... }",
"receiver": "MyType"
}
]
}
tsq refs -> RefsResult
{
"symbol": "Foo",
"references": [
{
"symbol": "Foo",
"kind": "call|type_ref|field_access|identifier|reference",
"file": "path/to/file.go",
"position": { "line": 42, "column": 7 },
"context": "Foo()"
}
]
}
Errors (stderr)
{ "error": "message" }
Weekly Installs
6
Repository
arjunmahishi/dotfilesGitHub Stars
11
First Seen
Feb 13, 2026
Security Audits
Installed on
cline6
github-copilot6
codex6
kimi-cli6
gemini-cli6
cursor6