rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
96.9k stars 12.52k forks source link

Missing crates for macro-expanded code produces confusion #14780

Closed kmcallister closed 9 years ago

kmcallister commented 10 years ago
fn main() {
    format!("{:?}", ());
}
foo.rs:2:21: 3:1 error: unresolved import. maybe a missing `extern crate debug`?
foo.rs:2     format!("{:?}", ());
foo.rs:3 }
note: in expansion of format_args!
<std macros>:3:9: 3:51 note: expansion site
<std macros>:1:1: 5:2 note: in expansion of format!
foo.rs:2:5: 2:25 note: expansion site
foo.rs:2:21: 2:23 error: use of undeclared module `::debug::fmt`
foo.rs:2     format!("{:?}", ());
                             ^~
note: in expansion of format_args!
<std macros>:3:9: 3:51 note: expansion site
<std macros>:1:1: 5:2 note: in expansion of format!
foo.rs:2:5: 2:25 note: expansion site
foo.rs:2:21: 2:23 error: unresolved name `debug::fmt::secret_poly`.
foo.rs:2     format!("{:?}", ());
                             ^~
note: in expansion of format_args!
<std macros>:3:9: 3:51 note: expansion site
<std macros>:1:1: 5:2 note: in expansion of format!
foo.rs:2:5: 2:25 note: expansion site
error: aborting due to 3 previous errors

This is a lot of noise which makes it hard to understand the root problem. In a sense, this is a macro hygeine issue; the format! macro wants to "close over" a reference to the crate debug. Macros injecting crate dependencies would probably be bad, but we could allow them (at least procedural syntax extensions) to specify a list of crate dependencies, so that error messages can be more informative.

reem commented 10 years ago

I ran into this issue a few days ago. This is extremely annoying because it makes it very hard to package macros as modules because your users need to extern crate not only your library but also all of that libraries dependencies.

alexcrichton commented 9 years ago

I think our diagnostics and story here has improved greatly over time, so I'm going to close this as basically fixed, and new follow-up bugs can certainly be filed if new aspects crop up!