Skip to content

NOT token (!) inside a macro call inside macro_rules! erroneously de-indented (non-idempotency) #5644

Open
@jinohkang-theori

Description

@jinohkang-theori

Minimal reproducer:

mod ok {
    mod ok {
        const _: &'static str = stringify!(Foo: !Bar);
    }
}

macro_rules! ok_2 {
    () => {
        const _: i32 = !1;
    };
}
ok_2!();

macro_rules! fail_dedented {
    () => {
        const _: &'static str = stringify!(Foo: !Bar);
    };
}
fail_dedented!();

macro_rules! fail_dedented_nonidempotent {
    () => {
        const _: () = assert!(stringify!(Foo: !Bar).len() > 0, concat!(stringify!(Foo: !Bar), "Lorem ipsum dolor sit amet, consectetur adipiscing elit"));
    };
}
fail_dedented_nonidempotent!();

macro_rules! fail_dedented_nonidempotent_2 {
    () => {
        const _: () = assert!(stringify!(Foo: !Bar).len() > 0, concat!(stringify!(Foo: !Bar), "Lorem ipsum dolor sit amet, consectetur adipiscing elit"));
    };
}

fail_dedented_nonidempotent_2!();

formats to

mod ok {
    mod ok {
        const _: &'static str = stringify!(Foo: !Bar);
    }
}

macro_rules! ok_2 {
    () => {
        const _: i32 = !1;
    };
}
ok_2!();

macro_rules! fail_dedented {
    () => {
const _: &'static str = stringify!(Foo: !Bar);
    };
}
fail_dedented!();

macro_rules! fail_dedented_nonidempotent {
    () => {
const _: () = assert!(
            stringify!(Foo: !Bar).len() > 0,
            concat!(
                stringify!(Foo: !Bar),
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
            )
        );
    };
}
fail_dedented_nonidempotent!();

macro_rules! fail_dedented_nonidempotent_2 {
    () => {
const _: () = assert!(
            stringify!(Foo: !Bar).len() > 0,
            concat!(
                stringify!(Foo: !Bar),
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
            )
        );
    };
}

fail_dedented_nonidempotent_2!();

formats to

mod ok {
    mod ok {
        const _: &'static str = stringify!(Foo: !Bar);
    }
}

macro_rules! ok_2 {
    () => {
        const _: i32 = !1;
    };
}
ok_2!();

macro_rules! fail_dedented {
    () => {
const _: &'static str = stringify!(Foo: !Bar);
    };
}
fail_dedented!();

macro_rules! fail_dedented_nonidempotent {
    () => {
        const _: () = assert!(
    stringify!(Foo: !Bar).len() > 0,
            concat!(
        stringify!(Foo: !Bar),
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
            )
        );
    };
}
fail_dedented_nonidempotent!();

macro_rules! fail_dedented_nonidempotent_2 {
    () => {
        const _: () = assert!(
    stringify!(Foo: !Bar).len() > 0,
            concat!(
        stringify!(Foo: !Bar),
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
            )
        );
    };
}

fail_dedented_nonidempotent_2!();

Metadata

Metadata

Assignees

No one assigned

    Labels

    a-macrosbugPanic, non-idempotency, invalid code, etc.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions