Retain information on whether a format argument has explicit position

This commit is contained in:
Tommy Ip
2017-11-09 17:16:25 +00:00
parent 13a416298c
commit b577b9aef3
4 changed files with 57 additions and 32 deletions

View File

@@ -73,7 +73,9 @@ pub struct FormatSpec<'a> {
/// Enum describing where an argument for a format can be located.
#[derive(Copy, Clone, PartialEq)]
pub enum Position<'a> {
/// The argument is located at a specific index.
/// The arugment is implied to be located at an index
ArgumentImplicitlyIs(usize),
/// The argument is located at a specific index given in the format
ArgumentIs(usize),
/// The argument has a name.
ArgumentNamed(&'a str),
@@ -275,7 +277,7 @@ impl<'a> Parser<'a> {
None => {
let i = self.curarg;
self.curarg += 1;
ArgumentIs(i)
ArgumentImplicitlyIs(i)
}
};
@@ -517,7 +519,7 @@ mod tests {
fn format_nothing() {
same("{}",
&[NextArgument(Argument {
position: ArgumentIs(0),
position: ArgumentImplicitlyIs(0),
format: fmtdflt(),
})]);
}
@@ -595,7 +597,7 @@ mod tests {
fn format_counts() {
same("{:10s}",
&[NextArgument(Argument {
position: ArgumentIs(0),
position: ArgumentImplicitlyIs(0),
format: FormatSpec {
fill: None,
align: AlignUnknown,
@@ -607,7 +609,7 @@ mod tests {
})]);
same("{:10$.10s}",
&[NextArgument(Argument {
position: ArgumentIs(0),
position: ArgumentImplicitlyIs(0),
format: FormatSpec {
fill: None,
align: AlignUnknown,
@@ -619,7 +621,7 @@ mod tests {
})]);
same("{:.*s}",
&[NextArgument(Argument {
position: ArgumentIs(1),
position: ArgumentImplicitlyIs(1),
format: FormatSpec {
fill: None,
align: AlignUnknown,
@@ -631,7 +633,7 @@ mod tests {
})]);
same("{:.10$s}",
&[NextArgument(Argument {
position: ArgumentIs(0),
position: ArgumentImplicitlyIs(0),
format: FormatSpec {
fill: None,
align: AlignUnknown,
@@ -643,7 +645,7 @@ mod tests {
})]);
same("{:a$.b$s}",
&[NextArgument(Argument {
position: ArgumentIs(0),
position: ArgumentImplicitlyIs(0),
format: FormatSpec {
fill: None,
align: AlignUnknown,
@@ -658,7 +660,7 @@ mod tests {
fn format_flags() {
same("{:-}",
&[NextArgument(Argument {
position: ArgumentIs(0),
position: ArgumentImplicitlyIs(0),
format: FormatSpec {
fill: None,
align: AlignUnknown,
@@ -670,7 +672,7 @@ mod tests {
})]);
same("{:+#}",
&[NextArgument(Argument {
position: ArgumentIs(0),
position: ArgumentImplicitlyIs(0),
format: FormatSpec {
fill: None,
align: AlignUnknown,