Skip to content

chore: eslint-plugin-unused-imports + auto-fix de imports não usados (Onda 2 PR 2.4)#106

Merged
adm01-debug merged 1 commit into
mainfrom
chore/onda-2-pr-2.4-unused-imports-plugin
May 9, 2026
Merged

chore: eslint-plugin-unused-imports + auto-fix de imports não usados (Onda 2 PR 2.4)#106
adm01-debug merged 1 commit into
mainfrom
chore/onda-2-pr-2.4-unused-imports-plugin

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 9, 2026

Substitui regra @typescript-eslint/no-unused-vars (sem auto-fix) pelo plugin eslint-plugin-unused-imports@4.4.1 (com auto-fix de imports). Aplica --fix removendo automaticamente imports não usados em 322 arquivos.

Mudanças

1) Plugin + config

  • package.json: adiciona dep eslint-plugin-unused-imports@4.4.1
  • eslint.config.js:
    • Importa plugin
    • Substitui @typescript-eslint/no-unused-vars por:
      • unused-imports/no-unused-imports (com auto-fix ✨)
      • unused-imports/no-unused-vars (mesmo comportamento da regra antiga, sem auto-fix)

2) Auto-fix em todo o repo

$ bun x eslint --fix "src/**/*.{ts,tsx}"
$ bun x eslint --fix "scripts/**/*.{ts,tsx,mjs,js}"
$ bun x eslint --fix "e2e/**/*.{ts,tsx}"
$ bun x eslint --fix "tests/**/*.{ts,tsx}"

Resultado: 322 arquivos modificados, -138 linhas net (376 inserções, 514 deletions de imports mortos).

Métricas

Métrica Antes Depois Δ
Total problems 2241 1597 -644 (-29%)
Errors 174 164 -10
Warnings 2067 1433 -634

Acumulado Onda 1 + 2 (PRs 1.1-1.4 + 2.1-2.4):

  • Errors: 1378 → 164 (-88%)

Stress-test

Check Status
bun run build ✅ OK (1m 39s)
TypeScript ✅ Sem novos erros
Runtime regression ✅ Apenas remoção de imports inertes

Observações

137 unused-imports/no-unused-imports warnings residuais — casos especiais que --fix não consegue:

  • Imports com no-restricted-imports error simultâneo (plugin é conservador)
  • Type-only imports em alguns contextos

→ Plano: limpar na Onda 5/6 junto com refactor de domain boundaries.

488 unused-imports/no-unused-vars warnings residuais — vars não usadas (não-imports). Não há auto-fix; precisam de fix manual com prefixo _ ou deleção.

→ Plano: PR 2.5 incremental por área (src/test/, src/utils/, src/lib/, etc).

Refs

Summary by CodeRabbit

Notas da Versão

  • Chores

    • Removidas importações não utilizadas em mais de 250 arquivos, incluindo hooks do React, ícones do Lucide e componentes de UI.
    • Adicionado plugin eslint-plugin-unused-imports para detecção automática de importações desnecessárias.
    • Otimizada lógica de paginação de contatos para melhor tratamento de solicitações concorrentes.
  • Refactor

    • Migrados componentes para usar datasource abstrato em lugar de cliente Supabase direto.

Copilot AI review requested due to automatic review settings May 9, 2026 01:04
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
zapp-web Ready Ready Preview, Comment May 9, 2026 1:14am

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of files (300). Try reducing the number of changed files and requesting a review from Copilot again.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 9, 2026

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 671fdeb4-b7cb-421a-8044-9e0a59812d5c

📥 Commits

