Commit graph

2084 commits

Author SHA1 Message Date
Oliver Schneider
d732da813b
Use PathBuf instead of String where applicable 2017-12-14 11:22:08 +01:00
bors
7b637b778d Auto merge of #46187 - notriddle:patch-1, r=QuietMisdreavus
Rename C-like enum to Field-less enum

There is no need to reference the C programming language to explain this concept.
2017-12-07 07:16:44 +00:00
bors
f9b0897c5d Auto merge of #46381 - estebank:expected-span, r=nikomatsakis
Point to next token when it is in the expected line

r? @nikomatsakis
2017-12-02 20:06:42 +00:00
bors
ddaebe938b Auto merge of #45904 - sunjay:gat-parser, r=nikomatsakis
Generic Associated Types Parsing & Name Resolution

Hi!
This PR adds parsing for generic associated types! 🎉 🎉 🎉

Tracking Issue: #44265

## Notes For Reviewers
* [x] I still need to add the stdout and stderr files to my ui tests. It takes me a *long* time to compile the compiler locally, so I'm going to add this as soon as possible in the next day or so.
* [ ] My current ui tests aren't very good or very thorough. I'm reusing the `parse_generics` and `parse_where_clause` methods from elsewhere in the parser, so my changes work without being particularly complex. I'm not sure if I should duplicate all of the generics test cases for generic associated types. It might actually be appropriate to duplicate everything here, since we don't want to rely on an implementation detail in case it changes in the future. If you think so too, I'll adapt all of the generics test cases into the generic associated types test cases.
* [ ] There is still more work required to make the run-pass tests pass here. In particular, we need to make the following errors disappear:
```
error[E0110]: lifetime parameters are not allowed on this type
  --> ./src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs:23:41
   |
23 |     bar: <T as StreamingIterator>::Item<'static>,
   |                                         ^^^^^^^ lifetime parameter not allowed on this type
```
```
error[E0261]: use of undeclared lifetime name `'a`
  --> ./src/test/run-pass/rfc1598-generic-associated-types/iterable.rs:15:47
   |
15 |     type Iter<'a>: Iterator<Item = Self::Item<'a>>;
   |                                               ^^ undeclared lifetime
```
There is a FIXME comment in streaming_iterator. If you uncomment that line, you get the following:
```
error: expected one of `!`, `+`, `,`, `::`, or `>`, found `=`
  --> ./src/test/run-pass/rfc1598-generic-associated-types/streaming_iterator.rs:29:45
   |
29 | fn foo<T: for<'a> StreamingIterator<Item<'a>=&'a [i32]>>(iter: T) { /* ... */ }
   |                                             ^ expected one of `!`, `+`, `,`, `::`, or `>` here
