Commit Graph

601 Commits

Author SHA1 Message Date
Manish Goregaokar 8355024ed0 Rollup merge of #74125 - ayazhafiz:i/74050, r=matthewjasper
Correctly mark the ending span of a match arm

Closes #74050

r? @matthewjasper
2020-07-10 23:26:45 -07:00
Manish Goregaokar ec1e7e9dbc Rollup merge of #71322 - petrochenkov:tuple00, r=nikomatsakis
Accept tuple.0.0 as tuple indexing (take 2)

If we expect something identifier-like when parsing a field name after `.`, but encounter a float token, we break that float token into parts, similarly to how we break `&&` into `&` `&`, or `<<` into `<` `<`, etc.

An alternative to https://github.com/rust-lang/rust/pull/70420.
2020-07-10 23:26:22 -07:00
Manish Goregaokar 9353e21bfd Rollup merge of #74188 - estebank:tweak-ascription-typo-heuristic, r=petrochenkov
Tweak `::` -> `:` typo heuristic and reduce verbosity

Do not trigger on correct type ascription expressions with trailing
operators and _do_ trigger on likely path typos where a turbofish is
used.

On likely path typos, remove note explaining type ascription.

Clean up indentation.

r? @petrochenkov
2020-07-09 11:50:50 -07:00
Esteban Küber e771a4f989 Tweak :: -> : typo heuristic and reduce verbosity
Do not trigger on correct type ascription expressions with trailing
operators and _do_ trigger on likely path typos where a turbofish is
used.

On likely path typos, remove note explaining type ascription.
2020-07-09 09:09:25 -07:00
Ayaz Hafiz 3c63fba03d Correctly mark the ending span of a match arm
Closes #74050

r? @matthewjasper
2020-07-08 07:28:07 -07:00
Manish Goregaokar e74ab50d07 Rollup merge of #73953 - JohnTitor:audit-hidden-sugg, r=estebank
Audit hidden/short code suggestions

Should fix #73641.
Audit uses of `span_suggestion_short` and `tool_only_span_suggestion` (`span_suggestion_hidden` is already tested with `run-rustfix`). Leave some FIXMEs for futher improvements/fixes.
r? @estebank
2020-07-06 17:45:22 -07:00
Guillaume Gomez d64a4b57ae Create new E0768 error code for "no valid digits found for number" error 2020-07-04 00:15:29 +02:00
Vadim Petrochenkov 8e256b19d5 parser: Break float tokens into parts in tuple field positions 2020-07-02 20:35:49 +03:00
Yuki Okushi ec31b4e3a8 Audit uses of span_suggestion_short 2020-07-02 15:18:33 +09:00
Manish Goregaokar 5d429f3847 Rollup merge of #73803 - Aaron1011:feature/angle-field-recovery, r=matthewjasper
Recover extra trailing angle brackets in struct definition

This commit applies the existing 'extra angle bracket recovery' logic
when parsing fields in struct definitions. This allows us to continue
parsing the struct's fields, avoiding spurious 'missing field' errors in
code that tries to use the struct.
2020-07-01 20:35:50 -07:00
Manish Goregaokar 8ed5c0d37a Rollup merge of #73345 - petrochenkov:nointerp, r=Aaron1011
expand: Stop using nonterminals for passing tokens to attribute and derive macros

Make one more step towards fully token-based expansion and fix issues described in https://github.com/rust-lang/rust/issues/72545#issuecomment-640276791.

Now `struct S;` is passed to `foo!(struct S;)` and `#[foo] struct S;` in the same way - as a token stream `struct S ;`, rather than a single non-terminal token `NtItem` which is then broken into parts later.

The cost is making pretty-printing of token streams less pretty.
Some of the pretty-printing regressions will be recovered by keeping jointness with each token, which we will need to do anyway.

