Use proc-macro2's Span instead of our own
diff --git a/src/attr.rs b/src/attr.rs
index 74ed01f..4625fc6 100644
--- a/src/attr.rs
+++ b/src/attr.rs
@@ -46,7 +46,7 @@
let tokens = ts.clone().into_iter().collect::<Vec<_>>();
if let Some(nested_meta_items) = list_of_nested_meta_items_from_tokens(&tokens) {
return Some(MetaItem::List(MetaItemList {
- paren_token: tokens::Paren(Span(self.tts[0].0.span)),
+ paren_token: tokens::Paren(self.tts[0].0.span),
ident: *name,
nested: nested_meta_items,
}));
@@ -59,10 +59,10 @@
if let TokenNode::Literal(ref lit) = self.tts[1].0.kind {
return Some(MetaItem::NameValue(MetaNameValue {
ident: *name,
- eq_token: Token]),
+ eq_token: Token,
lit: Lit {
value: LitKind::Other(lit.clone()),
- span: Span(self.tts[1].0.span),
+ span: self.tts[1].0.span,
},
}));
}
@@ -82,22 +82,22 @@
TokenNode::Literal(ref lit) => {
let lit = Lit {
value: LitKind::Other(lit.clone()),
- span: Span(tts[0].span),
+ span: tts[0].span,
};
Some((NestedMetaItem::Literal(lit), &tts[1..]))
}
TokenNode::Term(sym) => {
- let ident = Ident::new(sym, Span(tts[0].span));
+ let ident = Ident::new(sym, tts[0].span);
if tts.len() >= 3 {
if let TokenNode::Op('=', Spacing::Alone) = tts[1].kind {
if let TokenNode::Literal(ref lit) = tts[2].kind {
let pair = MetaNameValue {
- ident: Ident::new(sym, Span(tts[0].span)),
- eq_token: Token]),
+ ident: Ident::new(sym, tts[0].span),
+ eq_token: Token,
lit: Lit {
value: LitKind::Other(lit.clone()),
- span: Span(tts[2].span),
+ span: tts[2].span,
},
};
return Some((MetaItem::NameValue(pair).into(), &tts[3..]));
@@ -112,7 +112,7 @@
Some(nested_meta_items) => {
let list = MetaItemList {
ident: ident,
- paren_token: tokens::Paren(Span(tts[1].span)),
+ paren_token: tokens::Paren(tts[1].span),
nested: nested_meta_items,
};
Some((MetaItem::List(list).into(), &tts[2..]))
@@ -141,7 +141,7 @@
first = false;
None
} else if let TokenNode::Op(',', Spacing::Alone) = tts[0].kind {
- let tok = Token]);
+ let tok = Token;
tts = &tts[1..];
if tts.is_empty() {
break
diff --git a/src/expr.rs b/src/expr.rs
index a0505a4..dbf6ea0 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -659,7 +659,7 @@
use ty::parsing::qpath;
#[cfg(feature = "full")]
- use proc_macro2::{TokenStream, TokenNode, Delimiter, Term};
+ use proc_macro2::{Span, TokenStream, TokenNode, Delimiter, Term};
use synom::Synom;
use cursor::Cursor;
#[cfg(feature = "full")]
@@ -1848,7 +1848,7 @@
path: what,
bang_token: bang,
tokens: vec![TokenTree(proc_macro2::TokenTree {
- span: ((data.1).0).0,
+ span: (data.1).0,
kind: TokenNode::Group(Delimiter::Brace, data.0),
})],
},
diff --git a/src/gen/fold.rs b/src/gen/fold.rs
index 9fc80a7..0d944e6 100644
--- a/src/gen/fold.rs
+++ b/src/gen/fold.rs
@@ -10,6 +10,7 @@
use *;
use delimited::Delimited;
+use proc_macro2::Span;
trait FoldHelper {
type Item;
diff --git a/src/gen/visit.rs b/src/gen/visit.rs
index a478b64..a688f33 100644
--- a/src/gen/visit.rs
+++ b/src/gen/visit.rs
@@ -9,6 +9,7 @@
#![cfg_attr(feature = "cargo-clippy", allow(match_same_arms))]
use *;
+use proc_macro2::Span;
#[cfg(feature = "full")]
diff --git a/src/gen/visit_mut.rs b/src/gen/visit_mut.rs
index 6d7e616..2ad540d 100644
--- a/src/gen/visit_mut.rs
+++ b/src/gen/visit_mut.rs
@@ -9,6 +9,7 @@
#![cfg_attr(feature = "cargo-clippy", allow(match_same_arms))]
use *;
+use proc_macro2::Span;
#[cfg(feature = "full")]
diff --git a/src/ident.rs b/src/ident.rs
index 2555a72..0c51209 100644
--- a/src/ident.rs
+++ b/src/ident.rs
@@ -6,7 +6,7 @@
use proc_macro2::Term;
use unicode_xid::UnicodeXID;
-use Span;
+use proc_macro2::Span;
/// A word of Rust code, such as a keyword or variable name.
///
@@ -252,7 +252,7 @@
}
Ok((rest, Ident {
- span: Span(span),
+ span: span,
sym: sym,
}))
}
@@ -272,7 +272,7 @@
impl ToTokens for Ident {
fn to_tokens(&self, tokens: &mut Tokens) {
tokens.append(TokenTree {
- span: self.span.0,
+ span: self.span,
kind: TokenNode::Term(self.sym),
})
}
diff --git a/src/lib.rs b/src/lib.rs
index 3f150b7..d850b2d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -111,9 +111,6 @@
pub mod synom;
pub mod delimited;
-mod span;
-pub use span::Span;
-
mod gen {
#[cfg(feature = "visit")]
pub mod visit;
diff --git a/src/lifetime.rs b/src/lifetime.rs
index 31af27d..5d3c191 100644
--- a/src/lifetime.rs
+++ b/src/lifetime.rs
@@ -2,11 +2,9 @@
use std::fmt::{self, Display};
use std::hash::{Hash, Hasher};
-use proc_macro2::Term;
+use proc_macro2::{Span, Term};
use unicode_xid::UnicodeXID;
-use Span;
-
#[cfg_attr(feature = "extra-traits", derive(Debug))]
#[cfg_attr(feature = "clone-impls", derive(Clone))]
pub struct Lifetime {
@@ -108,7 +106,7 @@
Ok((rest, Lifetime {
sym: sym,
- span: Span(span),
+ span: span,
}))
}
}
@@ -123,7 +121,7 @@
impl ToTokens for Lifetime {
fn to_tokens(&self, tokens: &mut Tokens) {
tokens.append(TokenTree {
- span: self.span.0,
+ span: self.span,
kind: TokenNode::Term(self.sym),
})
}
diff --git a/src/lit.rs b/src/lit.rs
index 850a8b0..f55e398 100644
--- a/src/lit.rs
+++ b/src/lit.rs
@@ -1,9 +1,9 @@
use std::fmt;
use std::hash::{Hash, Hasher};
-use proc_macro2::{self, Literal, TokenNode, Term};
+use proc_macro2::{self, Span, Literal, TokenNode, Term};
-use {Span, TokenTree};
+use TokenTree;
#[derive(Clone)]
pub struct Lit {
@@ -25,7 +25,7 @@
LitKind::Other(l) => TokenNode::Literal(l),
};
TokenTree(proc_macro2::TokenTree {
- span: self.span.0,
+ span: self.span,
kind: kind,
})
}
@@ -110,7 +110,7 @@
match input.literal() {
Some((rest, span, lit)) => {
Ok((rest, Lit {
- span: Span(span),
+ span: span,
value: LitKind::Other(lit)
}))
}
@@ -125,7 +125,7 @@
};
Ok((rest, Lit {
- span: Span(span),
+ span: span,
value: kind
}))
}
diff --git a/src/span.rs b/src/span.rs
deleted file mode 100644
index f78cff7..0000000
--- a/src/span.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-use std::hash::{Hash, Hasher};
-use std::fmt::{self, Debug};
-
-use proc_macro2;
-
-#[derive(Clone, Copy, Default)]
-pub struct Span(pub proc_macro2::Span);
-
-impl Debug for Span {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- self.0.fmt(f)
- }
-}
-
-impl PartialEq for Span {
- fn eq(&self, _other: &Span) -> bool {
- true
- }
-}
-
-impl Eq for Span {}
-
-impl Hash for Span {
- fn hash<H: Hasher>(&self, _hasher: &mut H) {
- }
-}
diff --git a/src/tokens.rs b/src/tokens.rs
index a40bd60..955b01d 100644
--- a/src/tokens.rs
+++ b/src/tokens.rs
@@ -5,7 +5,7 @@
//! of these tokens and all implment the `ToTokens` and `Synom` traits when the
//! corresponding feature is activated.
-use Span;
+use proc_macro2::Span;
macro_rules! tokens {
(
@@ -28,21 +28,33 @@
macro_rules! op {
(pub struct $name:ident($($contents:tt)*) => $s:expr) => {
#[cfg_attr(feature = "clone-impls", derive(Copy, Clone))]
- #[cfg_attr(feature = "extra-traits", derive(Eq, PartialEq, Hash))]
#[derive(Default)]
pub struct $name(pub $($contents)*);
#[cfg(feature = "extra-traits")]
impl ::std::fmt::Debug for $name {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
- let mut t = f.debug_tuple(stringify!($name));
- for span in &self.0 {
- t.field(span);
- }
- t.finish()
+ f.write_str(stringify!($name))
}
}
+ #[cfg(feature = "extra-traits")]
+ impl ::std::cmp::Eq for $name {}
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::cmp::PartialEq for $name {
+ fn eq(&self, _other: &$name) -> bool {
+ true
+ }
+ }
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::hash::Hash for $name {
+ fn hash<H>(&self, _state: &mut H)
+ where H: ::std::hash::Hasher
+ {}
+ }
+
#[cfg(feature = "printing")]
impl ::quote::ToTokens for $name {
fn to_tokens(&self, tokens: &mut ::quote::Tokens) {
@@ -62,10 +74,33 @@
macro_rules! sym {
(pub struct $name:ident => $s:expr) => {
#[cfg_attr(feature = "clone-impls", derive(Copy, Clone))]
- #[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
#[derive(Default)]
pub struct $name(pub Span);
+ #[cfg(feature = "extra-traits")]
+ impl ::std::fmt::Debug for $name {
+ fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+ f.write_str(stringify!($name))
+ }
+ }
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::cmp::Eq for $name {}
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::cmp::PartialEq for $name {
+ fn eq(&self, _other: &$name) -> bool {
+ true
+ }
+ }
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::hash::Hash for $name {
+ fn hash<H>(&self, _state: &mut H)
+ where H: ::std::hash::Hasher
+ {}
+ }
+
#[cfg(feature = "printing")]
impl ::quote::ToTokens for $name {
fn to_tokens(&self, tokens: &mut ::quote::Tokens) {
@@ -85,10 +120,33 @@
macro_rules! delim {
(pub struct $name:ident => $s:expr) => {
#[cfg_attr(feature = "clone-impls", derive(Copy, Clone))]
- #[cfg_attr(feature = "extra-traits", derive(Debug, Eq, PartialEq, Hash))]
#[derive(Default)]
pub struct $name(pub Span);
+ #[cfg(feature = "extra-traits")]
+ impl ::std::fmt::Debug for $name {
+ fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
+ f.write_str(stringify!($name))
+ }
+ }
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::cmp::Eq for $name {}
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::cmp::PartialEq for $name {
+ fn eq(&self, _other: &$name) -> bool {
+ true
+ }
+ }
+
+ #[cfg(feature = "extra-traits")]
+ impl ::std::hash::Hash for $name {
+ fn hash<H>(&self, _state: &mut H)
+ where H: ::std::hash::Hasher
+ {}
+ }
+
impl $name {
#[cfg(feature = "printing")]
pub fn surround<F>(&self,
@@ -399,10 +457,10 @@
#[cfg(feature = "parsing")]
mod parsing {
- use proc_macro2::{Delimiter, Spacing};
+ use proc_macro2::{Span, Delimiter, Spacing};
use cursor::Cursor;
- use {PResult, Span, parse_error};
+ use {PResult, parse_error};
pub trait FromSpans: Sized {
fn from_spans(spans: &[Span]) -> Self;
@@ -445,7 +503,7 @@
_ => return parse_error(),
}
}
- *slot = Span(span);
+ *slot = span;
tokens = rest;
}
_ => return parse_error()
@@ -461,7 +519,7 @@
{
if let Some((rest, span, s)) = tokens.word() {
if s.as_str() == sym {
- return Ok((rest, new(Span(span))));
+ return Ok((rest, new(span)));
}
}
parse_error()
@@ -487,7 +545,7 @@
match f(seqinfo.inside) {
Ok((remaining, ret)) => {
if remaining.eof() {
- return Ok((seqinfo.outside, (ret, new(Span(seqinfo.span)))));
+ return Ok((seqinfo.outside, (ret, new(seqinfo.span))));
}
}
Err(err) => return Err(err),
@@ -499,11 +557,9 @@
#[cfg(feature = "printing")]
mod printing {
- use proc_macro2::{TokenTree, TokenNode, Spacing, Term};
+ use proc_macro2::{Span, TokenTree, TokenNode, Spacing, Term};
use quote::Tokens;
- use Span;
-
pub fn op(s: &str, spans: &[Span], tokens: &mut Tokens) {
assert_eq!(s.len(), spans.len());
@@ -513,20 +569,20 @@
let span = spans.next_back().unwrap();
for (ch, span) in chars.zip(spans) {
tokens.append(TokenTree {
- span: span.0,
+ span: *span,
kind: TokenNode::Op(ch, Spacing::Joint),
});
}
tokens.append(TokenTree {
- span: span.0,
+ span: *span,
kind: TokenNode::Op(ch, Spacing::Alone),
});
}
pub fn sym(s: &str, span: &Span, tokens: &mut Tokens) {
tokens.append(TokenTree {
- span: span.0,
+ span: *span,
kind: TokenNode::Term(Term::intern(s)),
});
}
@@ -534,6 +590,6 @@
pub fn delim<F>(s: &str, span: &Span, tokens: &mut Tokens, f: F)
where F: FnOnce(&mut Tokens)
{
- tokens.append_delimited(s, span.0, f)
+ tokens.append_delimited(s, *span, f)
}
}