about summary refs log tree commit diff
path: root/src/librustc_parse/parser/expr.rs
AgeCommit message (Collapse)AuthorLines
2020-08-30mv compiler to compiler/mark-2293/+0
2020-08-22Auto merge of #74566 - lzutao:guard, r=petrochenkovbors-1/+13
Gate if-let guard feature Enhanced on #74315. That PR is in crater queue so I don't want to push to it. Close #74232 cc #51114
2020-08-19Rollup merge of #75658 - tgnottingham:issue-75599, r=estebankYuki Okushi-1/+1
Don't emit "is not a logical operator" error outside of associative expressions Avoid showing this error where it doesn't make sense by not assuming "and" and "or" were intended to mean "&&" and "||" until after we decide to continue parsing input as an associative expression. Note that the decision of whether or not to continue parsing input as an associative expression doesn't actually depend on this assumption. Fixes #75599 --- First time contributor! Let me know if there are any conventions or policies I should be following that I missed here. Thanks :)
2020-08-18Don't emit "is not a logical operator" error outside of associative expressionsTyson Nottingham-1/+1
Avoid showing this error where it doesn't make sense by not assuming "and" and "or" were intended to mean "&&" and "||" until after we decide to continue parsing input as an associative expression. Note that the decision of whether or not to continue parsing input as an associative expression doesn't actually depend on this assumption. Fixes #75599
2020-08-17rust_ast::ast => rustc_astUjjwal Sharma-3/+3
2020-08-15replaced log with tracingGurpreet Singh-1/+1
2020-08-13Rollup merge of #74650 - estebank:ambiguous-expr-binop, r=eddybTyler Mandry-2/+9
Correctly parse `{} && false` in tail expression Fix #74233, fix #54186.
2020-08-12Auto merge of #75321 - estebank:js-goes-gaga, r=davidtwcobors-0/+23
Detect JS-style `===` and `!==` and recover Fix #75312.
2020-08-10Detect JS-style `===` and `!==` and recoverEsteban Küber-0/+23
Fix #75312.
2020-08-08Detect likely `for foo of bar` JS syntaxEsteban Küber-6/+13
Fix #75311.
2020-08-08Fallback to pase_expr because match guard accepts struct literalsLzu Tao-1/+1
2020-08-08Gate to if-let guard featureLzu Tao-1/+13
2020-08-02Introduce NonterminalKindAleksey Kladov-1/+1
It encapsulate the (part of) the interface between the parser and macro by example (macro_rules) parser. The second bit is somewhat more general `parse_ast_fragment`, which is the reason why we keep some `parse_xxx` functions as public.
2020-07-23Detect turbofish missing surrounding angle bracketsEsteban Küber-1/+2
2020-07-22Correctly parse `{} && false` in tail expressionEsteban Küber-2/+9
Fix #74233.
2020-07-10Rollup merge of #74125 - ayazhafiz:i/74050, r=matthewjasperManish Goregaokar-1/+1
Correctly mark the ending span of a match arm Closes #74050 r? @matthewjasper
2020-07-08Correctly mark the ending span of a match armAyaz Hafiz-1/+1
Closes #74050 r? @matthewjasper
2020-07-02parser: Break float tokens into parts in tuple field positionsVadim Petrochenkov-38/+81
2020-07-01Rollup merge of #73803 - Aaron1011:feature/angle-field-recovery, r=matthewjasperManish Goregaokar-1/+1
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-01Remove `token::FlattenGroup`Vadim Petrochenkov-1/+1
2020-06-27Recover extra trailing angle brackets in struct definitionAaron Hill-1/+1
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-26proc_macro: Stop flattening groups with dummy spansVadim Petrochenkov-1/+1
2020-06-10Track span of function in method calls, and use this in #[track_caller]Aaron Hill-2/+4
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-05-24Collect tokens for `ast::Expr`Aaron Hill-14/+34
2020-05-08Remove ast::{Ident, Name} reexports.Camille GILLOT-2/+2
2020-05-05Detect errors caused by `async` block in 2015 editionEsteban Küber-20/+34
2020-04-30Rollup merge of #71433 - antoyo:error/missing-right-operand, r=Dylan-DPCDylan DPC-0/+5
Add help message for missing right operand in condition closes #30035
2020-04-22Rollup merge of #71256 - cuviper:must_use_replace, r=estebankDylan DPC-4/+3
Lint must_use on mem::replace This adds a hint on `mem::replace`, "if you don't need the old value, you can just assign the new value directly". This is in similar spirit to the `must_use` on `ManuallyDrop::take`.
2020-04-22Add help message for missing right operand in conditionAntoni Boucher-0/+5
2020-04-17Fix unused results from mem::replaceJosh Stone-4/+3
2020-04-17Improved try_macro_suggestionDuddino-1/+1
2020-04-17Moved is_try check into try_macro_suggestionDuddino-3/+1
2020-04-17Account for use of `try!()` in 2018 edition and guide users in the right ↵Duddino-0/+2
direction
2020-04-14allow try as scrutinee, e.g. `match try ...`Bastian Kauschke-5/+3
2020-03-30parse_and_disallow_postfix_after_cast: account for `ExprKind::Err`.Mazdak Farrokhzad-0/+1
2020-03-22Rollup merge of #70209 - Centril:recover-quant-closure, r=petrochenkovDylan DPC-2/+31
parser: recover on `for<'a> |...| body` closures When encountering `for` and `<` is 1 token ahead, interpret this as an explicitly quantified generic closure and recover, rather than attempting to parse a `for` loop. This provides both improved diagnostics as well as an insurance policy for the ability to use this as the syntax for generic closures in the future. As requested by r? @eddyb
2020-03-21recover on `for<'a> |...| body` closures.Mazdak Farrokhzad-2/+31
2020-03-21Rollup merge of #70187 - matthiaskrgr:cl2ppy, r=Mark-SimulacrumMazdak Farrokhzad-2/+2
more clippy fixes * remove redundant returns (clippy::needless_return) * remove redundant import (clippy::single_component_path_imports) * remove redundant format!() call (clippy::useless_format) * don't use ok() before calling expect() (clippy::ok_expect)
2020-03-20remove redundant returns (clippy::needless_return)Matthias Krüger-2/+2
2020-03-20can_begin_literal_maybe_minus: `true` on `"-"? lit` NTs.Mazdak Farrokhzad-0/+1
2020-03-12ast: `Mac`/`Macro` -> `MacCall`Vadim Petrochenkov-4/+4
2020-03-10parse_if_expr: recover on attributesMazdak Farrokhzad-6/+37
2020-03-10use check_path moreMazdak Farrokhzad-1/+1
2020-03-10parser: add note for `'label expr`.Mazdak Farrokhzad-0/+1
2020-03-10parse_labeled_expr: add a suggestion on missing colon.Mazdak Farrokhzad-3/+13
2020-03-10parse: recover on `&'lt $expr` / `'lt $expr`.Mazdak Farrokhzad-4/+31
2020-03-10more reuse in block parsing & improve diagnostics.Mazdak Farrokhzad-7/+9
2020-03-10parse_labeled_expr: simplifyMazdak Farrokhzad-15/+13
2020-03-09Rollup merge of #69801 - petrochenkov:nonorm, r=CentrilMazdak Farrokhzad-35/+38
rustc_parse: Remove `Parser::normalized(_prev)_token` Perform the "normalization" (renamed to "uninterpolation") on the fly when necessary. The final part of https://github.com/rust-lang/rust/pull/69579 https://github.com/rust-lang/rust/pull/69384 https://github.com/rust-lang/rust/pull/69376 https://github.com/rust-lang/rust/pull/69211 https://github.com/rust-lang/rust/pull/69034 https://github.com/rust-lang/rust/pull/69006. r? @Centril
2020-03-09Rollup merge of #69201 - Aaron1011:feature/permit-if-attr, r=CentrilMazdak Farrokhzad-9/+0
Permit attributes on 'if' expressions Previously, attributes on 'if' expressions (e.g. `#[attr] if true {}`) were disallowed during parsing. This made it impossible for macros to perform any custom handling of such attributes (e.g. stripping them away), since a compilation error would be emitted before they ever had a chance to run. This PR permits attributes on 'if' expressions ('if-attrs' from here on). Both built-in attributes (e.g. `#[allow]`, `#[cfg]`) and proc-macro attributes are supported. We still do *not* accept attributes on 'other parts' of an if-else chain. That is, the following code snippet still fails to parse: ```rust if true {} #[attr] else if false {} else #[attr] if false {} #[attr] else {} ``` Closes https://github.com/rust-lang/rust/issues/68618