diff options
| author | ljedrz <ljedrz@gmail.com> | 2018-12-14 11:28:09 +0100 |
|---|---|---|
| committer | ljedrz <ljedrz@gmail.com> | 2018-12-14 11:29:27 +0100 |
| commit | 8866f68a4d038fbb26799f792dcb60d1c5e184cd (patch) | |
| tree | dd98afe8ace12ccb2da66acc5ffa5166378fe260 /src/libsyntax_ext | |
| parent | 3d052c920bc6ee6f5f0575f76980f0f69327662f (diff) | |
| download | rust-8866f68a4d038fbb26799f792dcb60d1c5e184cd.tar.gz rust-8866f68a4d038fbb26799f792dcb60d1c5e184cd.zip | |
format: refactor report_invalid_references
Diffstat (limited to 'src/libsyntax_ext')
| -rw-r--r-- | src/libsyntax_ext/format.rs | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/src/libsyntax_ext/format.rs b/src/libsyntax_ext/format.rs index dff5309dd95..f2122a57d27 100644 --- a/src/libsyntax_ext/format.rs +++ b/src/libsyntax_ext/format.rs @@ -273,11 +273,11 @@ impl<'a, 'b> Context<'a, 'b> { } else { MultiSpan::from_span(self.fmtsp) }; - let mut refs: Vec<_> = self + let refs_len = self.invalid_refs.len(); + let mut refs = self .invalid_refs .iter() - .map(|(r, pos)| (r.to_string(), self.arg_spans.get(*pos))) - .collect(); + .map(|(r, pos)| (r.to_string(), self.arg_spans.get(*pos))); if self.names.is_empty() && !numbered_position_args { e = self.ecx.mut_span_err( @@ -290,28 +290,24 @@ impl<'a, 'b> Context<'a, 'b> { ), ); } else { - let (arg_list, mut sp) = match refs.len() { - 1 => { - let (reg, pos) = refs.pop().unwrap(); - ( - format!("argument {}", reg), - MultiSpan::from_span(*pos.unwrap_or(&self.fmtsp)), - ) - } - _ => { - let pos = - MultiSpan::from_spans(refs.iter().map(|(_, p)| *p.unwrap()).collect()); - let mut refs: Vec<String> = refs.iter().map(|(s, _)| s.to_owned()).collect(); - let reg = refs.pop().unwrap(); - ( - format!( - "arguments {head} and {tail}", - tail = reg, - head = refs.join(", ") - ), - pos, - ) - } + let (arg_list, mut sp) = if refs_len == 1 { + let (reg, pos) = refs.next().unwrap(); + ( + format!("argument {}", reg), + MultiSpan::from_span(*pos.unwrap_or(&self.fmtsp)), + ) + } else { + let (mut refs, spans): (Vec<_>, Vec<_>) = refs.unzip(); + let pos = MultiSpan::from_spans(spans.into_iter().map(|s| *s.unwrap()).collect()); + let reg = refs.pop().unwrap(); + ( + format!( + "arguments {head} and {tail}", + head = refs.join(", "), + tail = reg, + ), + pos, + ) }; if !self.is_literal { sp = MultiSpan::from_span(self.fmtsp); |
