Skip to content

Implement slice_strip feature #73414

New issue

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

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

Already on GitHub? # to your account

Merged
merged 1 commit into from
Jul 2, 2020
Merged

Implement slice_strip feature #73414

merged 1 commit into from
Jul 2, 2020

Conversation

tesuji
Copy link
Contributor

@tesuji tesuji commented Jun 16, 2020

Tracking issue: #73413

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jun 16, 2020
@Mark-Simulacrum
Copy link
Member

Does making the impls here heterogeneous (i.e. impl<T> [T] { fn strip_prefix<U>(&self, prefix: &[U]); } hurt inference sufficiently that we don't want to do that?

@jonas-schievink
Copy link
Contributor

Unsure why I'm assigned, I'm not on the libs team. r? @Mark-Simulacrum

@tesuji
Copy link
Contributor Author

tesuji commented Jun 16, 2020

hurt inference sufficiently

I don't understand the question.
Why would we want this?

impl<T> [T] { 
    fn strip_prefix<U>(&self, prefix: &[U]); 
}

@tesuji
Copy link
Contributor Author

tesuji commented Jun 16, 2020

Also, the strip_* methods somewhat copy the signature of slice::starts_with.

Does starts_with also cause problems?

pub fn starts_with(&self, needle: &[T]) -> bool

@tesuji tesuji changed the title Implement slice_strip feature Implement slice_strip feature Jun 16, 2020
@tesuji
Copy link
Contributor Author

tesuji commented Jun 17, 2020

r? @SimonSapin

@tesuji
Copy link
Contributor Author

tesuji commented Jun 25, 2020

r? @dtolnay

@rust-highfive rust-highfive assigned dtolnay and unassigned SimonSapin Jun 25, 2020
@dtolnay dtolnay added the T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. label Jun 25, 2020
Copy link
Member

@dtolnay dtolnay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I am on board with this. It matches the method names on str and it matches the starts/ends_with signatures on slice.

@dtolnay
Copy link
Member

dtolnay commented Jun 25, 2020

@bors r+

@bors
Copy link
Collaborator

bors commented Jun 25, 2020

📌 Commit 560a996 has been approved by dtolnay

@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 Jun 25, 2020
Dylan-DPC-zz pushed a commit to Dylan-DPC-zz/rust that referenced this pull request Jun 25, 2020
Implement `slice_strip` feature

Tracking issue: rust-lang#73413
Manishearth added a commit to Manishearth/rust that referenced this pull request Jun 26, 2020
Implement `slice_strip` feature

Tracking issue: rust-lang#73413
Manishearth added a commit to Manishearth/rust that referenced this pull request Jun 26, 2020
Implement `slice_strip` feature

Tracking issue: rust-lang#73413
@Manishearth
Copy link
Member

test time.rs - time::Duration::zero (line 145) ... ok
test unit.rs - unit::() (line 8) ... ok

failures:

---- slice/mod.rs - slice::[T]::strip_prefix (line 1468) stdout ----
error[E0308]: mismatched types
---- slice/mod.rs - slice::[T]::strip_suffix (line 1519) stdout ----
error[E0308]: mismatched types
 --> slice/mod.rs:1522:1
  |
6 | assert_eq!(v.strip_suffix(&[]), Some(v));
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected slice `[{integer}]`, found array `[{integer}; 3]`
  |
  = note: expected enum `std::option::Option<&[{integer}]>`
             found enum `std::option::Option<&[{integer}; 3]>`
  = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.
Couldn't compile the test.

failures:
    slice/mod.rs - slice::[T]::strip_prefix (line 1468)
    slice/mod.rs - slice::[T]::strip_prefix (line 1479)
    slice/mod.rs - slice::[T]::strip_suffix (line 1508)
    slice/mod.rs - slice::[T]::strip_suffix (line 1519)

test result: FAILED. 2600 passed; 4 failed; 28 ignored; 0 measured; 0 filtered out

#73733 (comment)

@bors r-

@bors bors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jun 26, 2020
Comment on lines 1478 to 1485
///
/// ```
/// #![feature(slice_strip)]
/// let v = &[10, 40, 30];
/// assert_eq!(v.strip_prefix(&[]), Some(v));
/// let v: &[u8] = &[];
/// assert_eq!(v.strip_prefix(&[]), Some(v));
/// ```
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this example needed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed it.

@tesuji tesuji force-pushed the slice_strip branch 2 times, most recently from 83f5819 to 6068504 Compare June 26, 2020 03:51
Comment on lines 1464 to 1465
/// This method returns the original slice if `prefix` is an empty slice
/// or returns [`None`] if slice does not start with `prefix`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the wording of this was clearer in a previous revision. Slice not starting with prefix is a scenario that is important to specify; this says what the meaning of Option in the return type is. Empty prefix is a small clarification (not even an edge case, since the behavior falls out from the rest of the documentation). I think the emphasis in this paragraph is backward and not conducive to recognizing the part that is more important.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I repharsed it. Could you take a look?

@tesuji tesuji requested a review from dtolnay July 1, 2020 12:39
@dtolnay
Copy link
Member

dtolnay commented Jul 2, 2020

@bors r+

@bors
Copy link
Collaborator

bors commented Jul 2, 2020

📌 Commit cd9d833 has been approved by dtolnay

@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-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jul 2, 2020
bors added a commit to rust-lang-ci/rust that referenced this pull request Jul 2, 2020
…arth

Rollup of 10 pull requests

Successful merges:

 - rust-lang#73414 (Implement `slice_strip` feature)
 - rust-lang#73564 (linker: Create GNU_EH_FRAME header by default when producing ELFs)
 - rust-lang#73622 (Deny unsafe ops in unsafe fns in libcore)
 - rust-lang#73684 (add spans to injected coverage counters, extract with CoverageData query)
 - rust-lang#73812 (ast_pretty: Pass some token streams and trees by reference)
 - rust-lang#73853 (Add newline to rustc MultiSpan docs)
 - rust-lang#73883 (Compile rustdoc less often.)
 - rust-lang#73885 (Fix wasm32 being broken due to a NodeJS version bump)
 - rust-lang#73903 (Changes required for rustc/cargo to build for iOS targets)
 - rust-lang#73938 (Optimise fast path of checked_ops with `unlikely`)

Failed merges:

r? @ghost
@bors bors merged commit 63d392e into rust-lang:master Jul 2, 2020
@tesuji tesuji deleted the slice_strip branch July 2, 2020 16:38
@cuviper cuviper added this to the 1.46 milestone May 2, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants