noodle

Recherche structurelle de code via ast-grep — à utiliser lorsque la forme du code et les relations entre éléments sont importantes, pas seulement le texte. Par exemple : « trouver les fonctions async sans gestion d'erreur », « refactoriser foo(a, b) en foo({ a, b }) ». Utilisez Grep pour les recherches simples de noms.

Qu'est-ce que noodle ?

Cette compétence permet aux agents IA comme Claude Code d'effectuer une recherche structurelle de code en utilisant **ast-grep**. Contrairement à la recherche textuelle classique (grep), l'approche structurelle se base sur l'arbre syntaxique abstrait (AST) du code. Cela permet de trouver des motifs de code selon leur forme et leurs relations (par exemple « toutes les fonctions async sans gestion d'erreur ») ou d'effectuer des refactorisations précises. La compétence est compatible avec Claude Code et tout agent utilisant des outils CLI. Le workflow typique consiste à écrire un snippet de test, créer une règle YAML (en commençant par `pattern`, puis en utilisant `kind` avec `has`/`inside` si nécessaire), tester avec `--stdin`, puis lancer la recherche sur l'ensemble du codebase. Elle met en garde contre des pièges courants comme l'oubli de `stopBy: end` pour les règles relationnelles ou l'échappement des métavariables dans le shell. Elle mentionne aussi des options de débogage comme `--debug-query` pour inspecter l'AST.

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

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

ast-grep

Workflow

  1. Écrire un snippet de test représentant le code cible
  2. Écrire la règle (commencer par pattern, escalader à kind + has/inside si nécessaire)
  3. Tester avec --stdin avant de chercher dans le codebase
  4. Chercher dans le codebase une fois que la règle correspond

Pièges critiques

Toujours utiliser stopBy: end sur les règles relationnelles

Sans cela, has/inside s'arrêtent au premier nœud non correspondant au lieu de parcourir tout le sous-arbre :

# MAUVAIS — manquera les correspondances imbriquées profondément
has:
  pattern: await $EXPR

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

Échapper les métavariables dans le shell

$VAR est interprété par le shell. Échappez-le ou utilisez des guillemets simples :

# Guillemets doubles : échapper avec un antislash
ast-grep scan --inline-rules "id: test
language: javascript
rule:
  pattern: await \$EXPR" .

# Guillemets simples : pas besoin d'échappement
ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  pattern: await $EXPR' .

Les métavariables doivent être le contenu unique d'un nœud AST

Ceci ne fonctionne pas : obj.on$EVENT, "Hello $WORLD", a $OP b, $jq

Utilisez $$OP pour les nœuds sans nom (opérateurs, ponctuation). Utilisez $$$ARGS pour zéro ou plusieurs nœuds.

Tester avec --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

Déboguer avec --debug-query

Lorsque les règles ne correspondent pas, inspectez l'AST pour trouver les bonnes valeurs kind :

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

Formats : cst (tous les nœuds), ast (nommés uniquement), pattern (comment ast-grep voit votre motif).

Syntaxe des règles

Voir references/rule_reference.md pour la référence complète des règles (règles atomiques, relationnelles, composites et métavariables).

Individual skills in this repo

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

Skills associés