Pular para o conteúdo
Skillpedia
Código em geral70 mil · #1733

ast-grep

Faz seu agente buscar e reescrever código usando padrões de sintaxe em vários idiomas. Ideal para modificar código baseado em sua estrutura, não apenas em texto.

O que ela faz

ast-grep é uma ferramenta que busca e modifica código em vários idiomas. Ele entende a estrutura do código, não apenas o texto, para encontrar padrões específicos ou fazer alterações.

Quando usar

  • ✓Encontrar todas as funções que recebem um parâmetro específico.
  • ✓Substituir um trecho de código por outro em vários arquivos.
  • ✓Verificar se o código segue certas regras de estrutura.

Exemplo do que pedir para a IA

“Encontre todas as chamadas de função `console.log` e substitua por `logger.info` no meu projeto TypeScript.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/code-yeongyu/oh-my-openagent/blob/dev/packages/shared-skills/skills/ast-grep/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/code-yeongyu/oh-my-openagent/blob/dev/packages/shared-skills/skills/ast-grep/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Você descreve o que quer encontrar ou mudar usando uma linguagem que entende a estrutura do código. A ferramenta analisa seu código como se fosse um código real e faz as modificações necessárias.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add code-yeongyu/oh-my-openagent --skill ast-grep

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/packages/shared-skills/skills/ast-grep/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

ast-grep

sg (também instalado como ast-grep) é uma ferramenta de busca e reescrita ciente de AST em 25 idiomas. Ele trata seu padrão como código, o analisa da mesma forma que analisa seu projeto e corresponde estruturalmente. É a ferramenta certa sempre que sua pergunta depende da forma do código em vez de bytes de texto.

Esta habilidade envia um wrapper Python em scripts/ast_grep_helper.py e scripts de instalação de plataforma em install.sh (POSIX) e install.ps1 (Windows). O helper adiciona validação de padrão offline, o truque de reescrita de duas passagens e resolução automática de binários. Use-o como seu ponto de entrada padrão.


Nativo OmO: as ferramentas MCP ast-grep (caminho mais rápido, sem CLI necessário)

O OmO nativo também registra um servidor MCP ast-grep agrupado. Suas três ferramentas são adiadas: elas estão ausentes da lista de ferramentas residentes e ativam automaticamente na primeira vez que você as chama pelo nome — sem necessidade de viagem de ida e volta tool_search.

  • mcp__ast_grep_search({ pattern, language, paths }) — busca de forma AST, o equivalente MCP de sg run -p. Prefira isso em vez de usar o shell para sg para pesquisas pontuais: sem instalação, sem problemas de PATH.
  • mcp__ast_grep_rewrite({ pattern, rewrite, language, paths, apply }) — visualiza correspondências (apply: false, o padrão) ou aplica a reescrita (apply: true). Mesma disciplina de duas passagens que sg run -r: visualize primeiro, depois aplique.
  • mcp__ast_grep_scan({ paths }) — executa regras YAML de projeto (sgconfig.yml, rules/), o equivalente MCP de sg scan.

Mesma linguagem de padrão que a CLI: $VAR corresponde a um nó AST, $$$VAR corresponde a zero ou mais, e o padrão é código, não regex. paths aceita uma lista de arquivos ou diretórios; language é necessário para padrões que são ambíguos entre idiomas.


Quando usar esta habilidade

Use-a sempre que a pergunta do usuário for sobre estrutura de código, não bytes:

  • "Encontre todas as funções que recebem um parâmetro Request."
  • "Reescreva todos os console.log(x) para logger.info(x)."
  • "Remova todas as conversões as any."
  • "Substitua require(...) por import em todo o repositório."
  • "Encontre blocos catch vazios."
  • "Migre Optional[X] para X | None."
  • "Aplique este codemod em estes 200 arquivos."
  • "Execute nossas regras de lint YAML e exiba as violações."

Mude para grep / rg simples quando a pergunta for em formato de texto (conteúdo de literais de string, comentários, cabeçalhos de licença, nomes de arquivos, regex entre idiomas). Em caso de dúvida, pergunte: "a resposta depende da árvore de sintaxe do idioma, ou apenas dos bytes do arquivo?" Se for o primeiro, ast-grep. Se for o último, grep.


Três coisas que o agente deve internalizar

1. ast-grep NÃO é regex

Os curingas são $VAR (um nó AST) e $$$ (zero ou mais nós). A sintaxe regex falha silenciosamente:

Você escreveu O que ast-grep viu O que você queria
foo|bar OU bitwise de foo e bar executar duas buscas separadas
.*foo não analisável $$$ foo (se $$$ for uma lista de nós) ou use rg
\w+ não analisável $VAR para capturar qualquer identificador
[a-z] classe de caracteres, não analisável mude para rg

A tabela completa de antipadrões está em references/pitfalls.md §1. O helper validate pega esses problemas mecanicamente — chame-o antes de depurar "sem correspondências" manualmente.

2. Padrões devem ser código válido

O próprio padrão deve ser analisável. def $FN($$$): falha porque o : final o torna incompleto; use def $FN($$$). function $NAME sem parâmetros/corpo falha; use function $NAME($$$) { $$$ }. Tabela completa por idioma em references/pitfalls.md §2.

3. --update-all e --json são mutuamente exclusivos (silenciosamente)

Este é o maior problema ao scriptar. sg run -p P -r R --json --update-all retorna o JSON, mas não modifica os arquivos. Para visualizar E aplicar, execute duas passagens:

sg run -p P -r R --json=compact .   # pass 1: see what would change
sg run -p P -r R --update-all .     # pass 2: actually apply

O helper faz isso automaticamente quando você chama replace --apply. Leia references/pitfalls.md §9.


O script helper — scripts/ast_grep_helper.py

Um wrapper Python 3 de arquivo único da biblioteca padrão. O mesmo em todos os sistemas operacionais. O ponto de entrada padrão do agente.

search — encontra todas as correspondências de um padrão

python3 scripts/ast_grep_helper.py search 'console.log($MSG)' --lang ts src/

Valida o padrão offline primeiro. Se o padrão parecer regex (\w, .*, |, etc.), o helper sai com uma dica e nunca chama sg — economiza uma viagem de ida e volta. Passe --force para pular a validação.

Flags:

…

Perguntas frequentes

Qual a diferença entre ast-grep e grep (ou regex)?

grep e regex olham para o texto como uma sequência de caracteres. ast-grep entende a estrutura do código (como funções, variáveis, etc.), permitindo buscas e modificações mais precisas baseadas na forma do código.

O que são os caracteres `$VAR` e `$$$`?

`$VAR` é usado para capturar uma parte da estrutura do código (como um nome de variável ou função). `$$$` é usado para capturar zero ou mais partes da estrutura do código.

Como faço para aplicar as mudanças que encontrei?

Você pode primeiro ver uma prévia das mudanças (dry-run) e depois executar o comando novamente com a opção de aplicar para modificar os arquivos de fato.

Detalhes

Descrição original do autor

Searches and rewrites code by AST shape across 25 languages. Use when the target is a syntax pattern (every call/class/import shaped like X, a codemod, a YAML rule) rather than literal text; for plain strings, comments, or filenames, use rg.

repo: code-yeongyu/oh-my-openagent

Popularidade

Estrelas no GitHub
70 mil
Posição no ranking
#1733
Licença
NOASSERTION
Atualizada em
16/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas