Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.2 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0057 | audit_uses_functions: mejorar deteccion de simbolos Go con abreviaturas | pendiente | chore |
|
registry-only | baja | 2026-05-17 | 2026-05-17 |
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_infraya 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:
- La abreviatura no esta en la lista (ej.
cdp_get_html→CdpGetHTMLpero codigo usa nombre distinto). - 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:
- Ampliar
commonAbbrevscon mas terminos comunes en el registry (HTML, CDP, JWT, OAuth, JSON, YAML, SQL, BQ, ID, URL, IP, TCP, TLS, SSH, S3, RBAC). - Caer a una segunda heuristica: si no encuentra
<CamelCaseName>, buscar el nombre real exportado leyendo el.gode la funcion del registry y extraerfunc <Name>(.
Arquitectura
Archivos afectados
functions/infra/audit_uses_functions.go— funcionsnakeToCamelo 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
.goralentiza 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 sobrefunc [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.