Skip to content

Conversation

jyn514
Copy link
Member

@jyn514 jyn514 commented Jul 6, 2020

Previously, if there were a module in scope with the same name as the
primitive, that would take precedence. Coupled with
#58699, this made it impossible
to link to the primitive when that module was in scope.

This approach could be extended so that struct@foo would no longer resolve
to any type, etc. However, it could not be used for glob imports:

pub mod foo {
  pub struct Bar;
}

pub enum Bar {}
use foo::*;

// This is expected to link to `inner::Bar`, but instead it will link to the enum.
/// Link to [struct@Bar]
pub struct MyDocs;

The reason for this is that this change does not affect the resolution
algorithm of rustc_resolve at all. The only reason we could special-case
primitives is because we have a list of all possible primitives ahead of time.

Closes #74063

r? @Manishearth

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jul 6, 2020
@Manishearth
Copy link
Member

@bors r+

looks great

However, it could not be used for glob imports

Note that smart resolution doesn't work for glob imports anyway, so shrug

@bors
Copy link
Collaborator

bors commented Jul 6, 2020

📌 Commit 8bc6b66c757839179843d13a02b0124eca2b1223 has been approved by Manishearth

@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 6, 2020
@jyn514
Copy link
Member Author

jyn514 commented Jul 6, 2020

Yeah, that one seemed like a bit of an edge case. It would be nice to support but I don't expect anyone to use it.

Previously, if there were a module in scope with the same name as the
primitive, that would take precedence. Coupled with
rust-lang#58699, this made it impossible
to link to the primitive when that module was in scope.

This approach could be extended so that `struct@foo` would no longer resolve
to any type, etc. However, it could not be used for glob imports:

```rust
pub mod foo {
  pub struct Bar;
}

pub enum Bar {}
use foo::*;

// This is expected to link to `inner::Bar`, but instead it will link to the enum.
/// Link to [struct@Bar]
pub struct MyDocs;
```

The reason for this is that this change does not affect the resolution
algorithm of rustc_resolve at all. The only reason we could special-case
primitives is because we have a list of all possible primitives ahead of time.
@Manishearth
Copy link
Member

