CommunityCodierung & Entwicklunggithub.com

jlholm/noodle

Strukturelle Codesuche via ast-grep – verwenden, wenn Code-Form und Elementbeziehungen zählen, nicht nur Text. Z. B. „finde asynchrone Funktionen ohne Fehlerbehandlung

Was ist noodle?

Diese Fähigkeit ermöglicht strukturelle Codesuche mit ast-grep, einem Tool, das Code anhand seiner syntaktischen Struktur und nicht nur anhand von Text durchsucht. Sie ist besonders nützlich, wenn Beziehungen zwischen Code-Elementen wichtig sind, z. B. beim Finden von asynchronen Funktionen ohne Fehlerbehandlung oder beim Refactoring von Funktionssignaturen. Unterstützt wird die Arbeit mit der ast-grep CLI, und die bereitgestellte SKILL.md-Dokumentation enthält eine detaillierte Schritt-für-Schritt-Anleitung, wichtige Fallstricke (z. B. die Verwendung von `stopBy: end`, Shell-Escape für Metavariablen) und Debugging-Techniken mit `--debug-query`. Entwickler können damit präzise, baumbasierte Suchmuster definieren (Patterns, relationale Regeln) und diese zuerst mit `--stdin` testen, bevor sie auf die gesamte Codebasis angewendet werden.

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

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

ast-grep

Workflow

  1. Schreibe einen Testschnipsel, der den Zielcode repräsentiert
  2. Schreibe die Regel (beginne mit pattern, steigere auf kind + has/inside falls nötig)
  3. Teste mit --stdin, bevor du die Codebasis durchsuchst
  4. Durchsuche die Codebasis, sobald die Regel zutrifft

Wichtige Fallstricke

Verwende immer stopBy: end bei relationalen Regeln

Ohne stopBy: end stoppen has/inside am ersten nicht passenden Knoten, anstatt den gesamten Teilbaum zu durchlaufen:

# FALSCH – übersieht tief verschachtelte Treffer
has:
  pattern: await $EXPR

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

Maskiere Metavariablen in der Shell

$VAR wird von der Shell interpretiert. Entweder maskieren oder in einfache Anführungszeichen setzen:

# Doppelt angeführt: mit Backslash maskieren
ast-grep scan --inline-rules "id: test
language: javascript
rule:
  pattern: await \$EXPR" .

# Einfach angeführt: keine Maskierung nötig
ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  pattern: await $EXPR' .

Metavariablen müssen den alleinigen Inhalt eines AST-Knotens bilden

Diese funktionieren nicht: obj.on$EVENT, "Hello $WORLD", a $OP b, $jq

Verwende $$OP für unbenannte Knoten (Operatoren, Satzzeichen). Verwende $$$ARGS für null oder mehrere Knoten.

Testen mit --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

Debuggen mit --debug-query

Wenn Regeln nicht zutreffen, inspiziere den AST, um die korrekten kind-Werte zu finden:

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

Formate: cst (alle Knoten), ast (nur benannte), pattern (wie ast-grep dein Muster sieht).

Regelsyntax

Siehe references/rule_reference.md für die vollständige Regelreferenz (atomare, relationale, zusammengesetzte Regeln und Metavariablen).

Individual skills in this repo

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

Verwandte Skills