Skip to content

Missing crates for macro-expanded code produces confusion #14780

@kmcallister

Description

@kmcallister
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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lints

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions