fix(tui): narrow mention depth hint
This commit is contained in:
@@ -301,7 +301,7 @@ pub fn try_autocomplete_file_mention(app: &mut App) -> bool {
|
||||
}
|
||||
|
||||
fn no_file_mention_matches_status(partial: &str, walk_depth: usize) -> String {
|
||||
if walk_depth > 0 && (partial.contains('/') || partial.contains('\\')) {
|
||||
if path_partial_reaches_walk_depth(partial, walk_depth) {
|
||||
format!(
|
||||
"No files match @{partial} (mention_walk_depth={walk_depth}; use /config set mention_walk_depth 0 to search deeper)"
|
||||
)
|
||||
@@ -310,6 +310,17 @@ fn no_file_mention_matches_status(partial: &str, walk_depth: usize) -> String {
|
||||
}
|
||||
}
|
||||
|
||||
fn path_partial_reaches_walk_depth(partial: &str, walk_depth: usize) -> bool {
|
||||
if walk_depth == 0 {
|
||||
return false;
|
||||
}
|
||||
let component_count = partial
|
||||
.split(['/', '\\'])
|
||||
.filter(|component| !component.is_empty())
|
||||
.count();
|
||||
component_count >= walk_depth
|
||||
}
|
||||
|
||||
/// Splice a completion into the input, replacing the `@<partial>` token at
|
||||
/// `byte_start` with `@<replacement>`. Cursor moves to the end of the new
|
||||
/// token so further keystrokes extend (or escape via space) naturally.
|
||||
|
||||
@@ -4748,6 +4748,40 @@ fn try_autocomplete_file_mention_no_match_mentions_depth_cap_for_path_like_parti
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_autocomplete_file_mention_no_match_skips_depth_hint_for_shallow_path() {
|
||||
let tmpdir = TempDir::new().expect("tempdir");
|
||||
|
||||
let mut app = create_test_app();
|
||||
app.workspace = tmpdir.path().to_path_buf();
|
||||
app.mention_walk_depth = 6;
|
||||
app.input = "@shallow_missing/main.rs".to_string();
|
||||
app.cursor_position = app.input.chars().count();
|
||||
|
||||
assert!(try_autocomplete_file_mention(&mut app));
|
||||
assert_eq!(
|
||||
app.status_message.as_deref(),
|
||||
Some("No files match @shallow_missing/main.rs")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_autocomplete_file_mention_no_match_skips_depth_hint_when_unlimited() {
|
||||
let tmpdir = TempDir::new().expect("tempdir");
|
||||
|
||||
let mut app = create_test_app();
|
||||
app.workspace = tmpdir.path().to_path_buf();
|
||||
app.mention_walk_depth = 0;
|
||||
app.input = "@a/b/c/d/e/f/g/target".to_string();
|
||||
app.cursor_position = app.input.chars().count();
|
||||
|
||||
assert!(try_autocomplete_file_mention(&mut app));
|
||||
assert_eq!(
|
||||
app.status_message.as_deref(),
|
||||
Some("No files match @a/b/c/d/e/f/g/target")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn try_autocomplete_file_mention_returns_false_outside_mention() {
|
||||
let mut app = create_test_app();
|
||||
|
||||
Reference in New Issue
Block a user