Commit graph

3400 commits

Author SHA1 Message Date
Vadim Petrochenkov
636357b09a Cleanup import parsing
Fix spans of root segments
2018-03-17 22:12:21 +03:00
Vadim Petrochenkov
f88162654d Rename Span::empty to Span::shrink_to_lo, add Span::shrink_to_hi 2018-03-17 22:12:21 +03:00
Vadim Petrochenkov
e5fb13897d AST: Keep distinction between path and ::path in imports and visibilities
Add the root segment for name resolution purposes only
2018-03-17 22:12:21 +03:00
Vadim Petrochenkov
b057c554ab AST: Make renames in imports closer to the source
Fix `unused_import_braces` lint false positive on `use prefix::{self as rename}`
2018-03-17 22:12:21 +03:00
Vadim Petrochenkov
c6c6cf9515 AST/HIR: Clarify what the optional name in extern crate items mean 2018-03-17 22:12:21 +03:00
Vadim Petrochenkov
5d06c890fe syntax: Make _ an identifier 2018-03-17 22:08:07 +03:00
Niv Kaminer
c8be5c3174 remove FIXME(#8372) since for-loops wont support borrowing iterators 2018-03-17 20:25:23 +02:00
csmoe
9f5a356c1d improve attribute trailing semicolon error 2018-03-17 21:23:41 +08:00
bors
c3fd5d0dde Auto merge of #48904 - Zoxc:code-and-file-maps, r=michaelwoerister
Make CodeMap and FileMap thread-safe

r? @michaelwoerister
2018-03-17 08:54:22 +00:00
bors
36b6687318 Auto merge of #49051 - kennytm:rollup, r=kennytm
Rollup of 17 pull requests

- Successful merges: #48706, #48875, #48892, #48922, #48957, #48959, #48961, #48965, #49007, #49024, #49042, #49050, #48853, #48990, #49037, #49049, #48972
- Failed merges:
2018-03-16 00:09:14 +00:00
kennytm
e1d19df9a5
Rollup merge of #48922 - petrochenkov:asunder, r=nikomatsakis
Implement import renaming with `_` (RFC 2166)

cc https://github.com/rust-lang/rust/issues/48216
2018-03-16 01:49:42 +08:00
kennytm
6399d16cfd
Disallow &a..=b and box a..=b in pattern.
They are disallowed because they have different precedence than
expressions. I assume parenthesis in pattern will be soon stabilized and
thus write that as suggestion directly.
2018-03-15 16:58:03 +08:00
John Kåre Alsaker
65b4990253 Use a single Lock for CodeMap.stable_id_to_filemap and CodeMap.files 2018-03-15 00:43:03 +01:00
John Kåre Alsaker
cbdf4ec03e Remove syntax and syntax_pos thread locals 2018-03-14 11:56:01 +01:00
Vadim Petrochenkov
12ac032c72 Implement import renaming with _ (RFC 2166) 2018-03-14 12:32:53 +03:00
Zack M. Davis
9b599856a4 in which some labels and notes are upgraded to structured suggestions
(Meanwhile, a couple of parse-fail tests are moved to UI tests so that
the reader can see the new output, and an existing UI test is given a
more evocative name.)
2018-03-11 00:12:06 -08:00
bors
fedce67cd2 Auto merge of #48326 - RalfJung:generic-bounds, r=petrochenkov
Warn about ignored generic bounds in `for`

This adds a new lint to fix #42181. For consistency and to avoid code duplication, I also moved the existing "bounds in type aliases are ignored" here.

Questions to the reviewer:
* Is it okay to just remove a diagnostic error code like this? Should I instead keep the warning about type aliases where it is? The old code provided a detailed explanation of what's going on when asked, that information is now lost. On the other hand, `span_warn!` seems deprecated (after this patch, it has exactly one user left!).
* Did I miss any syntactic construct that can appear as `for` in the surface syntax? I covered function types (`for<'a> fn(...)`), generic traits (`for <'a> Fn(...)`, can appear both as bounds as as trait objects) and bounds (`for<'a> F: ...`).
* For the sake of backwards compatibility, this adds a warning, not an error. @nikomatsakis suggested an error in https://github.com/rust-lang/rust/issues/42181#issuecomment-306924389, but I feel that can only happen in a new epoch -- right?

Cc @eddyb
2018-03-09 10:45:29 +00:00
Manish Goregaokar
b228b053ec
Rollup merge of #48527 - zackmdavis:and_the_social_construction_of_tuples, r=estebank
in which parentheses are suggested for should-have-been-tuple-patterns

![destructure_suggest_parens](https://user-images.githubusercontent.com/1076988/36638335-48b082d4-19a7-11e8-9726-0d043544df2f.png)

Programmers used to working in some other languages (such as Python or
Go) might expect to be able to destructure values with comma-separated
identifiers but no parentheses on the left side of an assignment.

Previously, the first name in such code would get parsed as a
single-indentifier pattern—recognizing, for example, the
`let a` in `let a, b = (1, 2);`—whereupon we would have a fatal syntax
error on seeing an unexpected comma rather than the expected semicolon
(all the way nearer to the end of `parse_full_stmt`).

Instead, let's look for that comma when parsing the pattern, and if we
see it, make-believe that we're parsing the remaining elements in a
tuple pattern, so that we can suggest wrapping it all in parentheses. We
need to do this in a separate wrapper method called on a "top-level"
pattern, rather than within
`parse_pat` itself, because `parse_pat` gets called recursively to parse
the sub-patterns within a tuple pattern.

~~We could also do this for `match` arms, `if let`, and `while let`, but
we elect not to in this patch, as it seems less likely for users to make
the mistake in those contexts.~~

Resolves #48492.

r? @petrochenkov
2018-03-08 17:25:55 -08:00
Zack M. Davis
1f04597c3c in which parentheses are suggested for should-have-been-tuple-patterns
Programmers used to working in some other languages (such as Python or
Go) might expect to be able to destructure values with comma-separated
identifiers but no parentheses on the left side of an assignment.

Previously, the first name in such code would get parsed as a
single-indentifier pattern—recognizing, for example, the
`let a` in `let a, b = (1, 2);`—whereupon we would have a fatal syntax
error on seeing an unexpected comma rather than the expected semicolon
(all the way nearer to the end of `parse_full_stmt`).

Instead, let's look for that comma when parsing the pattern, and if we
see it, momentarily make-believe that we're parsing the remaining
elements in a tuple pattern, so that we can suggest wrapping it all in
parentheses. We need to do this in a separate wrapper method called on
the top-level pattern (or `|`-patterns) in a `let` statement, `for`
loop, `if`- or `while let` expression, or match arm rather than within
`parse_pat` itself, because `parse_pat` gets called recursively to parse
the sub-patterns within a tuple pattern.

Resolves #48492.
2018-03-08 11:30:34 -08:00
John Kåre Alsaker
728c16c88f Move REGISTERED_DIAGNOSTICS to a ParseSess field 2018-03-08 05:30:43 +01:00
Ralf Jung
780b544a39 note a FIXME 2018-03-06 11:33:26 +01:00
Ralf Jung
49abd87483 make bounds on higher-kinded lifetimes a hard error in ast_validation
Also move the check for not having type parameters into ast_validation.

I was not sure what to do with compile-fail/issue-23046.rs: The issue looks like
maybe the bounds actually played a role in triggering the ICE, but that seems
unlikely given that the compiler seems to entirely ignore them.  However, I
couldn't find a testcase without the bounds, so I figured the best I could do is
to just remove the bounds and make sure at least that keeps working.
2018-03-06 11:29:48 +01:00
kennytm
e3451f8cd7
Rollup merge of #48546 - GuillaumeGomez:raw-string-error-note, r=estebank
Raw string error note

Fixes #48395.

I think this note should be helpful enough to solve the issue.
2018-03-06 16:25:31 +08:00
kennytm
43de95ca5b
Rollup merge of #48403 - lukaslueg:casted, r=steveklabnik
Fix spelling s/casted/cast/

r? @GuillaumeGomez
2018-03-06 16:25:28 +08:00
Guillaume Gomez
1c191b209b Add note for unterminated raw string error 2018-03-04 14:37:44 +01:00
Manish Goregaokar
8c7c8fb212
Rollup merge of #48338 - estebank:match-missing-comma, r=petrochenkov
Fixes #47311.
r? @nrc
2018-03-02 22:01:23 -08:00
John Kåre Alsaker
b74e97cf42 Replace Rc with Lrc for shared data 2018-03-02 10:48:52 +01:00
Lukas Lueg
f7693c0633 Fix spelling s/casted/cast/ 2018-03-01 12:54:16 +01:00
Vadim Petrochenkov
c9aff92e6d Support parentheses in patterns under feature gate
Improve recovery for trailing comma after `..`
2018-03-01 01:47:56 +03:00
Esteban Küber
d63d363ef9 Diagnostic tweaks (review) 2018-02-27 10:47:49 -08:00
Esteban Küber
36baa81be9 Add label to primary span in some parse errors 2018-02-27 10:47:33 -08:00
Esteban Küber
ba7039cfd6 Detect missing if blocks
When unnecessarily using a fat arrow after an if condition, suggest the
removal of it.

When finding an if statement with no block, point at the `if` keyword to
provide more context.
2018-02-27 10:46:23 -08:00
Esteban Küber
0c9afa87ba Provide missing comma in match arm suggestion
When finding:

```rust
match &Some(3) {
    &None => 1
    &Some(2) => { 3 }
    _ => 2
}
```

provide the following diagnostic:

```
error: expected one of `,`, `.`, `?`, `}`, or an operator, found `=>`
 --> $DIR/missing-comma-in-match.rs:15:18
  |
X |         &None => 1
  |               --  - help: missing comma
  |               |
  |               while parsing the match arm starting here
X |         &Some(2) => { 3 }
  |                  ^^ expected one of `,`, `.`, `?`, `}`, or an operator here
```
2018-02-27 10:45:18 -08:00
bors
4a70e27219 Auto merge of #48082 - jseyfried:improve_struct_field_hygiene, r=petrochenkov
macros: improve struct constructor field hygiene, fix span bug

