|
1 | 1 | #![feature(
|
2 |
| - proc_macro_diagnostic, // NEEDED for warnings |
| 2 | + proc_macro_diagnostic, // Used for warnings |
| 3 | + proc_macro_tracked_env, // Used for `DEBUG_DERIVE` |
3 | 4 | )]
|
4 | 5 | extern crate proc_macro;
|
5 | 6 |
|
@@ -313,6 +314,7 @@ pub fn derive_trace(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
|
313 | 314 | .unwrap_or_else(|e| e.to_compile_error()));
|
314 | 315 | debug_derive(
|
315 | 316 | "derive(Trace)",
|
| 317 | + &input.ident, |
316 | 318 | &format_args!("#[derive(Trace) for {}", input.ident),
|
317 | 319 | &res
|
318 | 320 | );
|
@@ -854,12 +856,29 @@ fn add_trait_bounds(
|
854 | 856 | result
|
855 | 857 | }
|
856 | 858 |
|
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(); |
858 | 861 | // 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 |
863 | 882 | },
|
864 | 883 | _ => return,
|
865 | 884 | }
|
|
0 commit comments