Skip to content

Confusing hint on missing parentheses after collect<> #67680

Closed
@CohenArthur

Description

@CohenArthur
Contributor

The following code produces a quite unhelpful error from the compiler:

use std::io;                                               
use std::fs;
use std::path::{Path, PathBuf};

pub fn build<P: AsRef<Path>>(path: P) -> Result<Vec<PathBuf>, io::Error> {
    let entries = fs::read_dir(path)?;

    let filevec = entries.map(| res | res.map(| e | e.path()))
                         .collect::<Result<Vec<_>, io::Error>>?;

    Ok(filevec)
}

The error in question being .collect::<Result<Vec<_>, io::Error>>?; instead of .collect::<Result<Vec<_>, io::Error>>()?;.

Compiler output:

   Compiling playground v0.0.1 (/playground)
error: field expressions may not have generic arguments
 --> src/lib.rs:9:36
  |
9 |                          .collect::<Result<Vec<_>, io::Error>>?;
  |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to previous error

error: could not compile `playground`.

To learn more, run the command again with --verbose.

It's quite a simple mistake, but I got confused by the error message and tried different type-related fixes which didn't work (obviously).

This might be related to #54521

Activity

added
A-diagnosticsArea: Messages for errors, warnings, and lints
C-enhancementCategory: An issue proposing an enhancement or a PR with one.
D-confusingDiagnostics: Confusing error or lint that should be reworked.
T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
on Dec 28, 2019
estebank

estebank commented on Jun 15, 2020

@estebank
Contributor

Current full output:

error: field expressions cannot have generic arguments
  --> src/lib.rs:11:36
   |
11 |                          .collect::<Result<Vec<_>, io::Error>>?;
   |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^

error[E0615]: attempted to take value of method `collect` on type `std::iter::Map<std::fs::ReadDir, [closure@src/lib.rs:10:31: 10:62]>`
  --> src/lib.rs:11:27
   |
11 |                          .collect::<Result<Vec<_>, io::Error>>?;
   |                           ^^^^^^^ method, not a field
   |
help: use parentheses to call the method
   |
11 |                          .collect::<Result<Vec<_>, io::Error>>()?;
   |                                                               ^^
added
P-lowLow priority
D-verboseDiagnostics: Too much output caused by a single piece of incorrect code.
and removed
D-confusingDiagnostics: Confusing error or lint that should be reworked.
on Jan 5, 2023
estebank

estebank commented on Jan 5, 2023

@estebank
Contributor

No change, only outstanding work is to emit only one of the two errors along with the existing suggestion on E0615.

oriongonza

oriongonza commented on Dec 4, 2024

@oriongonza
Contributor

@rustbot claim

added a commit that references this issue on Dec 12, 2024

Rollup merge of rust-lang#134154 - dev-ardi:field-expr-generics, r=co…

c5a1869
added a commit that references this issue on Dec 12, 2024

Rollup merge of rust-lang#134154 - dev-ardi:field-expr-generics, r=co…

1d78422
added a commit that references this issue on Dec 12, 2024
4008ac4
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 lintsC-enhancementCategory: An issue proposing an enhancement or a PR with one.D-verboseDiagnostics: Too much output caused by a single piece of incorrect code.P-lowLow priorityT-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

    @estebank@jonas-schievink@CohenArthur@oriongonza

    Issue actions

      Confusing hint on missing parentheses after collect<> · Issue #67680 · rust-lang/rust