Fixes #47311.
r? @nrc
2018-02-26 09:41:33 +00:00
Manish Goregaokar
9523c82543
Rollup merge of #48490 - petrochenkov:orpat, r=eddyb
Implement multiple patterns with `|` in `if let` and `while let` (RFC 2175)

cc https://github.com/rust-lang/rust/issues/48215
2018-02-24 15:52:17 -08:00
Manish Goregaokar
7e6829938c
Rollup merge of #48481 - Manishearth:dyn-paren, r=petrochenkov
Allow parentheses in `dyn (Trait)`

r? @eddyb @nikomatsakis
2018-02-24 15:52:16 -08:00
Manish Goregaokar
69757c5bb9
Rollup merge of #48441 - petrochenkov:exty, r=estebank
Fix parsing of extern paths in types and poly-traits

Fixes https://github.com/rust-lang/rust/issues/48262
2018-02-24 15:52:13 -08:00
Manish Goregaokar
fc7caed04e Rollup merge of #48356 - estebank:unsafe-without-braces, r=nikomatsakis
When encountering invalid token after `unsafe`, mention `{`

Fix #37158.
2018-02-24 12:48:02 -08:00
Vadim Petrochenkov
8640a51ff8 Implement multiple patterns with | in if let and while let 2018-02-24 03:12:35 +03:00
Manish Goregaokar
bdccbcf41b parse dyn (Foo) as a trait object 2018-02-23 12:39:51 -08:00
Manish Goregaokar
a1acb15591
Rollup merge of #48083 - jseyfried:improve_tuple_struct_field_access_hygiene, r=petrochenkov
Improve tuple struct field access hygiene

