Commit Graph

107562 Commits

Author SHA1 Message Date
bors
87e494c4cd Auto merge of #67330 - golddranks:split_inclusive, r=kodraus
Implement split_inclusive for slice and str

# Overview
* Implement `split_inclusive` for `slice` and `str` and `split_inclusive_mut` for `slice`
* `split_inclusive` is a substring/subslice splitting iterator that includes the matched part in the iterated substrings as a terminator.
* EDIT: The behaviour has now changed, as per @KodrAus 's input, to the same semantics with the `split_terminator` function. I updated the examples below.
* Two examples below:
```Rust
    let data = "\nMäry häd ä little lämb\nLittle lämb\n";
    let split: Vec<&str> = data.split_inclusive('\n').collect();
    assert_eq!(split, ["\n", "Märy häd ä little lämb\n", "Little lämb\n"]);
```

```Rust
    let uppercase_separated = "SheePSharKTurtlECaT";
    let mut first_char = true;
    let split: Vec<&str> = uppercase_separated.split_inclusive(|c: char| {
        let split = !first_char && c.is_uppercase();
        first_char = split;
        split
    }).collect();
    assert_eq!(split, ["SheeP", "SharK", "TurtlE", "CaT"]);
```

# Justification for the API
* I was surprised to find that stdlib currently only has splitting iterators that leave out the matched part. In my experience, wanting to leave a substring terminator as a part of the substring is a pretty common usecase.
* This API is strictly more expressive than the standard `split` API: it's easy to get the behaviour of `split` by mapping a subslicing operation that drops the terminator. On the other hand it's impossible to derive this behaviour from `split` without using hacky and brittle `unsafe` code. The normal way to achieve this functionality would be implementing the iterator yourself.
* Especially when dealing with mutable slices, the only way currently is to use `split_at_mut`. This API provides an ergonomic alternative that plays to the strengths of the iterating capabilities of Rust. (Using `split_at_mut` iteratively used to be a real pain before NLL, fortunately the situation is a bit better now.)

# Discussion items
* <s>Does it make sense to mimic `split_terminator` in that the final empty slice would be left off in case of the string/slice ending with a terminator? It might do, as this use case is naturally geared towards considering the matching part as a terminator instead of a separator.</s>
  * EDIT: The behaviour was changed to mimic `split_terminator`.
* Does it make sense to have `split_inclusive_mut` for `&mut str`?
2020-02-22 03:54:50 +00:00
Jane Lusby
b44b4ca602 rustfmt you cruel mistress 2020-02-21 16:46:14 -08:00
varkor
33143fd756 Be explicit about whether GenericArgCountMismatch arose from a fatal error 2020-02-22 00:28:49 +00:00
varkor
104131c9d4 Use Result instead of bool throughout 2020-02-22 00:28:49 +00:00
varkor
dff64eb4b6 Make return value of check_generic_arg_count semantically clearer 2020-02-22 00:28:49 +00:00
varkor
c9b7b1f73b Refactor create_substs_for_generic_args a little 2020-02-22 00:28:48 +00:00
varkor
039045c49b Move generic arg / param validation to create_substs_for_generic_args 2020-02-22 00:28:18 +00:00
varkor
750e673491 Report late-bound region lint as error in check_generic_arg_count 2020-02-22 00:27:45 +00:00
varkor
9939de24ac Correct passing of generic_args to create_substs_for_generic_args 2020-02-22 00:27:44 +00:00
varkor
d232acdb39 Report all errors in check_generic_arg_count 2020-02-22 00:27:44 +00:00
varkor
2a504878c3 Return whether check_generic_arg_count finds an error 2020-02-22 00:27:44 +00:00
bors
d735ede6eb Auto merge of #69302 - jonas-schievink:yield-needs-storage, r=Zoxc
Fix generator miscompilations

Fixes https://github.com/rust-lang/rust/issues/69039

