Community코딩 & 개발github.com

jlholm/noodle

ast-grep를 사용한 구조적 코드 검색 — 단순한 텍스트 검색이 아닌 코드 구조와 요소 간 관계가 중요할 때 사용합니다. 예: 'async 함수 중 오류 처리가 없는 것 찾기', 'foo(a, b)를 foo({ a, b })로 리팩토링' 등. Grep은 단순 이름 검색에 사용하세요.

noodle란 무엇인가요?

이 스킬은 ast-grep을 이용한 구조적 코드 검색 도구로, 단순 텍스트 매칭을 넘어 코드의 구조와 요소 간 관계를 기반으로 검색합니다. 개발자는 'async 함수 중 오류 처리가 없는 것 찾기' 또는 'foo(a, b)를 foo({ a, b })로 리팩토링'과 같이 코드 모양과 관계를 명시하는 검색에 활용할 수 있습니다. Cli 환경에서 실행되며, 단순 이름 검색이 필요한 경우 Grep을 사용하는 것이 더 적합합니다. 주요 기능으로는 패턴 기반 검색, AST 노드 종류와 관계 규칙(has, inside) 지원, 메타변수를 이용한 유연한 패턴 정의, --stdin을 통한 빠른 테스트, --debug-query를 통한 AST 디버깅 등이 있습니다. 주의사항으로는 관계 규칙 사용 시 항상 stopBy: end를 지정해야 하며, 메타변수($VAR)는 셸에서 해석되지 않도록 적절히 이스케이프하거나 작은따옴표로 감싸야 하고, 메타변수는 AST 노드의 유일한 내용이어야 합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jlholm/noodle/tree/HEAD/.agents/skills/ast-grep

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

ast-grep

워크플로우

  1. 대상 코드를 나타내는 테스트 스니펫을 작성합니다.
  2. 규칙을 작성합니다(pattern으로 시작하고, 필요시 kind + has/inside로 확장).
  3. 코드베이스 검색 전에 --stdin으로 테스트합니다.
  4. 규칙이 일치하면 코드베이스를 검색합니다.

중요한 주의사항

관계 규칙에는 항상 stopBy: end 사용

has/inside는 stopBy: end 없이 전체 하위 트리를 탐색하지 않고 첫 번째 비일치 노드에서 멈춥니다:

# 잘못된 예 - 깊이 중첩된 일치 항목을 놓칩니다.
has:
  pattern: await $EXPR

# 올바른 예
has:
  pattern: await $EXPR
  stopBy: end

셸에서 메타변수 이스케이프

$VAR는 셸에서 해석됩니다. 이스케이프하거나 작은따옴표를 사용하세요:

# 큰따옴표: 백슬래시로 이스케이프
ast-grep scan --inline-rules "id: test
language: javascript
rule:
  pattern: await \$EXPR" .

# 작은따옴표: 이스케이프 불필요
ast-grep scan --inline-rules 'id: test
language: javascript
rule:
  pattern: await $EXPR' .

메타변수는 AST 노드의 유일한 내용이어야 함

다음은 작동하지 않습니다: obj.on$EVENT, "Hello $WORLD", a $OP b, $jq

이름 없는 노드(연산자, 구두점)에는 $$OP를 사용하세요. 0개 이상의 노드에는 $$$ARGS를 사용하세요.

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

--debug-query로 디버깅

규칙이 일치하지 않을 때 AST를 검사하여 올바른 kind 값을 찾습니다:

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

형식: cst (모든 노드), ast (이름 있는 노드만), pattern (ast-grep이 패턴을 보는 방식).

규칙 문법

전체 규칙 참조(원자 규칙, 관계 규칙, 복합 규칙 및 메타변수)는 references/rule_reference.md를 참조하세요.

Individual skills in this repo

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

관련 스킬