complete: reuse replaces_token()

This commit is contained in:
Johannes Altmanninger
2026-01-02 07:17:54 +01:00
parent 185b91de13
commit 3117a488ec
3 changed files with 10 additions and 11 deletions

View File

@@ -207,7 +207,7 @@ pub fn rank(&self) -> u32 {
/// If this completion replaces the entire token, prepend a prefix. Otherwise do nothing. /// If this completion replaces the entire token, prepend a prefix. Otherwise do nothing.
pub fn prepend_token_prefix(&mut self, prefix: &wstr) { pub fn prepend_token_prefix(&mut self, prefix: &wstr) {
if self.flags.contains(CompleteFlags::REPLACES_TOKEN) { if self.replaces_token() {
self.completion.insert_utfstr(0, prefix) self.completion.insert_utfstr(0, prefix)
} }
} }
@@ -2093,7 +2093,7 @@ fn escape_opening_brackets(completions: &mut [Completion], argument: &wstr) {
return; return;
}; };
for comp in completions { for comp in completions {
if comp.flags.contains(CompleteFlags::REPLACES_TOKEN) { if comp.replaces_token() {
continue; continue;
} }
comp.flags |= CompleteFlags::REPLACES_TOKEN; comp.flags |= CompleteFlags::REPLACES_TOKEN;
@@ -2128,7 +2128,7 @@ fn mark_completions_duplicating_arguments(
let mut comp_str; let mut comp_str;
for comp in self.completions.get_list_mut() { for comp in self.completions.get_list_mut() {
comp_str = comp.completion.clone(); comp_str = comp.completion.clone();
if !comp.flags.contains(CompleteFlags::REPLACES_TOKEN) { if !comp.replaces_token() {
comp_str.insert_utfstr(0, prefix); comp_str.insert_utfstr(0, prefix);
} }
if arg_strs.binary_search(&comp_str).is_ok() { if arg_strs.binary_search(&comp_str).is_ok() {
@@ -3000,7 +3000,7 @@ macro_rules! unique_completion_applies_as {
let completions = do_complete(L!("cat te"), CompletionRequestOptions::default()); let completions = do_complete(L!("cat te"), CompletionRequestOptions::default());
assert_eq!(completions.len(), 1); assert_eq!(completions.len(), 1);
assert_eq!(completions[0].completion, L!("stfile")); assert_eq!(completions[0].completion, L!("stfile"));
assert!(!(completions[0].flags.contains(CompleteFlags::REPLACES_TOKEN))); assert!(!completions[0].replaces_token());
assert!( assert!(
!(completions[0] !(completions[0]
.flags .flags
@@ -3017,7 +3017,7 @@ macro_rules! unique_completion_applies_as {
let completions = do_complete(L!("cat testfile TE"), CompletionRequestOptions::default()); let completions = do_complete(L!("cat testfile TE"), CompletionRequestOptions::default());
assert_eq!(completions.len(), 1); assert_eq!(completions.len(), 1);
assert_eq!(completions[0].completion, L!("testfile")); assert_eq!(completions[0].completion, L!("testfile"));
assert!(completions[0].flags.contains(CompleteFlags::REPLACES_TOKEN)); assert!(completions[0].replaces_token());
assert!( assert!(
completions[0] completions[0]
.flags .flags

View File

@@ -6641,7 +6641,7 @@ fn compute_and_apply_completions(&mut self, c: ReadlineCmd) {
fn try_insert(&mut self, c: Completion, tok: &wstr, token_range: Range<usize>) { fn try_insert(&mut self, c: Completion, tok: &wstr, token_range: Range<usize>) {
// If this is a replacement completion, check that we know how to replace it, e.g. that // If this is a replacement completion, check that we know how to replace it, e.g. that
// the token doesn't contain evil operators like {}. // the token doesn't contain evil operators like {}.
if !c.flags.contains(CompleteFlags::REPLACES_TOKEN) || reader_can_replace(tok, c.flags) { if !c.replaces_token() || reader_can_replace(tok, c.flags) {
self.completion_insert( self.completion_insert(
&c.completion, &c.completion,
token_range.end, token_range.end,
@@ -6693,7 +6693,7 @@ fn handle_completions(&mut self, token_range: Range<usize>, comp: Vec<Completion
// rank do not require replacement, then ignore all those that want to use replacement. // rank do not require replacement, then ignore all those that want to use replacement.
let mut will_replace_token = true; let mut will_replace_token = true;
for c in comp { for c in comp {
if c.rank() <= best_rank && !c.flags.contains(CompleteFlags::REPLACES_TOKEN) { if c.rank() <= best_rank && !c.replaces_token() {
will_replace_token = false; will_replace_token = false;
break; break;
} }
@@ -6710,9 +6710,9 @@ fn handle_completions(&mut self, token_range: Range<usize>, comp: Vec<Completion
} }
// Only use completions that match replace_token. // Only use completions that match replace_token.
let completion_replaces_token = c.flags.contains(CompleteFlags::REPLACES_TOKEN); let completion_replaces_token = c.replaces_token();
let replaces_only_due_to_case_mismatch = { let replaces_only_due_to_case_mismatch = {
c.flags.contains(CompleteFlags::REPLACES_TOKEN) completion_replaces_token
&& c.r#match.is_exact_or_prefix() && c.r#match.is_exact_or_prefix()
&& !matches!(c.r#match.case_fold, CaseSensitivity::Sensitive) && !matches!(c.r#match.case_fold, CaseSensitivity::Sensitive)
}; };

View File

@@ -1002,8 +1002,7 @@ fn try_add_completion_result(
// Note that prepend_token_prefix is a no-op unless COMPLETE_REPLACES_TOKEN is set // Note that prepend_token_prefix is a no-op unless COMPLETE_REPLACES_TOKEN is set
let after = self.resolved_completions.len(); let after = self.resolved_completions.len();
for c in self.resolved_completions[before..after].iter_mut() { for c in self.resolved_completions[before..after].iter_mut() {
if info.has_fuzzy_ancestor && !(c.flags.contains(CompleteFlags::REPLACES_TOKEN)) if info.has_fuzzy_ancestor && !c.replaces_token() {
{
c.flags |= CompleteFlags::REPLACES_TOKEN; c.flags |= CompleteFlags::REPLACES_TOKEN;
c.prepend_token_prefix(wildcard); c.prepend_token_prefix(wildcard);
} }