Skip to content

Latest commit

 

History

History
60 lines (50 loc) · 5.43 KB

File metadata and controls

60 lines (50 loc) · 5.43 KB

Legal você pedir essa revisão detalhada — curto fazer esse tipo de raio‑X técnico em Rust.

Status do Cargo/Clippy

  • Tentei executar cargo check, mas falhou com Acesso negado (os error 5) ao invocar rustc para dependências (ex.: unicode-ident, cfg-if, futures-core). Por isso, não consegui confirmar warnings reais do compilador. Abaixo segue a análise estática do código.
  • Não consegui rodar cargo clippy pelo mesmo bloqueio. Se você ajustar a permissão, eu tento de novo.

Código Não Utilizado (Dead Code/Unused)

  • src/main.rs: módulos core e events são declarados mas não referenciados. Remover mod core; e mod events; ou ligar o uso.
  • src/core/state.rs: CommandBlock, SessionState, TerminalEvent não aparecem no resto do código. Remover ou integrar.
  • src/events/mod.rs: módulo vazio e não usado. Remover.
  • src/terminal/buffer.rs: TerminalBuffer (e helper strip_ansi) não é usado. Remover arquivo/módulo ou integrar.
  • src/terminal/parser.rs: TerminalParser e SemanticPerformer não são usados. Remover ou integrar.
  • src/terminal/mod.rs: pub mod buffer; e pub mod parser; ficam “pendurados” sem uso.
  • src/ui/views/top_bar.rs: TopBar não é usado em nenhum lugar. Remover ou integrar no layout.
  • src/ui/icons.rs: lucide_icon_button nunca é chamado. Remover.
  • src/ui/views/tab_bar.rs: helpers icon_button e user_menu_item não são usados. Remover ou aplicar onde fizer sentido.
  • src/ui/views/tab_view.rs: TabView::new não é chamado. Remover ou usar.
  • src/ui/views/welcome_view.rs: WelcomeView::new não é chamado (usa-se with_recent). Remover ou usar.

Imports/Constantes Não Usados (warnings de unused)

  • src/ui/views/settings_view.rs: use gpui::InteractiveElement; não é usado.
  • src/ui/views/sidebar_view.rs: use gpui::InteractiveElement; e use gpui::Styled; não são usados.
  • src/ui/views/tab_view.rs: use gpui::StatefulInteractiveElement; não é usado.
  • src/ui/views/settings_view.rs: constante ACCENT_BG não é usada.

Dependências Provavelmente Inúteis

  • Cargo.toml: log, env_logger não aparecem no código.
  • Cargo.toml: uuid só é usado em src/core/state.rs (que está morto).
  • Cargo.toml: vte só é usado em src/terminal/parser.rs (também morto).
    Sugestão: remover dependências ao remover os módulos não usados.

Clippy (provável, ao liberar cargo clippy)

  • src/terminal/parser.rs: if params.len() > 0 && params[0]... → usar if let Some(first) = params.first() ou if !params.is_empty() para evitar len_zero e acesso por índice.

Qualidade/Organização

  • Função strip_ansi duplicada em src/terminal/buffer.rs e src/ui/views/tab_view.rs. Sugestão: mover para um util compartilhado (ex.: src/terminal/ansi.rs) e reutilizar.
  • Lógica de edição de texto (cursor, seleção, split) duplicada em SettingsView, SidebarView, TabBar e TabView. Sugestão: um pequeno helper local (ex.: TextEditState) com métodos insert_text, delete_selection, split_at_cursor. Refatoração simples e pragmática.
  • move_index duplicado em Workspace e TabBar. Pode virar helper comum para reduzir drift.
  • Workspace::on_tab_event repete lógica de atualizar sidebar/path em vários ramos. Extrair para sync_sidebar_root() reduz repetição.

Performance (ganhos reais)

  • src/terminal/buffer.rs: Vec::remove(0) em push_line é O(n) por linha. Se scrollback crescer, isso vira gargalo. Use VecDeque ou ring buffer.
  • src/ui/views/sidebar_view.rs: render_entry re-lê diretórios a cada render dos folders expandidos. Isso gera I/O e alocações repetidas. Melhor cachear filhos quando expande (ou armazenar em estado) e só atualizar quando necessário.
  • src/ui/views/sidebar_view.rs: buscas antigas continuam rodando mesmo após nova query; o resultado é descartado, mas o custo de CPU/IO continua. Use flag de cancelamento ou pare quando tx for fechado.
  • src/ui/views/tab_view.rs: scroll_handle.scroll_to_bottom() é chamado por linha. Para saídas longas, isso gera churn. Melhor chamar 1x por chunk.
  • src/terminal/mod.rs: TerminalPty::writeflush() a cada write. Isso pode ser caro em input intenso; se o PTY já é unbuffered, dá para remover o flush ou fazer flush por linha.

Boas Práticas Rust (idiomáticas)

  • Preferir &Path a &PathBuf em funções (SidebarView::read_entries, load_*_history, TabView::format_path) para evitar clones e seguir o idiomático.
  • Normalizar skip_dirs/skip_files para lowercase uma vez ao carregar OrbitshellRules, evitando to_lowercase() repetido em loop.
  • Em terminal/parser.rs, trocar indexação direta por params.first() (mais seguro/idiomático).

Testabilidade

  • Extrair helpers puros para testáveis: split_match, make_snippet, split_path_token, expand_tilde, format_recent_time, is_error_line.
  • format_recent_time usa Utc::now() direto; aceite now como parâmetro para testes determinísticos.
  • search_in_dir_stream e loaders de history dependem de FS real; uma pequena abstração de FS (trait ou função injetada) facilita testes com diretórios temporários.

Próximos passos (se quiser)

  1. Posso aplicar a limpeza de dead code/imports e atualizar Cargo.toml.
  2. Com a permissão do rustc resolvida, rodo cargo check/cargo clippy e te trago a lista exata de warnings reais.