use super::{Expression, Identifier, Span, WithSpan};
use std::fmt::{Display, Formatter};
#[derive(Debug, Clone, Default)]
pub struct ArgumentsList {
pub arguments: Vec<Argument>,
pub empty_arguments: Vec<EmptyArgument>,
pub trailing_comma: Option<Span>,
}
impl ArgumentsList {
pub(crate) fn iter(&self) -> std::slice::Iter<'_, Argument> {
self.arguments.iter()
}
}
#[derive(Debug, Clone)]
pub struct Argument {
pub name: Option<Identifier>,
pub value: Expression,
pub span: Span,
}
impl Display for Argument {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
if let Some(name) = &self.name {
f.write_str(&name.name)?;
f.write_str(": ")?;
}
Display::fmt(&self.value, f)
}
}
impl Argument {
pub fn is_unnamed(&self) -> bool {
self.name.is_none()
}
pub fn name(&self) -> Option<&str> {
match &self.name {
Some(ident) => Some(ident.name.as_str()),
None => None,
}
}
}
impl WithSpan for Argument {
fn span(&self) -> Span {
self.span
}
}
#[derive(Debug, Clone)]
pub struct EmptyArgument {
pub name: Identifier,
}