diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2018-07-14 23:50:08 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2018-08-06 20:26:21 -0700 |
| commit | 4862eee8b762257cf28bddc41d9bb709d1fb9359 (patch) | |
| tree | bbac725e00dc03816a310717106e09add7a2bde7 /src/libsyntax/tokenstream.rs | |
| parent | 73c78734bae8f2947a4bfdeabebeeb84ccf0b0e1 (diff) | |
| download | rust-4862eee8b762257cf28bddc41d9bb709d1fb9359.tar.gz rust-4862eee8b762257cf28bddc41d9bb709d1fb9359.zip | |
Suggest comma when writing `println!("{}" a);`
Diffstat (limited to 'src/libsyntax/tokenstream.rs')
| -rw-r--r-- | src/libsyntax/tokenstream.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/libsyntax/tokenstream.rs b/src/libsyntax/tokenstream.rs index 1a4236b280b..ef914e8de53 100644 --- a/src/libsyntax/tokenstream.rs +++ b/src/libsyntax/tokenstream.rs @@ -182,6 +182,31 @@ pub struct TokenStream { kind: TokenStreamKind, } +impl TokenStream { + /// Given a `TokenStream` with a `Stream` of only two arguments, return a new `TokenStream` + /// separating the two arguments with a comma for diagnostic suggestions. + pub(crate) fn add_comma(&self) -> Option<(TokenStream, Span)> { + // Used ot suggest if a user writes `println!("{}" a);` + if let TokenStreamKind::Stream(ref slice) = self.kind { + if slice.len() == 2 { + let comma_span = match slice[0] { + TokenStream { kind: TokenStreamKind::Tree(TokenTree::Token(sp, _)) } | + TokenStream { kind: TokenStreamKind::Tree(TokenTree::Delimited(sp, _)) } => { + sp.shrink_to_hi() + } + _ => DUMMY_SP, + }; + let comma = TokenStream { + kind: TokenStreamKind::Tree(TokenTree::Token(comma_span, token::Comma)), + }; + let slice = RcSlice::new(vec![slice[0].clone(), comma, slice[1].clone()]); + return Some((TokenStream { kind: TokenStreamKind::Stream(slice) }, comma_span)); + } + } + None + } +} + #[derive(Clone, Debug)] enum TokenStreamKind { Empty, |
