diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-07-16 20:03:18 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-07-16 20:03:18 +0800 |
| commit | c906c757aac0260594beb4c9efde4b0e199512ff (patch) | |
| tree | c430a447d059aba9b6c27134f25a9fd68159500d | |
| parent | 81049b3abd83115374cfc51b26fb5d5054263f81 (diff) | |
refactor(arg): simplify escape handling in char extraction
Remove redundant comment lines from pick_string and replace explicit
escape mappings in arg macro with a catch-all that handles both literal
and control characters
| -rw-r--r-- | mingling_picker/src/builtin/pick_string.rs | 2 | ||||
| -rw-r--r-- | mingling_picker_macros/src/arg.rs | 9 |
2 files changed, 5 insertions, 6 deletions
diff --git a/mingling_picker/src/builtin/pick_string.rs b/mingling_picker/src/builtin/pick_string.rs index 688ac0a..f56571a 100644 --- a/mingling_picker/src/builtin/pick_string.rs +++ b/mingling_picker/src/builtin/pick_string.rs @@ -8,12 +8,10 @@ impl<'a> Pickable<'a> for String { fn tag(ctx: TagPhaseContext) -> Vec<usize> { if ctx.arg_info.positional { - // Positional: take the first available position only. ArgMatcher::match_one(ctx.into()) .map(|i| vec![i]) .unwrap_or_default() } else { - // Named: find each flag + its single value. ArgMatcher::match_all(ctx.into()) } } diff --git a/mingling_picker_macros/src/arg.rs b/mingling_picker_macros/src/arg.rs index e273d23..70b27b0 100644 --- a/mingling_picker_macros/src/arg.rs +++ b/mingling_picker_macros/src/arg.rs @@ -161,11 +161,12 @@ fn extract_char(tokens: &[TokenTree]) -> Option<char> { let cs: Vec<char> = s.chars().collect(); if cs.len() >= 3 && cs[0] == '\'' && cs[cs.len() - 1] == '\'' { let inner: String = cs[1..cs.len() - 1].iter().collect(); + // inner is the character between the quotes of a char literal. + // For a literal `'n'`, inner is `"n"` (the character n). + // For an escape `'\n'`, inner is the actual newline character. + // The catch-all handles both literal single chars and escape + // sequences (the escaped char IS the actual control character). match inner.as_str() { - "n" => Some('\n'), - "t" => Some('\t'), - "r" => Some('\r'), - "0" => Some('\0'), "\\\\" => Some('\\'), "\\'" => Some('\''), _ => inner.chars().next(), |
