Files
fn_registry/dev/issues/0057-audit-go-symbol-naming.md
T

80 lines
3.2 KiB
Markdown

---
id: "0057"
title: "audit_uses_functions: mejorar deteccion de simbolos Go con abreviaturas"
status: pendiente
type: chore
domain:
- registry-quality
scope: registry-only
priority: baja
depends: []
blocks: []
related: []
created: 2026-05-17
updated: 2026-05-17
tags: []
---
# 0057 — audit_uses_functions: mejorar deteccion de simbolos Go con abreviaturas
## APP Metadata
| Campo | Valor |
|-------|-------|
| **ID** | 0057 |
| **Estado** | pendiente |
| **Prioridad** | baja |
| **Tipo** | enhancement — `functions/infra/audit_uses_functions.go` |
## Dependencias
- `audit_uses_functions_go_infra` ya existe.
## Contexto
La heuristica Go convierte `name` snake_case a CamelCase para buscar el simbolo exportado en el codigo. La conversion usa `commonAbbrevs` para mapear (ej. `cdp``CDP`, `http``HTTP`). Pero falla cuando:
1. La abreviatura no esta en la lista (ej. `cdp_get_html``CdpGetHTML` pero codigo usa nombre distinto).
2. El simbolo se renombra en la funcion del registry vs el name del frontmatter.
Caso real (2026-05-07): `cdp_get_html_go_browser` fue marcado `unused_in_app_md` en `script_navegador` aunque `runner.go:126` lo invoca. Se confirmo manualmente como falso positivo.
## Objetivo
Reducir falsos positivos en la deteccion de simbolos Go. Dos vias:
1. Ampliar `commonAbbrevs` con mas terminos comunes en el registry (HTML, CDP, JWT, OAuth, JSON, YAML, SQL, BQ, ID, URL, IP, TCP, TLS, SSH, S3, RBAC).
2. Caer a una segunda heuristica: si no encuentra `<CamelCaseName>`, buscar el nombre real exportado leyendo el `.go` de la funcion del registry y extraer `func <Name>(`.
## Arquitectura
### Archivos afectados
- `functions/infra/audit_uses_functions.go` — funcion `snakeToCamel` o equivalente, y bucle de busqueda de simbolos.
- `functions/infra/audit_uses_functions_test.go` — anadir tests.
## Tareas
### Fase 1 — ampliar commonAbbrevs
1.1 Listar funciones del registry con abreviaturas en su `name`: `sqlite3 registry.db "SELECT name FROM functions WHERE lang='go';"` — extraer abreviaturas comunes.
1.2 Anadir HTML, CDP, JWT, OAuth, JSON, YAML, SQL, BQ, ID, URL, IP, TCP, TLS, SSH, S3, RBAC a `commonAbbrevs`.
1.3 Test `TestSnakeToCamel_HandlesAbbreviations` con todos los nuevos.
### Fase 2 — fallback a lectura de `.go`
2.1 Si la conversion CamelCase no encuentra simbolo, leer `<file_path>.go` de la funcion del registry, extraer primer `func <Name>(` exportado.
2.2 Buscar ese nombre en el codigo de la app.
2.3 Cachear el mapping (en memoria por ejecucion) para no reabrir el mismo archivo N veces.
### Fase 3 — verificacion
3.1 `cdp_get_html_go_browser` ya NO debe aparecer unused para `script_navegador`.
3.2 Correr audit en todas las apps Go, comparar con baseline anterior. Diff de falsos positivos eliminados.
## Riesgos
- Lectura de N archivos `.go` ralentiza el audit. Mitigacion: cache + leer solo si la heuristica primaria falla.
- Cambio en commonAbbrevs puede romper tests existentes que asumian la conversion antigua. Validar.
## Decisiones de diseno
- NO usar `go/parser` — no necesitamos AST completo, basta regex sobre `func [A-Z]\w+(`.
- Tampoco cambiar el modelo de "cada funcion del registry tiene un simbolo exportado". Si en el futuro una funcion expone un struct con metodos, anadir manejo.