Use 'syn', 'proc_macro2' directly.

Fixes #1641.
This commit is contained in:
Sergio Benitez 2021-05-21 09:13:47 -07:00
parent fa3e0334c1
commit 6784ebc097
28 changed files with 56 additions and 65 deletions

View File

@ -17,8 +17,10 @@ proc-macro = true
[dependencies] [dependencies]
indexmap = "1.0" indexmap = "1.0"
quote = "1.0" quote = "1.0"
rocket_http = { version = "0.5.0-dev", path = "../http/" } syn = { version = "1.0.72", features = ["full", "visit", "visit-mut", "extra-traits"] }
proc-macro2 = "1.0.27"
devise = { git = "https://github.com/SergioBenitez/Devise.git", rev = "df00b5" } devise = { git = "https://github.com/SergioBenitez/Devise.git", rev = "df00b5" }
rocket_http = { version = "0.5.0-dev", path = "../http/" }
unicode-xid = "0.2" unicode-xid = "0.2"
glob = "0.3" glob = "0.3"

View File

@ -1,10 +1,10 @@
mod parse; mod parse;
use devise::ext::SpanDiagnosticExt; use devise::ext::SpanDiagnosticExt;
use devise::{syn, Spanned, Result}; use devise::{Spanned, Result};
use proc_macro2::{TokenStream, Span};
use crate::http_codegen::Optional; use crate::http_codegen::Optional;
use crate::proc_macro2::{TokenStream, Span};
use crate::syn_ext::ReturnTypeExt; use crate::syn_ext::ReturnTypeExt;
use crate::exports::*; use crate::exports::*;

View File

