Skip to content

Commit ecac108

Browse files
committed
[derive] Use #[feature(tracked_env)] to track 'DEBUG_DERIVE'
Also increase precision of the patterns to support matching only specific items. This way whenever the environment variable changes you'll crate will be automatically recompiled! However, it further increases our reliance on nightly :(
1 parent dc858f3 commit ecac108

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

libs/derive/src/lib.rs

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#![feature(
2-
proc_macro_diagnostic, // NEEDED for warnings
2+
proc_macro_diagnostic, // Used for warnings
3+
proc_macro_tracked_env, // Used for `DEBUG_DERIVE`
34
)]
45
extern crate proc_macro;
56

@@ -313,6 +314,7 @@ pub fn derive_trace(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
313314
.unwrap_or_else(|e| e.to_compile_error()));
314315
debug_derive(
315316
"derive(Trace)",
317+
&input.ident,
316318
&format_args!("#[derive(Trace) for {}", input.ident),
317319
&res
318320
);
@@ -854,12 +856,29 @@ fn add_trait_bounds(
854856
result
855857
}
856858

857-
fn debug_derive(key: &str, message: &dyn Display, value: &dyn Display) {
859+
fn debug_derive(key: &str, target: &dyn ToString, message: &dyn Display, value: &dyn Display) {
860+
let target = target.to_string();
858861
// TODO: Use proc_macro::tracked_env::var
859-
match ::std::env::var_os("DEBUG_DERIVE") {
860-
Some(var) if var == "*" ||
861-
var.to_string_lossy().contains(key) => {
862-
// Enable this debug
862+
match ::proc_macro::tracked_env::var("DEBUG_DERIVE") {
863+
Ok(ref var) if var == "*" => {}
864+
Ok(var) => {
865+
for pattern in var.split_terminator(",") {
866+
let parts = pattern.split(":").collect::<Vec<_>>();
867+
let (desired_key, desired_target) = match *parts {
868+
[desired_key, desired_target] => (desired_key, Some(desired_target)),
869+
[desired_key] => (desired_key, None),
870+
_ => {
871+
panic!("Invalid pattern for debug derive: {}", pattern)
872+
}
873+
};
874+
if desired_key != key && desired_key != "*" { return }
875+
if let Some(desired_target) = desired_target {
876+
if desired_target != target && desired_target != "*" {
877+
return
878+
}
879+
}
880+
}
881+
// Fallthrough -> enable this debug
863882
},
864883
_ => return,
865884
}

0 commit comments

Comments
 (0)