Skip to content

Rust reference is missing a description of the visibility rules used for method lookup #630

Open
@zygoloid

Description

@zygoloid

In https://doc.rust-lang.org/reference/expressions/method-call-expr.html, we find:

Then, for each candidate type T, search for a visible method with a receiver of that type in the following places:

  • T's inherent methods (methods implemented directly on T).
  • Any of the methods provided by a visible trait implemented by T. If T is a type parameter, methods provided by trait bounds on T are looked up first. Then all remaining methods in scope are looked up.

Both mentions of "visible" hyperlink to https://doc.rust-lang.org/reference/visibility-and-privacy.html, which does not define what "visible" actually means.

Presumably the set of visible traits in some location has some dependence on preceding use declarations, but this doesn't appear to be documented. And according to https://github.com/rust-lang/rustc-guide/blob/master/src/method-lookup.md, the two uses of "visible" above actually mean two different things -- it looks like the first use of "visible" above means "can be accessed" as defined in visibility-and-privacy, whereas the second also depends on whether the trait has been imported (although it's unclear what precisely "imported" means in this context).

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-resolveName resolution, paths, namespaces, preludes, etc.A-visibilityArea: visibility and privacy

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions