Merge "Upgrade rust/crates/paste-impl to 0.1.15"
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 1347e27..40fcd29 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "157559c3faf524ae24f8329537d2a763f6e18931"
+    "sha1": "b5ce9a40b201ffe985e13260f6b0fa9ef5330fd7"
   }
 }
diff --git a/Cargo.toml b/Cargo.toml
index 97a4cab..92a7a9a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@
 [package]
 edition = "2018"
 name = "paste-impl"
-version = "0.1.14"
+version = "0.1.15"
 authors = ["David Tolnay <dtolnay@gmail.com>"]
 description = "Implementation detail of the `paste` crate"
 license = "MIT OR Apache-2.0"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 80d2071..72a12ad 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
 [package]
 name = "paste-impl"
-version = "0.1.14"
+version = "0.1.15"
 authors = ["David Tolnay <dtolnay@gmail.com>"]
 edition = "2018"
 license = "MIT OR Apache-2.0"
diff --git a/METADATA b/METADATA
index 2b0d5de..4cb5af3 100644
--- a/METADATA
+++ b/METADATA
@@ -9,11 +9,11 @@
     type: GIT
     value: "https://github.com/dtolnay/paste"
   }
-  version: "0.1.14"
+  version: "0.1.15"
   license_type: NOTICE
   last_upgrade_date {
     year: 2020
     month: 5
-    day: 25
+    day: 29
   }
 }
diff --git a/src/lib.rs b/src/lib.rs
index 1c762d9..2feee4c 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -56,15 +56,14 @@
                 let delimiter = group.delimiter();
                 let content = group.stream();
                 let span = group.span();
-                let in_path = prev_colons || input.peek(Token![::]);
                 if delimiter == Delimiter::Bracket && is_paste_operation(&content) {
                     let segments = parse_bracket_as_segments.parse2(content)?;
                     let pasted = paste_segments(span, &segments)?;
                     pasted.to_tokens(&mut expanded);
                     *contains_paste = true;
-                } else if is_none_delimited_single_ident_or_lifetime(delimiter, &content) {
+                } else if is_none_delimited_flat_group(delimiter, &content) {
                     content.to_tokens(&mut expanded);
-                    *contains_paste |= in_path;
+                    *contains_paste = true;
                 } else {
                     let mut group_contains_paste = false;
                     let nested = (|input: ParseStream| parse(input, &mut group_contains_paste))
@@ -77,6 +76,7 @@
                     } else {
                         group.clone()
                     };
+                    let in_path = prev_colons || input.peek(Token![::]);
                     if in_path && delimiter == Delimiter::None {
                         group.stream().to_tokens(&mut expanded);
                         *contains_paste = true;
@@ -99,7 +99,7 @@
 }
 
 // https://github.com/dtolnay/paste/issues/26
-fn is_none_delimited_single_ident_or_lifetime(delimiter: Delimiter, input: &TokenStream) -> bool {
+fn is_none_delimited_flat_group(delimiter: Delimiter, input: &TokenStream) -> bool {
     if delimiter != Delimiter::None {
         return false;
     }
@@ -108,20 +108,36 @@
     enum State {
         Init,
         Ident,
+        Literal,
         Apostrophe,
         Lifetime,
+        Colon1,
+        Colon2,
     }
 
     let mut state = State::Init;
     for tt in input.clone() {
         state = match (state, &tt) {
             (State::Init, TokenTree::Ident(_)) => State::Ident,
+            (State::Init, TokenTree::Literal(_)) => State::Literal,
             (State::Init, TokenTree::Punct(punct)) if punct.as_char() == '\'' => State::Apostrophe,
             (State::Apostrophe, TokenTree::Ident(_)) => State::Lifetime,
+            (State::Ident, TokenTree::Punct(punct))
+                if punct.as_char() == ':' && punct.spacing() == Spacing::Joint =>
+            {
+                State::Colon1
+            }
+            (State::Colon1, TokenTree::Punct(punct))
+                if punct.as_char() == ':' && punct.spacing() == Spacing::Alone =>
+            {
+                State::Colon2
+            }
+            (State::Colon2, TokenTree::Ident(_)) => State::Ident,
             _ => return false,
         };
     }
-    state == State::Ident || state == State::Lifetime
+
+    state == State::Ident || state == State::Literal || state == State::Lifetime
 }
 
 enum Segment {