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

Open
#630 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
38/100
Issue type
Documentation
Clarity
Mostly clear
Activity status
Stale
Tech stack
rust
Domain
documentation

Research direction

Start with the method-call expression section at expressions/method-call-expr.html and the visibility-and-privacy section, then compare their use of “visible” with the rustc-guide method-lookup.md discussion. Document the distinct visibility and trait-import rules precisely, including how preceding use declarations affect lookup, and ensure the reference links or defines both meanings.

Written by the indexing model from the issue text.

Description

A-method-call A-resolve A-visibility

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).

Dominant language
Rust
Stars
1.6k
Forks
607
Avg merge
1d 1h
Merged PRs (30d)
12

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from rust-lang/reference

All issues in rust-lang/reference

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.