Skip to content
cccskills
FreePublished on GitHub

code-structural-search

Use ast-grep for AST-based code pattern matching.

The English summary is being prepared. Showing the original description.

See how to install

Files included (12)

  • SKILL.md8.1 KB
  • commands/code-structural-search.md122 B
  • hooks/post-execute.cjs322 B
  • hooks/pre-execute.cjs439 B
  • PATTERNS.md11.2 KB
  • README.md7.8 KB
  • references/research-requirements.md344 B
  • rules/code-structural-search.md241 B
  • schemas/input.schema.json526 B
  • schemas/output.schema.json266 B
  • scripts/main.cjs1.1 KB
  • templates/implementation-template.md196 B

SKILL.md (original)

Review the instructions the agent will receive before you install.

Code Structural Search

Use ast-grep for AST-based code pattern matching.

When to Use

  • Find code by structure, not keywords
  • "Find all functions with 3 arguments"
  • "Find all classes that extend X"
  • "Find all database queries"
  • "Find all error handling patterns"
  • Precise code refactoring (change exact patterns)

Interface

Skill({ skill: 'code-structural-search', args: 'pattern-here --lang ts' });

Language Support

ast-grep supports 20+ languages via tree-sitter:

LanguageFlagFile Extensions
JavaScript--lang js.js, .jsx
TypeScript--lang ts.ts, .tsx
Python--lang py.py, .pyi
Go--lang go.go
Rust--lang rs.rs
Java--lang java.java
C--lang c.c, .h
C++--lang cpp.cpp, .cc, .hpp, .hh
C#--lang cs.cs
Kotlin--lang kt.kt, .kts
Swift--lang swift.swift
PHP--lang php.php
Ruby--lang rb.rb
Lua--lang lua.lua
Elixir--lang ex.ex, .exs
HTML--lang html.html, .htm
CSS--lang css.css
JSON--lang json.json
Bash--lang bash.sh, .bash
Thrift--lang thrift.thrift

Pattern Examples

JavaScript/TypeScript

Find all functions:

function $NAME($ARGS) { $$ }

Find functions with exactly 2 arguments:

function $NAME($A, $B) { $$ }

Find async functions:

async function $NAME($ARGS) { $$ }

Find class methods:

class $NAME {
  $METHOD($ARGS) { $$ }
}

Find arrow functions:

const $NAME = ($ARGS) => { $$ }

Find console.log statements:

console.log($$$)

Find try-catch blocks:

try { $$ } catch ($ERR) { $$ }

Python

Find all functions:

def $NAME($ARGS): $$$

Find class definitions:

class $NAME: $$$

Find async functions:

async def $NAME($ARGS): $$$

Find imports:

import $MODULE

Find from imports:

from $MODULE import $$$

Go

Find all functions:

func $NAME($ARGS) $RETURN { $$ }

Find struct definitions:

type $NAME struct { $$$ }

Find interface definitions:

type $NAME interface { $$$ }

Rust

Find all functions:

fn $NAME($ARGS) -> $RETURN { $$ }

Find impl blocks:

impl $NAME { $$$ }

Find pub functions:

pub fn $NAME($ARGS) -> $RETURN { $$ }

Java

Find all methods:

public $RETURN $NAME($ARGS) { $$ }

Find class definitions:

public class $NAME { $$$ }

Find interface definitions:

public interface $NAME { $$$ }

Pattern Syntax

SymbolMeaningExample
$NAMESingle node/identifierfunction $NAME() {}
$$$Zero or more statements/nodesclass $NAME { $$$ }
$$Zero or more statements (block)if ($COND) { $$ }
$_Anonymous wildcard (discard)console.log($_)

Performance

  • Speed: <50ms per search (typical)
  • Best combined with semantic search (Phase 1)
  • Use ripgrep first for initial file discovery

vs Other Tools

vs Ripgrep (grep):

  • Ripgrep: Fast text search, finds keywords
  • ast-grep: Structural search, finds exact code patterns
  • Use ripgrep first → then ast-grep to refine

vs Semantic Search (Phase 1):

  • Semantic: Understands code meaning
  • ast-grep: Understands code structure
  • Combined: Best results (Phase 2)

Usage Workflow

  1. Broad search with ripgrep:

    Skill({ skill: 'ripgrep', args: 'authenticate --type ts' })
    
  2. Structural refinement with ast-grep:

    Skill({ skill: 'code-structural-search', args: 'function authenticate($$$) { $$ } --lang ts' })
    
  3. Semantic understanding with Phase 1:

    Skill({ skill: 'code-semantic-search', args: 'authentication logic' })
    

