Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split out statement attributes changes from #78306 #78326

Merged
merged 1 commit into from
Oct 25, 2020

Commits on Oct 24, 2020

  1. Fix inconsistencies in handling of inert attributes on statements

    When the 'early' and 'late' visitors visit an attribute target, they
    activate any lint attributes (e.g. `#[allow]`) that apply to it.
    This can affect warnings emitted on sibiling attributes. For example,
    the following code does not produce an `unused_attributes` for
    `#[inline]`, since the sibiling `#[allow(unused_attributes)]` suppressed
    the warning.
    
    ```rust
    trait Foo {
        #[allow(unused_attributes)] #[inline] fn first();
        #[inline] #[allow(unused_attributes)] fn second();
    }
    ```
    
    However, we do not do this for statements - instead, the lint attributes
    only become active when we visit the struct nested inside `StmtKind`
    (e.g. `Item`).
    
    Currently, this is difficult to observe due to another issue - the
    `HasAttrs` impl for `StmtKind` ignores attributes for `StmtKind::Item`.
    As a result, the `unused_doc_comments` lint will never see attributes on
    item statements.
    
    This commit makes two interrelated fixes to the handling of inert
    (non-proc-macro) attributes on statements:
    
    * The `HasAttr` impl for `StmtKind` now returns attributes for
      `StmtKind::Item`, treating it just like every other `StmtKind`
      variant. The only place relying on the old behavior was macro
      which has been updated to explicitly ignore attributes on item
      statements. This allows the `unused_doc_comments` lint to fire for
      item statements.
    * The `early` and `late` lint visitors now activate lint attributes when
      invoking the callback for `Stmt`. This ensures that a lint
      attribute (e.g. `#[allow(unused_doc_comments)]`) can be applied to
      sibiling attributes on an item statement.
    
    For now, the `unused_doc_comments` lint is explicitly disabled on item
    statements, which preserves the current behavior. The exact locatiosn
    where this lint should fire are being discussed in PR rust-lang#78306
    Aaron1011 committed Oct 24, 2020
    Configuration menu
    Copy the full SHA
    ac384ac View commit details
    Browse the repository at this point in the history