fix(tui): narrow mention depth hint

This commit is contained in:
cyq
2026-06-02 02:11:31 +08:00
committed by Hunter Bown
parent a976758245
commit 29f57665eb
2 changed files with 46 additions and 1 deletions
+12 -1
View File
@@ -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.
+34
View File
@@ -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();