Common Use Cases

Security Patterns

Find unvalidated inputs:

router.post($PATH, ($REQ, $RES) => { $$ })

Find SQL queries (potential injection):

db.query(`SELECT * FROM ${$VAR}`)

Find eval usage:

eval($$$)

Code Quality Patterns

Find deeply nested functions:

function $NAME($ARGS) {
  if ($COND) {
    if ($COND2) {
      if ($COND3) { $$ }
    }
  }
}

Find long parameter lists (>5 params):

function $NAME($A, $B, $C, $D, $E, $F, $$$) { $$ }

Find unused variables:

const $NAME = $VALUE;

Refactoring Patterns

Find old API usage:

oldAPI.deprecatedMethod($$$)

Find callback patterns (convert to async/await):

$FUNC($ARGS, ($ERR, $DATA) => { $$ })

Find React class components (convert to hooks):

class $NAME extends React.Component { $$$ }

Iron Laws

  1. ALWAYS specify the language with --lang flag — without a language flag, ast-grep applies heuristics that produce false positives; specify --lang ts, --lang py, etc. for accurate AST parsing.
  2. ALWAYS use ripgrep/keyword search first to narrow the target set — structural search over the whole codebase is slow; use ripgrep to find candidate files first, then apply ast-grep for precise matching.
  3. NEVER use regex for structural code patterns — regex breaks on formatting differences, nested structures, and multi-line code; AST patterns are format-independent and semantically precise.
  4. ALWAYS test patterns on a known match before running project-wide — patterns with incorrect syntax silently match nothing; verify the pattern finds at least one known example before broad application.
  5. ALWAYS use $$$ for variable argument lists, not * or . — ast-grep uses metavariable syntax ($NAME, $$$, $$); regex or glob syntax in patterns produces silent failures.

Anti-Patterns

Anti-PatternWhy It FailsCorrect Approach
No --lang flagWrong parser applied; produces false positives and missesAlways specify --lang ts, --lang py, etc.
Running project-wide without ripgrep pre-filterSlow on large codebases; many irrelevant resultsUse ripgrep to identify candidate files first
Regex for structural matchingBreaks on multi-line, whitespace variations, nestingUse ast-grep AST patterns ($NAME, $$$, etc.)
Untested pattern on full codebaseIncorrect patterns silently return nothingTest on one known match first
Using * or . for wildcardsNot valid ast-grep syntax; ignored or errorsUse $NAME for single node, $$$ for sequences

Memory Protocol (MANDATORY)

Before starting: Read .claude/context/memory/learnings.md

After completing:

  • New pattern → .claude/context/memory/learnings.md
  • Issue found → .claude/context/memory/issues.md
  • Decision made → .claude/context/memory/decisions.md

ASSUME INTERRUPTION: If it's not in memory, it didn't happen.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Ensure accessibility in UI components including semantic HTML, ARIA attributes, keyboard navigation, and WCAG 2.2 AA compliance.

The English summary is being prepared. Showing the original description.

oimiragieo/agent-studio42Updated Jul 14, 2026

Use when you want to improve response quality through meta-cognitive reasoning. Applies 15+ reasoning methods to reconsider and refine initial outputs.

The English summary is being prepared. Showing the original description.

oimiragieo/agent-studio42Updated Jul 14, 2026

N-round opposing-stance debates for trade-off analysis. Assigns pro/con roles to agents, runs structured debate rounds with quality scoring, and produces a moderator synthesis with confidence-rated recommendation. Generalizable to architecture, technology, security, and design decisions.

The English summary is being prepared. Showing the original description.

oimiragieo/agent-studio42Updated Jul 14, 2026

Force adversarial code review stance that eliminates confirmation bias — reviewer must find issues or re-analyze

The English summary is being prepared. Showing the original description.

oimiragieo/agent-studio42Updated Jul 14, 2026

Creates specialized AI agents on-demand when no existing agent matches a request. Use when the Router cannot find a suitable agent for a task. Enables self-evolution by generating persistent agents.

The English summary is being prepared. Showing the original description.

oimiragieo/agent-studio42Updated Jul 14, 2026

LLM-as-judge evaluation framework with 5-dimension rubric (accuracy, groundedness, coherence, completeness, helpfulness) for scoring AI-generated content quality with weighted composite scores and evidence citations

The English summary is being prepared. Showing the original description.

oimiragieo/agent-studio42Updated Jul 14, 2026

See all skills by oimiragieo

Report a problem with this skill