Skip to content

Commit 9148a74

Browse files
committed
feat: add short option to task args
1 parent 82459d0 commit 9148a74

2 files changed

Lines changed: 87 additions & 0 deletions

File tree

crates/aspect-cli/src/flags.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,25 @@ pub(crate) fn convert_arg(name: &String, arg: &TaskArg) -> Arg {
77
TaskArg::String {
88
required,
99
default,
10+
short,
1011
description,
1112
} => Arg::new(name)
1213
.long(name)
1314
.value_name(name)
15+
.short(short_option(short))
1416
.help(help_text(description))
1517
.required(required.to_owned())
1618
.default_value(default.to_string())
1719
.value_parser(value_parser!(String)),
1820
TaskArg::Boolean {
1921
required,
2022
default,
23+
short,
2124
description,
2225
} => Arg::new(name)
2326
.long(name)
2427
.value_name(name)
28+
.short(short_option(short))
2529
.help(help_text(description))
2630
.required(required.to_owned())
2731
.default_value(default.to_string())
@@ -32,21 +36,25 @@ pub(crate) fn convert_arg(name: &String, arg: &TaskArg) -> Arg {
3236
TaskArg::Int {
3337
required,
3438
default,
39+
short,
3540
description,
3641
} => Arg::new(name)
3742
.long(name)
3843
.value_name(name)
44+
.short(short_option(short))
3945
.help(help_text(description))
4046
.required(required.to_owned())
4147
.default_value(default.to_string())
4248
.value_parser(value_parser!(i32)),
4349
TaskArg::UInt {
4450
required,
4551
default,
52+
short,
4653
description,
4754
} => Arg::new(name)
4855
.long(name)
4956
.value_name(name)
57+
.short(short_option(short))
5058
.help(help_text(description))
5159
.required(required.to_owned())
5260
.default_value(default.to_string())
@@ -77,11 +85,13 @@ pub(crate) fn convert_arg(name: &String, arg: &TaskArg) -> Arg {
7785
TaskArg::StringList {
7886
required,
7987
default,
88+
short,
8089
description,
8190
} => {
8291
let mut it = Arg::new(name)
8392
.long(name)
8493
.value_name(name)
94+
.short(short_option(short))
8595
.help(help_text(description))
8696
.action(ArgAction::Append)
8797
.required(*required)
@@ -94,11 +104,13 @@ pub(crate) fn convert_arg(name: &String, arg: &TaskArg) -> Arg {
94104
TaskArg::BooleanList {
95105
required,
96106
default,
107+
short,
97108
description,
98109
} => {
99110
let mut it = Arg::new(name)
100111
.long(name)
101112
.value_name(name)
113+
.short(short_option(short))
102114
.help(help_text(description))
103115
.action(ArgAction::Append)
104116
.required(*required)
@@ -114,11 +126,13 @@ pub(crate) fn convert_arg(name: &String, arg: &TaskArg) -> Arg {
114126
TaskArg::IntList {
115127
required,
116128
default,
129+
short,
117130
description,
118131
} => {
119132
let mut it = Arg::new(name)
120133
.long(name)
121134
.value_name(name)
135+
.short(short_option(short))
122136
.help(help_text(description))
123137
.action(ArgAction::Append)
124138
.required(*required)
@@ -132,11 +146,13 @@ pub(crate) fn convert_arg(name: &String, arg: &TaskArg) -> Arg {
132146
TaskArg::UIntList {
133147
required,
134148
default,
149+
short,
135150
description,
136151
} => {
137152
let mut it = Arg::new(name)
138153
.long(name)
139154
.value_name(name)
155+
.short(short_option(short))
140156
.help(help_text(description))
141157
.action(ArgAction::Append)
142158
.required(*required)
@@ -156,3 +172,10 @@ fn help_text(description: &Option<String>) -> Resettable<StyledStr> {
156172
None => Resettable::Reset,
157173
}
158174
}
175+
176+
fn short_option(short: &Option<String>) -> Resettable<char> {
177+
match short {
178+
Some(text) => Resettable::Value(text.chars().nth(0).unwrap().into()),
179+
None => Resettable::Reset,
180+
}
181+
}

crates/axl-runtime/src/engine/task_arg.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,25 @@ pub enum TaskArg {
2424
String {
2525
required: bool,
2626
default: String,
27+
short: Option<String>,
2728
description: Option<String>,
2829
},
2930
Boolean {
3031
required: bool,
3132
default: bool,
33+
short: Option<String>,
3234
description: Option<String>,
3335
},
3436
Int {
3537
required: bool,
3638
default: i32,
39+
short: Option<String>,
3740
description: Option<String>,
3841
},
3942
UInt {
4043
required: bool,
4144
default: u32,
45+
short: Option<String>,
4246
description: Option<String>,
4347
},
4448
Positional {
@@ -53,21 +57,25 @@ pub enum TaskArg {
5357
StringList {
5458
required: bool,
5559
default: Vec<String>,
60+
short: Option<String>,
5661
description: Option<String>,
5762
},
5863
BooleanList {
5964
required: bool,
6065
default: Vec<bool>,
66+
short: Option<String>,
6167
description: Option<String>,
6268
},
6369
IntList {
6470
required: bool,
6571
default: Vec<i32>,
72+
short: Option<String>,
6673
description: Option<String>,
6774
},
6875
UIntList {
6976
required: bool,
7077
default: Vec<u32>,
78+
short: Option<String>,
7179
description: Option<String>,
7280
},
7381
}
@@ -176,16 +184,23 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
176184
fn string<'v>(
177185
#[starlark(require = named, default = false)] required: bool,
178186
#[starlark(require = named)] default: Option<String>,
187+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
179188
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
180189
) -> starlark::Result<TaskArg> {
181190
if required && default.is_some() {
182191
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
183192
anyhow::anyhow!("`required` and `default` are both set."),
184193
)));
185194
}
195+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
196+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
197+
anyhow::anyhow!("`short` must be a 1-character string."),
198+
)));
199+
}
186200
Ok(TaskArg::String {
187201
required,
188202
default: default.unwrap_or_default(),
203+
short: short.into_option(),
189204
description: description.into_option(),
190205
})
191206
}
@@ -203,16 +218,23 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
203218
fn string_list<'v>(
204219
#[starlark(require = named, default = false)] required: bool,
205220
#[starlark(require = named, default = NoneOr::None)] default: NoneOr<UnpackList<String>>,
221+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
206222
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
207223
) -> starlark::Result<TaskArg> {
208224
if required && !default.is_none() {
209225
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
210226
anyhow::anyhow!("`required` and `default` are both set."),
211227
)));
212228
}
229+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
230+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
231+
anyhow::anyhow!("`short` must be a 1-character string."),
232+
)));
233+
}
213234
Ok(TaskArg::StringList {
214235
required,
215236
default: default.into_option().map(|it| it.items).unwrap_or_default(),
237+
short: short.into_option(),
216238
description: description.into_option(),
217239
})
218240
}
@@ -231,6 +253,7 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
231253
fn boolean<'v>(
232254
#[starlark(require = named, default = false)] required: bool,
233255
#[starlark(require = named )] default: Option<bool>,
256+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
234257
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
235258
_eval: &mut Evaluator<'v, '_, '_>,
236259
) -> starlark::Result<TaskArg> {
@@ -239,9 +262,15 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
239262
anyhow::anyhow!("`required` and `default` are both set."),
240263
)));
241264
}
265+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
266+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
267+
anyhow::anyhow!("`short` must be a 1-character string."),
268+
)));
269+
}
242270
Ok(TaskArg::Boolean {
243271
required,
244272
default: default.unwrap_or_default(),
273+
short: short.into_option(),
245274
description: description.into_option(),
246275
})
247276
}
@@ -259,16 +288,23 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
259288
fn boolean_list<'v>(
260289
#[starlark(require = named, default = false)] required: bool,
261290
#[starlark(require = named, default = NoneOr::None)] default: NoneOr<UnpackList<bool>>,
291+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
262292
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
263293
) -> starlark::Result<TaskArg> {
264294
if required && !default.is_none() {
265295
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
266296
anyhow::anyhow!("`required` and `default` are both set."),
267297
)));
268298
}
299+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
300+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
301+
anyhow::anyhow!("`short` must be a 1-character string."),
302+
)));
303+
}
269304
Ok(TaskArg::BooleanList {
270305
required,
271306
default: default.into_option().map(|it| it.items).unwrap_or_default(),
307+
short: short.into_option(),
272308
description: description.into_option(),
273309
})
274310
}
@@ -287,16 +323,23 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
287323
fn int<'v>(
288324
#[starlark(require = named, default = false)] required: bool,
289325
#[starlark(require = named)] default: Option<i32>,
326+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
290327
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
291328
) -> starlark::Result<TaskArg> {
292329
if required && default.is_some() {
293330
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
294331
anyhow::anyhow!("`required` and `default` are both set."),
295332
)));
296333
}
334+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
335+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
336+
anyhow::anyhow!("`short` must be a 1-character string."),
337+
)));
338+
}
297339
Ok(TaskArg::Int {
298340
required,
299341
default: default.unwrap_or_default(),
342+
short: short.into_option(),
300343
description: description.into_option(),
301344
})
302345
}
@@ -314,16 +357,23 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
314357
fn int_list<'v>(
315358
#[starlark(require = named, default = false)] required: bool,
316359
#[starlark(require = named, default = NoneOr::None)] default: NoneOr<UnpackList<i32>>,
360+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
317361
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
318362
) -> starlark::Result<TaskArg> {
319363
if required && !default.is_none() {
320364
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
321365
anyhow::anyhow!("`required` and `default` are both set."),
322366
)));
323367
}
368+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
369+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
370+
anyhow::anyhow!("`short` must be a 1-character string."),
371+
)));
372+
}
324373
Ok(TaskArg::IntList {
325374
required,
326375
default: default.into_option().map(|it| it.items).unwrap_or_default(),
376+
short: short.into_option(),
327377
description: description.into_option(),
328378
})
329379
}
@@ -341,16 +391,23 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
341391
fn uint<'v>(
342392
#[starlark(require = named, default = false)] required: bool,
343393
#[starlark(require = named)] default: Option<u32>,
394+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
344395
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
345396
) -> starlark::Result<TaskArg> {
346397
if required && default.is_some() {
347398
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
348399
anyhow::anyhow!("`required` and `default` are both set."),
349400
)));
350401
}
402+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
403+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
404+
anyhow::anyhow!("`short` must be a 1-character string."),
405+
)));
406+
}
351407
Ok(TaskArg::UInt {
352408
required,
353409
default: default.unwrap_or_default(),
410+
short: short.into_option(),
354411
description: description.into_option(),
355412
})
356413
}
@@ -368,16 +425,23 @@ pub fn register_globals(globals: &mut GlobalsBuilder) {
368425
fn uint_list<'v>(
369426
#[starlark(require = named, default = false)] required: bool,
370427
#[starlark(require = named, default = NoneOr::None)] default: NoneOr<UnpackList<u32>>,
428+
#[starlark(require = named, default = NoneOr::None)] short: NoneOr<String>,
371429
#[starlark(require = named, default = NoneOr::None)] description: NoneOr<String>,
372430
) -> starlark::Result<TaskArg> {
373431
if required && !default.is_none() {
374432
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
375433
anyhow::anyhow!("`required` and `default` are both set."),
376434
)));
377435
}
436+
if matches!(short, NoneOr::Other(ref s) if s.len() != 1) {
437+
return Err(starlark::Error::new_kind(starlark::ErrorKind::Function(
438+
anyhow::anyhow!("`short` must be a 1-character string."),
439+
)));
440+
}
378441
Ok(TaskArg::UIntList {
379442
required,
380443
default: default.into_option().map(|it| it.items).unwrap_or_default(),
444+
short: short.into_option(),
381445
description: description.into_option(),
382446
})
383447
}

0 commit comments

Comments
 (0)