Fixes #47312 by fixing a span bug.
r? @nrc
2018-02-23 10:24:47 -08:00
bors
063deba92e Auto merge of #47799 - topecongiro:fix-span-of-visibility, r=petrochenkov
Fix span of visibility

This PR

1. adds a closing parenthesis to the span of `Visibility::Crate` (e.g. `pub(crate)`). The current span only covers `pub(crate`.
2. adds a `span` field to `Visibility::Restricted`. This span covers the entire visibility expression (e.g. `pub (in self)`). Currently all we can have is a span for `Path`.

This PR is motivated by the bug found in rustfmt (https://github.com/rust-lang-nursery/rustfmt/issues/2398).

The first change is a strict improvement IMHO. The second change may not be desirable, as it adds a field which is currently not used by the compiler.
2018-02-23 11:21:29 +00:00
Vadim Petrochenkov
98eb4ddbce Fix parsing of extern paths in types and poly-traits 2018-02-23 00:54:30 +03:00
Esteban Küber
1aad320974 When encountering invalid token after unsafe, mention { 2018-02-19 21:58:36 -08:00
Jeffrey Seyfried
ba8d6d18d0 Fix span bug. 2018-02-17 21:48:35 -08:00
Matthias Krüger
4452446292 fix more typos found by codespell. 2018-02-17 17:38:49 +01:00
Seiichi Uchida
291c51b9c8 Fix up tests and typos 2018-02-18 00:10:40 +09:00
Seiichi Uchida
b5099a708d Replace dummy spans with empty spans 2018-02-18 00:10:40 +09:00
Seiichi Uchida
d6bdf296a4 Change ast::Visibility to Spanned type 2018-02-18 00:10:40 +09:00
Seiichi Uchida
0bddba9248 Add a span field to Visibility::Restricted
This span covers the whole visibility expression: e.g. `pub (in path)`.
2018-02-18 00:10:40 +09:00