Unfortunately, this is not exactly the same thing as https://github.com/rust-lang/rust/pull/73102.
One more observable effect is how `$crate` is printed in the attribute input.
Inside `NtItem` was printed as `crate` or `that_crate`, now as a part of a token stream it's printed as `$crate` (there are good reasons for these differences, see https://github.com/rust-lang/rust/pull/62393 and related PRs).
This may break old proc macros (custom derives) written before the main portion of the proc macro API (macros 1.2) was stabilized, those macros did `input.to_string()` and reparsed the result, now that result can contain `$crate` which cannot be reparsed.

So, I think we should do this regardless, but we need to run crater first.
r? @Aaron1011
2020-07-01 20:35:44 -07:00
Vadim Petrochenkov b37434ef31 Remove token::FlattenGroup 2020-07-01 13:40:46 +03:00
James Box 7231e57546 Fix wording for anonymous parameter name help 2020-06-27 22:55:42 -05:00
Aaron Hill 765bd47fa0 Recover extra trailing angle brackets in struct definition
This commit applies the existing 'extra angle bracket recovery' logic
when parsing fields in struct definitions. This allows us to continue
parsing the struct's fields, avoiding spurious 'missing field' errors in
code that tries to use the struct.
2020-06-27 11:53:42 -04:00
Manish Goregaokar 7f6dfb451a Rollup merge of #73597 - ayazhafiz:i/const-span, r=ecstatic-morse
Record span of `const` kw in GenericParamKind

Context: this is needed for a fix of https://github.com/rust-lang/rustfmt/issues/4263,
which currently records the span of a const generic param incorrectly
because the location of the `const` kw is not known.

I am not sure how to add tests for this; any guidance in how to do so
would be appreciated 🙂
2020-06-26 00:39:08 -07:00
Manish Goregaokar 2aee60897f Rollup merge of #73102 - petrochenkov:flatgroup, r=Aaron1011
proc_macro: Stop flattening groups with dummy spans

Reduce the scope of the hack described in https://github.com/rust-lang/rust/issues/72545#issuecomment-640276791.

We still pass AST fragments to attribute and derive macros as single nonterminal tokens rather than as tokens streams, but now use a precise flag instead of the span-based heuristic that could do lead to incorrect behavior in unrelated cases.

https://github.com/rust-lang/rust/pull/73345 attempts to fully resolve this issue, but there are some compatibility issues to be addressed.
2020-06-26 00:39:00 -07:00
Vadim Petrochenkov 77b0ed70b3 proc_macro: Stop flattening groups with dummy spans 2020-06-26 00:39:31 +03:00
Guillaume Gomez eb6d9a49a8 Add E0766 error for unterminated double quote byte string 2020-06-25 13:28:45 +02:00
bors 3c90ae8404 Auto merge of #73293 - Aaron1011:feature/macro-rules-arg-capture, r=petrochenkov
Always capture tokens for `macro_rules!` arguments

When we invoke a proc-macro, the `TokenStream` we pass to it may contain 'interpolated' AST fragments, represented by `rustc_ast::token::Nonterminal`. In order to correctly, pass a `Nonterminal` to a proc-macro, we need to have 'captured' its `TokenStream` at the time the AST was parsed.

