//@ check-pass
//@ edition:2018
//@ compile-flags: -Z span-debug
//@ aux-build:test-macros.rs
//@ aux-build:dollar-crate-external.rs

#![no_std] // Don't load unnecessary hygiene information from std
extern crate std;

#[macro_use]
extern crate test_macros;
extern crate dollar_crate_external;

type S = u8;

mod local {
    macro_rules! local {
        () => {
            print_bang! {
                struct M($crate::S);
            }

            #[print_attr]
            struct A($crate::S);

            #[derive(Print)]
            struct D($crate::S);
        };
    }

    local!();
}

mod external {
    use crate::dollar_crate_external;

    dollar_crate_external::external!();
}

fn main() {}