r? @Zoxc
2020-02-22 00:10:57 +00:00
Jane Lusby
fa73b617c2 clean things up 2020-02-21 16:01:48 -08:00
Mazdak Farrokhzad
9f3dfd29a2 parse: allow type Foo: Ord syntactically. 2020-02-22 00:19:27 +01:00
LeSeulArtichaut
38a22b8130 Fix error message
Bless tests
2020-02-21 22:43:51 +01:00
Eric Huss
11530ded32 Update cargo 2020-02-21 13:17:19 -08:00
Jonas Schievink
6cc268b9ef Mark E0399.md as obsolete 2020-02-21 21:46:30 +01:00
Jonas Schievink
c60583163a Fix rebase fallout 2020-02-21 21:46:22 +01:00
bors
1d7e818747 Auto merge of #69242 - cjgillot:object_violations, r=Zoxc
Querify object_safety_violations.

Split from #69076

r? @Zoxc
2020-02-21 20:25:50 +00:00
Ralf Jung
1a0e2001bc fix miri and bootstrap interaction 2020-02-21 20:45:16 +01:00
Jonas Schievink
af2931bdfe Mark E0399 test as obsolete 2020-02-21 19:43:03 +01:00
Jonas Schievink
4d4da926f2 Fix rebase damage 2020-02-21 19:42:28 +01:00
Jonas Schievink
9930e1ff0a Fix tests that fail with --emit metadata 2020-02-21 19:42:28 +01:00
Jonas Schievink
232c1f331c Format code 2020-02-21 19:42:28 +01:00
Jonas Schievink
ec50190399 Bless test output 2020-02-21 19:41:22 +01:00
Jonas Schievink
a01846f0c3 appease tidy 2020-02-21 19:41:22 +01:00
Jonas Schievink
708f053807 Add test for #65774
Closes #65774
2020-02-21 19:41:22 +01:00
Jonas Schievink
f94eaeaf73 Fix rebase damage 2020-02-21 19:41:22 +01:00
Jonas Schievink
24ec364713 Test mixed default and non-default 2020-02-21 19:41:22 +01:00
Jonas Schievink
c8da9ee50a Improve specialization test 2020-02-21 19:41:22 +01:00
Jonas Schievink
fbcd136b65 Improve the cycle tests 2020-02-21 19:41:22 +01:00
Jonas Schievink
f40879408c Improve defaults-in-other-trait-items-pass 2020-02-21 19:41:22 +01:00
Jonas Schievink
3f03d95bb0 Improve associated-types-overridden-default.rs
Check that the resulting assoc. types are as expected
2020-02-21 19:41:22 +01:00
Jonas Schievink
c964520740 Update tests after compiletest changes 2020-02-21 19:41:22 +01:00
Jonas Schievink
fd28614cb7 Add regression test for #26681 2020-02-21 19:41:22 +01:00
Jonas Schievink
1f61f36849 Add comment about the shallow subst rule 2020-02-21 19:41:22 +01:00
Jonas Schievink
485111c48e Add regression tests for issues 2020-02-21 19:41:22 +01:00
Jonas Schievink
fead45815c Fix tests after rebase 2020-02-21 19:41:22 +01:00
Jonas Schievink
07ad64f70f Add tests for #62211 2020-02-21 19:41:22 +01:00
Jonas Schievink
ff5d11e043 Add comments and tests explaining the shallow substitution rule 2020-02-21 19:41:22 +01:00
Jonas Schievink
5e9317a023 Put the check into its own function 2020-02-21 19:41:22 +01:00
Jonas Schievink
f403882927 Add a Self: Sized bound 2020-02-21 19:41:22 +01:00
Jonas Schievink
c73ee9861b Check suitability of the provided default 2020-02-21 19:41:21 +01:00
Jonas Schievink
d3be26d6a8 Improve test 2020-02-21 19:41:21 +01:00
Jonas Schievink
1e3c020063 Test interactions with specialization 2020-02-21 19:41:21 +01:00
Jonas Schievink
de447eb9f2 Add tests for assoc. const defaults 2020-02-21 19:41:21 +01:00
Jonas Schievink
37686edb85 Add comments and assertions to tests 2020-02-21 19:41:21 +01:00
Jonas Schievink
a549bbdc32 Add regression test for #54182 2020-02-21 19:41:21 +01:00
Jonas Schievink
a323ff2c86 Implement RFC 2532 – Associated Type Defaults 2020-02-21 19:41:21 +01:00
Mazdak Farrokhzad
14442e0ebb print vis & defaultness for nested items 2020-02-21 18:30:56 +01:00