Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always resolve type@primitive as a primitive, not a module #74078

Merged
merged 1 commit into from
Jul 7, 2020

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
Contributor

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
Contributor

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