Skip to content

Conversation

TaKO8Ki
Copy link
Member

@TaKO8Ki TaKO8Ki commented Jul 22, 2022

fixes #99416

@rustbot rustbot added the T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. label Jul 22, 2022
@rust-highfive
Copy link
Contributor

r? @compiler-errors

(rust-highfive has picked a reviewer for you, use r? to override)

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 22, 2022
@TaKO8Ki TaKO8Ki force-pushed the suggest-removing-tuple-struct-field branch from e01518c to 1f799ae Compare July 22, 2022 06:54
Comment on lines 289 to 293
if let ty::Adt(expected_adt, substs) = expected.kind() {
if let hir::ExprKind::Field(base, ident) = expr.kind
&& let Some(typeck_results) = self.in_progress_typeck_results
{
let base_ty = typeck_results.borrow().expr_ty(base);
Copy link
Member

@compiler-errors compiler-errors Jul 22, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FnCtxt has self.typeck_results which is not Option

Suggested change
if let ty::Adt(expected_adt, substs) = expected.kind() {
if let hir::ExprKind::Field(base, ident) = expr.kind
&& let Some(typeck_results) = self.in_progress_typeck_results
{
let base_ty = typeck_results.borrow().expr_ty(base);
if let ty::Adt(expected_adt, substs) = expected.kind() {
if let hir::ExprKind::Field(base, ident) = expr.kind
{
let base_ty = self.typeck_results.borrow().expr_ty(base);

&& let Some(typeck_results) = self.in_progress_typeck_results
{
let base_ty = typeck_results.borrow().expr_ty(base);
if base_ty == expected {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we use something like can_eq instead?

Suggested change
if base_ty == expected {
if self.can_eq(self.param_env, base_ty, expected).is_ok() {

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alternatively we could use same_type_modulo_regions, but since we have access to can_eq, it's a bit more accurate.

let base_ty = typeck_results.borrow().expr_ty(base);
if base_ty == expected {
err.span_suggestion_verbose(
expr.span.with_lo(base.span.hi()),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does this do if base comes from a macro expansion? For example:

// run-rustfix

pub struct MyWrapper(u32);

macro_rules! my_wrapper {
  ($expr:expr) => { MyWrapper($expr) }
}

fn main() {
    some_fn(my_wrapper!(123).0); //~ ERROR mismatched types
}

fn some_fn(wrapped: MyWrapper) {
    drop(wrapped);
}

I think base.span should probably be adjusted to account for macros. Try matching if let Some(base_span) = base.span.find_ancestor_inside(expr.span) first to make sure that expr span and base span overlap.

@compiler-errors compiler-errors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 22, 2022
@TaKO8Ki TaKO8Ki force-pushed the suggest-removing-tuple-struct-field branch from 1f799ae to f85f375 Compare July 25, 2022 08:01
@TaKO8Ki
Copy link
Member Author

TaKO8Ki commented Jul 25, 2022

@rustbot ready

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jul 25, 2022
@TaKO8Ki TaKO8Ki requested a review from compiler-errors July 25, 2022 10:10
@compiler-errors
Copy link
Member

Wonderful. Thanks for addressing comments.

@bors r+

@bors
Copy link
Collaborator

bors commented Jul 26, 2022

📌 Commit f85f375 has been approved by compiler-errors

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jul 26, 2022
bors added a commit to rust-lang-ci/rust that referenced this pull request Jul 26, 2022
Rollup of 7 pull requests

Successful merges:

 - rust-lang#98211 (Implement `fs::get_path` for FreeBSD.)
 - rust-lang#99353 (Slightly improve mismatched GAT where clause error)
 - rust-lang#99593 (Suggest removing the tuple struct field for the unwrapped value)
 - rust-lang#99615 (Remove some explicit `self.infcx` for `FnCtxt`, which already derefs into `InferCtxt`)
 - rust-lang#99711 (Remove reachable coverage without counters)
 - rust-lang#99718 (Avoid `&str`/`Symbol` to `String` conversions)
 - rust-lang#99720 (Sync rustc_codegen_cranelift)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit d89e99a into rust-lang:master Jul 26, 2022
@rustbot rustbot added this to the 1.64.0 milestone Jul 26, 2022
@TaKO8Ki TaKO8Ki deleted the suggest-removing-tuple-struct-field branch July 26, 2022 07:59
bjorn3 pushed a commit to bjorn3/rust that referenced this pull request Aug 24, 2022
Rollup of 7 pull requests

Successful merges:

 - rust-lang#98211 (Implement `fs::get_path` for FreeBSD.)
 - rust-lang#99353 (Slightly improve mismatched GAT where clause error)
 - rust-lang#99593 (Suggest removing the tuple struct field for the unwrapped value)
 - rust-lang#99615 (Remove some explicit `self.infcx` for `FnCtxt`, which already derefs into `InferCtxt`)
 - rust-lang#99711 (Remove reachable coverage without counters)
 - rust-lang#99718 (Avoid `&str`/`Symbol` to `String` conversions)
 - rust-lang#99720 (Sync rustc_codegen_cranelift)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Suggest to directly use a value instead of wrapping the unwrapped value
5 participants