Reviewing files that changed from the base of the PR and between be7f3c8 and e2fa944.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock, !**/*.lock
📒 Files selected for processing (299)
  • e2e/dlq-idempotency.spec.ts
  • e2e/teams-departments.spec.ts
  • e2e/utils/admin-filters.ts
  • eslint.config.js
  • package.json
  • scripts/design-system-safety.test.ts
  • scripts/regen-trilha-mensagens.ts
  • src/components/AppErrorBoundary.tsx
  • src/components/CommandPalette.tsx
  • src/components/agents/AgentsView.tsx
  • src/components/agents/ConfigurePermissionsDialog.tsx
  • src/components/ai/AutoTicketClassifier.tsx
  • src/components/ai/ChurnPredictionDashboard.tsx
  • src/components/campaigns/CampaignABTesting.tsx
  • src/components/catalog/ExternalProductCatalog.tsx
  • src/components/catalog/ExternalProductManagement.tsx
  • src/components/catalog/ProductCard.tsx
  • src/components/catalog/ProductCatalog.tsx
  • src/components/catalog/SendProductDialog.tsx
  • src/components/catalog/ShoppingCart.tsx
  • src/components/catalog/WhatsAppTemplatesManager.tsx
  • src/components/chatbot/ChatbotFlowsView.tsx
  • src/components/cognitive/FeatureSpotlight.tsx
  • src/components/connections/ConnectionAuditDialog.tsx
  • src/components/connections/ConnectionsView.tsx
  • src/components/contacts/AuditLogPanel.tsx
  • src/components/contacts/Contact360Panel.tsx
  • src/components/contacts/ContactActivityFeed.tsx
  • src/components/contacts/ContactActivityTimeline.tsx
  • src/components/contacts/ContactAnalyticsDashboard.tsx
  • src/components/contacts/ContactAuditLogPanel.tsx
  • src/components/contacts/ContactBirthdayPanel.tsx
  • src/components/contacts/ContactBitrix24Panel.tsx
  • src/components/contacts/ContactCRMDialog.tsx
  • src/components/contacts/ContactCompareDialog.tsx
  • src/components/contacts/ContactConsentManager.tsx
  • src/components/contacts/ContactConversationHistory.tsx
  • src/components/contacts/ContactDetailPanel.tsx
  • src/components/contacts/ContactDialogs.tsx
  • src/components/contacts/ContactExportDialog.tsx
  • src/components/contacts/ContactImportDialog.tsx
  • src/components/contacts/ContactKanbanView.tsx
  • src/components/contacts/ContactMapView.tsx
  • src/components/contacts/ContactMergeDialog.tsx
  • src/components/contacts/ContactMergePanel.tsx
  • src/components/contacts/ContactNotesPanel.tsx
  • src/components/contacts/ContactQuickPeek.tsx
  • src/components/contacts/ContactQuickView.tsx
  • src/components/contacts/ContactSearchWithSuggestions.tsx
  • src/components/contacts/ContactStatsDashboard.tsx
  • src/components/contacts/ContactsRichView.tsx
  • src/components/contacts/ContactsTable.tsx
  • src/components/contacts/ContactsTableVirtual.tsx
  • src/components/contacts/CustomFieldsSection.tsx
  • src/components/contacts/DuplicateContactsPanel.tsx
  • src/components/contacts/FilterPresets.tsx
  • src/components/contacts/InlineEditCell.tsx
  • src/components/contacts/LGPDComplianceDashboard.tsx
  • src/components/contacts/useContactActivityFeed.ts
  • src/components/contacts/useContactDuplicateDetector.ts
  • src/components/contacts/useContactFormValidation.ts
  • src/components/contacts/useContactUndoDelete.ts
  • src/components/contacts/useContactsCRUD.ts
  • src/components/contacts/useContactsPagination.ts
  • src/components/contacts/useContactsViewState.ts
  • src/components/contacts/useDuplicateDetector.ts
  • src/components/crm360/CRM360StatsCards.tsx
  • src/components/crm360/CompanyFormDialog.tsx
  • src/components/csat/CSATDashboard.tsx
  • src/components/csat/CSATWidget.tsx
  • src/components/dashboard/ActivityHeatmap.tsx
  • src/components/dashboard/ConversationHeatmap.tsx
  • src/components/dashboard/GoalsConfigDialog.tsx
  • src/components/dashboard/GoalsDashboard.tsx
  • src/components/dashboard/MetricComparison.tsx
  • src/components/dashboard/PlatformHealthDashboard.tsx
  • src/components/dashboard/RealtimeMetricsPanel.tsx
  • src/components/dashboard/SLAMetricsDashboard.tsx
  • src/components/dashboard/ScheduledReportsManager.tsx
  • src/components/dashboard/SentimentHelpers.tsx
  • src/components/dashboard/SentimentTabContent.tsx
  • src/components/dashboard/WarRoomDashboard.tsx
  • src/components/dashboard/WidgetConfigSheet.tsx
  • src/components/debug/FontValidationExamples.tsx
  • src/components/diagnostics/ConnectionHealthPanel.tsx
  • src/components/effects/ScrollEffects.tsx
  • src/components/email/EmailChatBubble.tsx
  • src/components/email/EmailChatInbox.tsx
  • src/components/email/EmailChatReplyBar.tsx
  • src/components/email/EmailChatThread.tsx
  • src/components/email/EmailContactPanel.tsx
  • src/components/email/EmailSLADashboard.tsx
  • src/components/email/EmailSettingsPage.tsx
  • src/components/email/EmailSignatureEditor.tsx
  • src/components/email/EmailThreadList.tsx
  • src/components/email/EmailTrackingDashboard.tsx
  • src/components/email/OutlookInboxView.tsx
  • src/components/gmail/EmailComposer.tsx
  • src/components/gmail/EmailThreadView.tsx
  • src/components/gmail/GmailAccountSelector.tsx
  • src/components/gmail/GmailLabelSidebar.tsx
  • src/components/gmail/GmailMetricsDashboard.tsx
  • src/components/gmail/GmailReplyBar.tsx
  • src/components/gmail/GmailThreadView.tsx
  • src/components/integrations/BitrixIntegrationView.tsx
  • src/components/integrations/EvolutionApiIntegrationView.tsx
  • src/components/integrations/N8nIntegrationView.tsx
  • src/components/keyboard/KeyboardShortcutsDialog.tsx
  • src/components/layout/AppShell.tsx
  • src/components/layout/sidebarNavConfig.ts
  • src/components/meta-capi/MetaCAPIView.tsx
  • src/components/mobile/InAppNotification.tsx
  • src/components/mobile/MobileDrawerMenu.tsx
  • src/components/mobile/MobileNavigation.tsx
  • src/components/mobile/MobileShell.tsx
  • src/components/mobile/NotificationsPanel.tsx
  • src/components/monitoring/EvolutionMonitoringDashboard.tsx
  • src/components/monitoring/hooks/useMonitoringActions.ts
  • src/components/notifications/NotificationTypeCards.tsx
  • src/components/notifications/PushNotificationCard.tsx
  • src/components/notifications/ScreenProtectionToggle.tsx
  • src/components/nps/NPSDashboard.tsx
  • src/components/omnichannel/OmnichannelInbox.tsx
  • src/components/omnichannel/OmnichannelManager.tsx
  • src/components/payments/PaymentLinksView.tsx
  • src/components/performance/LazyRoutes.tsx
  • src/components/performance/PerformanceMonitor.tsx
  • src/components/queues/AddMemberDialog.tsx
  • src/components/queues/QueueAlertsDisplay.tsx
  • src/components/queues/SLAAgentTable.tsx
  • src/components/reports/AbandonmentRate.tsx
  • src/components/reports/ConversationHeatmap.tsx
  • src/components/reports/DemandForecast.tsx
  • src/components/reports/PeriodComparison.tsx
  • src/components/reports/ReportCharts.tsx
  • src/components/reports/useReportsData.ts
  • src/components/security/AuditLogDashboard.tsx
  • src/components/security/BlockedIPDialogs.tsx
  • src/components/security/GeoBlockingPanel.tsx
  • src/components/security/PasswordResetRequestsPanel.tsx
  • src/components/security/SecurityNotificationsPanel.tsx
  • src/components/security/SecuritySettingsPanel.tsx
  • src/components/security/SecurityView.tsx
  • src/components/settings/AIAutoTagsConfig.tsx
  • src/components/settings/IntegrationKeysSection.tsx
  • src/components/settings/MediaLibraryAdmin.tsx
  • src/components/settings/SLASettings.tsx
  • src/components/settings/SettingsView.tsx
  • src/components/settings/sla/SLARuleFormDialog.tsx
  • src/components/settings/sla/ScopeRulesList.tsx
  • src/components/settings/theme/BorderRadiusControl.tsx
  • src/components/sla/SLADashboard.tsx
  • src/components/tags/TagsView.tsx
  • src/components/talkx/TalkXAnalytics.tsx
  • src/components/talkx/TalkXBlacklist.tsx
  • src/components/talkx/TalkXCampaignCard.tsx
  • src/components/talkx/TalkXLiveMonitor.tsx
  • src/components/talkx/TalkXMessagePreview.tsx
  • src/components/talkx/TalkXView.tsx
  • src/components/talkx/useCampaignEditor.ts
  • src/components/team-chat/MessageReactions.tsx
  • src/components/team-chat/NewConversationDialog.tsx
  • src/components/team-chat/TeamChatInputArea.tsx
  • src/components/team-chat/TeamChatPanel.tsx
  • src/components/team-chat/TeamConversationList.tsx
  • src/components/team-chat/TeamFileUploader.tsx
  • src/components/team-chat/TeamsShowcase.tsx
  • src/components/team-chat/useTeamChatPanel.ts
  • src/components/transcriptions/TranscriptionsHistoryView.tsx
  • src/components/ui/EmptyState.tsx
  • src/components/ui/accessible-toast.tsx
  • src/components/ui/command-palette.tsx
  • src/components/ui/emoji-picker.tsx
  • src/components/ui/error-boundary-retry.tsx
  • src/components/ui/motion/components.tsx
  • src/components/ui/offline-indicator.tsx
  • src/components/voice/ElevenLabsDialogue.tsx
  • src/components/voice/VoiceTranscriptArea.tsx
  • src/components/whatsapp-flows/FlowComponentPreview.tsx
  • src/components/whatsapp-flows/WhatsAppProviderConfig.tsx
  • src/features/admin/components/AIUsageDashboard.tsx
  • src/features/admin/components/AdminCRMDashboard.tsx
  • src/features/admin/components/AdminUsersTable.tsx
  • src/features/admin/components/CrisisRoom.tsx
  • src/features/admin/components/FailedMessageStatusBadge.tsx
  • src/features/admin/components/MediaMigrationTool.tsx
  • src/features/admin/components/PlaybooksManager.tsx
  • src/features/admin/components/SicoobBridgeDashboard.tsx
  • src/features/admin/components/SupervisorCopilot.tsx
  • src/features/admin/components/TrainingMode.tsx
  • src/features/admin/components/telemetry/StsCommercialDashboard.tsx
  • src/features/admin/hooks/monitoring/useFailedMessages.ts
  • src/features/auth/components/AuthProvider.tsx
  • src/features/auth/components/permissions/PermissionMatrix.tsx
  • src/features/auth/services/authService.ts
  • src/features/connections/components/WhatsAppConnectionStatus.tsx
  • src/features/connections/hooks/parts/useConnectionsActions.ts
  • src/features/connections/hooks/parts/useConnectionsState.ts
  • src/features/connections/hooks/useConnectionsManager.ts
  • src/features/inbox/components/AudioMemePicker.tsx
  • src/features/inbox/components/AudioRecorder.tsx
  • src/features/inbox/components/BulkActionsToolbar.tsx
  • src/features/inbox/components/CRMAutoSync.tsx
  • src/features/inbox/components/ContactPurchasesPanel.tsx
  • src/features/inbox/components/ConversationContextMenu.tsx
  • src/features/inbox/components/ConversationHistory.tsx
  • src/features/inbox/components/ConversationListSidebar.tsx
  • src/features/inbox/components/CustomEmojiPicker.tsx
  • src/features/inbox/components/InteractiveMessage.tsx
  • src/features/inbox/components/LeadRiskScorePanel.tsx
  • src/features/inbox/components/LocationMessage.tsx
  • src/features/inbox/components/LocationPicker.tsx
  • src/features/inbox/components/MediaGallery.tsx
  • src/features/inbox/components/MediaPreview.tsx
  • src/features/inbox/components/MessageContextActions.tsx
  • src/features/inbox/components/MessageReactions.tsx
  • src/features/inbox/components/NextBestActionEngine.tsx
  • src/features/inbox/components/QuickRepliesManager.tsx
  • src/features/inbox/components/RealtimeInboxView.tsx
  • src/features/inbox/components/RemindersPanel.tsx
  • src/features/inbox/components/ScheduleMessageDialog.tsx
  • src/features/inbox/components/TeamFiles.tsx
  • src/features/inbox/components/TemplatesWithVariables.tsx
  • src/features/inbox/components/TicketHistorySheet.tsx
  • src/features/inbox/components/TicketTabs.tsx
  • src/features/inbox/components/UniversityHelp.tsx
  • src/features/inbox/components/VirtualMessageBubble.tsx
  • src/features/inbox/components/VirtualizedRealtimeList.tsx
  • src/features/inbox/components/VisualValidationChecklist.tsx
  • src/features/inbox/components/VoiceChanger.tsx
  • src/features/inbox/components/WhisperMode.tsx
  • src/features/inbox/components/ai-tools/SentimentTab.tsx
  • src/features/inbox/components/chat/ChatDialogs.tsx
  • src/features/inbox/components/chat/ChatHeader.tsx
  • src/features/inbox/components/chat/ChatHeaderToolbar.tsx
  • src/features/inbox/components/chat/ChatInputArea.tsx
  • src/features/inbox/components/chat/ChatInputToolbars.tsx
  • src/features/inbox/components/chat/ChatMessageBubble.tsx
  • src/features/inbox/components/chat/ChatMessageInput.tsx
  • src/features/inbox/components/chat/ChatMessagesArea.tsx
  • src/features/inbox/components/chat/ChatPanelHeader.tsx
  • src/features/inbox/components/chat/ChatSearchBar.tsx
  • src/features/inbox/components/chat/ChatToolPanels.tsx
  • src/features/inbox/components/chat/MentionAutocomplete.tsx
  • src/features/inbox/components/chat/MessageBubble.tsx
  • src/features/inbox/components/chat/MessageHoverToolbar.tsx
  • src/features/inbox/components/chat/MessageStatusInline.tsx
  • src/features/inbox/components/chat/MessageStatusPanel.tsx
  • src/features/inbox/components/chat/RichTextToolbar.tsx
  • src/features/inbox/components/chat/hooks/useChatFilters.ts
  • src/features/inbox/components/chat/hooks/useChatSearchState.ts
  • src/features/inbox/components/chat/hooks/useSLADelivery.ts
  • src/features/inbox/components/collaboration/InternalNotesPanel.tsx
  • src/features/inbox/components/contact-details/Contact360Helpers.tsx
  • src/features/inbox/components/contact-details/ContactAccordionSections.tsx
  • src/features/inbox/components/contact-details/ContactHeaderSection.tsx
  • src/features/inbox/components/contact-details/ContactInfoSection.tsx
  • src/features/inbox/components/contact-details/ContactIntelligencePanel.tsx
  • src/features/inbox/components/contact-details/ContactStatsSection.tsx
  • src/features/inbox/components/contact-details/EditContactDialog.tsx
  • src/features/inbox/components/contact-details/ExternalContact360Panel.tsx
  • src/features/inbox/components/conversation-list/ConversationItem.tsx
  • src/features/inbox/components/conversation-list/__mocks__/mockConversations.ts
  • src/features/inbox/components/quick-replies/QuickReplyDialog.tsx
  • src/features/inbox/components/search/GlobalSearchResults.tsx
  • src/features/inbox/components/stickers/StickerGrid.tsx
  • src/features/inbox/components/stickers/StickerManager.tsx
  • src/features/inbox/components/useGlobalSearchData.ts
  • src/features/inbox/hooks/__tests__/useMessageQueueE2E.spec.tsx
  • src/features/inbox/hooks/realtime/externalMessageSender.ts
  • src/features/inbox/hooks/team-chat/useTeamMessages.ts
  • src/features/inbox/hooks/useAgentPendingCounts.ts
  • src/features/inbox/hooks/useInboxShortcuts.ts
  • src/features/inbox/hooks/useRealtimeInbox.ts
  • src/features/inbox/hooks/useRealtimeMessages.ts
  • src/features/inbox/hooks/useSafeInteractiveMessage.ts
  • src/features/inbox/hooks/useSipClient.ts
  • src/features/inbox/services/whatsappStatusService.ts
  • src/features/sla/components/SLADeliveryHistoryDashboard.tsx
  • src/features/sla/hooks/useSLANotifications.ts
  • src/hooks/evolution/useEvolutionApiCore.ts
  • src/hooks/performance/useObservers.ts
  • src/hooks/performance/useTimingHooks.ts
  • src/hooks/useBusinessHours.ts
  • src/hooks/useContactAssignment.ts
  • src/hooks/useContactNotes.ts
  • src/hooks/useContactSearch.ts
  • src/hooks/useContactsRealtime.ts
  • src/hooks/useDeliveryStats.ts
  • src/hooks/useDemandPrediction.ts
  • src/hooks/useEmail.ts
  • src/hooks/useEmailDraft.ts
  • src/hooks/useGmailMetrics.ts
  • src/hooks/useIncomingCallListener.ts
  • src/hooks/useIndexNavigation.ts
  • src/hooks/useMessageSearch.ts
  • src/hooks/useQueueAnalytics.ts
  • src/hooks/useQueuesComparison.ts
  • src/hooks/useTeamChatDraft.ts

Walkthrough

Habilita eslint-plugin-unused-imports, remove imports/ícones/tipos não usados em larga escala e ajusta fluxos: paginação de contatos (abort/race-id), “recentes” no menu mobile, notificações SLA respeitando preferências/quiet hours e inserts seguros de mensagens interativas; vários pontos migram supabase↔dbFrom.

Changes

Config ESLint e deps

Layer / File(s) Summary
Configuração ESLint e dependências
eslint.config.js, package.json
Adiciona eslint-plugin-unused-imports, registra plugin e ativa regras substitutas para unused-vars.

Fluxos funcionais centrais

Layer / File(s) Summary
Paginação de Contatos
src/components/contacts/useContactsPagination.ts
Primeira página via RPC/consulta; abort/race-id; finally incondicional; loadMore com guard e append.
Recentes no Mobile Drawer
src/components/mobile/MobileDrawerMenu.tsx
Recents persistidos (localStorage), dedup, vibração opcional e filtro por roles.
Notificações SLA
src/features/sla/hooks/useSLANotifications.ts
Subscrição realtime, dedupe por Set, som/quiet hours, browser notifications e toast.
Envio interativo seguro
src/features/inbox/hooks/useSafeInteractiveMessage.ts
Insert em messages com status 'sending' via dbFrom; valida connectionId; toast/log no erro.
Previsão de demanda
src/hooks/useDemandPrediction.ts
Troca para dbFrom e agrega contagens horárias dos últimos 7 dias.

Testes e scripts

Layer / File(s) Summary
E2E/Unit e Scripts
e2e/*, src/features/inbox/hooks/__tests__/*, scripts/regen-trilha-mensagens.ts
Imports mínimos; regex “Links navegaveis” flexibilizada.

UI/limpeza transversal

Layer / File(s) Summary
Limpeza geral
src/**/*
Remoção ampla de imports/ícones/tipos não usados; pequenos ajustes de ícones/UI; migrações pontuais supabase↔dbFrom.

