@justmpm/supergrep 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -0
- package/dist/chunk-4MPFPILM.js +1342 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +10 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +10 -0
- package/package.json +60 -0
package/README.md
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# supergrep
|
|
2
|
+
|
|
3
|
+
**⚠️ Use supergrep ao invés de grep/bash quando a busca for em código-fonte (.ts, .tsx, .js, .css, .html).**
|
|
4
|
+
|
|
5
|
+
Busca estrutural de código com AST Grep via MCP.
|
|
6
|
+
|
|
7
|
+
Encontre padrões de código com precisão sintática — ignorando formatação, espaços e comentários. Como um grep que entende a estrutura do código em vez de tratar tudo como texto.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @justmpm/supergrep
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Instalação
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g @justmpm/supergrep
|
|
19
|
+
# ou use direto:
|
|
20
|
+
npx @justmpm/supergrep
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Configuração
|
|
24
|
+
|
|
25
|
+
### OpenCode / Claude Code
|
|
26
|
+
|
|
27
|
+
Adicione ao `.mcp.json` do projeto:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"mcpServers": {
|
|
32
|
+
"supergrep": {
|
|
33
|
+
"command": "npx",
|
|
34
|
+
"args": ["-y", "@justmpm/supergrep"]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Claude Desktop
|
|
41
|
+
|
|
42
|
+
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
43
|
+
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"mcpServers": {
|
|
48
|
+
"supergrep": {
|
|
49
|
+
"command": "npx",
|
|
50
|
+
"args": ["-y", "@justmpm/supergrep"]
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Ferramentas MCP
|
|
59
|
+
|
|
60
|
+
### `supergrep_find` — Busca Estrutural
|
|
61
|
+
|
|
62
|
+
Encontra padrões de código usando a própria sintaxe da linguagem.
|
|
63
|
+
|
|
64
|
+
**Parâmetros:**
|
|
65
|
+
| Parâmetro | Tipo | Descrição |
|
|
66
|
+
|-----------|------|-----------|
|
|
67
|
+
| `pattern` | string (obrigatório) | Padrão AST Grep. Ex: `console.$METHOD($$$ARGS)` |
|
|
68
|
+
| `lang` | string | Linguagem: `typescript`, `javascript`, `tsx`, `css`, `html` (padrão: typescript) |
|
|
69
|
+
| `path` | string | Arquivo ou diretório (padrão: diretório atual) |
|
|
70
|
+
| `format` | `text` \| `json` | Formato de saída (padrão: text) |
|
|
71
|
+
| `cwd` | string | Diretório de trabalho |
|
|
72
|
+
|
|
73
|
+
**Metavariáveis:**
|
|
74
|
+
- `$VAR` — captura **um** nó da AST (como `.` em regex, mas sintático)
|
|
75
|
+
- `$$$VARS` — captura **zero ou mais** nós
|
|
76
|
+
|
|
77
|
+
**Exemplos de patterns:**
|
|
78
|
+
|
|
79
|
+
| Pattern | O que encontra |
|
|
80
|
+
|---------|---------------|
|
|
81
|
+
| `console.$METHOD($$$ARGS)` | Qualquer chamada de console com qualquer método e args |
|
|
82
|
+
| `function $NAME($$$PARAMS) { $$$BODY }` | Todas as funções com nome, parâmetros e corpo |
|
|
83
|
+
| `import { $$$ITEMS } from '$MODULE'` | Todos os imports nomeados |
|
|
84
|
+
| `const $VAR = $VALUE` | Declarações de constantes |
|
|
85
|
+
| `try { $$$ } catch ($ERR) { $$$ }` | Blocos try-catch |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
### `supergrep_tree` — Explorar AST
|
|
90
|
+
|
|
91
|
+
Mostra a estrutura da AST de um arquivo: tipos de nós, contagens e distribuição.
|
|
92
|
+
|
|
93
|
+
**Parâmetros:**
|
|
94
|
+
| Parâmetro | Tipo | Descrição |
|
|
95
|
+
|-----------|------|-----------|
|
|
96
|
+
| `path` | string | Caminho do arquivo a analisar |
|
|
97
|
+
| `code` | string | OU: snippet de código inline |
|
|
98
|
+
| `lang` | string | Linguagem (obrigatório se usar `code`) |
|
|
99
|
+
| `format` | `text` \| `json` | Formato de saída |
|
|
100
|
+
|
|
101
|
+
**Use para:**
|
|
102
|
+
- Descobrir quais kinds de nós existem antes de escrever patterns
|
|
103
|
+
- Entender a estrutura de um arquivo desconhecido
|
|
104
|
+
- Debugar por que um pattern não está dando match
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### `supergrep_replace` — Preview de Substituição
|
|
109
|
+
|
|
110
|
+
Mostra como ficaria o código após uma substituição estrutural. **Nunca modifica arquivos.**
|
|
111
|
+
|
|
112
|
+
**Parâmetros:**
|
|
113
|
+
| Parâmetro | Tipo | Descrição |
|
|
114
|
+
|-----------|------|-----------|
|
|
115
|
+
| `pattern` | string (obrigatório) | Padrão a encontrar |
|
|
116
|
+
| `rewrite` | string (obrigatório) | Texto de substituição. Use `$VAR` para referenciar metavariáveis |
|
|
117
|
+
| `lang` | string | Linguagem |
|
|
118
|
+
| `path` | string | Arquivo ou diretório |
|
|
119
|
+
| `format` | `text` \| `json` | Formato de saída |
|
|
120
|
+
|
|
121
|
+
**Exemplo:** trocar `console.log` por `logger.info`:
|
|
122
|
+
```
|
|
123
|
+
pattern: "console.log($$$ARGS)"
|
|
124
|
+
rewrite: "logger.info($$$ARGS)"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Quando Usar (e Quando Não Usar)
|
|
130
|
+
|
|
131
|
+
### ✅ Use supergrep (ele é MELHOR que grep/bash):
|
|
132
|
+
- Buscar padrões de código que **grep textual perderia** (quebras de linha, formatação, comentários no meio)
|
|
133
|
+
- Refatorar algo estruturalmente (trocar `var` por `let`, `moment` por `date-fns`)
|
|
134
|
+
- Descobrir a estrutura AST de um arquivo para criar regras de lint
|
|
135
|
+
- Buscar estruturas aninhadas (funções, blocos, imports, try-catch)
|
|
136
|
+
- **Qualquer busca em .ts, .tsx, .js, .css, .html onde estrutura importa**
|
|
137
|
+
|
|
138
|
+
### ❌ Não use supergrep (use a ferramenta certa):
|
|
139
|
+
- Resolver imports entre arquivos → use **ai-tool** (`@justmpm/ai-tool`)
|
|
140
|
+
- Seguir referências de símbolos → use **ai-tool**
|
|
141
|
+
- Analisar dependências/impacto → use **ai-tool**
|
|
142
|
+
- Informação de tipos → use **ai-tool**
|
|
143
|
+
- Busca simples de texto em arquivos não-código (logs, markdown, json) → use **grep** comum
|
|
144
|
+
|
|
145
|
+
### 💡 Se o pattern não der match:
|
|
146
|
+
Use `supergrep_tree` primeiro para descobrir os kinds de nós da AST do arquivo.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Limitações
|
|
151
|
+
|
|
152
|
+
- **Apenas sintático:** sem resolução de tipos, escopo, imports ou análise cross-file
|
|
153
|
+
- **5 linguagens:** TypeScript, JavaScript, TSX, CSS, HTML (limitação do `@ast-grep/napi`)
|
|
154
|
+
- **Metavariáveis no replace:** interpolação manual — cobre casos simples, pode falhar em cenários complexos
|
|
155
|
+
- **Performance:** limitado a 5000 arquivos por busca (use `path` para focar)
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Stack
|
|
160
|
+
|
|
161
|
+
- [ast-grep](https://ast-grep.github.io/) — Motor Rust via NAPI-RS
|
|
162
|
+
- [Tree-sitter](https://tree-sitter.github.io/) — Parsing incremental
|
|
163
|
+
- [MCP SDK](https://github.com/modelcontextprotocol/typescript-sdk) — Protocolo
|
|
164
|
+
- [Zod](https://zod.dev) — Validação
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Requisitos
|
|
169
|
+
|
|
170
|
+
- Node.js >= 18.0.0
|
|
171
|
+
|
|
172
|
+
## Licença
|
|
173
|
+
|
|
174
|
+
MIT — [Koda AI Studio](https://kodaai.app)
|