@ -1,8 +1,8 @@
use devise::ext::SpanDiagnosticExt; use devise::ext::SpanDiagnosticExt;
use devise::{syn, MetaItem, Spanned, Result, FromMeta, Diagnostic}; use devise::{MetaItem, Spanned, Result, FromMeta, Diagnostic};
use proc_macro2::TokenStream;
use crate::{http, http_codegen}; use crate::{http, http_codegen};
use crate::proc_macro2::TokenStream;
/// This structure represents the parsed `catch` attribute and associated items. /// This structure represents the parsed `catch` attribute and associated items.
pub struct Attribute { pub struct Attribute {

View File

@ -1,8 +1,8 @@
use super::EntryAttr; use super::EntryAttr;
use devise::{syn, Spanned, Result}; use devise::{Spanned, Result};
use devise::ext::SpanDiagnosticExt; use devise::ext::SpanDiagnosticExt;
use devise::proc_macro2::{TokenStream, Span}; use proc_macro2::{TokenStream, Span};
/// `#[rocket::launch]`: generates a `main` function that calls the attributed /// `#[rocket::launch]`: generates a `main` function that calls the attributed
/// function to generate a `Rocket` instance. Then calls `.launch()` on the /// function to generate a `Rocket` instance. Then calls `.launch()` on the

View File

@ -1,8 +1,8 @@
use super::EntryAttr; use super::EntryAttr;
use devise::{syn, Spanned, Result}; use devise::{Spanned, Result};
use devise::ext::SpanDiagnosticExt; use devise::ext::SpanDiagnosticExt;
use devise::proc_macro2::{TokenStream, Span}; use proc_macro2::{TokenStream, Span};
/// `#[rocket::async_main]`: calls the attributed fn inside `rocket::async_main` /// `#[rocket::async_main]`: calls the attributed fn inside `rocket::async_main`
pub struct Main; pub struct Main;

View File

@ -2,9 +2,9 @@ mod main;
mod launch; mod launch;
mod test; mod test;
use devise::{syn, Diagnostic, Spanned, Result}; use devise::{Diagnostic, Spanned, Result};
use devise::ext::SpanDiagnosticExt; use devise::ext::SpanDiagnosticExt;
use devise::proc_macro2::{TokenStream, Span}; use proc_macro2::{TokenStream, Span};
// Common trait implemented by `async` entry generating attributes. // Common trait implemented by `async` entry generating attributes.
trait EntryAttr { trait EntryAttr {

View File

@ -1,7 +1,7 @@
use super::EntryAttr; use super::EntryAttr;
use devise::{syn, Spanned, Result}; use devise::{Spanned, Result};
use devise::proc_macro2::TokenStream; use proc_macro2::TokenStream;
/// `#[rocket::async_test]`: calls the attributed fn inside `rocket::async_test` /// `#[rocket::async_test]`: calls the attributed fn inside `rocket::async_test`
pub struct Test; pub struct Test;

View File

@ -1,13 +1,12 @@
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
use devise::{syn, FromMeta, MetaItem, Result}; use devise::{FromMeta, MetaItem, Result};
use proc_macro2::Span;
use crate::name::Name; use crate::name::Name;
use crate::proc_macro2::Span;
use crate::proc_macro_ext::StringLit; use crate::proc_macro_ext::StringLit;
use crate::http::uri; use crate::http::uri;
impl Dynamic { impl Dynamic {
pub fn is_wild(&self) -> bool { pub fn is_wild(&self) -> bool {
self.value == "_" self.value == "_"

View File

@ -3,7 +3,6 @@ mod parse;
use std::ops::Deref; use std::ops::Deref;
use std::hash::Hash; use std::hash::Hash;
use crate::syn;
use crate::name::Name; use crate::name::Name;
#[derive(Debug, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]

View File

@ -1,9 +1,9 @@
use unicode_xid::UnicodeXID; use unicode_xid::UnicodeXID;
use devise::{Diagnostic, ext::SpanDiagnosticExt}; use devise::{Diagnostic, ext::SpanDiagnosticExt};
use proc_macro2::Span;
use crate::name::Name; use crate::name::Name;
use crate::proc_macro_ext::StringLit; use crate::proc_macro_ext::StringLit;
use crate::proc_macro2::Span;
use crate::attribute::param::{Parameter, Dynamic}; use crate::attribute::param::{Parameter, Dynamic};
use crate::http::uri::fmt::{Part, Kind, Path}; use crate::http::uri::fmt::{Part, Kind, Path};

View File

@ -2,11 +2,10 @@ mod parse;
use std::hash::Hash; use std::hash::Hash;
use proc_macro2::{TokenStream, Span};
use devise::{Spanned, SpanWrapped, Result, FromMeta, Diagnostic}; use devise::{Spanned, SpanWrapped, Result, FromMeta, Diagnostic};
use devise::ext::TypeExt as _; use devise::ext::TypeExt as _;
use proc_macro2::{TokenStream, Span};
use crate::{proc_macro2, syn};
use crate::proc_macro_ext::StringLit; use crate::proc_macro_ext::StringLit;
use crate::syn_ext::{IdentExt, TypeExt as _}; use crate::syn_ext::{IdentExt, TypeExt as _};
use crate::http_codegen::{Method, Optional}; use crate::http_codegen::{Method, Optional};

View File

@ -1,14 +1,13 @@
use devise::{syn, Spanned, SpanWrapped, Result, FromMeta}; use devise::{Spanned, SpanWrapped, Result, FromMeta};
use devise::ext::{SpanDiagnosticExt, TypeExt}; use devise::ext::{SpanDiagnosticExt, TypeExt};
use indexmap::{IndexSet, IndexMap}; use indexmap::{IndexSet, IndexMap};
use proc_macro2::Span;
use crate::proc_macro_ext::Diagnostics; use crate::proc_macro_ext::Diagnostics;
use crate::http_codegen::{Method, MediaType}; use crate::http_codegen::{Method, MediaType};
use crate::attribute::param::{Parameter, Dynamic, Guard}; use crate::attribute::param::{Parameter, Dynamic, Guard};
use crate::syn_ext::FnArgExt; use crate::syn_ext::FnArgExt;
use crate::name::Name; use crate::name::Name;
use crate::proc_macro2::Span;
use crate::http::ext::IntoOwned; use crate::http::ext::IntoOwned;
use crate::http::uri::{Origin, fmt}; use crate::http::uri::{Origin, fmt};

View File

@ -2,8 +2,7 @@ use std::hash::Hash;
use devise::Spanned; use devise::Spanned;
use devise::ext::SpanDiagnosticExt; use devise::ext::SpanDiagnosticExt;
use devise::proc_macro2::{TokenStream, TokenTree, Punct}; use proc_macro2::{TokenStream, TokenTree, Punct};
use devise::syn;
use crate::syn_ext::IdentExt; use crate::syn_ext::IdentExt;

View File

@ -1,8 +1,7 @@
use devise::Result; use devise::Result;
use syn::{Path, punctuated::Punctuated, parse::Parser, Token};
use crate::syn::{Path, punctuated::Punctuated, parse::Parser, Token}; use syn::spanned::Spanned;
use crate::proc_macro2::TokenStream; use proc_macro2::TokenStream;
use crate::syn::spanned::Spanned;
mod uri; mod uri;
mod uri_parsing; mod uri_parsing;

View File

@ -1,9 +1,9 @@
use std::path::Path; use std::path::Path;
use std::error::Error; use std::error::Error;
use syn::{self, Ident, LitStr};
use devise::ext::SpanDiagnosticExt; use devise::ext::SpanDiagnosticExt;
use devise::syn::{self, Ident, LitStr}; use proc_macro2::TokenStream;
use devise::proc_macro2::TokenStream;
pub fn _macro(input: proc_macro::TokenStream) -> devise::Result<TokenStream> { pub fn _macro(input: proc_macro::TokenStream) -> devise::Result<TokenStream> {
let root_glob = syn::parse::<LitStr>(input.into())?; let root_glob = syn::parse::<LitStr>(input.into())?;

View File

@ -1,14 +1,13 @@
use std::fmt::Display; use std::fmt::Display;
use devise::{syn, Result}; use devise::{Result, ext::{SpanDiagnosticExt, quote_respanned}};
use devise::ext::{SpanDiagnosticExt, quote_respanned}; use syn::{Expr, Ident, Type, spanned::Spanned};
use proc_macro2::TokenStream;
use crate::http::uri::fmt; use crate::http::uri::fmt;
use crate::http_codegen::Optional; use crate::http_codegen::Optional;
use crate::syn::{Expr, Ident, Type, spanned::Spanned};
use crate::syn_ext::IdentExt; use crate::syn_ext::IdentExt;
use crate::bang::uri_parsing::*; use crate::bang::uri_parsing::*;
use crate::proc_macro2::TokenStream;
use crate::attribute::param::Parameter; use crate::attribute::param::Parameter;
use crate::exports::*; use crate::exports::*;
use crate::URI_MACRO_PREFIX; use crate::URI_MACRO_PREFIX;

View File

@ -3,15 +3,14 @@ use std::ops::Deref;
use indexmap::IndexMap; use indexmap::IndexMap;
use devise::{Spanned, ext::TypeExt}; use devise::{Spanned, ext::TypeExt};
use quote::{ToTokens, TokenStreamExt}; use quote::{ToTokens, TokenStreamExt};
use syn::{Expr, Ident, LitStr, Path, Token, Type};
use syn::parse::{self, Parse, ParseStream, Parser};
use syn::punctuated::Punctuated;
use proc_macro2::{TokenStream, TokenTree, Span};
use rocket_http::uri::{Error, Reference}; use rocket_http::uri::{Error, Reference};
use crate::{http_codegen, syn::{self, Expr, Ident, LitStr, Path, Token, Type}};
use crate::syn::parse::{self, Parse, ParseStream, Parser};
use crate::syn::punctuated::Punctuated;
use crate::http::uri::{Uri, Origin, Absolute, fmt}; use crate::http::uri::{Uri, Origin, Absolute, fmt};
use crate::http::ext::IntoOwned; use crate::http::ext::IntoOwned;
use crate::proc_macro2::{TokenStream, TokenTree, Span};
use crate::proc_macro_ext::StringLit; use crate::proc_macro_ext::StringLit;
use crate::attribute::param::{Parameter, Dynamic}; use crate::attribute::param::{Parameter, Dynamic};
use crate::name::Name; use crate::name::Name;
@ -549,7 +548,7 @@ impl Deref for UriLit {
impl ToTokens for UriLit { impl ToTokens for UriLit {
fn to_tokens(&self, t: &mut TokenStream) { fn to_tokens(&self, t: &mut TokenStream) {
use http_codegen::*; use crate::http_codegen::*;
let (uri, span) = (&self.0, self.1); let (uri, span) = (&self.0, self.1);
match uri { match uri {

View File

@ -2,8 +2,8 @@ use devise::{*, ext::{TypeExt, SpanDiagnosticExt}};
use syn::visit_mut::VisitMut; use syn::visit_mut::VisitMut;
use syn::visit::Visit; use syn::visit::Visit;
use proc_macro2::{TokenStream, TokenTree, Span};
use crate::proc_macro2::{TokenStream, TokenTree, Span};
use crate::syn_ext::IdentExt; use crate::syn_ext::IdentExt;
use crate::name::Name; use crate::name::Name;

View File

@ -1,7 +1,7 @@
use devise::{*, ext::{TypeExt, SpanDiagnosticExt, GenericsExt, Split2, quote_respanned}}; use devise::{*, ext::{TypeExt, SpanDiagnosticExt, GenericsExt, Split2, quote_respanned}};
use proc_macro2::TokenStream;
use crate::exports::*; use crate::exports::*;
use crate::proc_macro2::TokenStream;
use crate::derive::form_field::{*, FieldName::*}; use crate::derive::form_field::{*, FieldName::*};
// F: fn(field_ty: Ty, field_context: Expr) // F: fn(field_ty: Ty, field_context: Expr)

View File

@ -1,7 +1,7 @@
use devise::{*, ext::SpanDiagnosticExt}; use devise::{*, ext::SpanDiagnosticExt};
use proc_macro2::TokenStream;
use crate::exports::*; use crate::exports::*;
use crate::proc_macro2::TokenStream;
use crate::derive::form_field::{VariantExt, first_duplicate}; use crate::derive::form_field::{VariantExt, first_duplicate};
pub fn derive_from_form_field(input: proc_macro::TokenStream) -> TokenStream { pub fn derive_from_form_field(input: proc_macro::TokenStream) -> TokenStream {

View File

@ -1,8 +1,8 @@
use quote::ToTokens; use quote::ToTokens;
use devise::{*, ext::{TypeExt, SpanDiagnosticExt}}; use devise::{*, ext::{TypeExt, SpanDiagnosticExt}};
use proc_macro2::TokenStream;
use crate::exports::*; use crate::exports::*;
use crate::proc_macro2::TokenStream;
use crate::http_codegen::{ContentType, Status}; use crate::http_codegen::{ContentType, Status};
#[derive(Debug, Default, FromMeta)] #[derive(Debug, Default, FromMeta)]

View File

@ -1,9 +1,8 @@
use proc_macro2::TokenStream;
use devise::{*, ext::SpanDiagnosticExt}; use devise::{*, ext::SpanDiagnosticExt};
use crate::exports::*; use crate::exports::*;
use crate::derive::form_field::{FieldExt, VariantExt}; use crate::derive::form_field::{FieldExt, VariantExt};
use crate::proc_macro2::TokenStream;
use crate::http::uri::fmt; use crate::http::uri::fmt;
const NO_EMPTY_FIELDS: &str = "fieldless structs are not supported"; const NO_EMPTY_FIELDS: &str = "fieldless structs are not supported";

View File

@ -1,6 +1,5 @@
use crate::syn; use proc_macro2::{Span, TokenStream};
use crate::proc_macro2::{Span, TokenStream}; use quote::{ToTokens, TokenStreamExt};
use crate::quote::{ToTokens, TokenStreamExt};
#[derive(Debug, Copy, Clone)] #[derive(Debug, Copy, Clone)]
pub struct StaticPath(pub Option<Span>, pub &'static str); pub struct StaticPath(pub Option<Span>, pub &'static str);

View File

@ -1,8 +1,8 @@
use quote::ToTokens; use quote::ToTokens;
use devise::{FromMeta, MetaItem, Result, ext::{Split2, PathExt, SpanDiagnosticExt}}; use devise::{FromMeta, MetaItem, Result, ext::{Split2, PathExt, SpanDiagnosticExt}};
use proc_macro2::{TokenStream, Span};
use crate::http; use crate::http;
use crate::proc_macro2::{TokenStream, Span};
#[derive(Debug)] #[derive(Debug)]
pub struct ContentType(pub http::ContentType); pub struct ContentType(pub http::ContentType);

View File

@ -70,7 +70,6 @@ mod name;
use crate::http::Method; use crate::http::Method;
use proc_macro::TokenStream; use proc_macro::TokenStream;
use devise::{proc_macro2, syn};
static URI_MACRO_PREFIX: &str = "rocket_uri_macro_"; static URI_MACRO_PREFIX: &str = "rocket_uri_macro_";
static ROCKET_IDENT_PREFIX: &str = "__rocket_"; static ROCKET_IDENT_PREFIX: &str = "__rocket_";

View File

@ -1,6 +1,7 @@
use crate::syn::{self, Ident, ext::IdentExt};
use crate::http::uncased::UncasedStr; use crate::http::uncased::UncasedStr;
use crate::proc_macro2::Span;
use syn::{self, Ident, ext::IdentExt};
use proc_macro2::{Span, TokenStream};
/// A "name" read by codegen, which may or may not be an identifier. A `Name` is /// A "name" read by codegen, which may or may not be an identifier. A `Name` is
/// typically constructed indirectly via FromMeta, or From<Ident> or directly /// typically constructed indirectly via FromMeta, or From<Ident> or directly
@ -55,7 +56,7 @@ impl devise::FromMeta for Name {
} }
impl quote::ToTokens for Name { impl quote::ToTokens for Name {
fn to_tokens(&self, tokens: &mut devise::proc_macro2::TokenStream) { fn to_tokens(&self, tokens: &mut TokenStream) {
syn::LitStr::new(self.as_str(), self.span()).to_tokens(tokens) syn::LitStr::new(self.as_str(), self.span()).to_tokens(tokens)
} }
} }

View File

@ -1,8 +1,7 @@
use std::ops::RangeBounds; use std::ops::RangeBounds;
use devise::Diagnostic; use devise::Diagnostic;
use proc_macro2::{Span, Literal};
use crate::proc_macro2::{Span, Literal};
// An experiment. // An experiment.
pub struct Diagnostics(Vec<Diagnostic>); pub struct Diagnostics(Vec<Diagnostic>);
@ -70,9 +69,9 @@ impl StringLit {
} }
} }
impl crate::syn::parse::Parse for StringLit { impl syn::parse::Parse for StringLit {
fn parse(input: devise::syn::parse::ParseStream<'_>) -> devise::syn::Result<Self> { fn parse(input: syn::parse::ParseStream<'_>) -> syn::Result<Self> {
let lit = input.parse::<crate::syn::LitStr>()?; let lit = input.parse::<syn::LitStr>()?;
Ok(StringLit::new(lit.value(), lit.span())) Ok(StringLit::new(lit.value(), lit.span()))
} }
} }

View File

@ -3,8 +3,8 @@
use std::ops::Deref; use std::ops::Deref;
use std::hash::{Hash, Hasher}; use std::hash::{Hash, Hasher};
use crate::syn::{self, Ident, ext::IdentExt as _, visit::Visit}; use syn::{self, Ident, ext::IdentExt as _, visit::Visit};
use crate::proc_macro2::Span; use proc_macro2::{Span, TokenStream};
pub trait IdentExt { pub trait IdentExt {
fn prepend(&self, string: &str) -> syn::Ident; fn prepend(&self, string: &str) -> syn::Ident;
@ -19,7 +19,7 @@ pub trait ReturnTypeExt {
} }
pub trait TokenStreamExt { pub trait TokenStreamExt {
fn respanned(&self, span: crate::proc_macro2::Span) -> Self; fn respanned(&self, span: Span) -> Self;
} }
pub trait FnArgExt { pub trait FnArgExt {
@ -91,8 +91,8 @@ impl ReturnTypeExt for syn::ReturnType {
} }
} }
impl TokenStreamExt for crate::proc_macro2::TokenStream { impl TokenStreamExt for TokenStream {
fn respanned(&self, span: crate::proc_macro2::Span) -> Self { fn respanned(&self, span: Span) -> Self {
self.clone().into_iter().map(|mut token| { self.clone().into_iter().map(|mut token| {
token.set_span(span); token.set_span(span);
token token