Sequence Diagram(s)

sequenceDiagram
  participant UI
  participant Pag as useContactsPagination
  participant Mob as MobileDrawerMenu
  participant SLA as useSLANotifications
  participant DB as dbFrom

  UI->>Pag: loadContacts / loadMore
  Pag->>DB: query/RPC com abort
  DB-->>Pag: rows/count
  UI->>Mob: navegar item
  Mob->>Mob: salvar recente (localStorage)
  SLA->>DB: subscribe conversation_sla
  DB-->>SLA: evento breach
  SLA-->>UI: toast/som/notificação (condicional)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/onda-2-pr-2.4-unused-imports-plugin

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8c0de63911

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +169 to +173
// setLoading(false) SEMPRE — sem guard. Se um request mais novo já está
// em flight, ele já chamou setLoading(true) e vai chamar setLoading(false)
// no próprio finally. O React de-duplica sets idênticos consecutivos,
// então não há flicker. O guard aqui causaria stuck=true se o caller
// descartasse a Promise sem aguardar.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep loading tied to the active request

When a second loadContacts starts while the previous one is in flight, the new abort support cancels the old request; that old request then reaches this finally path after the newer call has already set loading to true, and the unconditional setLoading(false) just below turns the spinner off while the active request is still pending. In quick filter/search changes this makes the contacts view appear idle with stale data until the latest request completes; clear loading only for the current requestId/controller.

