Commit graph

428 commits

Author SHA1 Message Date
Mazdak Farrokhzad
111724f5e2
Rollup merge of #68985 - daboross:fix-35813, r=Centril
Parse & reject postfix operators after casts

This adds an explicit error messages for when parsing `x as Type[0]` or similar expressions. Our add an extra parse case for parsing any postfix operator (dot, indexing, method calls, await) that triggers directly after parsing `as` expressions.

My friend and I worked on this together, but they're still deciding on a github username and thus I'm submitting this for both of us.

It will immediately error out, but will also provide the rest of the parser with a useful parse tree to deal with.

There's one decision we made in how this produces the parse tree. In the situation `&x as T[0]`, one could imagine this parsing as either `&((x as T)[0])` or `((&x) as T)[0]`. We chose the latter for ease of implementation, and as it seemed the most intuitive.

Feedback welcome! This is our first change to the parser section, and it might be completely horrible.

Fixes #35813.
2020-03-07 08:15:21 +01:00
Mazdak Farrokhzad
176fe3f8ac encode ; stmt w/o expr as StmtKind::Empty 2020-03-01 23:02:17 +01:00
Guillaume Gomez
8ce9460b7a Update UI tests 2020-02-28 16:01:04 +01:00
bors
6d69caba11 Auto merge of #68434 - varkor:astconv-mismatch-error, r=nikomatsakis
Move generic arg/param validation to `create_substs_for_generic_args` to resolve various const generics issues

This changes some diagnostics, but I think they're around as helpful as the previous ones, and occur infrequently regardless.

Fixes https://github.com/rust-lang/rust/issues/68257.
Fixes https://github.com/rust-lang/rust/issues/68398.

r? @eddyb
2020-02-27 18:38:19 +00:00
Mazdak Farrokhzad
1c75f5aaa1 parse: test bad variants wrt. issue 48137. 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
fde5939d1c parse: tweak diagnostic wordings 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
62930d3151 parse/ast: move Defaultness into variants. 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
842027f35b parse: NtItem -> parse_item_common. 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
b01c1e2092 parser: tweak item kind wording 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
ab84914fe4 parser: tweak unmatched wording 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
abc46a579b parse: harden default test. 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
a05c83b2eb parse: use parse_item_common in parse_assoc_item_. 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
a63f35daee parse: use parse_item_common in parse_foreign_item. 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
a920a05603 parse: recover default on free items. 2020-02-24 00:59:38 +01:00
Mazdak Farrokhzad
fa2a792491 add Span to ast::Defaultness::Default. 2020-02-24 00:59:38 +01:00
David Ross
f434c6e636 Use multipart suggestion
This is a modified version of estebank's suggestion, with a bit of
extra cleanup now that we don't need the different cases for if we can
turn a span into a string or not.
2020-02-22 12:33:06 -08:00
David Ross
fa1f547f82 Add more double cast + method call tests 2020-02-22 11:36:09 -08:00
varkor
bead79ebc6 Add note regarding argument ordering 2020-02-22 11:34:29 +00:00
varkor
039045c49b Move generic arg / param validation to create_substs_for_generic_args 2020-02-22 00:28:18 +00:00
Mazdak Farrokhzad
9f3dfd29a2 parse: allow type Foo: Ord syntactically. 2020-02-22 00:19:27 +01:00
Mazdak Farrokhzad
6c6d45c6e7
Rollup merge of #69236 - Centril:mut-parens-at-recovery, r=estebank
parse: recover `mut (x @ y)` as `(mut x @ mut y)`.

Follow up to https://github.com/rust-lang/rust/pull/68992#discussion_r376829749 and https://github.com/rust-lang/rust/pull/63945.

Specifically, when given `let mut (x @ y)` we recover with `let (mut x @ mut y)` as the suggestion:

```rust
error: `mut` must be attached to each individual binding
  --> $DIR/mut-patterns.rs:12:9
   |
LL |     let mut (x @ y) = 0;
   |         ^^^^^^^^^^^ help: add `mut` to each binding: `(mut x @ mut y)`
   |
   = note: `mut` may be followed by `variable` and `variable @ pattern`
```

r? @matthewjasper @estebank
2020-02-18 22:16:31 +01:00
Mazdak Farrokhzad
b864d23f34
Rollup merge of #69194 - Centril:assoc-extern-fuse, r=petrochenkov
parse: fuse associated and extern items up to defaultness

Language changes:

- The grammar of extern `type` aliases is unified with associated ones, and becomes:
  ```rust
  TypeItem = "type" ident generics {":" bounds}? where_clause {"=" type}? ";" ;
  ```

  Semantic restrictions (`ast_validation`) are added to forbid any parameters in `generics`, any bounds in `bounds`, and any predicates in `where_clause`, as well as the presence of a type expression (`= u8`).

  (Work still remains to fuse this with free `type` aliases, but this can be done later.)

- The grammar of constants and static items (free, associated, and extern) now permits the absence of an expression, and becomes:

  ```rust
  GlobalItem = {"const" {ident | "_"} | "static" "mut"? ident} {"=" expr}? ";" ;
  ```

  - A semantic restriction is added to enforce the presence of the expression (the body).
  - A semantic restriction is added to reject `const _` in associated contexts.

Together, these changes allow us to fuse the grammar of associated items and extern items up to `default`ness which is the main goal of the PR.

-----------------------

We are now very close to fully fusing the entirely of item parsing and their ASTs. To progress further, we must make a decision: should we parse e.g. `default use foo::bar;` and whatnot? Accepting that is likely easiest from a parsing perspective, as it does not require using look-ahead, but it is perhaps not too onerous to only accept it for `fn`s (and all their various qualifiers), `const`s, `static`s, and `type`s.

