@mocoto/mahoraga 0.15.0 → 0.15.2

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.
Files changed (61) hide show
  1. package/Docs/.obsidian/app.json +7 -0
  2. package/Docs/.obsidian/appearance.json +8 -0
  3. package/Docs/.obsidian/community-plugins.json +28 -0
  4. package/Docs/.obsidian/core-plugins-migration.json +18 -0
  5. package/Docs/.obsidian/core-plugins.json +73 -0
  6. package/Docs/.obsidian/graph.json +22 -0
  7. package/Docs/.obsidian/workspace.json +196 -0
  8. package/Docs/01-arquitetura/ADR-001-estrutura-testes.md +31 -0
  9. package/Docs/01-arquitetura/_index.md +152 -0
  10. package/Docs/02-componentes/_index.md +294 -0
  11. package/Docs/02-componentes/configuracao.md +110 -0
  12. package/Docs/02-componentes/supressao-inline.md +88 -0
  13. package/Docs/03-guias/_index.md +173 -0
  14. package/Docs/03-guias/contribuindo.md +71 -0
  15. package/Docs/03-guias/testes.md +133 -0
  16. package/Docs/04-glossario/_index.md +29 -0
  17. package/Docs/04-glossario/termos.md +247 -0
  18. package/Docs/05-referencias/_index.md +88 -0
  19. package/Docs/06-feedbacks/feedback.md +74 -0
  20. package/Docs/Sem t/303/255tulo.base" +3 -0
  21. package/Docs/Sem t/303/255tulo.md +0 -0
  22. package/Docs/_home.md +140 -0
  23. package/Docs/partials/AVISO-PROVENIENCIA.md +3 -0
  24. package/Docs/templates/ADR.md +24 -0
  25. package/Docs/templates/componente.md +34 -0
  26. package/Docs/templates/guia.md +28 -0
  27. package/README.md +269 -26
  28. package/dist/analysts/detectors/detector-bugs-ml.js +5 -0
  29. package/dist/analysts/js-ts/registrar.js +1 -1
  30. package/dist/analysts/plugins/detector-markdown.js +2 -2
  31. package/dist/analysts/react/analysts/analyst-react-hooks.js +30 -15
  32. package/dist/analysts/react/analysts/analyst-react.js +11 -2
  33. package/dist/analysts/react/detectors/detector-react-best-practices.js +7 -4
  34. package/dist/caretakers/caretaker-imports.js +0 -9
  35. package/dist/cli/commands/command-github-actions.js +0 -27
  36. package/dist/cli/diagnostic/filters.js +1 -4
  37. package/dist/core/config/config.js +2 -3
  38. package/dist/core/config/excludes-padrao.js +3 -2
  39. package/dist/core/messages/en/cli/cli-command-github-actions-messages.js +0 -5
  40. package/dist/core/messages/en/github/index.js +0 -1
  41. package/dist/core/messages/ja/cli/cli-command-github-actions-messages.js +0 -5
  42. package/dist/core/messages/ja/github/index.js +0 -1
  43. package/dist/core/messages/pt/cli/cli-command-github-actions-messages.js +0 -5
  44. package/dist/core/messages/pt/github/index.js +0 -1
  45. package/dist/core/messages/zh/cli/cli-command-github-actions-messages.js +0 -5
  46. package/dist/core/messages/zh/github/index.js +0 -1
  47. package/dist/core/registry/file-registry.js +1 -1
  48. package/dist/node.loader.js +0 -2
  49. package/dist/reports/report-structure.js +2 -8
  50. package/dist/shared/formatters/formatters/commons.js +36 -10
  51. package/dist/shared/formatters/formatters/shell.js +6 -3
  52. package/dist/shared/helpers/magic-constants-whitelist.js +14 -1
  53. package/dist/types/analysts/index.js +1 -1
  54. package/dist/types/processing/filters.js +1 -4
  55. package/package.json +31 -32
  56. package/dist/app/github.js +0 -14
  57. package/dist/app/index.js +0 -1
  58. package/dist/core/messages/en/github/github-app-messages.js +0 -9
  59. package/dist/core/messages/ja/github/github-app-messages.js +0 -9
  60. package/dist/core/messages/pt/github/github-app-messages.js +0 -9
  61. package/dist/core/messages/zh/github/github-app-messages.js +0 -9
