diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-07-17 11:08:07 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-07-17 11:11:28 +0800 |
| commit | 79ec6878877f0fd9246d67d3cd4f8cc2d1200150 (patch) | |
| tree | e3cd8cfc7ef5cd2a6a7ceb93d9a4b1764fa21b61 /mingling_picker/src/parselib/flag_matcher.rs | |
| parent | e6136f22cff446b16dbebf3b26a6fdea6dbc0e83 (diff) | |
refactor: rename `mingling_picker` to `arg_picker`
Diffstat (limited to 'mingling_picker/src/parselib/flag_matcher.rs')
| -rw-r--r-- | mingling_picker/src/parselib/flag_matcher.rs | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/mingling_picker/src/parselib/flag_matcher.rs b/mingling_picker/src/parselib/flag_matcher.rs deleted file mode 100644 index e93d35a..0000000 --- a/mingling_picker/src/parselib/flag_matcher.rs +++ /dev/null @@ -1,82 +0,0 @@ -use crate::{ - matcher_needed::*, - parselib::{build_possible_flags, get_seeked_first, multi_seek_eq, seek_end_of_options}, -}; - -/// `FlagMatcher` is used to match flags in command-line arguments. -/// -/// Flags typically start with `-` or `--` (e.g., `-h`, `--help`), -/// and do not carry additional values. This matcher is responsible for finding -/// these flags in the argument list, taking into account that flags after `--` -/// (end-of-options marker) should not be matched. -pub struct FlagMatcher; - -impl Matcher for FlagMatcher { - fn on_match_one( - args: &[MaskedArg], - style: &ParserStyle, - arg_info: &PickerArgInfo, - ) -> Option<usize> { - let possible_flags = build_possible_flags(style, arg_info); - let flag_refs: Vec<&str> = possible_flags.iter().map(|s| s.as_str()).collect(); - let end_of_options = seek_end_of_options(args, style); - - let result = get_seeked_first(multi_seek_eq(args, &flag_refs, style.case_sensitive)); - - match (end_of_options, result) { - (Some(end), Some(current)) if current > end => None, - _ => result, - } - } - - fn on_match_all( - args: &[MaskedArg], - style: &ParserStyle, - arg_info: &PickerArgInfo, - ) -> Vec<usize> { - let possible_flags = build_possible_flags(style, arg_info); - single_pass_match_all(args, style, &possible_flags) - } -} - -/// Single-pass match: finds the `--` marker and matching flags in one iteration. -fn single_pass_match_all( - args: &[MaskedArg], - style: &ParserStyle, - possible_flags: &[String], -) -> Vec<usize> { - let flag_refs: Vec<&str> = possible_flags.iter().map(|s| s.as_str()).collect(); - let eoo = style.end_of_options; - let case_sensitive = style.case_sensitive; - - let mut end_pos: Option<usize> = None; - let mut matches: Vec<usize> = Vec::new(); - - for arg in args { - if end_pos.is_none() { - let is_eoo = if case_sensitive { - arg.raw == eoo - } else { - arg.raw.eq_ignore_ascii_case(eoo) - }; - if is_eoo { - end_pos = Some(arg.raw_idx); - continue; - } - } - - // Only match flags before the end-of-options marker. - if end_pos.is_none() { - let matched = if case_sensitive { - flag_refs.contains(&arg.raw) - } else { - flag_refs.iter().any(|s| arg.raw.eq_ignore_ascii_case(s)) - }; - if matched { - matches.push(arg.raw_idx); - } - } - } - - matches -} |
