refactor(commands): FullString -> OpaqueRemainder and add OpaqueString

This commit is contained in:
dusk 2025-01-15 00:35:22 +09:00
parent 2a063442ea
commit a1f7656276
No known key found for this signature in database
6 changed files with 21 additions and 14 deletions

View file

@ -51,7 +51,8 @@ impl Command {
let mut was_parameter = true; let mut was_parameter = true;
for (idx, token) in tokens.iter().enumerate().rev() { for (idx, token) in tokens.iter().enumerate().rev() {
match token { match token {
Token::FullString(_) Token::OpaqueRemainder(_)
| Token::OpaqueString(_)
| Token::MemberRef(_) | Token::MemberRef(_)
| Token::MemberPrivacyTarget(_) | Token::MemberPrivacyTarget(_)
| Token::SystemRef(_) | Token::SystemRef(_)

View file

@ -27,7 +27,7 @@ pub fn cmds() -> impl Iterator<Item = Command> {
cfg, cfg,
autoproxy, autoproxy,
["timeout", "tm"], ["timeout", "tm"],
[Disable("toggle"), Reset("reset"), FullString("timeout")] // todo: we should parse duration / time values [Disable("toggle"), Reset("reset"), OpaqueString("timeout")] // todo: we should parse duration / time values
], ],
"cfg_ap_timeout_update", "cfg_ap_timeout_update",
"Sets the autoproxy timeout" "Sets the autoproxy timeout"

View file

@ -10,7 +10,7 @@ pub fn cmds() -> impl Iterator<Item = Command> {
[ [
command!( command!(
[member, new, FullString("name")], [member, new, OpaqueString("name")],
"member_new", "member_new",
"Creates a new system member" "Creates a new system member"
), ),
@ -30,7 +30,7 @@ pub fn cmds() -> impl Iterator<Item = Command> {
member, member,
MemberRef("target"), MemberRef("target"),
description, description,
FullString("description") OpaqueRemainder("description")
], ],
"member_desc_update", "member_desc_update",
"Changes a member's description" "Changes a member's description"

View file

@ -14,7 +14,7 @@ pub fn cmds() -> impl Iterator<Item = Command> {
), ),
command!([system, new], "system_new", "Creates a new system"), command!([system, new], "system_new", "Creates a new system"),
command!( command!(
[system, new, FullString("name")], [system, new, OpaqueString("name")],
"system_new", "system_new",
"Creates a new system" "Creates a new system"
), ),

View file

@ -282,7 +282,7 @@ fn next_token<'a>(
// iterate over tokens and run try_match // iterate over tokens and run try_match
for token in possible_tokens { for token in possible_tokens {
let is_match_remaining_token = |token: &Token| matches!(token, Token::FullString(_)); let is_match_remaining_token = |token: &Token| matches!(token, Token::OpaqueRemainder(_));
// check if this is a token that matches the rest of the input // check if this is a token that matches the rest of the input
let match_remaining = is_match_remaining_token(token) let match_remaining = is_match_remaining_token(token)
// check for Any here if it has a "match remainder" token in it // check for Any here if it has a "match remainder" token in it

View file

@ -20,7 +20,9 @@ pub enum Token {
Value(Vec<SmolStr>), Value(Vec<SmolStr>),
/// Opaque string (eg. "name" in `pk;member new name`) /// Opaque string (eg. "name" in `pk;member new name`)
FullString(ParamName), OpaqueString(ParamName),
/// Remainder of a command (eg. "desc" in `pk;member <target> description [desc...]`)
OpaqueRemainder(ParamName),
/// Member reference (hid or member name) /// Member reference (hid or member name)
MemberRef(ParamName), MemberRef(ParamName),
@ -94,7 +96,8 @@ impl Token {
// empty token // empty token
Self::Empty => Some(Ok(None)), Self::Empty => Some(Ok(None)),
// missing paramaters // missing paramaters
Self::FullString(param_name) Self::OpaqueRemainder(param_name)
| Self::OpaqueString(param_name)
| Self::MemberRef(param_name) | Self::MemberRef(param_name)
| Self::MemberPrivacyTarget(param_name) | Self::MemberPrivacyTarget(param_name)
| Self::SystemRef(param_name) | Self::SystemRef(param_name)
@ -131,11 +134,13 @@ impl Token {
.any(|v| v.eq(input)) .any(|v| v.eq(input))
.then(|| TokenMatchValue::new_match(input)) .then(|| TokenMatchValue::new_match(input))
.unwrap_or(None), .unwrap_or(None),
Self::FullString(param_name) => TokenMatchValue::new_match_param( Self::OpaqueRemainder(param_name) | Self::OpaqueString(param_name) => {
input, TokenMatchValue::new_match_param(
param_name, input,
Parameter::OpaqueString { raw: input.into() }, param_name,
), Parameter::OpaqueString { raw: input.into() },
)
}
Self::SystemRef(param_name) => TokenMatchValue::new_match_param( Self::SystemRef(param_name) => TokenMatchValue::new_match_param(
input, input,
param_name, param_name,
@ -227,7 +232,8 @@ impl Display for Token {
Token::Value(vec) if vec.is_empty().not() => write!(f, "{}", vec.first().unwrap()), Token::Value(vec) if vec.is_empty().not() => write!(f, "{}", vec.first().unwrap()),
Token::Value(_) => Ok(()), // if value token has no values (lol), don't print anything Token::Value(_) => Ok(()), // if value token has no values (lol), don't print anything
// todo: it might not be the best idea to directly use param name here (what if we want to display something else but keep the name? or translations?) // todo: it might not be the best idea to directly use param name here (what if we want to display something else but keep the name? or translations?)
Token::FullString(param_name) => write!(f, "[{}]", param_name), Token::OpaqueRemainder(param_name) => write!(f, "[{}...]", param_name),
Token::OpaqueString(param_name) => write!(f, "[{}]", param_name),
Token::MemberRef(param_name) => write!(f, "<{}>", param_name), Token::MemberRef(param_name) => write!(f, "<{}>", param_name),
Token::SystemRef(param_name) => write!(f, "<{}>", param_name), Token::SystemRef(param_name) => write!(f, "<{}>", param_name),
Token::MemberPrivacyTarget(param_name) => write!(f, "<{}>", param_name), Token::MemberPrivacyTarget(param_name) => write!(f, "<{}>", param_name),