@@ -63,15 +63,16 @@ pub fn expand_env<'cx>(
63
63
Some ( exprs) => exprs. into_iter ( ) ,
64
64
} ;
65
65
66
- let Some ( ( var, _style) ) = expr_to_string ( cx, exprs. next ( ) . unwrap ( ) , "expected string literal" ) else {
66
+ let var_expr = exprs. next ( ) . unwrap ( ) ;
67
+ let Some ( ( var, _) ) = expr_to_string ( cx, var_expr. clone ( ) , "expected string literal" ) else {
67
68
return DummyResult :: any ( sp) ;
68
69
} ;
69
70
70
71
let custom_msg = match exprs. next ( ) {
71
72
None => None ,
72
73
Some ( second) => match expr_to_string ( cx, second, "expected string literal" ) {
73
74
None => return DummyResult :: any ( sp) ,
74
- Some ( ( s, _style ) ) => Some ( s) ,
75
+ Some ( ( s, _ ) ) => Some ( s) ,
75
76
} ,
76
77
} ;
77
78
@@ -80,10 +81,15 @@ pub fn expand_env<'cx>(
80
81
cx. sess . parse_sess . env_depinfo . borrow_mut ( ) . insert ( ( var, value) ) ;
81
82
let e = match value {
82
83
None => {
84
+ // Use the string literal in the code in the diagnostic to avoid confusing diagnostics,
85
+ // e.g. when the literal contains escape sequences.
86
+ let ast:: ExprKind :: Lit ( ast:: token:: Lit { kind : ast:: token:: LitKind :: Str , symbol : original_var, ..} ) = & var_expr. kind else {
87
+ unreachable ! ( "`expr_to_string` ensures this is a string lit" )
88
+ } ;
83
89
cx. emit_err ( errors:: EnvNotDefined {
84
90
span : sp,
85
91
msg : custom_msg,
86
- var,
92
+ var : * original_var ,
87
93
help : custom_msg. is_none ( ) . then ( || help_for_missing_env_var ( var. as_str ( ) ) ) ,
88
94
} ) ;
89
95
return DummyResult :: any ( sp) ;
0 commit comments