Useful? React with 👍 / 👎.

@adm01-debug
Copy link
Copy Markdown
Owner Author

Mergeando sem CodeRabbit (trial credits esgotados)

CodeRabbit Pro tem limite horário de free trial credits. Após múltiplas PRs em sequência (Onda 1 + Onda 2 = 8 PRs hoje), trial esgotou. CodeRabbit fica PENDING indefinidamente em PRs grandes.

Cobertura de review compensatória

Bot Status
✅ Codex review postado, 0 actionable suggestions
✅ check-quality SUCCESS
✅ CodeQL SUCCESS
✅ Gitleaks SUCCESS
✅ Vercel build SUCCESS
✅ Vercel Preview SUCCESS
⏳ Vercel Agent em progresso
⏳ CodeRabbit rate-limited (trial)

Análise de risco

PR é mecânica — único trabalho cognitivo:

  • Adicionar plugin no eslint config (3 linhas)
  • Rodar eslint --fix que só remove imports não usados

O risco residual é zero — ESLint não tem como remover imports usados (faz análise estática AST). Se algum import era "usado em runtime via dynamic import", o build teria falhado — mas bun run build passou em 1m 39s.

Mergeando com admin.

…(Onda 2 PR 2.4)

Substitui regra @typescript-eslint/no-unused-vars (sem auto-fix) pelo plugin
eslint-plugin-unused-imports@4.4.1 (com auto-fix de imports). Aplica --fix
removendo automaticamente imports não usados em todo o repo.

