Skip to content

Document behavior of #[cfg] in macros #836

Open
@RalfJung

Description

@RalfJung
Member

The macro reference should explain how #[cfg] and #[cfg_attr(...)] behave inside macros.

Does this macro check the allow_clippy flag of the crate the macro is defined in, or of the crate the macro is used in?

macro_rules! field_check {
    ($type:path, $field:tt) => {
        // Make sure the field actually exists. This line ensures that a
        // compile-time error is generated if $field is accessed through a
        // Deref impl.
        #[cfg_attr(allow_clippy, allow(clippy::unneeded_field_pattern))]
        let $type { $field: _, .. };
    };
}

Activity

ehuss

ehuss commented on Jun 22, 2020

@ehuss
Contributor

I assume you are interested in more than just allow/deny diagnostic behavior. I mention that because I believe (some?) diagnostics have special behavior in external macros where they are disabled. The reference has historically shied away from documenting diagnostics, so that particular behavior is a bit of a gray area, but probably should be mentioned.

There are a few other behaviors of cfg/cfg_attr that I'd like to see documented (#565, #103). In particular, I think the order of transformations ("phases of translation" in C++ parlance) would be useful to specify to make it clear when cfg processing is done in relation to other phases.

RalfJung

RalfJung commented on Jun 22, 2020

@RalfJung
MemberAuthor

I assume you are interested in more than just allow/deny diagnostic behavior.

Yes, I wonder about cfg in general (including cfg!). I didn't even know diagnostics have some special magic hacks.^^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @ehuss@RalfJung

        Issue actions

          Document behavior of #[cfg] in macros · Issue #836 · rust-lang/reference