2020-07-06T01:38:00.3154532Z �[0m�[0m�[1m�[32m    Finished�[0m release [optimized] target(s) in 14.10s
2020-07-06T01:38:00.3252211Z tidy check
2020-07-06T01:38:00.8760646Z tidy error: /checkout/src/test/rustdoc/intra-link-prim-precedence.rs:6: line longer than 100 chars
2020-07-06T01:38:00.8761204Z tidy error: /checkout/src/test/rustdoc/intra-link-prim-precedence.rs:10: line longer than 100 chars
2020-07-06T01:38:04.7178039Z Checking which error codes lack tests...
2020-07-06T01:38:04.9273640Z some tidy checks failed
2020-07-06T01:38:04.9273827Z Found 507 error codes
2020-07-06T01:38:04.9274036Z Found 0 error codes with no tests
2020-07-06T01:38:04.9274168Z Done!
2020-07-06T01:38:04.9279025Z 

@Manishearth
Copy link
Member

@bors r+

@bors
Copy link
Collaborator

bors commented Jul 6, 2020

📌 Commit e46c187 has been approved by Manishearth

@jyn514
Copy link
Member Author

jyn514 commented Jul 6, 2020

Tidy is a harsh taskmaster 😠

Manishearth added a commit to Manishearth/rust that referenced this pull request Jul 6, 2020
Always resolve type@primitive as a primitive, not a module

Previously, if there were a module in scope with the same name as the
primitive, that would take precedence. Coupled with
rust-lang#58699, this made it impossible
to link to the primitive when that module was in scope.

This approach could be extended so that `struct@foo` would no longer resolve
to any type, etc. However, it could not be used for glob imports:

```rust
pub mod foo {
  pub struct Bar;
}

pub enum Bar {}
use foo::*;

// This is expected to link to `inner::Bar`, but instead it will link to the enum.
/// Link to [struct@Bar]
pub struct MyDocs;
```

The reason for this is that this change does not affect the resolution
algorithm of rustc_resolve at all. The only reason we could special-case
primitives is because we have a list of all possible primitives ahead of time.

Closes rust-lang#74063

r? @Manishearth
Manishearth added a commit to Manishearth/rust that referenced this pull request Jul 6, 2020
Always resolve type@primitive as a primitive, not a module

Previously, if there were a module in scope with the same name as the
primitive, that would take precedence. Coupled with
rust-lang#58699, this made it impossible
to link to the primitive when that module was in scope.

This approach could be extended so that `struct@foo` would no longer resolve
to any type, etc. However, it could not be used for glob imports:

```rust
pub mod foo {
  pub struct Bar;
}

pub enum Bar {}
use foo::*;

// This is expected to link to `inner::Bar`, but instead it will link to the enum.
/// Link to [struct@Bar]
pub struct MyDocs;
```

The reason for this is that this change does not affect the resolution
algorithm of rustc_resolve at all. The only reason we could special-case
primitives is because we have a list of all possible primitives ahead of time.

Closes rust-lang#74063

r? @Manishearth
Manishearth added a commit to Manishearth/rust that referenced this pull request Jul 6, 2020
Always resolve type@primitive as a primitive, not a module

Previously, if there were a module in scope with the same name as the
primitive, that would take precedence. Coupled with
rust-lang#58699, this made it impossible
to link to the primitive when that module was in scope.

This approach could be extended so that `struct@foo` would no longer resolve
to any type, etc. However, it could not be used for glob imports:

```rust
pub mod foo {
  pub struct Bar;
}

pub enum Bar {}
use foo::*;

// This is expected to link to `inner::Bar`, but instead it will link to the enum.
/// Link to [struct@Bar]
pub struct MyDocs;
```

The reason for this is that this change does not affect the resolution
algorithm of rustc_resolve at all. The only reason we could special-case
primitives is because we have a list of all possible primitives ahead of time.

Closes rust-lang#74063

r? @Manishearth
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Jul 6, 2020
Always resolve type@primitive as a primitive, not a module

Previously, if there were a module in scope with the same name as the
primitive, that would take precedence. Coupled with
rust-lang#58699, this made it impossible
to link to the primitive when that module was in scope.

This approach could be extended so that `struct@foo` would no longer resolve
to any type, etc. However, it could not be used for glob imports:

```rust
pub mod foo {
  pub struct Bar;
}

pub enum Bar {}
use foo::*;

// This is expected to link to `inner::Bar`, but instead it will link to the enum.
/// Link to [struct@Bar]
pub struct MyDocs;
```

The reason for this is that this change does not affect the resolution
algorithm of rustc_resolve at all. The only reason we could special-case
primitives is because we have a list of all possible primitives ahead of time.

Closes rust-lang#74063

r? @Manishearth
bors added a commit to rust-lang-ci/rust that referenced this pull request Jul 7, 2020
…arth

Rollup of 14 pull requests

Successful merges:

 - rust-lang#70563 ([rustdoc] Page hash handling)
 - rust-lang#73856 (Edit librustc_lexer top-level docs)
 - rust-lang#73870 (typeck: adding type information to projection)
 - rust-lang#73953 (Audit hidden/short code suggestions)
 - rust-lang#73962 (libstd/net/tcp.rs: #![deny(unsafe_op_in_unsafe_fn)])
 - rust-lang#73969 (mir: mark mir construction temporaries as internal)
 - rust-lang#73974 (Move A|Rc::as_ptr from feature(weak_into_raw) to feature(rc_as_ptr))
 - rust-lang#74067 (rustdoc: Restore underline text decoration on hover for FQN in header)
 - rust-lang#74074 (Fix the return type of Windows' `OpenOptionsExt::security_qos_flags`.)
 - rust-lang#74078 (Always resolve type@primitive as a primitive, not a module)
 - rust-lang#74089 (Add rust-analyzer to the build manifest)
 - rust-lang#74090 (Remove unused RUSTC_DEBUG_ASSERTIONS)
 - rust-lang#74102 (Fix const prop ICE)
 - rust-lang#74112 (Expand abbreviation in core::ffi description)

Failed merges:

r? @ghost
@bors bors merged commit ecc6f56 into rust-lang:master Jul 7, 2020
@jyn514 jyn514 deleted the lut branch July 7, 2020 12:25
flip1995 pushed a commit to flip1995/rust that referenced this pull request Jul 14, 2020
…arth

Rollup of 14 pull requests

Successful merges:

 - rust-lang#70563 ([rustdoc] Page hash handling)
 - rust-lang#73856 (Edit librustc_lexer top-level docs)
 - rust-lang#73870 (typeck: adding type information to projection)
 - rust-lang#73953 (Audit hidden/short code suggestions)
 - rust-lang#73962 (libstd/net/tcp.rs: #![deny(unsafe_op_in_unsafe_fn)])
 - rust-lang#73969 (mir: mark mir construction temporaries as internal)
 - rust-lang#73974 (Move A|Rc::as_ptr from feature(weak_into_raw) to feature(rc_as_ptr))
 - rust-lang#74067 (rustdoc: Restore underline text decoration on hover for FQN in header)
 - rust-lang#74074 (Fix the return type of Windows' `OpenOptionsExt::security_qos_flags`.)
 - rust-lang#74078 (Always resolve type@primitive as a primitive, not a module)
 - rust-lang#74089 (Add rust-analyzer to the build manifest)
 - rust-lang#74090 (Remove unused RUSTC_DEBUG_ASSERTIONS)
 - rust-lang#74102 (Fix const prop ICE)
 - rust-lang#74112 (Expand abbreviation in core::ffi description)

Failed merges:

r? @ghost
@cuviper cuviper added this to the 1.46 milestone May 2, 2024
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.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

intra-doc: [type@char] point to module page instead of primitive page
6 participants