Skip to content

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

Closed
@gurry

Description

@gurry
Contributor

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

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
added
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Sep 2, 2023
gurry

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.

compiler-errors

compiler-errors commented on Sep 2, 2023

@compiler-errors
Member

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.

gurry

gurry commented on Sep 2, 2023

@gurry
ContributorAuthor

@rustbot claim

gurry

gurry commented on Sep 2, 2023

@gurry
ContributorAuthor

@rustbot label -needs-triage

removed
needs-triageThis issue may need triage. Remove it if it has been sufficiently triaged.
on Sep 2, 2023
added a commit that references this issue on Sep 3, 2023

Rollup merge of rust-lang#115478 - gurry:115462-exprfield-no-warn, r=…

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

    Participants

    @gurry@compiler-errors@rustbot

    Issue actions

      `PatField` and `ExprField` produce no warning for `#[doc(...)]` attribute · Issue #115462 · rust-lang/rust