Currently, we perform this capturing when attributes are present on items and expressions, since we will end up using a `Nonterminal` to pass the item/expr to any proc-macro attributes it is annotated with. However, `Nonterminal`s are also introduced by the expansion of metavariables in `macro_rules!` macros. Since these metavariables may be passed to proc-macros, we need to have tokens available to avoid the need to pretty-print and reparse (see https://github.com/rust-lang/rust/issues/43081).

This PR unconditionally performs token capturing for AST items and expressions that are passed to a `macro_rules!` invocation. We cannot know in advance if captured item/expr will be passed to proc-macro, so this is needed to ensure that tokens will always be available when they are needed.

This ensures that proc-macros will receive tokens with proper `Spans` (both location and hygiene) in more cases. Like all work on https://github.com/rust-lang/rust/issues/43081, this will cause regressions in proc-macros that were relying on receiving tokens with dummy spans.

In this case, Crater revealed only one regression: the [Pear](https://github.com/SergioBenitez/Pear) crate (a helper for [rocket](https://github.com/SergioBenitez/Rocket)), which was previously [fixed](https://github.com/SergioBenitez/Pear/pull/25) as part of https://github.com/rust-lang/rust/pull/73084.

This regression manifests itself as the following error:

```
[INFO] [stdout] error: proc macro panicked
[INFO] [stdout]    --> /opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/rocket_http-0.4.5/src/parse/uri/parser.rs:119:34
[INFO] [stdout]     |
[INFO] [stdout] 119 |             let path_and_query = pear_try!(path_and_query(is_pchar));
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: message: called `Option::unwrap()` on a `None` value
[INFO] [stdout]     = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
```

It can be fixed by running `cargo update -p pear`, which updates your `Cargo.lock` to use the latest version of Pear (which includes a bugfix for the regression).

Split out from https://github.com/rust-lang/rust/pull/73084/
2020-06-24 01:24:38 +00:00
Ayaz Hafiz 86f6c0e086 Record span of const kw in GenericParamKind
Context: this is needed to fix https://github.com/rust-lang/rustfmt/issues/4263,
which currently records the span of a const generic param incorrectly
because the location of the `const` kw is not known.

I am not sure how to add tests for this; any guidance in how to do so
would be appreciated 🙂
2020-06-23 09:25:46 -07:00
Guillaume Gomez a657be42b1 Create E0765 error for unterminated double quote strings 2020-06-21 14:09:12 +02:00
Ralf Jung 45aa36bae5 Rollup merge of #73280 - GuillaumeGomez:add-e0763, r=petrochenkov
Add E0763
2020-06-19 14:29:29 +02:00
Manish Goregaokar 9ca811772c Rollup merge of #73361 - estebank:non-primitive-cast, r=davidtwco
Tweak "non-primitive cast" error

- Suggest borrowing expression if it would allow cast to work.
- Suggest using `<Type>::from(<expr>)` when appropriate.
- Minor tweak to `;` typo suggestion.

Partily address #47136.
2020-06-18 15:20:57 -07:00
Manish Goregaokar 39f8784eb6 Rollup merge of #71976 - mibac138:let-recovery, r=estebank
Improve diagnostics for `let x += 1`

Fixes(?) #66736

The code responsible for the `E0404` errors is [here](https://github.com/rust-lang/rust/blob/master/src/librustc_parse/parser/ty.rs#L399-L424) which I don't think can be easily modified to prevent emitting an error in one specific case. Because of this I couldn't get rid of `E0404` and instead added `E0067` along with a help message which will fix the problem.

r? @estebank
2020-06-18 15:20:36 -07:00
Guillaume Gomez a19dfb573d Create new E0763 error code for unterminated byte constant 2020-06-16 13:14:04 +02:00
Esteban Küber e857696cf8 Tweak "non-primitive cast" error
- Suggest borrowing expression if it would allow cast to work.
- Suggest using `<Type>::from(<expr>)` when appropriate.
- Minor tweak to `;` typo suggestion.

Partily address #47136.
2020-06-15 08:57:20 -07:00
Aaron Hill 74599cd362 Always capture tokens for macro_rules! arguments 2020-06-15 11:50:27 -04:00
Dylan DPC 84b9145076 Rollup merge of #73182 - Aaron1011:feature/call-fn-span, r=matthewjasper
Track span of function in method calls, and use this in #[track_caller]

Fixes #69977

When we parse a chain of method calls like `foo.a().b().c()`, each
`MethodCallExpr` gets assigned a span that starts at the beginning of
the call chain (`foo`). While this is useful for diagnostics, it means
that `Location::caller` will return the same location for every call
in a call chain.

This PR makes us separately record the span of the function name and
arguments for a method call (e.g. `b()` in `foo.a().b().c()`). This
`Span` is passed through HIR lowering and MIR building to
`TerminatorKind::Call`, where it is used in preference to
`Terminator.source_info.span` when determining `Location::caller`.

This new span is also useful for diagnostics where we want to emphasize
a particular method call - for an example, see
https://github.com/rust-lang/rust/pull/72389#discussion_r436035990
2020-06-11 19:04:16 +02:00
Dylan DPC 2ac1598d83 Rollup merge of #73172 - matthiaskrgr:cl9ppy, r=Dylan-DPC
Fix more clippy warnings

Fixes more of:

clippy::unused_unit
clippy::op_ref
clippy::useless_format
clippy::needless_return
clippy::useless_conversion
clippy::bind_instead_of_map
clippy::into_iter_on_ref
clippy::redundant_clone
clippy::nonminimal_bool
clippy::redundant_closure
clippy::option_as_ref_deref
clippy::len_zero
clippy::iter_cloned_collect
clippy::filter_next

r? @Dylan-DPC
2020-06-11 13:16:04 +02:00
Dylan DPC 70c14c2d43 Rollup merge of #73164 - GuillaumeGomez:add-e0761, r=petrochenkov
Add new E0762 error code
2020-06-11 13:16:02 +02:00
Aaron Hill 28946b3486 Track span of function in method calls, and use this in #[track_caller]
Fixes #69977

When we parse a chain of method calls like `foo.a().b().c()`, each
`MethodCallExpr` gets assigned a span that starts at the beginning of
the call chain (`foo`). While this is useful for diagnostics, it means
that `Location::caller` will return the same location for every call
in a call chain.

This PR makes us separately record the span of the function name and
arguments for a method call (e.g. `b()` in `foo.a().b().c()`). This
`Span` is passed through HIR lowering and MIR building to
`TerminatorKind::Call`, where it is used in preference to
`Terminator.source_info.span` when determining `Location::caller`.

This new span is also useful for diagnostics where we want to emphasize
a particular method call - for an example, see
https://github.com/rust-lang/rust/pull/72389#discussion_r436035990
2020-06-10 17:30:11 -04:00
Guillaume Gomez 50a42fe513 Create new error code E0762 for unterminated char literals 2020-06-10 11:54:09 +02:00
Dylan DPC e04e3c89cc Rollup merge of #73157 - Aaron1011:where-oh-where-has-my-little-span-gone, r=ecstatic-morse
Don't lose empty `where` clause when pretty-printing

Previously, we would parse `struct Foo where;` and `struct Foo;`
identically, leading to an 'empty' `where` clause being omitted during
pretty printing. This will cause us to lose spans when proc-macros
involved, since we will have a collected `where` token that does not
appear in the pretty-printed item.

We now explicitly track the presence of a `where` token during parsing,
so that we can distinguish between `struct Foo where;` and `struct Foo;`
during pretty-printing
2020-06-10 11:03:49 +02:00
Matthias Krüger 58023fedfc Fix more clippy warnings
Fixes more of:

clippy::unused_unit
clippy::op_ref
clippy::useless_format
clippy::needless_return
clippy::useless_conversion
clippy::bind_instead_of_map
clippy::into_iter_on_ref
clippy::redundant_clone
clippy::nonminimal_bool
clippy::redundant_closure
clippy::option_as_ref_deref
clippy::len_zero
clippy::iter_cloned_collect
clippy::filter_next
2020-06-09 18:51:08 +02:00
Aaron Hill 0fcea2e423 Don't lose empty where clause when pretty-printing
Previously, we would parse `struct Foo where;` and `struct Foo;`
identically, leading to an 'empty' `where` clause being omitted during
pretty printing. This will cause us to lose spans when proc-macros
involved, since we will have a collected `where` token that does not
appear in the pretty-printed item.

We now explicitly track the presence of a `where` token during parsing,
so that we can distinguish between `struct Foo where;` and `struct Foo;`
during pretty-printing
2020-06-08 21:09:54 -04:00
Guillaume Gomez e8fb46090e Create new error code E0758 for unterminated multi-line comments 2020-06-07 14:57:53 +02:00
Julian Wollersberger 7be8077b3f Cleanup: Inline struct_span_fatal(), which is only called once, and remove an outdated FIXME. 2020-06-01 22:01:30 +02:00
Julian Wollersberger 5fbbfbbfa9 Simplify raw string error reporting.
This makes `UnvalidatedRawStr` and `ValidatedRawStr` unnecessary and removes 70 lines.
2020-06-01 22:01:19 +02:00
Ralf Jung e4c35246fc Rollup merge of #72585 - Aaron1011:feature/opt-item-tokens, r=petrochenkov
Only capture tokens for items with outer attributes

Suggested by @petrochenkov in https://github.com/rust-lang/rust/issues/43081#issuecomment-633389225
2020-05-30 13:45:13 +02:00
Yuki Okushi 047b3bd4df Rollup merge of #72724 - Aaron1011:revert-tokenstream-expand, r=petrochenkov
Revert recursive `TokenKind::Interpolated` expansion for now

The crater run https://github.com/rust-lang/rust/issues/72622 revealed many root regressions, at least one of which is going to take some time to fix.

For now, let's revert https://github.com/rust-lang/rust/pull/72388 to allow the 709 affected crates to continue building on the latest nightly.
2020-05-30 12:39:19 +09:00
Aaron Hill b802eebc67 Fix missing import lost in revert 2020-05-29 01:11:00 -04:00
Aaron Hill 1c2b65b1e1 Revert "Move functions to librustc_parse"
This reverts commit 7a4c1865fb.
2020-05-29 00:19:11 -04:00
Aaron Hill 1ae7de9a52 Revert "Recursively expand nonterminals"
This reverts commit 2af0218bf1.
2020-05-29 00:19:10 -04:00
Aaron Hill ed503acb46 Revert "Fix rebase fallout"
This reverts commit 5685e4dd90.
2020-05-29 00:19:06 -04:00
Chris Simpkins 593d1eed82 improve diagnostics suggestion for missing @ in slice id binding to rest pattern
add issue 72373 tests


fmt test


fix suggestion format

Replacement, not insertion of suggested string

implement review changes

refactor to span_suggestion_verbose, improve suggestion message,  change id @ pattern space formatting

fmt


fix diagnostics spacing between ident and @


refactor reference
2020-05-27 14:10:41 -04:00
Dylan DPC cbe7b908b1 Rollup merge of #72348 - chrissimpkins:fix-72253, r=estebank
Fix confusing error message for comma typo in multiline statement

Fixes #72253.  Expands on the issue with a colon typo check.

r? @estebank

cc @ehuss
2020-05-27 03:09:11 +02:00
Chris Simpkins f384cdcbec improve error message for unexpected comma token in multiline block
confusing diagnostics, issue #72253

add test for confusing error message, issue-72253


remove is_multiline check, refactor to self.expect(&token:Semi)


update issue-72253 tests


return Ok
2020-05-26 16:52:16 -04:00
Aaron Hill 4e2696f54a Only capture tokens for items with outer attributes
Suggested by @petrochenkov in https://github.com/rust-lang/rust/issues/43081#issuecomment-633389225
2020-05-25 23:44:40 -04:00
Aaron Hill 14382c6437 Collect tokens for ast::Expr 2020-05-24 15:54:48 -04:00
bors 94fccccd2c Auto merge of #72529 - RalfJung:rollup-ydthv90, r=RalfJung
Rollup of 3 pull requests

Successful merges:

 - #72284 (Remove `macro_defs` map)
 - #72393 (Rewrite `Parser::collect_tokens`)
 - #72528 (Fix typo in doc comment.)

Failed merges:

r? @ghost
2020-05-24 11:02:23 +00:00