```

r? @nikomatsakis
2017-12-02 00:15:19 +00:00
Sunjay Varma
38c2a73017 Testing and fixes 2017-12-01 01:26:29 -05:00
Sunjay Varma
223d091744 Parsing where clauses correctly and documenting the grammar being parsed 2017-12-01 01:26:29 -05:00
Sunjay Varma
6bd8ea1a6b Added run-pass tests for associated generic types 2017-12-01 01:24:53 -05:00
Sunjay Varma
19e25b61d1 Parsing generics in both trait items and impl items 2017-12-01 01:24:53 -05:00
bors
d1364a65c0 Auto merge of #45997 - estebank:pub-ident, r=nikomatsakis
Account for missing keyword in fn/struct definition

Fix #38911.
2017-12-01 06:06:06 +00:00
Pietro Albini
91ba8b42fc
Implement RFC 2128 (use_nested_groups)
This commit adds support for nested groups inside `use` declarations,
such as `use foo::{bar, sub::{baz::Foo, *}};`.
2017-11-30 13:10:26 +01:00
Esteban Küber
fe89740957 Point to next token when it is in the expected line 2017-11-29 13:28:47 -08:00
colinmarsh19
3e8883e2aa
Changed from note to span_suggestion_short 2017-11-25 18:34:20 -07:00
colinmarsh19
306f4da69a
Fixed Err by passing "err" 2017-11-25 08:47:05 -07:00
colinmarsh19
aabacf791a
Remove semicolon note
Added note that specifies a semicolon should be removed after a given struct
2017-11-25 08:38:30 -07:00
Esteban Küber
f103342b8f Consume trailing doc comments to avoid parse errors 2017-11-24 08:32:01 -08:00
Esteban Küber
0e93b75d27 Revert to correct recovery behavior 2017-11-24 07:34:33 -08:00
Esteban Küber
4e2d1b9466 Emit DocComment in bad location error but continue parsing struct fields 2017-11-24 07:34:32 -08:00
Esteban Küber
df357b20be Suggest macro call when not sure that it is fn definition 2017-11-24 07:34:32 -08:00
Esteban Küber
c82e9e8e1e Do not attemt to continue parsing after pub ident
Try to identify the following code in order to provide better
diagnostics, but return the error to bail out early during the parse.
2017-11-24 07:34:32 -08:00
Esteban Küber
7c0387e36a Do not rewind parser and ignore following blocks
When encountering `pub ident`, attempt to identify the code that comes
afterwards, wether it is a brace block (assume it is a struct), a paren
list followed by a colon (assume struct) or a paren list followed by a
block (assume a fn). Consume those blocks to avoid any further parser
errors and return a `Placeholder` item in order to allow the parser to
continue. In the case of unenclosed blocks, the behavior is the same as
it is currently: no further errors are processed.
2017-11-24 07:34:31 -08:00
Esteban Küber
547873aa54 Account for missing keyword in fn/struct definition 2017-11-24 07:34:31 -08:00
Michael Howell
06a75e4d1f
Update parser.rs 2017-11-22 10:59:14 -07:00
Vadim Petrochenkov
2e9b89ddc5 Support ::crate in paths 2017-11-21 00:21:24 +03:00
Vadim Petrochenkov
1055bdfb2a Accept interpolated patterns in trait method parameters
Remove some outdated messages from "no patterns allowed" errors
2017-11-11 15:44:19 +03:00
bors
d5ff0e6422 Auto merge of #45773 - Badel2:dotdoteq, r=petrochenkov
Add error for `...` in expressions

Follow-up to https://github.com/rust-lang/rust/pull/44709
Tracking issue: https://github.com/rust-lang/rust/issues/28237

* Using `...` in expressions was a warning, now it's an error
* The error message suggests using `..` or `..=` instead, and explains the difference
* Updated remaining occurrences of `...` to `..=`

r? petrochenkov
2017-11-10 01:40:21 +00:00
bors
02004ef783 Auto merge of #45452 - estebank:colon-typo, r=nikomatsakis
Detect `=` -> `:` typo in let bindings

When encountering a let binding type error, attempt to parse as
initializer instead. If successful, it is likely just a typo:

```rust
fn main() {
    let x: Vec::with_capacity(10);
}
```

```
error: expected type, found `10`
 --> file.rs:3:31
  |
3 |     let x: Vec::with_capacity(10, 20);
  |         --                    ^^
  |         ||
  |         |help: did you mean assign here?: `=`
  |         while parsing the type for `x`
```

Fix #43703.
2017-11-08 20:00:41 +00:00
Badel2
3c41c28f48 Using ... in expressions is now an error 2017-11-06 20:33:51 +01:00
kennytm
ea572657da Rollup merge of #45639 - LaurentMazare:master, r=petrochenkov
Add a nicer error message for missing  in for loop, fixes #40782.

As suggested by @estebank in issue #40782, this works in the same way as #42578: if the in keyword is missing, we continue parsing the expression and if this works correctly an adapted error message is produced. Otherwise we return the old error.

A specific test case has also been added.
This is my first PR on rust-lang/rust so any feedback is very welcome.
2017-11-04 13:49:28 +08:00
Esteban Küber
9dc7abe06d Detect = -> : typo in let bindings
When encountering a let binding type error, attempt to parse as
initializer instead. If successful, it is likely just a typo:

```rust
fn main() {
    let x: Vec::with_capacity(10);
}
```

```
error: expected type, found `10`
 --> file.rs:3:31
  |
3 |     let x: Vec::with_capacity(10, 20);
  |         --                    ^^
  |         ||
  |         |help: did you mean assign here?: `=`
  |         while parsing the type for `x`
