CommunityProgramación y desarrollogithub.com

jlholm/noodle

Búsqueda estructural de código mediante ast-grep, ideal cuando importa la forma del código y las relaciones entre elementos, no solo el texto.

¿Qué es noodle?

Esta skill proporciona una guía completa para usar ast-grep en tareas de búsqueda estructural de código. A diferencia de las búsquedas de texto simples con Grep, permite encontrar patrones basados en la estructura sintáctica, como funciones asíncronas sin manejo de errores o refactorizaciones de parámetros. Incluye un flujo de trabajo paso a paso, advertencias críticas (como el uso de `stopBy: end` en reglas relacionales y el escape de metavariables en el shell), métodos de prueba con `--stdin` y depuración mediante `--debug-query`. Está diseñada para agentes de IA que necesitan realizar refactorizaciones complejas y búsquedas semánticas en múltiples lenguajes de programación.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jlholm/noodle/tree/HEAD/.agents/skills/ast-grep

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

ast-grep

Flujo de trabajo

  1. Escribe un fragmento de prueba que represente el código objetivo.
  2. Escribe la regla (comienza con pattern, escala a kind + has/inside si es necesario).
  3. Prueba con --stdin antes de buscar en el código base.
  4. Busca en el código base una vez que la regla coincida.

Errores críticos

Usa siempre stopBy: end en reglas relacionales

Sin él, has/inside se detienen en el primer nodo que no coincide, en lugar de recorrer todo el subárbol:

# MAL — no encontrará coincidencias anidadas profundas
has:
  pattern: await $EXPR

# BIEN
has:
  pattern: await $EXPR
  stopBy: end

Escapa las metavariables en el shell

$VAR es interpretado por el shell. Escapa con barra invertida o usa comillas simples:

# Con comillas dobles: escapa con barra invertida
ast-grep scan --inline-rules "id: test
language: javascript
rule:
  pattern: await \$EXPR" .

# Con comillas simples: no necesita escape
ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  pattern: await $EXPR' .

Las metavariables deben ser el contenido único de un nodo AST

Estos no funcionan: obj.on$EVENT, "Hello $WORLD", a $OP b, $jq

Usa $$OP para nodos sin nombre (operadores, puntuación). Usa $$$ARGS para cero o más nodos.

Pruebas con --stdin

echo "async function test() { await fetch(); }" | ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  kind: function_declaration
  has:
    pattern: await $EXPR
    stopBy: end' --stdin

Depuración con --debug-query

Cuando las reglas no coinciden, inspecciona el AST para encontrar los valores correctos de kind:

ast-grep run --pattern 'your code here' --lang javascript --debug-query=cst

Formatos: cst (todos los nodos), ast (solo los nombrados), pattern (cómo ve ast-grep tu patrón).

Sintaxis de reglas

Consulta references/rule_reference.md para la referencia completa de reglas (reglas atómicas, relacionales, compuestas y metavariables).

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Skills relacionados