Preserve span information for fields.
This commit is contained in:
		
							parent
							
								
									c86cdb29b3
								
							
						
					
					
						commit
						f6b6c94675
					
				| @ -1,4 +1,5 @@ | |||||||
| use quote::{ToTokens, Tokens}; | use quote::{ToTokens, Tokens}; | ||||||
|  | use syn::spanned::Spanned; | ||||||
| use syn::{Field, Meta, NestedMeta}; | use syn::{Field, Meta, NestedMeta}; | ||||||
| 
 | 
 | ||||||
| use api::strip_serde_attrs; | use api::strip_serde_attrs; | ||||||
| @ -54,8 +55,9 @@ impl Request { | |||||||
| 
 | 
 | ||||||
|         for field in self.fields.iter().flat_map(|f| f.field_(request_field_kind)) { |         for field in self.fields.iter().flat_map(|f| f.field_(request_field_kind)) { | ||||||
|             let field_name = field.ident.expect("expected field to have an identifier"); |             let field_name = field.ident.expect("expected field to have an identifier"); | ||||||
|  |             let span = field.span(); | ||||||
| 
 | 
 | ||||||
|             tokens.append_all(quote! { |             tokens.append_all(quote_spanned! {span=> | ||||||
|                 #field_name: request.#field_name, |                 #field_name: request.#field_name, | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
| @ -146,7 +148,12 @@ impl ToTokens for Request { | |||||||
|             tokens.append_all("{".into_tokens()); |             tokens.append_all("{".into_tokens()); | ||||||
| 
 | 
 | ||||||
|             for request_field in self.fields.iter() { |             for request_field in self.fields.iter() { | ||||||
|                 strip_serde_attrs(request_field.field()).to_tokens(&mut tokens); |                 let field = request_field.field(); | ||||||
|  |                 let span = field.span(); | ||||||
|  | 
 | ||||||
|  |                 strip_serde_attrs(field).to_tokens(&mut tokens); | ||||||
|  | 
 | ||||||
|  |                 tokens.append_all(quote_spanned!(span=> #field)); | ||||||
| 
 | 
 | ||||||
|                 tokens.append_all(",".into_tokens()); |                 tokens.append_all(",".into_tokens()); | ||||||
|             } |             } | ||||||
| @ -156,9 +163,10 @@ impl ToTokens for Request { | |||||||
| 
 | 
 | ||||||
|         if let Some(newtype_body_field) = self.newtype_body_field() { |         if let Some(newtype_body_field) = self.newtype_body_field() { | ||||||
|             let mut field = newtype_body_field.clone(); |             let mut field = newtype_body_field.clone(); | ||||||
|             let ty = field.ty; |             let ty = &field.ty; | ||||||
|  |             let span = field.span(); | ||||||
| 
 | 
 | ||||||
|             tokens.append_all(quote! { |             tokens.append_all(quote_spanned! {span=> | ||||||
|                 /// Data in the request body.
 |                 /// Data in the request body.
 | ||||||
|                 #[derive(Debug, Serialize)] |                 #[derive(Debug, Serialize)] | ||||||
|                 struct RequestBody(#ty); |                 struct RequestBody(#ty); | ||||||
| @ -175,7 +183,8 @@ impl ToTokens for Request { | |||||||
|             for request_field in self.fields.iter() { |             for request_field in self.fields.iter() { | ||||||
|                 match *request_field { |                 match *request_field { | ||||||
|                     RequestField::Body(ref field) => { |                     RequestField::Body(ref field) => { | ||||||
|                         field.to_tokens(&mut tokens); |                         let span = field.span(); | ||||||
|  |                         tokens.append_all(quote_spanned!(span=> #field)); | ||||||
| 
 | 
 | ||||||
|                         tokens.append_all(",".into_tokens()); |                         tokens.append_all(",".into_tokens()); | ||||||
|                     } |                     } | ||||||
| @ -198,7 +207,9 @@ impl ToTokens for Request { | |||||||
|             for request_field in self.fields.iter() { |             for request_field in self.fields.iter() { | ||||||
|                 match *request_field { |                 match *request_field { | ||||||
|                     RequestField::Path(ref field) => { |                     RequestField::Path(ref field) => { | ||||||
|                         field.to_tokens(&mut tokens); |                         let span = field.span(); | ||||||
|  | 
 | ||||||
|  |                         tokens.append_all(quote_spanned!(span=> #field)); | ||||||
| 
 | 
 | ||||||
|                         tokens.append_all(",".into_tokens()); |                         tokens.append_all(",".into_tokens()); | ||||||
|                     } |                     } | ||||||
| @ -221,7 +232,9 @@ impl ToTokens for Request { | |||||||
|             for request_field in self.fields.iter() { |             for request_field in self.fields.iter() { | ||||||
|                 match *request_field { |                 match *request_field { | ||||||
|                     RequestField::Query(ref field) => { |                     RequestField::Query(ref field) => { | ||||||
|                         field.to_tokens(&mut tokens); |                         let span = field.span(); | ||||||
|  | 
 | ||||||
|  |                         tokens.append_all(quote_spanned!(span=> #field)); | ||||||
| 
 | 
 | ||||||
|                         tokens.append_all(",".into_tokens()); |                         tokens.append_all(",".into_tokens()); | ||||||
|                     } |                     } | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| use quote::{ToTokens, Tokens}; | use quote::{ToTokens, Tokens}; | ||||||
|  | use syn::spanned::Spanned; | ||||||
| use syn::{Field, Meta, NestedMeta}; | use syn::{Field, Meta, NestedMeta}; | ||||||
| 
 | 
 | ||||||
| use api::strip_serde_attrs; | use api::strip_serde_attrs; | ||||||
| @ -27,24 +28,27 @@ impl Response { | |||||||
|             match *response_field { |             match *response_field { | ||||||
|                 ResponseField::Body(ref field) => { |                 ResponseField::Body(ref field) => { | ||||||
|                     let field_name = field.ident.expect("expected field to have an identifier"); |                     let field_name = field.ident.expect("expected field to have an identifier"); | ||||||
|  |                     let span = field.span(); | ||||||
| 
 | 
 | ||||||
|                     tokens.append_all(quote! { |                     tokens.append_all(quote_spanned! {span=> | ||||||
|                         #field_name: response_body.#field_name, |                         #field_name: response_body.#field_name, | ||||||
|                     }); |                     }); | ||||||
|                 } |                 } | ||||||
|                 ResponseField::Header(ref field) => { |                 ResponseField::Header(ref field) => { | ||||||
|                     let field_name = field.ident.expect("expected field to have an identifier"); |                     let field_name = field.ident.expect("expected field to have an identifier"); | ||||||
|                     let field_type = &field.ty; |                     let field_type = &field.ty; | ||||||
|  |                     let span = field.span(); | ||||||
| 
 | 
 | ||||||
|                     tokens.append_all(quote! { |                     tokens.append_all(quote_spanned! {span=> | ||||||
|                         #field_name: headers.remove::<#field_type>() |                         #field_name: headers.remove::<#field_type>() | ||||||
|                             .expect("missing expected request header"), |                             .expect("missing expected request header"), | ||||||
|                     }); |                     }); | ||||||
|                 } |                 } | ||||||
|                 ResponseField::NewtypeBody(ref field) => { |                 ResponseField::NewtypeBody(ref field) => { | ||||||
|                     let field_name = field.ident.expect("expected field to have an identifier"); |                     let field_name = field.ident.expect("expected field to have an identifier"); | ||||||
|  |                     let span = field.span(); | ||||||
| 
 | 
 | ||||||
|                     tokens.append_all(quote! { |                     tokens.append_all(quote_spanned! {span=> | ||||||
|                         #field_name: response_body, |                         #field_name: response_body, | ||||||
|                     }); |                     }); | ||||||
|                 } |                 } | ||||||
| @ -140,7 +144,7 @@ impl From<Vec<Field>> for Response { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl ToTokens for Response { | impl ToTokens for Response { | ||||||
|     fn to_tokens(&self, mut tokens: &mut Tokens) { |     fn to_tokens(&self, tokens: &mut Tokens) { | ||||||
|         tokens.append_all(quote! { |         tokens.append_all(quote! { | ||||||
|             /// Data in the response from this API endpoint.
 |             /// Data in the response from this API endpoint.
 | ||||||
|             #[derive(Debug)] |             #[derive(Debug)] | ||||||
| @ -153,7 +157,12 @@ impl ToTokens for Response { | |||||||
|             tokens.append_all("{".into_tokens()); |             tokens.append_all("{".into_tokens()); | ||||||
| 
 | 
 | ||||||
|             for response_field in self.fields.iter() { |             for response_field in self.fields.iter() { | ||||||
|                 strip_serde_attrs(response_field.field()).to_tokens(&mut tokens); |                 let field = response_field.field(); | ||||||
|  |                 let span = field.span(); | ||||||
|  | 
 | ||||||
|  |                 strip_serde_attrs(field); | ||||||
|  | 
 | ||||||
|  |                 tokens.append_all(quote_spanned!(span=> #field)); | ||||||
| 
 | 
 | ||||||
|                 tokens.append_all(",".into_tokens()); |                 tokens.append_all(",".into_tokens()); | ||||||
|             } |             } | ||||||
| @ -163,9 +172,10 @@ impl ToTokens for Response { | |||||||
| 
 | 
 | ||||||
|         if let Some(newtype_body_field) = self.newtype_body_field() { |         if let Some(newtype_body_field) = self.newtype_body_field() { | ||||||
|             let mut field = newtype_body_field.clone(); |             let mut field = newtype_body_field.clone(); | ||||||
|             let ty = field.ty; |             let ty = &field.ty; | ||||||
|  |             let span = field.span(); | ||||||
| 
 | 
 | ||||||
|             tokens.append_all(quote! { |             tokens.append_all(quote_spanned! {span=> | ||||||
|                 /// Data in the response body.
 |                 /// Data in the response body.
 | ||||||
|                 #[derive(Debug, Deserialize)] |                 #[derive(Debug, Deserialize)] | ||||||
|                 struct ResponseBody(#ty); |                 struct ResponseBody(#ty); | ||||||
| @ -182,7 +192,9 @@ impl ToTokens for Response { | |||||||
|             for response_field in self.fields.iter() { |             for response_field in self.fields.iter() { | ||||||
|                 match *response_field { |                 match *response_field { | ||||||
|                     ResponseField::Body(ref field) => { |                     ResponseField::Body(ref field) => { | ||||||
|                         field.to_tokens(&mut tokens); |                         let span = field.span(); | ||||||
|  | 
 | ||||||
|  |                         tokens.append_all(quote_spanned!(span=> #field)); | ||||||
| 
 | 
 | ||||||
|                         tokens.append_all(",".into_tokens()); |                         tokens.append_all(",".into_tokens()); | ||||||
|                     } |                     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user