about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser/expr.rs
AgeCommit message (Collapse)AuthorLines
2022-12-05Rollup merge of #105223 - lukas-code:(ExprWithBlock), r=petrochenkovMatthias Krüger-14/+5
suggest parenthesis around ExprWithBlock BinOp ExprWithBlock fix https://github.com/rust-lang/rust/issues/105179 fix https://github.com/rust-lang/rust/issues/102171
2022-12-03more commentsLukas Markeffsky-3/+4
2022-12-03suggest parenthesis around ExprWithBlock BinOp ExprWithBlockLukas Markeffsky-12/+2
2022-12-03Rollup merge of #104199 - SarthakSingh31:issue-97417-1, r=cjgillotMatthias Krüger-3/+7
Keep track of the start of the argument block of a closure This removes a call to `tcx.sess.source_map()` from [compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs](https://github.com/rust-lang/rust/compare/master...SarthakSingh31:issue-97417-1?expand=1#diff-8406bbc0d0b43d84c91b1933305df896ecdba0d1f9269e6744f13d87a2ab268a) as required by #97417. VsCode automatically applied `rustfmt` to the files I edited under `src/tools`. I can undo that if its a problem. r? `@cjgillot`
2022-11-28Keep track of the start of the argument block of a closureSarthak Singh-3/+7
2022-11-28Rename `ast::Lit` as `ast::MetaItemLit`.Nicholas Nethercote-12/+15
2022-11-23Suggest `.clone()` or `ref binding` on E0382Esteban Küber-2/+3
2022-11-22`rustc_parse`: remove `ref` patternsMaybe Waffle-4/+4
2022-11-22Split `MacArgs` in two.Nicholas Nethercote-1/+1
`MacArgs` is an enum with three variants: `Empty`, `Delimited`, and `Eq`. It's used in two ways: - For representing attribute macro arguments (e.g. in `AttrItem`), where all three variants are used. - For representing function-like macros (e.g. in `MacCall` and `MacroDef`), where only the `Delimited` variant is used. In other words, `MacArgs` is used in two quite different places due to them having partial overlap. I find this makes the code hard to read. It also leads to various unreachable code paths, and allows invalid values (such as accidentally using `MacArgs::Empty` in a `MacCall`). This commit splits `MacArgs` in two: - `DelimArgs` is a new struct just for the "delimited arguments" case. It is now used in `MacCall` and `MacroDef`. - `AttrArgs` is a renaming of the old `MacArgs` enum for the attribute macro case. Its `Delimited` variant now contains a `DelimArgs`. Various other related things are renamed as well. These changes make the code clearer, avoids several unreachable paths, and disallows the invalid values.
2022-11-19Cleanup macro matching recoveryNilstrieb-5/+0
The retry has been implemented already.
2022-11-18Auto merge of #104573 - matthiaskrgr:rollup-k36ybtp, r=matthiaskrgrbors-2/+13
Rollup of 8 pull requests Successful merges: - #101162 (Migrate rustc_resolve to use SessionDiagnostic, part # 1) - #103386 (Don't allow `CoerceUnsized` into `dyn*` (except for trait upcasting)) - #103405 (Detect incorrect chaining of if and if let conditions and recover) - #103594 (Fix non-associativity of `Instant` math on `aarch64-apple-darwin` targets) - #104006 (Add variant_name function to `LangItem`) - #104494 (Migrate GUI test to use functions) - #104516 (rustdoc: clean up sidebar width CSS) - #104550 (fix a typo) Failed merges: - #104554 (Use `ErrorGuaranteed::unchecked_claim_error_was_emitted` less) r? `@ghost` `@rustbot` modify labels: rollup
2022-11-18Rollup merge of #103405 - chenyukang:yukang/fix-103381-and-if, r=compiler-errorsMatthias Krüger-2/+13
Detect incorrect chaining of if and if let conditions and recover Fixes #103381
2022-11-17Box `ExprKind::{Closure,MethodCall}`, and `QSelf` in expressions, types, and ↵Nicholas Nethercote-17/+25
patterns.
2022-11-16Use `token::Lit` in `ast::ExprKind::Lit`.Nicholas Nethercote-145/+97
Instead of `ast::Lit`. Literal lowering now happens at two different times. Expression literals are lowered when HIR is crated. Attribute literals are lowered during parsing. This commit changes the language very slightly. Some programs that used to not compile now will compile. This is because some invalid literals that are removed by `cfg` or attribute macros will no longer trigger errors. See this comment for more details: https://github.com/rust-lang/rust/pull/102944#issuecomment-1277476773
2022-11-15fix #103381, Detect incorrect chaining of if and if let conditionsyukang-2/+13
2022-11-13Add `delay_span_bug` to `AttrWrapper::take_for_recovery`Maybe Waffle-5/+10
2022-11-11Auto merge of #99918 - WaffleLapkin:fnFnfun, r=estebankbors-1/+2
Recover wrong-cased keywords that start items (_this pr was inspired by [this tweet](https://twitter.com/Azumanga/status/1552982326409367561)_) r? `@estebank` We've talked a bit about this recovery, but I just wanted to make sure that this is the right approach :) For now I've only added the case insensitive recovery to `use`s, since most other items like `impl` blocks, modules, functions can start with multiple keywords which complicates the matter.
2022-11-10Auto merge of #103636 - chenyukang:yukang/fix-103587-sugg-if-let, ↵bors-4/+12
r=jackh276,davidtwco Recover from common if let syntax mistakes/typos Fixes #103587
2022-11-08Fix outdated commentWaffle Maybe-1/+1
Co-authored-by: clubby789 <jamie@hill-daniel.co.uk>
2022-11-08Remove an address comparison from the parserMaybe Waffle-6/+1
2022-11-08fix #103587, Recover from common if let syntax mistakes/typosyukang-4/+12
2022-11-05Fix typoMichael Goulet-2/+2
2022-11-04fake a base to suppress later extra error messageyukang-16/+13
2022-11-04fix #102806, suggest use .. to fill in the rest of the fields of Structyukang-3/+18
2022-10-28Gate some recovery behind a flagNilstrieb-6/+19
Mainly in `expr.rs`
2022-10-25Add flag to forbid recovery in the parserNilstrieb-0/+2
2022-10-25Rollup merge of #103333 - chenyukang:yukang/fix-103143, r=wesleywiserYuki Okushi-0/+2
Fix assertion failed for break_last_token and trailing token Fixes #103143
2022-10-23Rollup merge of #101293 - compiler-errors:lt-is-actually-char, r=estebankDylan DPC-9/+67
Recover when unclosed char literal is parsed as a lifetime in some positions Fixes #101278
2022-10-22Don't erroneously deny semicolons after closure expr within parentheses in a ↵Michael Goulet-0/+4
macro
2022-10-22Recover unclosed char literal being parsed as lifetimeMichael Goulet-9/+67
2022-10-20fix assertion failed for break_last_token and trailing tokenyukang-0/+2
2022-10-18Fix the bug of next_point in spanyukang-1/+1
2022-10-01Replace some `bool` params with an enumMaybe Waffle-1/+2
2022-10-01Recover wrong cased keywords starting functionsMaybe Waffle-1/+1
2022-09-30Remove expr_parentheses_needed from ParseSessMichael Goulet-1/+1
2022-09-27Implement IntoDiagnosticArg for rustc_ast::token::Token(Kind)Xiretza-2/+1
2022-09-27Don't unnecessarily stringify paths in diagnosticsXiretza-9/+9
2022-09-27Migrate even more diagnostics in rustc_parse to diagnostic structsXiretza-20/+22
2022-09-27Migrate more rustc_parse diagnostics to diagnostic structsXiretza-5/+5
2022-09-27Move rustc_parse diagnostic structs to separate moduleXiretza-24/+22
2022-09-27Migrate "invalid literal suffix" diagnostic to diagnostic structsXiretza-45/+28
2022-09-27Migrate more diagnostics in rustc_parse to diagnostic structsXiretza-188/+139
2022-09-21UPDATE - rename DiagnosticHandler trait to IntoDiagnosticJhonny Bill Mena-1/+1
2022-09-21UPDATE - move SessionDiagnostic from rustc_session to rustc_errorsJhonny Bill Mena-1/+1
2022-09-16use subdiagnostic for logical negation, bitwise notyukang-8/+11
2022-09-15more tweak on diagnostic messagesyukang-0/+9
2022-09-07Rollup merge of #101502 - ↵Matthias Krüger-0/+3
TaKO8Ki:do-not-suggest-semicolon-for-macro-without-exclamation-mark, r=wesleywiser Do not suggest a semicolon for a macro without `!` Fixes a regression in #101490
2022-09-07do not suggest a semicolon for a macro without `!`Takayuki Maeda-0/+3
2022-09-05UPDATE - into_diagnostic to take a Handler instead of a ParseSessJhonny Bill Mena-2/+3
Suggested by the team in this Zulip Topic https://rust-lang.zulipchat.com/#narrow/stream/336883-i18n/topic/.23100717.20SessionDiagnostic.20on.20Handler Handler already has almost all the capabilities of ParseSess when it comes to diagnostic emission, in this migration we only needed to add the ability to access source_map from the emitter in order to get a Snippet and the start_point. Not sure if this is the best way to address this gap
2022-09-01Auto merge of #100869 - nnethercote:replace-ThinVec, r=spastorinobors-6/+11
Replace `rustc_data_structures::thin_vec::ThinVec` with `thin_vec::ThinVec` `rustc_data_structures::thin_vec::ThinVec` looks like this: ``` pub struct ThinVec<T>(Option<Box<Vec<T>>>); ``` It's just a zero word if the vector is empty, but requires two allocations if it is non-empty. So it's only usable in cases where the vector is empty most of the time. This commit removes it in favour of `thin_vec::ThinVec`, which is also word-sized, but stores the length and capacity in the same allocation as the elements. It's good in a wider variety of situation, e.g. in enum variants where the vector is usually/always non-empty. The commit also: - Sorts some `Cargo.toml` dependency lists, to make additions easier. - Sorts some `use` item lists, to make additions easier. - Changes `clean_trait_ref_with_bindings` to take a `ThinVec<TypeBinding>` rather than a `&[TypeBinding]`, because this avoid some unnecessary allocations. r? `@spastorino`