@@ -26,7 +26,7 @@ use proc_macro2::{Span, TokenStream};
26
26
use quote:: quote;
27
27
use std:: collections:: HashMap ;
28
28
use syn:: parse:: { Parse , ParseStream , Result } ;
29
- use syn:: { braced, punctuated:: Punctuated , Expr , Ident , Lit , LitStr , Token } ;
29
+ use syn:: { braced, punctuated:: Punctuated , Expr , Ident , Lit , LitStr , Macro , Token } ;
30
30
31
31
#[ cfg( test) ]
32
32
mod tests;
@@ -59,7 +59,7 @@ struct Symbol {
59
59
enum Value {
60
60
SameAsName ,
61
61
String ( LitStr ) ,
62
- Env ( LitStr ) ,
62
+ Env ( LitStr , Macro ) ,
63
63
Unsupported ( Expr ) ,
64
64
}
65
65
@@ -84,7 +84,7 @@ impl Parse for Value {
84
84
}
85
85
Expr :: Macro ( expr) => {
86
86
if expr. mac . path . is_ident ( "env" ) && let Ok ( lit) = expr. mac . parse_body ( ) {
87
- return Ok ( Value :: Env ( lit) ) ;
87
+ return Ok ( Value :: Env ( lit, expr . mac . clone ( ) ) ) ;
88
88
}
89
89
}
90
90
_ => { }
@@ -218,7 +218,7 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) {
218
218
let value = match & symbol. value {
219
219
Value :: SameAsName => name. to_string ( ) ,
220
220
Value :: String ( lit) => lit. value ( ) ,
221
- Value :: Env ( _ ) => continue , // in another loop below
221
+ Value :: Env ( .. ) => continue , // in another loop below
222
222
Value :: Unsupported ( expr) => {
223
223
errors. list . push ( syn:: Error :: new_spanned (
224
224
expr,
@@ -252,15 +252,15 @@ fn symbols_with_errors(input: TokenStream) -> (TokenStream, Vec<syn::Error>) {
252
252
// Symbols whose value comes from an environment variable. It's allowed for
253
253
// these to have the same value as another symbol.
254
254
for symbol in & input. symbols {
255
- let env_var = match & symbol. value {
256
- Value :: Env ( lit) => lit,
255
+ let ( env_var, expr ) = match & symbol. value {
256
+ Value :: Env ( lit, expr ) => ( lit, expr ) ,
257
257
Value :: SameAsName | Value :: String ( _) | Value :: Unsupported ( _) => continue ,
258
258
} ;
259
259
260
260
let value = match proc_macro:: tracked_env:: var ( env_var. value ( ) ) {
261
261
Ok ( value) => value,
262
262
Err ( err) => {
263
- errors. error ( symbol . name . span ( ) , err. to_string ( ) ) ;
263
+ errors. list . push ( syn :: Error :: new_spanned ( expr , err) ) ;
264
264
continue ;
265
265
}
266
266
} ;
0 commit comments