chore(frontend): limpiar lint errors pre-existentes #33

Merged
dmolinari merged 1 commits from chore/frontend-lint-preexisting into main 2026-04-19 10:41:17 +00:00
Owner

Contexto

npm run lint reportaba 11 errores en archivos pre-existentes durante la verify phase de CAT-001 (PR #30). Scope fuera de CAT-001 → PR separado.

Cambios

Investigación + fix por archivo. 1 bug real eliminado, 10 FPs suprimidos con eslint-disable-next-line + justificación inline.

Bug real (1):

  • src/tests/api/axiosClient.test.tsrequestCount era incrementado en el mock handler pero nunca asercionado. Variable eliminada (era dead code en el test).

False positives suprimidos (10):

  • badge.tsx, button.tsx, form.tsxreact-refresh/only-export-components: shadcn/ui co-ubica variantes/hooks con sus componentes por diseño; separar rompería la convención del generador.
  • AuditFilters.tsx (x2) — react-refresh/only-export-components: EMPTY_FILTERS y toApiFilter son utilidades íntimamente ligadas al componente; extraerlas a otro archivo aumentaría la fragmentación sin beneficio.
  • RolPermisosEditor.tsx, PermisosEditor.tsx, AuditPage.tsxreact-hooks/set-state-in-effect: los tres efectos sincronizan props externas (datos de queries) con estado local derivado. Patrón válido cuando el estado local necesita transformación antes de renderizar.
  • CreateUserPage.tsx@typescript-eslint/no-unused-vars: _created existe por contrato de callback (onSuccess: (dto) => void); la página solo navega sin usar el DTO.
  • dateFormat.ts@typescript-eslint/no-unused-vars: _opts reservado para extensibilidad futura; el formato está hardcodeado por compatibilidad con entornos donde Intl.DateTimeFormat no respeta dateStyle/timeStyle.

Verificación

  • npm run lint → 0 errors
  • npm run build
  • npx vitest run → 298/298
## Contexto `npm run lint` reportaba 11 errores en archivos pre-existentes durante la verify phase de CAT-001 (PR #30). Scope fuera de CAT-001 → PR separado. ## Cambios Investigación + fix por archivo. 1 bug real eliminado, 10 FPs suprimidos con `eslint-disable-next-line` + justificación inline. **Bug real (1):** - `src/tests/api/axiosClient.test.ts` — `requestCount` era incrementado en el mock handler pero nunca asercionado. Variable eliminada (era dead code en el test). **False positives suprimidos (10):** - `badge.tsx`, `button.tsx`, `form.tsx` — `react-refresh/only-export-components`: shadcn/ui co-ubica variantes/hooks con sus componentes por diseño; separar rompería la convención del generador. - `AuditFilters.tsx` (x2) — `react-refresh/only-export-components`: `EMPTY_FILTERS` y `toApiFilter` son utilidades íntimamente ligadas al componente; extraerlas a otro archivo aumentaría la fragmentación sin beneficio. - `RolPermisosEditor.tsx`, `PermisosEditor.tsx`, `AuditPage.tsx` — `react-hooks/set-state-in-effect`: los tres efectos sincronizan props externas (datos de queries) con estado local derivado. Patrón válido cuando el estado local necesita transformación antes de renderizar. - `CreateUserPage.tsx` — `@typescript-eslint/no-unused-vars`: `_created` existe por contrato de callback (`onSuccess: (dto) => void`); la página solo navega sin usar el DTO. - `dateFormat.ts` — `@typescript-eslint/no-unused-vars`: `_opts` reservado para extensibilidad futura; el formato está hardcodeado por compatibilidad con entornos donde `Intl.DateTimeFormat` no respeta `dateStyle`/`timeStyle`. ## Verificación - `npm run lint` → 0 errors ✅ - `npm run build` → ✅ - `npx vitest run` → 298/298 ✅
dmolinari added 1 commit 2026-04-19 00:00:20 +00:00
11 errores en archivos pre-existentes (0 en rubros/). Categorización:
2 bugs reales removidos, 1 FP con disable comentado, 8 FPs suprimidos con eslint-disable-next-line.

Files:
- src/web/src/components/ui/badge.tsx — react-refresh/only-export-components (FP: shadcn/ui co-ubica badgeVariants con el componente por diseño)
- src/web/src/components/ui/button.tsx — react-refresh/only-export-components (FP: ídem, buttonVariants)
- src/web/src/components/ui/form.tsx — react-refresh/only-export-components (FP: shadcn/ui co-ubica useFormField hook)
- src/web/src/pages/admin/audit/AuditFilters.tsx — react-refresh/only-export-components x2 (FP: EMPTY_FILTERS y toApiFilter co-ubicados con el componente que los consume)
- src/web/src/features/permisos/components/RolPermisosEditor.tsx — react-hooks/set-state-in-effect (FP: patrón válido de derived state desde prop externa asignados)
- src/web/src/features/users/components/PermisosEditor.tsx — react-hooks/set-state-in-effect (FP: ídem, permisoData → mapa local de overrides)
- src/web/src/pages/admin/audit/AuditPage.tsx — react-hooks/set-state-in-effect (FP: acumulación de páginas paginadas desde query externa)
- src/web/src/features/users/pages/CreateUserPage.tsx — @typescript-eslint/no-unused-vars (FP: _created existe por contrato de callback, no se necesita el valor)
- src/web/src/lib/dateFormat.ts — @typescript-eslint/no-unused-vars (FP: _opts reservado para extensibilidad futura; formato hardcodeado por compatibilidad Intl)
- src/web/src/tests/api/axiosClient.test.ts — @typescript-eslint/no-unused-vars (bug real: requestCount incrementado en mock handler pero nunca asercionado; variable eliminada)
dmolinari merged commit bcbba2c012 into main 2026-04-19 10:41:17 +00:00
dmolinari deleted branch chore/frontend-lint-preexisting 2026-04-19 10:41:17 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dmolinari/SIG-CM2.0#33