package/Docs/_home.md ADDED
@@ -0,0 +1,140 @@
1
+ ---
2
+ Proveniência e Autoria: Este documento integra o projeto @mocoto/mahoraga (licença MIT-0).
3
+ tags: [moc, index]
4
+ created: 2026-07-24
5
+ updated: 2026-07-25
6
+ ---
7
+
8
+ # @mocoto/mahoraga: Documentação Viva
9
+
10
+ CLI modular para análise, diagnóstico e manutenção de projetos JavaScript/TypeScript e multi-stack leve.
11
+
12
+ ## Navegação
13
+
14
+ | Área | Descrição |
15
+ | ---------------------------------- | ------------------ | ------------------------------------------------------------ |
16
+ | [[01-arquitetura/_index\ | Arquitetura]] | Decisões arquiteturais, ADRs, diagramas, fluxos |
17
+ | [[02-componentes/_index\ | Componentes]] | Documentação de todos os módulos do sistema |
18
+ | [[02-componentes/supressao-inline\ | Supressão Inline]] | Sistema de `@mahoraga-disable` para analistas e formatadores |
19
+ | [[03-guias/_index\ | Guias]] | Guias de contribuição, testes, CLI, debug |
20
+ | [[04-glossario/_index\ | Glossário]] | Termos do domínio e conceitos |
21
+ | [[05-referencias/_index\ | Referências]] | Links externos, specs, recursos |
22
+
23
+ ## Visão Geral
24
+
25
+ Mahoraga é uma ferramenta CLI que funciona como "médico de projetos": analisa código fonte, detecta problemas de qualidade, segurança e arquitetura, e oferece correções automatizadas. Suporta múltiplas linguagens (JS, TS, React, CSS, HTML, Python, Shell, SQL, Go, Rust, PHP) e plataformas de CI/CD (GitHub Actions, GitLab CI, CircleCI, Jenkins, Azure Pipelines).
26
+
27
+ ## Stack
28
+
29
+ - **Runtime:** Node.js >=24.16.0
30
+ - **Linguagem:** TypeScript (ES2024, NodeNext)
31
+ - **Build:** tsc + tsc-alias
32
+ - **Testes:** Vitest v4 + v8 coverage
33
+ - **CLI:** Commander.js
34
+ - **Parser:** Babel (AST), postcss, htmlparser2, fast-xml-parser
35
+ - **GPG:** openpgp (Ed25519)
36
+ - **i18n:** pt, en, zh, ja
37
+ - **Licença:** MIT-0
38
+
39
+ ## Snapshot do Projeto
40
+
41
+ | Métrica | Valor |
42
+ |---------|-------|
43
+ | Versão | 0.15.1 |
44
+ | Comandos CLI | 27 |
45
+ | Arquivos de teste | ~240 |
46
+ | Testes | ~3300 |
47
+ | Cobertura (statements) | ~48% |
48
+ | Source lines | ~31k |
49
+ | Diretórios em `src/` | 15+ |
50
+ | Analisadores de linguagem | 11 |
51
+ | Analisadores de CI/CD | 5 |
52
+ | Línguas suportadas | 4 (pt, en, zh, ja) |
53
+
54
+ ## Arquitetura em Camadas
55
+
56
+ ```mermaid
57
+ flowchart TB
58
+ subgraph Entry
59
+ bin["src/bin/index.ts<br/>Entry Point"]
60
+ end
61
+ subgraph CLI["CLI Layer<br/>src/cli/"]
62
+ CMDS["27 comandos<br/>Commander.js"]
63
+ DIAG["Diagnóstico"]
64
+ HELP["Helpers"]
65
+ end
66
+ subgraph CORE["Core Layer<br/>src/core/"]
67
+ EXEC["Execução<br/>Scanner / Workers"]
68
+ CONF["Config"]
69
+ PARSE["Parsing<br/>Babel + langs"]
70
+ I18N["i18n<br/>pt/en/zh/ja"]
71
+ CORR["Correções"]
72
+ end
73
+ subgraph ANALYSTS["Analysis Layer<br/>src/analysts/"]
74
+ DETECT["Detectores<br/>15+ especializados"]
75
+ LANG["Analisadores<br/>11 linguagens"]
76
+ CICD["Analisadores<br/>5 plataformas CI/CD"]
77
+ PLUGINS["Plugins"]
78
+ end
79
+ subgraph SERVICES["Service Layer"]
80
+ GUARDIAN["Guardian<br/>Integridade GPG"]
81
+ LICENSES["Licenças<br/>SPDX + scanner"]
82
+ VULN["Vulnerabilidades<br/>npm audit"]
83
+ CARETAKERS["Caretakers<br/>Transformações"]
84
+ REPORTS["Relatórios<br/>Compliance + Advisor"]
85
+ end
86
+ subgraph SHARED["Shared Layer<br/>src/shared/"]
87
+ FORM["Formatters"]
88
+ PERSIST["Persistência"]
89
+ VAL["Validação"]
90
+ MP["Marketplace"]
91
+ end
92
+ subgraph TYPES["Types<br/>src/types/"]
93
+ TINDEX["14 namespaces"]
94
+ end
95
+
96
+ bin --> CLI
97
+ CLI --> CORE
98
+ CORE --> ANALYSTS
99
+ CORE --> SERVICES
100
+ SERVICES --> SHARED
101
+ ANALYSTS --> SHARED
102
+ CORE --> TYPES
103
+ ANALYSTS --> TYPES
104
+ SERVICES --> TYPES
105
+ ```
106
+
107
+ ## Comandos Rápidos
108
+
109
+ ```bash
110
+ # Diagnóstico
111
+ mahoraga diagnosticar # análise padrão
112
+ mahoraga diagnosticar --full # completa
113
+ mahoraga diagnosticar --fast # rápida
114
+ mahoraga diagnosticar --json # JSON output
115
+
116
+ # Integridade
117
+ mahoraga guardian # verificar integridade
118
+ mahoraga guardian --accept-baseline # aceitar baseline
119
+
120
+ # CI/CD
121
+ mahoraga github-actions scan
122
+ mahoraga gitlab-ci scan
123
+ mahoraga circleci scan
124
+ mahoraga convert --from github --to gitlab
125
+
126
+ # Licenças
127
+ mahoraga licencas scan
128
+ mahoraga licencas notices generate
129
+ mahoraga licencas disclaimer add
130
+
131
+ # Manutenção
132
+ mahoraga formatar --write
133
+ mahoraga podar
134
+ mahoraga fix-types --target src
135
+ mahoraga imports --scan
136
+
137
+ # Compliance
138
+ mahoraga compliance report iso-27001
139
+ mahoraga compliance report soc2
140
+ ```
@@ -0,0 +1,3 @@
1
+ ---
2
+ Proveniência e Autoria: Este documento integra o projeto @mocoto/mahoraga (licença MIT-0).
3
+ ---
@@ -0,0 +1,24 @@
1
+ ---
2
+ Proveniência e Autoria: Este documento integra o projeto @mocoto/mahoraga (licença MIT-0).
3
+ tags: [adr]
4
+ status: proposto | aceito | deprecated
5
+ created: {{date}}
6
+ ---
7
+
8
+ # ADR-NNN: Título da Decisão
9
+
10
+ ## Contexto
11
+
12
+ <!-- Por que essa decisão foi necessária? Qual problema resolve? -->
13
+
14
+ ## Decisão
15
+
16
+ <!-- O que foi decidido? Qual caminho foi escolhido? -->
17
+
18
+ ## Consequências
19
+
20
+ <!-- Impactos positivos e negativos da decisão -->
21
+
22
+ ## Alternativas Consideradas
23
+
24
+ <!-- Quais outras opções foram avaliadas e por que foram descartadas? -->
@@ -0,0 +1,34 @@
1
+ ---
2
+ Proveniência e Autoria: Este documento integra o projeto @mocoto/mahoraga (licença MIT-0).
3
+ tags: [componente]
4
+ status: rascunho
5
+ created: {{date}}
6
+ ---
7
+
8
+ # Nome do Componente
9
+
10
+ ## Propósito
11
+
12
+ <!-- O que este componente faz? Qual problema resolve? -->
13
+
14
+ ## Dependências
15
+
16
+ - Entrada: <!-- o que ele recebe -->
17
+ - Saída: <!-- o que ele produz -->
18
+ - Importa de: <!-- módulos que usa -->
19
+
20
+ ## API Pública
21
+
22
+ ```typescript
23
+ // Assinaturas principais
24
+ ```
25
+
26
+ ## Exemplo de Uso
27
+
28
+ ```typescript
29
+
30
+ ```
31
+
32
+ ## Testes
33
+
34
+ <!-- Onde estão os testes e como rodá-los -->
@@ -0,0 +1,28 @@
1
+ ---
2
+ Proveniência e Autoria: Este documento integra o projeto @mocoto/mahoraga (licença MIT-0).
3
+ tags: [guia]
4
+ status: rascunho
5
+ created: {{date}}
6
+ ---
7
+
8
+ # Título do Guia
9
+
10
+ ## Objetivo
11
+
12
+ <!-- O que este guia ensina? -->
13
+
14
+ ## Passo a Passo
15
+
16
+ 1. <!-- passo 1 -->
17
+ 2. <!-- passo 2 -->
18
+ 3. <!-- passo 3 -->
19
+
20
+ ## Exemplos
21
+
22
+ ```bash
23
+ # Comandos de exemplo
24
+ ```
25
+
26
+ ## Referências
27
+
28
+ - Links para notas relacionadas
package/README.md CHANGED
@@ -8,9 +8,9 @@ Proveniência e Autoria: Este documento integra o projeto @mocoto/mahoraga (lice
8
8
 
9
9
  </div>
10
10
 
11
- Caso queira ajudar com relatorios de bugs e erros ou com sugesões entre em contato por esse e-mail abaixo.
11
+ Caso queira ajudar com relatórios de bugs e erros ou com sugestões, entre em contato pelo e-mail abaixo.
12
12
 
13
- [ProtonMail](mailto:mahoraga.civil062@passinbox.com)
13
+ [ProtonMail](mailto:mahoraga.able522@passfwd.com)
14
14
 
15
15
  ---
16
16
 
@@ -43,7 +43,9 @@ mahoraga diagnosticar --json > relatorio.json
43
43
  | `guardian` | Monitoramento de integridade com GPG | `mahoraga guardian --accept-baseline` |
44
44
  | `fix-types` | Corrigir tipos inseguros (`any`/`unknown`) | `mahoraga fix-types --target src` |
45
45
  | `formatar` | Formatação automática de código | `mahoraga formatar --write` |
46
+ | `formatters` | Gerenciamento de formatadores | `mahoraga formatters list` |
46
47
  | `podar` | Remover arquivos órfãos e código morto | `mahoraga podar` |
48
+ | `otimizar-svg` | Otimizar arquivos SVG | `mahoraga otimizar-svg --write` |
47
49
  | `names` | Extração e renomeação em massa de variáveis | `mahoraga names --scan` |
48
50
  | `imports` | Gerenciar aliases de import (`@/`) | `mahoraga imports --scan` |
49
51
  | `barrels` | Gerenciar barrels (`index.ts`) | `mahoraga barrels --generate` |
@@ -92,7 +94,6 @@ mahoraga guardian --json # saída JSON estruturada
92
94
  ```bash
93
95
  mahoraga github-actions scan # GitHub Actions
94
96
  mahoraga github-actions gate --threshold 80 # quality gate
95
- mahoraga github-actions app --port 3000 # servidor GitHub App
96
97
  mahoraga gitlab-ci scan # GitLab CI
97
98
  mahoraga circleci scan # CircleCI
98
99
  mahoraga jenkins scan # Jenkins
@@ -120,6 +121,7 @@ mahoraga fix-types --interactive # modo interativo
120
121
  mahoraga formatar --write # formatar código
121
122
  mahoraga formatar --check # apenas verificar
122
123
  mahoraga podar # remover arquivos órfãos
124
+ mahoraga otimizar-svg --write # otimizar SVGs
123
125
  mahoraga names --scan # extrair nomes de variáveis
124
126
  mahoraga names --apply # aplicar renomeações
125
127
  mahoraga reverter listar # listar reversões disponíveis
@@ -140,7 +142,6 @@ mahoraga marketplace list # listar instalados
140
142
  ### Utilitários
141
143
 
142
144
  ```bash
143
- mahoraga otimizar-svg --write # otimizar SVGs
144
145
  mahoraga imports --scan # escanear aliases de import
145
146
  mahoraga imports --apply # aplicar correções de import
146
147
  mahoraga barrels --scan # preview de barrels
@@ -158,7 +159,8 @@ mahoraga atualizar --global # auto-update
158
159
 
159
160
  - **Diagnóstico completo**: qualidade, segurança e arquitetura
160
161
  - **15+ detectores especializados**: código frágil, duplicação, complexidade, performance, vazamentos de memória, tipos inseguros
161
- - **18+ plugins multi-linguagem**: React, CSS, HTML, Python, Shell, SQL, Tailwind, XML, SVG
162
+ - **14 analisadores de linguagem**: JS, TS, React, CSS, CSS-in-JS, HTML, SVG, XML, Tailwind, Python, Shell, SQL, Go, Rust, PHP
163
+ - **5 analisadores de CI/CD**: GitHub Actions, GitLab CI, CircleCI, Jenkins, Azure Pipelines
162
164
  - **Detecção de bugs via ML**: 8 padrões com pontuação Bayesiana
163
165
  - **Registro inteligente**: descoberta automática de analistas built-in e customizados
164
166
  - **Análise de monorepos**: pnpm-workspace, lerna, nx, turbo
@@ -168,7 +170,7 @@ mahoraga atualizar --global # auto-update
168
170
  - **Guardian**: monitoramento contínuo com assinatura GPG (Ed25519), baselines criptográficos e verificação de integridade
169
171
  - **Fix Types**: correção automática de `any` e `unknown`
170
172
  - **Poda inteligente**: identificação e remoção de arquivos órfãos e código morto
171
- - **Formatação**: formatação automática do código
173
+ - **Formatação**: formatação automática do código com supressão inline via `@mahoraga-disable`
172
174
  - **Names/Rename**: extração e renomeação em massa de variáveis
173
175
  - **Reverter**: rollback de movimentações aplicadas
174
176
  - **Imports**: gerenciamento de aliases de import
@@ -183,7 +185,7 @@ mahoraga atualizar --global # auto-update
183
185
 
184
186
  ### Integrações CI/CD
185
187
 
186
- - **GitLab CI / CircleCI / Jenkins / Azure Pipelines**: análise de pipelines
188
+ - **GitHub Actions / GitLab CI / CircleCI / Jenkins / Azure Pipelines**: análise de pipelines com detectores e correções específicos
187
189
  - **Conversão** entre plataformas de CI/CD
188
190
 
189
191
  ### Extensível
@@ -213,7 +215,7 @@ npx mahoraga --help
213
215
  ### Verificar Instalação
214
216
 
215
217
  ```bash
216
- mahoraga --version # v0.14.6
218
+ mahoraga --version # v0.15.1
217
219
  mahoraga --help # lista todos os comandos
218
220
  mahoraga analistas --json # analistas disponíveis
219
221
  ```
@@ -222,20 +224,176 @@ mahoraga analistas --json # analistas disponíveis
222
224
 
223
225
  ## Configuração
224
226
 
225
- O Mahoraga lê um arquivo `mahoraga.config.json` na raiz do seu projeto (ou variáveis de ambiente).
227
+ O Mahoraga lê um arquivo `mahoraga.config.json` na raiz do seu projeto. A configuração usa **deep merge** com esta precedência (maior para menor):
228
+ 1. CLI flags / environment variables (`MAHORAGA_*`)
229
+ 2. `mahoraga.config.json` (ou `src/config.json` como fallback)
230
+ 3. System defaults (hardcoded)
231
+
232
+ ### Comportamento de Merge
233
+
234
+ - **Objetos** (`languages`, `suppress`, `rules`, `detectorMarkdown`, `autoFix`, `ANALISE_LIMITES`, `nameConventions`): faz merge recursivo — você pode definir apenas os campos que deseja sobrescrever; os demais mantêm os defaults.
235
+ - **Arrays** (`exclude`): são **aditivos** — os padrões que você definir em `exclude` são adicionados aos defaults do sistema, não os substituem. Se você quer excluir `temp/**` além dos defaults, basta incluir `"exclude": ["temp/**"]`.
236
+ - **Primitivos** (`locale`, `verbose`, `LOG_LEVEL`, `GUARDIAN_ENABLED`, etc.): substituem o valor default quando definidos.
237
+ - **`suppress.paths` e `suppress.filePatterns`**: substituem a lista de supressão (não é merge).
226
238
 
227
- ### Configuração Mínima
239
+ ### Exemplo Completo
228
240
 
229
- ```json
241
+ ```jsonc
230
242
  {
231
- "locale": "pt",
232
- "verbose": true,
233
- "exclude": ["node_modules/**", "dist/**", "coverage/**", ".git/**"],
234
- "languageSupport": {
243
+ // === LOCALIDADE ===
244
+ "locale": "pt", // Idioma: pt, en, zh, ja
245
+
246
+ // === LOG E DEBUG ===
247
+ "verbose": false, // Saída verbosa
248
+ "LOG_LEVEL": "info", // Nível: erro, aviso, info, debug
249
+ "LOG_ESTRUTURADO": false, // Logs em JSON estruturado
250
+ "DEV_MODE": false, // Modo desenvolvimento
251
+
252
+ // === LINGUAGENS ===
253
+ "languages": { // Habilita/desabilita analisadores
235
254
  "javascript": { "enabled": true },
236
255
  "typescript": { "enabled": true },
256
+ "react": { "enabled": true },
237
257
  "html": { "enabled": true },
238
- "css": { "enabled": true }
258
+ "css": { "enabled": true },
259
+ "scss": { "enabled": false },
260
+ "sass": { "enabled": false },
261
+ "css-in-js": { "enabled": false },
262
+ "tailwind": { "enabled": false },
263
+ "xml": { "enabled": true },
264
+ "svg": { "enabled": false },
265
+ "python": { "enabled": false },
266
+ "shell": { "enabled": false },
267
+ "sql": { "enabled": false },
268
+ "go": { "enabled": false },
269
+ "rust": { "enabled": false },
270
+ "php": { "enabled": false },
271
+ "astro": { "enabled": false },
272
+ "gradle": { "enabled": false }
273
+ },
274
+
275
+ // === INCLUDE/EXCLUDE ===
276
+ "exclude": [ // Glob patterns para excluir do scan
277
+ "node_modules/**", "dist/**", "build/**", "coverage/**",
278
+ ".git/**", ".next/**", ".turbo/**", ".vercel/**",
279
+ "**/*.min.js", "**/*.min.css", "**/*.log", "**/*.lock",
280
+ "package-lock.json", "yarn.lock", "pnpm-lock.yaml",
281
+ "**/.mahoraga/**"
282
+ ],
283
+
284
+ // === SUPRESSÃO DE OCORRÊNCIAS ===
285
+ "suppress": {
286
+ "rules": ["no-console"], // Suprimir regras específicas
287
+ "severity": { "some-rule": "warning" }, // Override de severidade
288
+ "paths": ["**/test/**"], // Suprimir por caminho
289
+ "filePatterns": ["*.test.ts"] // Suprimir por padrão de arquivo
290
+ },
291
+
292
+ // === REGRAS PERSONALIZADAS ===
293
+ "rules": {
294
+ "nome-da-regra": {
295
+ "severity": "error", // error, warning, info, off
296
+ "exclude": ["**/generated/**"], // Exclusão por glob
297
+ "allowTestFiles": false // Permitir em testes
298
+ }
299
+ },
300
+
301
+ // === GUARDIAN (INTEGRIDADE) ===
302
+ "GUARDIAN_ENABLED": true, // Habilitar Guardian
303
+ "GUARDIAN_ENFORCE_PROTECTION": true, // Impedir alterações não autorizadas
304
+ "GUARDIAN_ALLOW_ADDS": false, // Permitir adição de arquivos
305
+ "GUARDIAN_ALLOW_CHG": false, // Permitir modificação de arquivos
306
+ "GUARDIAN_ALLOW_DELS": false, // Permitir deleção de arquivos
307
+
308
+ // === WORKERS (PARALELISMO) ===
309
+ "WORKER_POOL_ENABLED": true, // Habilitar worker pool
310
+ "WORKER_POOL_MAX_WORKERS": 0, // Máx workers (0 = auto)
311
+ "WORKER_POOL_BATCH_SIZE": 10, // Arquivos por lote
312
+ "WORKER_POOL_AUTO_THRESHOLD": 50, // Threshold para auto-pool
313
+
314
+ // === ANÁLISE ===
315
+ "ANALISE_INCREMENTAL_ENABLED": false, // Análise incremental
316
+ "ANALISE_CACHE_ENABLED": false, // Cache de análise
317
+ "ANALISE_CACHE_TTL_MS": 86400000, // TTL do cache (24h)
318
+ "ANALISE_METRICAS_ENABLED": true, // Coleta de métricas
319
+ "ANALISE_PRIORIZACAO_ENABLED": true, // Priorização de ocorrências
320
+ "ANALISE_TIMEOUT_POR_ANALISTA_MS": 30000, // Timeout por analista
321
+ "SCAN_ONLY": false, // Modo scan-only (sem correções)
322
+ "COMPACT_MODE": false, // Modo compacto
323
+
324
+ // === LIMITES DE ANÁLISE ===
325
+ "ANALISE_LIMITES": {
326
+ "FUNCOES_LONGAS": {
327
+ "MAX_LINHAS": 30, // Máx linhas por função
328
+ "MAX_PARAMETROS": 4, // Máx parâmetros
329
+ "MAX_ANINHAMENTO": 3 // Máx aninhamento if
330
+ },
331
+ "CODIGO_FRAGIL": {
332
+ "MAX_LINHAS_FUNCAO": 30,
333
+ "MAX_PARAMETROS": 4,
334
+ "MAX_NESTED_CALLBACKS": 2 // Máx callbacks aninhados
335
+ }
336
+ },
337
+
338
+ // === RELATÓRIOS ===
339
+ "REPORT_EXPORT_ENABLED": false, // Exportar relatórios
340
+ "REPORT_EXPORT_FULL": false, // Relatório completo (não diff)
341
+ "REPORT_OUTPUT_DIR": ".mahoraga/reports",
342
+ "REPORT_SILENCE_LOGS": false, // Silenciar logs durante geração
343
+ "REPORT_STREAM_ENABLED": false, // Streaming NDJSON
344
+ "REPORT_STREAM_AUTO_THRESHOLD": 5000, // Auto-stream para projetos grandes
345
+ "REPORT_FRAGMENT_OCCURRENCES": 2000, // Máx ocorrências por fragmento
346
+ "REPORT_FRAGMENT_FILEENTRIES": 500, // Máx entradas por fragmento
347
+
348
+ // === ESTRUTURA DO PROJETO ===
349
+ "STRUCTURE_AUTO_FIX": false, // Auto-fix de violações estruturais
350
+ "STRUCTURE_CONCURRENCY": 5, // Concorrência
351
+ "ESTRUTURA_ARQUIVOS_RAIZ_MAX": 10, // Máx arquivos na raiz
352
+ "ESTRUTURA_PLANO_MAX_FILE_SIZE": 262144, // Tam máx para plano (256KB)
353
+
354
+ // === CONVENÇÕES DE NOMES ===
355
+ "nameConventions": { // Personalizar nomes de diretórios
356
+ "typesDirectory": "types",
357
+ "testsDirectory": "tests",
358
+ "docsDirectory": "docs",
359
+ "srcDirectory": "src",
360
+ "componentsDirectory": "components",
361
+ "utilsDirectory": "utils",
362
+ "servicesDirectory": "services",
363
+ "stylesDirectory": "styles",
364
+ "assetsDirectory": "assets"
365
+ },
366
+
367
+ // === MARKDOWN DETECTOR ===
368
+ "detectorMarkdown": {
369
+ "checkProveniencia": true, // Verificar headers de proveniência
370
+ "checkLicenses": true, // Verificar compatibilidade de licença
371
+ "checkReferences": true, // Verificar referências externas
372
+ "headerLines": 30, // Linhas para scan de headers
373
+ "whitelist": {
374
+ "paths": [],
375
+ "patterns": [],
376
+ "dirs": []
377
+ },
378
+ "whitelistMode": "merge" // merge | replace
379
+ },
380
+
381
+ // === SEGURANÇA ===
382
+ "SAFE_MODE": true, // Modo seguro
383
+ "ALLOW_PLUGINS": false, // Permitir carregamento de plugins
384
+ "ALLOW_EXEC": false, // Permitir execução de código
385
+ "ALLOW_MUTATE_FS": true, // Permitir mutação do filesystem
386
+
387
+ // === AUTO-FIX ===
388
+ "autoFix": { // Configuração de correção automática
389
+ "mode": "balanced", // balanced | conservative | aggressive
390
+ "minConfidence": 75, // Confiança mínima (0-100)
391
+ "maxFixesPerArquivo": 5, // Máx correções por arquivo
392
+ "createBackup": true, // Criar backup (.local.bak)
393
+ "validateAfterFix": true, // Validar após correção
394
+ "allowedCategories": [
395
+ "security", "performance", "style", "documentation"
396
+ ]
239
397
  }
240
398
  }
241
399
  ```
@@ -244,10 +402,76 @@ O Mahoraga lê um arquivo `mahoraga.config.json` na raiz do seu projeto (ou vari
244
402
 
245
403
  | Variável | Descrição | Padrão |
246
404
  |----------|-----------|--------|
247
- | `LOG_LEVEL` | Nível de log | `info` |
248
- | `LOG_ESTRUTURADO` | Logs em JSON | `false` |
249
- | `MAHORAGA_DEBUG` | Modo debug | não definido |
405
+ | `LOG_LEVEL` | Nível de log (`erro`, `aviso`, `info`, `debug`) | `info` |
406
+ | `LOG_ESTRUTURADO` | Logs em JSON estruturado | `false` |
407
+ | `MAHORAGA_DEBUG` | Ativa modo debug | não definido |
250
408
  | `MAHORAGA_STATE_DIR` | Diretório de estado | `.mahoraga` |
409
+ | `MAHORAGA_VERBOSE` | Saída verbosa | `false` |
410
+ | `MAHORAGA_SAFE_MODE` | Modo segurança (`0` desativa) | `1` |
411
+ | `MAHORAGA_ALLOW_PLUGINS` | Permite plugins (`1` ativa) | `0` |
412
+ | `MAHORAGA_ALLOW_EXEC` | Permite execução (`1` ativa) | `0` |
413
+ | `MAHORAGA_DEV` | Ativa modo dev | não definido |
414
+
415
+ ---
416
+
417
+ ## Supressão Inline (`@mahoraga-disable`)
418
+
419
+ Além da supressão por configuração, o Mahoraga suporta **supressão inline** via comentários no código fonte. Funciona tanto para analistas quanto para o formatador.
420
+
421
+ ### Formatos
422
+
423
+ | Diretiva | Escopo | Exemplo |
424
+ |----------|--------|---------|
425
+ | `@mahoraga-disable-next-line <regras>` | Próxima linha | `// @mahoraga-disable-next-line pontuacao-repetida` |
426
+ | `@mahoraga-disable <regras>` | Bloco (até `@mahoraga-enable`) | `// @mahoraga-disable formatador` |
427
+ | `@mahoraga-enable <regras>` | Fim de bloco | `// @mahoraga-enable formatador` |
428
+ | `@mahoraga-disable-all` | Bloco total | `// @mahoraga-disable-all` |
429
+ | `@mahoraga-enable-all` | Fim de bloco total | `// @mahoraga-enable-all` |
430
+
431
+ ### Sintaxes de comentário suportadas
432
+
433
+ | Linguagem | Sintaxe |
434
+ |-----------|---------|
435
+ | JS/TS/CSS | `// @mahoraga-disable regra` / `/* @mahoraga-disable regra */` |
436
+ | Python/Shell/YAML | `# @mahoraga-disable regra` |
437
+ | SQL | `-- @mahoraga-disable regra` |
438
+ | INI | `; @mahoraga-disable regra` |
439
+ | HTML | `<!-- @mahoraga-disable regra -->` |
440
+
441
+ ### Regras do formatador
442
+
443
+ | Regra | Efeito |
444
+ |-------|--------|
445
+ | `pontuacao-repetida` | Impede colapso de pontuação repetida (`;;`, ` ...`, etc.) |
446
+ | `espacamento-incorreto` | Impede correção de espaçamento ao redor de pontuação |
447
+ | `formatador` | Desativa todas as correções do formatador na linha/bloco |
448
+ | `analista-formatador` | Desativa apenas o analista de verificação de formatação |
449
+ | `*` | Desativa regras de todos os sistemas |
450
+
451
+ ### Exemplos
452
+
453
+ ```typescript
454
+ // @mahoraga-disable-next-line pontuacao-repetida
455
+ const x = a;; // <-- os dois ;; serão preservados
456
+
457
+ // @mahoraga-disable formatador
458
+ function exemplo() {
459
+ const url = "https://example.com/path?v=1&x=2";
460
+ return url;
461
+ }
462
+ // @mahoraga-enable formatador
463
+ ```
464
+
465
+ ```bash
466
+ # @mahoraga-disable-next-line espacamento-incorreto
467
+ case $x in a) echo "a" ;; esac # <-- ;; preservado
468
+ ```
469
+
470
+ ```html
471
+ <!-- @mahoraga-disable formatador -->
472
+ <pre> texto com espaços intencionais </pre>
473
+ <!-- @mahoraga-enable formatador -->
474
+ ```
251
475
 
252
476
  ---
253
477
 
@@ -270,8 +494,12 @@ npm run lint # ESLint
270
494
  |-----------|--------|---------|
271
495
  | JavaScript | Babel | Nativo |
272
496
  | TypeScript | Babel | Nativo |
497
+ | React/JSX | Babel | Nativo |
273
498
  | HTML | htmlparser2 | Nativo |
274
499
  | CSS | postcss | Nativo |
500
+ | CSS-in-JS | postcss | Nativo |
501
+ | Tailwind CSS | Heurístico | Nativo |
502
+ | SVG | Heurístico | Nativo |
275
503
  | XML | fast-xml-parser | Nativo |
276
504
  | Python | Heurístico | Nativo |
277
505
  | PHP | Heurístico | Nativo |
@@ -284,12 +512,27 @@ npm run lint # ESLint
284
512
 
285
513
  ## Qualidade
286
514
 
287
- - TypeScript 7.0+ (compilador nativo Go/Corsa): type-safe
288
- - Testes com Vitest: cobertura target > 90%
289
- - ESLint 10.x: configuração strict
290
- - Worker pool: processamento paralelo
291
- - i18n: PT, EN, ZH, JA
292
- - Schema versioning: relatórios versionados
515
+ - **TypeScript estrito**: `strict: true`, `verbatimModuleSyntax: true`
516
+ - **Testes com Vitest**: ~3300 testes em ~240 arquivos
517
+ - **ESLint 10.x**: configuração strict
518
+ - **Worker pool**: processamento paralelo
519
+ - **i18n**: PT, EN, ZH, JA
520
+ - **Schema versioning**: relatórios versionados
521
+ - **Documentação viva**: `Docs/` em formato Obsidian vault
522
+
523
+ ---
524
+
525
+ ## Documentação
526
+
527
+ A documentação completa do projeto está disponível em `Docs/` no formato **Obsidian vault**:
528
+
529
+ - **Arquitetura**: camadas, fluxos, diagramas, ADRs
530
+ - **Componentes**: documentação de todos os módulos
531
+ - **Guias**: contribuição, testes, referência de comandos
532
+ - **Glossário**: termos do domínio de A a Z
533
+ - **Referências**: links, specs, configurações
534
+
535
+ Abra `Docs/` como vault no [Obsidian](https://obsidian.md/) para navegação completa com wikilinks.
293
536
 
294
537
  ---
295
538
 
@@ -297,7 +540,7 @@ npm run lint # ESLint
297
540
 
298
541
  Contribuições são bem-vindas! Como o projeto não está mais no GitHub:
299
542
 
300
- 1. Entre em contato pelo e-mail: [ProtonMail](mailto:mahoraga.civil062@passinbox.com)
543
+ 1. Entre em contato pelo e-mail: [ProtonMail](mailto:mahoraga.able522@passfwd.com)
301
544
  2. Envie patches ou sugestões por e-mail
302
545
  3. Reporte bugs com descrição detalhada e exemplo mínimo
303
546
 
@@ -2,6 +2,7 @@ import { parse as babelParse } from '@babel/parser';
2
2
  import traverse from '@babel/traverse';
3
3
  import * as t from '@babel/types';
4
4
  import { getMessages } from '../../core/messages/index.js';
5
+ import { isWhitelistedConstant } from '../../shared/helpers/index.js';
5
6
  const MAX_MESSAGE_PREVIEW_LENGTH = 60;
6
7
  const BUG_PATTERNS = [
7
8
  {
@@ -224,6 +225,10 @@ const BUG_PATTERNS = [
224
225
  const matches = content.matchAll(magicNumPattern);
225
226
  const results = [];
226
227
  for (const m of matches) {
228
+ const value = parseInt(m[0], 10);
229
+ if (isWhitelistedConstant(value, [])) {
230
+ continue;
231
+ }
227
232
  const line = contarLinhasAtePos(content, m.index);
228
233
  const lineContent = content.split('\n')[line - 1] || '';
229
234
  if (!lineContent.includes('const') && !lineContent.includes('let') && !lineContent.includes('var') && !lineContent.includes('//') && !lineContent.includes('/*')) {
@@ -1,6 +1,6 @@
1
1
  const detectoresJsTs = [];
2
2
  export function registrarDetectorJsTs(detector) {
3
- if (!detector || !detector.nome) {
3
+ if (!detector?.nome) {
4
4
  return;
5
5
  }
6
6
  const exists = detectoresJsTs.some(d => d.nome === detector.nome);
@@ -8,9 +8,9 @@ const LICENCA_PADROES = {
8
8
  referenciasRisco: [/Stack\s*Overflow/i, /(?:^|https?:\/\/|\/\/)(?:[^\/\s@]+\.)?stackoverflow\.com(?::\d+)?(?:[\/?#]|$)/i, /\bassign\b/i, /\bcession\b/i]
9
9
  };
10
10
  const PADRAO_LISTA_BRANCA = {
11
- paths: ['.github/copilot-instructions.md', 'docs/POLICY-PROVENIENCIA.md', 'docs/partials/AVISO-PROVENIENCIA.md'],
11
+ paths: ['.github/copilot-instructions.md', 'docs/POLICY-PROVENIENCIA.md', 'docs/partials/AVISO-PROVENIENCIA.md', 'README.md'],
12
12
  patterns: ['**/reports/**', 'docs/history/**', 'tests/**', 'tmp*.md'],
13
- dirs: ['pre-public', 'preview-mahoraga', '.abandonados', '.deprecados', 'reports']
13
+ dirs: ['pre-public', 'preview-mahoraga', '.abandonados', '.deprecados', 'reports', 'docs']
14
14
  };
15
15
  function createRiskRegex() {
16
16
  const allPadroes = [...LICENCA_PADROES.incompativeis, ...LICENCA_PADROES.cessaoDireitos, ...LICENCA_PADROES.referenciasRisco].map(raiz => raiz.source).join('|');