```
2017-11-03 17:39:16 -07:00
leonardo.yvens
97de8cae6e Parse auto traits the same as traits.
This moves the well formedness checks to the AST validation pass. Tests
were adjusted.

The auto keyword should be back-compat now.
2017-11-03 16:13:22 -02:00
leonardo.yvens
acf50ee236 Add tests for auto trait, fix parsing bug
Now we can do the well formedness checks in the parser, yay!
2017-11-03 16:13:21 -02:00
leonardo.yvens
1f4b630899 add auto keyword, parse auto trait, lower to HIR
Adds an `IsAuto` field to `ItemTrait` which flags if the trait was
declared as an `auto trait`.

Auto traits cannot have generics nor super traits.
2017-11-03 16:13:20 -02:00
leonardo.yvens
06506bb751 [Syntax Breaking] Rename DefaultImpl to AutoImpl
DefaultImpl is a highly confusing name for what we now call auto impls,
as in `impl Send for ..`. The name auto impl is not formally decided
but for sanity anything is better than `DefaultImpl` which refers
neither to `default impl` nor to `impl Default`.
2017-11-03 16:13:20 -02:00
laurent
ed20f3b5c0 Remove the redundant span_label. 2017-11-01 23:43:32 +00:00
laurent
d336f022d5 Preserve original formatting. 2017-11-01 06:46:58 +00:00
laurent
175cfbf129 Remove the parser snapshot hack. 2017-11-01 06:45:34 +00:00
laurent
0d7285393f Formatting tweak. 2017-10-31 21:26:49 +00:00
laurent
531b7f2e27 Add some missing spaces. 2017-10-31 21:23:46 +00:00
laurent
6d060bd49a Fix spans and error messages. 2017-10-31 19:45:12 +00:00
laurent
6a62ea6828 Add a nicer error message for missing in for loop, fixes #40782. 2017-10-30 22:33:57 +00:00
bors
dce604a8fe Auto merge of #44295 - plietar:extern-types, r=arielb1
Implement RFC 1861: Extern types

A few notes :

- Type parameters are not supported. This was an unresolved question from the RFC. It is not clear how useful this feature is, and how variance should be treated. This can be added in a future PR.

- `size_of_val` / `align_of_val` can be called with extern types, and respectively return 0 and 1. This differs from the RFC, which specified that they should panic, but after discussion with @eddyb on IRC this seems like a better solution.
If/when a `DynSized` trait is added, this will be disallowed statically.

- Auto traits are not implemented by default, since the contents of extern types is unknown. This means extern types are `!Sync`, `!Send` and `!Freeze`. This seems like the correct behaviour to me.
Manual `unsafe impl Sync for Foo` is still possible.

- This PR allows extern type to be used as the tail of a struct, as described by the RFC :
```rust
extern {
    type OpaqueTail;
}

#[repr(C)]
struct FfiStruct {
    data: u8,
    more_data: u32,
    tail: OpaqueTail,
}
```

However this is undesirable, as the alignment of `tail` is unknown (the current PR assumes an alignment of 1). Unfortunately we can't prevent it in the general case as the tail could be a type parameter :
```rust
#[repr(C)]
struct FfiStruct<T: ?Sized> {
    data: u8,
    more_data: u32,
    tail: T,
}
```

Adding a `DynSized` trait would solve this as well, by requiring tail fields to be bound by it.

- Despite being unsized, pointers to extern types are thin and can be casted from/to integers. However it is not possible to write a `null<T>() -> *const T` function which works with extern types, as I've explained here : https://github.com/rust-lang/rust/issues/43467#issuecomment-321678621

- Trait objects cannot be built from extern types. I intend to support it eventually, although how this interacts with `DynSized`/`size_of_val` is still unclear.

- The definition of `c_void` is unmodified
2017-10-28 13:34:12 +00:00
bors
c1a0b6d9eb Auto merge of #45503 - thombles:tk/i44339-v5, r=petrochenkov
Improve diagnostics when list of tokens has incorrect separators

Make `parse_seq_to_before_tokens` more resilient to error conditions. Where possible it is better if it can consume up to the final bracket before returning. This change improves the diagnostics in a couple of situations:

```
struct S(pub () ()); // omitted separator
use std::{foo. bar}; // used a similar but wrong separator
```

Fixes #44339
r? @petrochenkov
2017-10-28 03:02:17 +00:00
Paul Lietar
77f7e85d7f Implement RFC 1861: Extern types 2017-10-27 23:01:34 +02:00
Thomas Karpiniec
779886f182 Improve recovery after unexpected tokens parsing sequence 2017-10-25 00:04:01 +11:00
bors
fbc3642ef1 Auto merge of #45401 - zackmdavis:crate_shorthand_visibility_modifier, r=nikomatsakis
`crate` shorthand visibility modifier

cc #45388.

r? @nikomatsakis
2017-10-24 12:24:16 +00:00
Zack M. Davis
214b0f2293 crate shorthand visibility modifier
With regrets, this breaks rustfmt and rls.

This is in the matter of #45388.
2017-10-22 23:58:13 -07:00
Sunjay Varma
e03447dae3 Fixed tidy errors 2017-10-17 22:14:14 -04:00
Sunjay Varma
f61394f0bd Lifting Generics from MethodSig to TraitItem and ImplItem since we want to support generics in each variant of TraitItem and ImplItem 2017-10-17 22:14:14 -04:00
Zack M. Davis
696612c02f don't issue "expected statement after outer attr." after inner attr.
While an inner attribute here is in fact erroneous, that error ("inner
attribute is not permitted in this context") successfully gets set earlier;
this further admonition is nonsensical.

Resolves #45296.
2017-10-15 19:41:12 -07:00
Vadim Petrochenkov
e6115af4bd Implement dyn Trait syntax 2017-10-14 12:51:13 +03:00