This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 6 files changed +56
-1
lines changed
compiler/rustc_expand/src
src/tools/rust-analyzer/crates/proc-macro-srv/src Expand file tree Collapse file tree 6 files changed +56
-1
lines changed Original file line number Diff line number Diff line change @@ -426,6 +426,10 @@ impl server::Types for Rustc<'_, '_> {
426426}
427427
428428impl server:: FreeFunctions for Rustc < ' _ , ' _ > {
429+ fn injected_env_var ( & mut self , var : & str ) -> Option < String > {
430+ self . ecx . sess . opts . logical_env . get ( var) . cloned ( )
431+ }
432+
429433 fn track_env_var ( & mut self , var : & str , value : Option < & str > ) {
430434 self . sess ( )
431435 . env_depinfo
Original file line number Diff line number Diff line change @@ -55,6 +55,7 @@ macro_rules! with_api {
5555 $m! {
5656 FreeFunctions {
5757 fn drop( $self: $S:: FreeFunctions ) ;
58+ fn injected_env_var( var: & str ) -> Option <String >;
5859 fn track_env_var( var: & str , value: Option <& str >) ;
5960 fn track_path( path: & str ) ;
6061 fn literal_from_str( s: & str ) -> Result <Literal <$S:: Span , $S:: Symbol >, ( ) >;
Original file line number Diff line number Diff line change @@ -1503,7 +1503,8 @@ pub mod tracked_env {
15031503 #[ unstable( feature = "proc_macro_tracked_env" , issue = "99515" ) ]
15041504 pub fn var < K : AsRef < OsStr > + AsRef < str > > ( key : K ) -> Result < String , VarError > {
15051505 let key: & str = key. as_ref ( ) ;
1506- let value = env:: var ( key) ;
1506+ let value = crate :: bridge:: client:: FreeFunctions :: injected_env_var ( key)
1507+ . map_or_else ( || env:: var ( key) , Ok ) ;
15071508 crate :: bridge:: client:: FreeFunctions :: track_env_var ( key, value. as_deref ( ) . ok ( ) ) ;
15081509 value
15091510 }
Original file line number Diff line number Diff line change @@ -58,6 +58,10 @@ impl server::Types for RustAnalyzer {
5858}
5959
6060impl server:: FreeFunctions for RustAnalyzer {
61+ fn injected_env_var ( & mut self , _var : & str ) -> Option < String > {
62+ None
63+ }
64+
6165 fn track_env_var ( & mut self , _var : & str , _value : Option < & str > ) {
6266 // FIXME: track env var accesses
6367 // https://github.com/rust-lang/rust/pull/71858
Original file line number Diff line number Diff line change 1+ // force-host
2+ // no-prefer-dynamic
3+
4+ #![ crate_type = "proc-macro" ]
5+ #![ feature( proc_macro_tracked_env) ]
6+
7+ extern crate proc_macro;
8+
9+ use proc_macro:: TokenStream ;
10+ use proc_macro:: tracked_env:: var;
11+
12+ #[ proc_macro]
13+ pub fn generate_const ( input : TokenStream ) -> TokenStream {
14+ let the_const = match var ( "THE_CONST" ) {
15+ Ok ( x) if x == "12" => {
16+ "const THE_CONST: u32 = 12;"
17+ }
18+ _ => {
19+ "const THE_CONST: u32 = 0;"
20+ }
21+ } ;
22+ let another = if var ( "ANOTHER" ) . is_ok ( ) {
23+ "const ANOTHER: u32 = 1;"
24+ } else {
25+ "const ANOTHER: u32 = 2;"
26+ } ;
27+ format ! ( "{the_const}{another}" ) . parse ( ) . unwrap ( )
28+ }
Original file line number Diff line number Diff line change 1+ // aux-build:env.rs
2+ // run-pass
3+ // rustc-env: THE_CONST=1
4+ // compile-flags: -Zunstable-options --env THE_CONST=12 --env ANOTHER=4
5+
6+ #![ crate_name = "foo" ]
7+
8+ extern crate env;
9+
10+ use env:: generate_const;
11+
12+ generate_const ! ( ) ;
13+
14+ fn main ( ) {
15+ assert_eq ! ( THE_CONST , 12 ) ;
16+ assert_eq ! ( ANOTHER , 1 ) ;
17+ }
You can’t perform that action at this time.
0 commit comments