Remove empty parse_error function
diff --git a/src/error.rs b/src/error.rs
index 8232cce..80d5973 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -111,10 +111,3 @@
 ///
 /// *This type is available if Syn is built with the `"parsing"` feature.*
 pub type PResult<'a, O> = std::result::Result<(O, Cursor<'a>), Error>;
-
-/// An error with a default error message.
-///
-/// NOTE: We should provide better error messages in the future.
-pub fn parse_error<'a, O>() -> PResult<'a, O> {
-    Err(Error::new(Span::call_site(), "parse error"))
-}
diff --git a/src/lib.rs b/src/lib.rs
index 498c7a5..e175677 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -592,11 +592,6 @@
 #[cfg(feature = "parsing")]
 use error::Error;
 
-// Not public API.
-#[cfg(feature = "parsing")]
-#[doc(hidden)]
-pub use error::parse_error;
-
 /// Parse tokens of source code into the chosen syntax tree node.
 ///
 /// This is preferred over parsing a string because tokens are able to preserve
diff --git a/src/lit.rs b/src/lit.rs
index 597048d..fc7284e 100644
--- a/src/lit.rs
+++ b/src/lit.rs
@@ -433,7 +433,6 @@
 pub mod parsing {
     use super::*;
     use parse::{Parse, ParseStream, Result};
-    use parse_error;
 
     impl Parse for Lit {
         fn parse(input: ParseStream) -> Result<Self> {
@@ -448,13 +447,13 @@
                                 } else if ident == "false" {
                                     false
                                 } else {
-                                    return parse_error();
+                                    return Err(cursor.error("expected literal"));
                                 },
                                 span: ident.span(),
                             }),
                             rest,
                         )),
-                        _ => parse_error(),
+                        _ => Err(cursor.error("expected literal"))
                     },
                 }
             })
diff --git a/src/punctuated.rs b/src/punctuated.rs
index 171e549..e743c33 100644
--- a/src/punctuated.rs
+++ b/src/punctuated.rs
@@ -40,9 +40,7 @@
 #[cfg(feature = "parsing")]
 use buffer::Cursor;
 #[cfg(feature = "parsing")]
-use parse::{Parse, ParseStream, Result};
-#[cfg(feature = "parsing")]
-use parse_error;
+use parse::{Error, Parse, ParseStream, Result};
 #[cfg(feature = "parsing")]
 use synom::{PResult, Synom};
 
@@ -705,7 +703,9 @@
         parse: fn(Cursor) -> PResult<T>,
     ) -> PResult<Self> {
         match Self::parse(input, parse, false) {
-            Ok((ref b, _)) if b.is_empty() => parse_error(),
+            Ok((ref b, rest)) if b.is_empty() => {
+                Err(Error::new(rest.span(), "unexpected token"))
+            }
             other => other,
         }
     }
@@ -723,7 +723,9 @@
         parse: fn(Cursor) -> PResult<T>,
     ) -> PResult<Self> {
         match Self::parse(input, parse, true) {
-            Ok((ref b, _)) if b.is_empty() => parse_error(),
+            Ok((ref b, rest)) if b.is_empty() => {
+                Err(Error::new(rest.span(), "unexpected token"))
+            }
             other => other,
         }
     }
@@ -740,7 +742,7 @@
             Err(_) => Ok((res, input)),
             Ok((o, i)) => {
                 if i == input {
-                    return parse_error();
+                    return Err(Error::new(input.span(), "unexpected token"));
                 }
                 input = i;
                 res.push_value(o);
diff --git a/src/token.rs b/src/token.rs
index 29d777e..6c32909 100644
--- a/src/token.rs
+++ b/src/token.rs
@@ -861,7 +861,6 @@
     use buffer::Cursor;
     use error::{Error, Result};
     use parse::ParseStream;
-    use parse_error;
     use span::FromSpans;
     use synom::PResult;
 
@@ -925,13 +924,16 @@
             match f(inside) {
                 Ok((ret, remaining)) => {
                     if remaining.eof() {
-                        return Ok(((new(span), ret), rest));
+                        Ok(((new(span), ret), rest))
+                    } else {
+                        Err(Error::new(remaining.span(), "unexpected token"))
                     }
                 }
-                Err(err) => return Err(err),
+                Err(err) => Err(err),
             }
+        } else {
+            Err(Error::new(tokens.span(), "expected delimiter"))
         }
-        parse_error()
     }
 }