feat: add multiline item rendering#999
Conversation
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
4e7b15b to
9235071
Compare
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughIntroduces multiline item rendering and full-line highlighting across the stack: CLI flags and parsing, TUI header and item rendering, a new ItemRenderer, row-based scrolling, util helpers, extensive Insta snapshot tests and macros, shell completions/key-bindings, manpage/docs, and CI snapshot logging. Changes
Sequence DiagramsequenceDiagram
participant CLI as CLI (args)
participant Options as SkimOptions
participant App as App
participant Header as Header
participant Layout as LayoutTemplate
participant ItemList as ItemList
participant ItemRenderer as ItemRenderer
participant TUI as Ratatui Widget
CLI->>Options: parse (--multiline, --highlight-line, ...)
Options->>Options: set multiline separator based on read0
App->>Header: set header lines + multiline sep
Header->>Header: compute height() (split by sep)
Header-->>App: header height
App->>App: compare with last_header_height
alt header height changed
App->>Layout: rebuild with new header height
Layout-->>App: updated bounds
end
App->>ItemList: request render (multiline, highlight_line)
ItemList->>ItemRenderer: ItemRenderer::new_for(list, width)
ItemRenderer-->>ItemList: renderer
ItemList->>ItemRenderer: render_item() for each matched item
ItemRenderer->>ItemRenderer: split into sub-rows, compute hscroll
ItemRenderer-->>ItemList: flattened ListItem rows
ItemList->>TUI: render flattened rows into frame
TUI-->>App: display frame
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 1 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@AGENTS.md`:
- Around line 41-121: Add missing blank lines before the code fences and specify
a language for the YAML fence in the "Snapshot front-matter" example: insert a
blank line before the three code blocks under "Simple variant", "DSL variant",
and the front-matter example, and change the front-matter fence from ``` to
```yaml so the snippet beginning with description: is marked as YAML; update the
text near "Snapshot front-matter" and the examples accordingly (refer to the
DSL/example code blocks and the YAML front-matter snippet).
In `@shell/completion.bash`:
- Around line 172-175: In the --multiline case replace the unsafe array
assignment COMPREPLY=($(compgen -f "${cur}")) with a safe array population using
mapfile/readarray (or read -a) to avoid word-splitting; call compgen with the
positional separator (--) and the quoted variable "${cur}" and feed its output
into mapfile/readarray to populate COMPREPLY in the --multiline branch.
In `@shell/completion.fish`:
- Line 64: The Fish completion incorrectly uses the `-r` flag for the
--multiline long option which forces an argument; remove the `-r` attribute from
the `complete` invocation that defines `-l multiline` so the option can accept 0
or 1 arguments (matching num_args = 0..=1 in src/options.rs), keeping the rest
of the `complete -c sk -l multiline -d '...'` arguments and description
unchanged.
In `@src/tui/item_list.rs`:
- Around line 422-425: The multiline separator fallback in ItemList (field
multiline using options.multiline.unwrap_or(String::from("\\n"))) always uses a
literal "\\n" and ignores the --read0 behavior; ensure SkimOptions::build() is
called before constructing ItemList so that options.multiline already contains
the correct default (actual "\n" when read0 is set, "\\n" otherwise), and remove
the hardcoded fallback in ItemList (or at least respect the already-built
options.multiline value) so ItemList uses the separator established by
SkimOptions::build().
In `@src/tui/item_renderer.rs`:
- Around line 420-432: current_width is being updated with
display_width(span_text) which treats tabs as single chars, so when a span
contained tabs that you expanded via expand_tabs(...) the subsequent spans get
the wrong start column; fix by computing the displayed text after tab-expansion
and use its display width to update current_width: for each span, determine
processed_visible = if visible.contains('\t') { self.expand_tabs(&visible,
current_width) } else { visible.clone() } (or reuse processed), push
processed_visible into result, then increment current_width by
display_width(&processed_visible) (and keep current_char_index update using
span_chars.len()); update references around expand_tabs, processed, span_text,
span_chars, and current_width accordingly.
In `@tests/multiline.rs`:
- Around line 212-227: The section headers jump from "Section 10: Cycle
interaction" to "Section 12: read0 — null-byte-delimited input (Unix only)";
update the numbering to remove the gap by renaming "Section 12: read0 —
null-byte-delimited input (Unix only)" to "Section 11: read0 —
null-byte-delimited input (Unix only)" (the surrounding test is
insta_test!(multiline_cycle, ...) in tests/multiline.rs), ensuring sequential
section numbers throughout the file.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 819ee6d6-16ce-4241-aff6-d0144d7fd021
⛔ Files ignored due to path filters (281)
tests/snapshots/ansi__prompt_ansi.snapis excluded by!**/*.snaptests/snapshots/ansi__prompt_ansi@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_append_and_select-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_append_and_select-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_append_and_select.snapis excluded by!**/*.snaptests/snapshots/binds__bind_append_and_select@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_append_and_select@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_append_and_select@003.snapis excluded by!**/*.snaptests/snapshots/binds__bind_change-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_change-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_change.snapis excluded by!**/*.snaptests/snapshots/binds__bind_change@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_change@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_change@003.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last-4.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last@003.snapis excluded by!**/*.snaptests/snapshots/binds__bind_first_last@004.snapis excluded by!**/*.snaptests/snapshots/binds__bind_if_non_matched-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_if_non_matched-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_if_non_matched.snapis excluded by!**/*.snaptests/snapshots/binds__bind_if_non_matched@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_if_non_matched@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_if_non_matched@003.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_change-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_change.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_change@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_change@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_from_empty-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_from_empty.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_from_empty@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_from_empty@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_to_empty-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_to_empty.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_to_empty@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_header_to_empty@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_preview_cmd-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_preview_cmd-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_preview_cmd.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_preview_cmd@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_preview_cmd@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_preview_cmd@003.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_basic-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_basic.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_basic@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_basic@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_expand-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_expand.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_expand@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_expand@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_fields-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_fields.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_fields@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_fields@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself-4.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself@003.snapis excluded by!**/*.snaptests/snapshots/binds__bind_set_query_to_itself@004.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries-4.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries-5.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries@003.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries@004.snapis excluded by!**/*.snaptests/snapshots/binds__bind_toggle_interactive_queries@005.snapis excluded by!**/*.snaptests/snapshots/binds__bind_top_alias-2.snapis excluded by!**/*.snaptests/snapshots/binds__bind_top_alias-3.snapis excluded by!**/*.snaptests/snapshots/binds__bind_top_alias.snapis excluded by!**/*.snaptests/snapshots/binds__bind_top_alias@001.snapis excluded by!**/*.snaptests/snapshots/binds__bind_top_alias@002.snapis excluded by!**/*.snaptests/snapshots/binds__bind_top_alias@003.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_different-2.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_different.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_different@001.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_different@002.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_exact-2.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_exact.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_exact@001.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_exact@002.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_lower-2.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_lower.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_lower@001.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_lower@002.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_no_match-2.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_no_match.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_no_match@001.snapis excluded by!**/*.snaptests/snapshots/case__case_ignore_no_match@002.snapis excluded by!**/*.snaptests/snapshots/case__case_non_ascii-2.snapis excluded by!**/*.snaptests/snapshots/case__case_non_ascii-3.snapis excluded by!**/*.snaptests/snapshots/case__case_non_ascii.snapis excluded by!**/*.snaptests/snapshots/case__case_non_ascii@001.snapis excluded by!**/*.snaptests/snapshots/case__case_non_ascii@002.snapis excluded by!**/*.snaptests/snapshots/case__case_non_ascii@003.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_exact-2.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_exact.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_exact@001.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_exact@002.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_lower-2.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_lower.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_lower@001.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_lower@002.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_no_match-2.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_no_match.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_no_match@001.snapis excluded by!**/*.snaptests/snapshots/case__case_respect_no_match@002.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_exact-2.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_exact.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_exact@001.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_exact@002.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_lower-2.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_lower.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_lower@001.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_lower@002.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_no_match-2.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_no_match.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_no_match@001.snapis excluded by!**/*.snaptests/snapshots/case__case_smart_no_match@002.snapis excluded by!**/*.snaptests/snapshots/defaults__interactive_mode_command_execution-2.snapis excluded by!**/*.snaptests/snapshots/defaults__interactive_mode_command_execution-3.snapis excluded by!**/*.snaptests/snapshots/defaults__interactive_mode_command_execution.snapis excluded by!**/*.snaptests/snapshots/defaults__interactive_mode_command_execution@001.snapis excluded by!**/*.snaptests/snapshots/defaults__interactive_mode_command_execution@002.snapis excluded by!**/*.snaptests/snapshots/defaults__interactive_mode_command_execution@003.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input-2.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input-3.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input-4.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input@001.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input@002.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input@003.snapis excluded by!**/*.snaptests/snapshots/defaults__unicode_input@004.snapis excluded by!**/*.snaptests/snapshots/defaults__vanilla.snapis excluded by!**/*.snaptests/snapshots/defaults__vanilla_basic.snapis excluded by!**/*.snaptests/snapshots/issues__issue_359_multi_regex_unicode.snapis excluded by!**/*.snaptests/snapshots/issues__issue_359_multi_regex_unicode@001.snapis excluded by!**/*.snaptests/snapshots/issues__issue_361_literal_space_control.snapis excluded by!**/*.snaptests/snapshots/issues__issue_361_literal_space_control@001.snapis excluded by!**/*.snaptests/snapshots/issues__issue_361_literal_space_invert.snapis excluded by!**/*.snaptests/snapshots/issues__issue_361_literal_space_invert@001.snapis excluded by!**/*.snaptests/snapshots/issues__issue_547_null_match-2.snapis excluded by!**/*.snaptests/snapshots/issues__issue_547_null_match.snapis excluded by!**/*.snaptests/snapshots/issues__issue_547_null_match@001.snapis excluded by!**/*.snaptests/snapshots/issues__issue_547_null_match@002.snapis excluded by!**/*.snaptests/snapshots/issues__issue_929_double_width_chars-2.snapis excluded by!**/*.snaptests/snapshots/issues__issue_929_double_width_chars.snapis excluded by!**/*.snaptests/snapshots/issues__issue_929_double_width_chars@001.snapis excluded by!**/*.snaptests/snapshots/issues__issue_929_double_width_chars@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_b-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_b.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_b@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_b@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_bspace-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_bspace.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_bspace@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_bspace@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d-4.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_d@004.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_f-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_f-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_f.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_f@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_f@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_alt_f@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_arrows-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_arrows-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_arrows.snapis excluded by!**/*.snaptests/snapshots/keys__keys_arrows@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_arrows@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_arrows@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_basic-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_basic.snapis excluded by!**/*.snaptests/snapshots/keys__keys_basic@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_basic@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_bspace-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_bspace.snapis excluded by!**/*.snaptests/snapshots/keys__keys_bspace@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_bspace@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_btab-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_btab.snapis excluded by!**/*.snaptests/snapshots/keys__keys_btab@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_btab@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_a-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_a.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_a@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_a@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows-4.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_arrows@004.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_b-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_b-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_b.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_b@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_b@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_b@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_c.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_c@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_d-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_d-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_d.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_d@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_e-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_e-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_e.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_e@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_e@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_e@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_f-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_f-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_f.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_f@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_f@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_f@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_h-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_h.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_h@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_h@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_k-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_k.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_k@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_k@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_u-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_u.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_u@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_u@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_w-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_w.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_w@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_w@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_y-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_y-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_y.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_y@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_y@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_ctrl_y@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab@003.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab_empty-2.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab_empty-3.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab_empty.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab_empty@001.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab_empty@002.snapis excluded by!**/*.snaptests/snapshots/keys__keys_tab_empty@003.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_b-2.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_b.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_b@001.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_b@002.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_bspace-2.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_bspace.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_bspace@001.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_bspace@002.snapis excluded by!**/*.snaptests/snapshots/keys_interactive__keys_interactive_alt_d-2.snapis excluded by!**/*.snap
📒 Files selected for processing (19)
AGENTS.mdman/man1/sk.1shell/completion.bashshell/completion.fishshell/completion.nushell/completion.zshshell/key-bindings.bashshell/key-bindings.fishshell/key-bindings.zshsrc/options.rssrc/tui/app.rssrc/tui/header.rssrc/tui/item_list.rssrc/tui/item_renderer.rssrc/tui/mod.rssrc/tui/util.rstests/common/insta.rstests/multiline.rstests/options.rs
5e37a0e to
f5be9e1
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/test.yml:
- Line 75: The find invocation "find . -name \"*.snap.new\" | while read -r
new_snap; do" is too broad and can traverse heavy directories like target/;
restrict the search to known snapshot locations (e.g., tests/, spec/, snapshots/
or your project's snapshot dir) by replacing "." with those directory globs or
explicit paths so only snapshot folders are scanned, e.g. "find tests -name
\"*.snap.new\"" or "find . -path \"*/__snapshots__\" -name \"*.snap.new\""
(apply the same pattern where new_snap is consumed) to speed failing job logs.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 79493887-1162-4fee-a7c1-4b09cbd7884d
📒 Files selected for processing (1)
.github/workflows/test.yml
Checklist
README.md, comments,src/manpage.rsand/orsrc/options.rsif applicable)Description of the changes
Note: codecov runs on the PR on this repo, but feel free to ignore it.
Summary by CodeRabbit
New Features
Documentation
Tests
Chores