Skip to content

PatField and ExprField produce no warning for #[doc(...)] attribute #115462

Closed

Description

@gurry

Code

struct X {
    foo: i32,
}

#[allow(unused_variables)] // Not necessary for reproducing. Just to suppress an unrelated warning
fn main() {
    let X {
        #[doc(alias = "PatFieldAlias")]
        foo
    } = X {
        foo: 123
    };

    let _ = X {
        #[doc(alias = "ExprFieldAlias")]
        foo: 123,
    };
}

Current output

No output (compilation succeeds without warning)

Desired output

warning: unused doc comment
   |
14 |       let X {
15 |           #[doc(alias = "PatFieldAlias")]
   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
16 | /         foo
17 | |     } = X {
18 | |         foo: 123
19 | |     };
   | |______- rustdoc does not generate documentation for pattern fields
   |
   = help: use `//` for a plain comment
   = note: `#[warn(unused_doc_comments)]` on by default

warning: unused doc comment
   |
22 |       let _ = X {
23 |           #[doc(alias = "ExprFieldAlias")]
   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24 | /         foo: 123,
25 | |     };
   | |______- rustdoc does not generate documentation for expression fields
   |
   = help: use `//` for a plain comment
   = note: `#[warn(unused_doc_comments)]` on by default

Rationale and extra context

The same warning is produced at other places like statements, expressions, functions etc. For completeness and consistency it should be produced for pattern and expression fields too.

Other cases

No response

Anything else?

rustc 1.74.0-nightly (35e4163 2023-09-01)
binary: rustc
commit-hash: 35e4163
commit-date: 2023-09-01
host: x86_64-pc-windows-msvc
release: 1.74.0-nightly
LLVM version: 17.0.0

rustc version older than 1.74.0 may ICE on this code. The ICE was fixed in 1.74.0

Activity

  1. added
    A-diagnosticsArea: Messages for errors, warnings, and lints
    T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
    on Sep 2, 2023
  2. added
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Sep 2, 2023
  3. gurry commented on Sep 2, 2023

    @gurry
    ContributorAuthor

    The reason these warnings are not produced is because the lint infrastructure currently exposes no hooks for PatField and ExprField, i.e. there are no check_pat_field and check_expr_field methods on EarlyLintPass (or LateLintPass for that matter).

    To fix the issue, these methods may have to be added here:

    macro_rules! early_lint_methods {

    and then invoked from here:
    fn visit_pat_field(&mut self, field: &'a ast::PatField) {
    self.with_lint_attrs(field.id, &field.attrs, |cx| {
    ast_visit::walk_pat_field(cx, field);
    });
    }

    and here:
    fn visit_expr_field(&mut self, f: &'a ast::ExprField) {
    self.with_lint_attrs(f.id, &f.attrs, |cx| {
    ast_visit::walk_expr_field(cx, f);
    })
    }

    Alternatively, we can emit the warning from the already existing check_pat and check_expr methods of EarlyLintPass and not bother with the above changes at all.

  4. compiler-errors commented on Sep 2, 2023

    @compiler-errors
    Contributor

    Alternatively, we can emit the warning from the already existing check_pat and check_expr methods of EarlyLintPass and not bother with the above changes at all.

    Yeah, I would expect this is the best way of doing it.

  5. gurry commented on Sep 2, 2023

    @gurry
    ContributorAuthor

    @rustbot claim

  6. gurry commented on Sep 2, 2023

    @gurry
    ContributorAuthor

    @rustbot label -needs-triage

  7. removed
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Sep 2, 2023
  8. added a commit that references this issue on Sep 3, 2023
    3db7fc1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

A-diagnosticsArea: Messages for errors, warnings, and lintsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions