rust-analyzer icon indicating copy to clipboard operation
rust-analyzer copied to clipboard

#17497 - Invalid RA diagnostic error: expected 2 arguments, found 1

Open mckenfra opened this issue 7 months ago • 0 comments

Fix for #17497

The issue occurs because in some configurations of traits where one of them has Deref as a supertrait, RA's type inference algorithm fails to resolve the Deref::Target type, and instead uses a TyKind::BoundVar (i.e. an unknown type). This "autoderefed" type then incorrectly acts as if it implements all traits in scope.

The fix is to re-apply the same sanity-check that is done in iterate_method_candidates_with_autoref(), that is: don't try to resolve methods on unknown types. This same sanity-check is now done on each autoderefed type for which trait methods are about to be checked. If the autoderefed type is unknown, then the iterating of the trait methods for that type is skipped.

However, if the eventual receiver of the candidate method is also unknown then we have incomplete information, so no extra sanity-check is done and the trait method traversal is allowed to proceed.

Includes a unit test that only passes after applying the fixes in this commit.

mckenfra avatar Jun 29 '24 10:06 mckenfra