r? @petrochenkov
2020-02-18 22:16:26 +01:00
Dylan DPC
d1f175b2ad
Rollup merge of #69192 - JohnTitor:add-tests, r=Centril
Add more regression tests

Closes #39618
Closes #51798
Closes #62894
Closes #63952
Closes #68653

r? @Centril
2020-02-18 16:07:24 +01:00
Mazdak Farrokhzad
0b1e08cb55 parse: recover mut (x @ y) as (mut x @ mut y). 2020-02-17 16:08:13 +01:00
bors
0176a9eef8 Auto merge of #69129 - Centril:macro-legacy-errors, r=petrochenkov
Transition macro_legacy_warnings into a hard error

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

r? @petrochenkov
2020-02-17 11:54:49 +00:00
David Ross
8ef3da0858 Fix test stderr after rebasing on master. 2020-02-15 22:08:29 -08:00
David Ross
c2d7ffb8a9 Remove trailing whitespace 2020-02-15 19:51:02 -08:00
David Ross
f82ca8b0ef Add more error cases to issue 35813 tests 2020-02-15 19:51:02 -08:00
David Ross
940f65782c Parse & reject postfix operators after casts
This adds parsing for expressions like 'x as Ty[0]' which will
immediately error out, but still give the rest of the parser a valid
parse tree to continue.
2020-02-15 19:50:50 -08:00
Mazdak Farrokhzad
d6238bd8d4 reject assoc statics & extern consts during parsing 2020-02-15 22:21:00 +01:00
Mazdak Farrokhzad
0e0c0286a2 fuse extern & associated item parsing up to defaultness 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
35884fe168 parse extern consts 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
f8d2264463 parse associated statics. 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
1c2906ead3 ast/parser: fuse static & const grammars in all contexts. 2020-02-15 20:57:12 +01:00
Mazdak Farrokhzad
f3e9763543 ast: make = <expr>; optional in free statics/consts. 2020-02-15 20:57:12 +01:00
Yuki Okushi
ecb8bf069e Add test for issue-62894 2020-02-16 03:22:00 +09:00
Mazdak Farrokhzad
95dc9b9a73 ast: normalize ForeignItemKind::Ty & AssocItemKind::TyAlias. 2020-02-15 18:00:01 +01:00
Aaron Hill
98757f14d0
Suggest a comma if a struct initializer field fails to parse
Currently, we emit a "try adding a comma" suggestion if a comma is
missing in a struct definition. However, we emit no such suggestion if a
comma is missing in a struct initializer.

This commit adds a "try adding a comma" suggestion when we don't find a
comma during the parsing of a struct initializer field.

The change to `src/test/ui/parser/removed-syntax-with-1.stderr` isn't
great, but I don't see a good way of avoiding it.
2020-02-14 22:28:13 -05:00
Mazdak Farrokhzad
aaaf0ba072 parser: misc small item related improvements & cleanups. 2020-02-13 16:29:10 +01:00
Mazdak Farrokhzad
7737d0ffde parser: unify item list parsing.
as a consequence, `trait X { #![attr] }` becomes legal.
2020-02-13 15:16:29 +01:00
Mazdak Farrokhzad
cec2a9fad0 macro_legacy_warnings -> error 2020-02-13 13:59:49 +01:00
Mazdak Farrokhzad
4ca3bbf0b2 parser: add test for 'extern crate async' 2020-02-13 10:40:17 +01:00
Mazdak Farrokhzad
3341c94006 ast_validation: tweak diagnostic output 2020-02-13 10:40:17 +01:00
Mazdak Farrokhzad
a833be2162 parser: fuse free fn parsing together. 2020-02-13 10:39:24 +01:00
Mazdak Farrokhzad
36a17e4067 parser_fn_front_matter: allow const .. extern 2020-02-13 10:39:24 +01:00
Mazdak Farrokhzad
c30f068dc8 IsAsync -> enum Async { Yes { span: Span, .. }, No }
use new span for better diagnostics.
2020-02-13 10:39:24 +01:00
Dylan DPC
2a3c1a30c8
Rollup merge of #68981 - estebank:silence, r=davidtwco
Account for type params on method without parentheses

Account for those type parameters in the structured suggestion when forgetting to call method:

```
error[E0615]: attempted to take value of method `collect` on type `std::vec::IntoIter<_>`
  --> $DIR/method-missing-parentheses.rs:2:32
   |
LL |     let _ = vec![].into_iter().collect::<usize>;
   |                                ^^^^^^^---------
   |                                |
   |                                help: use parentheses to call the method: `collect::<usize>()`
```
2020-02-12 20:36:53 +01:00
bors
dc4242d905 Auto merge of #68929 - matprec:consistent-issue-references, r=Dylan-DPC
Make issue references consistent

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

cc https://github.com/rust-lang/rust/pull/63008

r? @varkor because you reviewed the original pr
2020-02-11 02:00:27 +00:00
Esteban Küber
9d91489526 review comment: wording 2020-02-10 13:58:36 -08:00
Dylan DPC
119bc976db
Rollup merge of #69014 - dwrensha:fix-68890, r=Centril
change an instance of span_bug() to struct_span_err() to avoid ICE

After #67148, the `span_bug()` in `parse_ty_tuple_or_parens()` is reachable because `parse_paren_comma_seq()` can return an `Ok()` even in cases where it encounters an error.
This pull request prevents an ICE in such cases by replacing the `span_bug()` with `struct_span_error()`.

Fixes #68890.
2020-02-10 17:29:03 +01:00