- Adiciona dep `eslint-plugin-unused-imports@4.4.1`
- Importa plugin em `eslint.config.js`
- Substitui `@typescript-eslint/no-unused-vars` por:
  - `unused-imports/no-unused-imports` (com auto-fix)
  - `unused-imports/no-unused-vars` (mesmo comportamento da regra antiga)

```bash
$ bun x eslint --fix "src/**/*.{ts,tsx}"
$ bun x eslint --fix "scripts/**/*.{ts,tsx,mjs,js}"
$ bun x eslint --fix "e2e/**/*.{ts,tsx}"
$ bun x eslint --fix "tests/**/*.{ts,tsx}"
```

Resultado: 322 arquivos modificados (376 inserções / 514 deletions =
**-138 linhas net** de imports mortos removidos).

| Métrica | Antes | Depois | Δ |
|---|---|---|---|
| Total problems | 2241 | 1597 | **-644 (-29%)** |
| Errors | 174 | 164 | **-10** |
| Warnings | 2067 | 1433 | **-634** |

Acumulado Onda 1 + Onda 2 (PRs 1.1-1.4 + 2.1-2.4):
- Errors: 1378 → 164 (**-88%**)

- bun run build: OK (1m 39s) ✓
- TypeScript: sem novos erros ✓
- Sem regressão em runtime (apenas remoção de imports inertes) ✓

- 137 `unused-imports/no-unused-imports` warnings residuais — casos
  especiais que --fix não consegue (imports com no-restricted-imports
  simultâneo, type-only imports, etc). Vão ser limpos na Onda 5/6 junto
  com o refactor de domain boundaries.

- 488 `unused-imports/no-unused-vars` warnings residuais — vars não
  usadas (não-imports). Não há auto-fix; precisam de fix manual com
  prefixo `_` ou deleção. Plano: PR 2.5 incremental por área.

- Plugin: https://github.com/sweepline/eslint-plugin-unused-imports
- /workspace/notes/faxina-onda-2-plano.md (atualizado)
@adm01-debug adm01-debug force-pushed the chore/onda-2-pr-2.4-unused-imports-plugin branch from 8c0de63 to e2fa944 Compare May 9, 2026 01:13
@adm01-debug adm01-debug merged commit dbff6cc into main May 9, 2026
7 of 9 checks passed
@adm01-debug adm01-debug deleted the chore/onda-2-pr-2.4-unused-imports-plugin branch May 9, 2026 01:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants