5b6ad0971c
996: Allow attributes on top level expressions r=matklad a=pcpthm This PR modifies parser to allow outer attributes on top level expression. Here, top level expression means either - Expression statement e.g. `foo();` - Last expression in a block without semicolon `bar()` in `{ foo(); bar() }`. Except for binary operation expressions and `if` expressions, which are errors (feature gated) in rustc. Attributes on inner expressions like `foo(#[a] 1)` are not implemented. I first tried to implement this by passing `Maker` to expression parsers. However, this implementation couldn't parse `#[attr] foo()` correctly as `CallExpr(Attr(..), PathExpr(..), ArgList(..))` and instead parsed incorrectly as `CallExpr(PathExpr(Attr(..), ..), ArgList(..))` due to the way left recursion is handled. In the end, I introduce `undo_completion` method. Which is not the suggested approach, but it seems not very bad. Fix #759. Co-authored-by: pcpthm <pcpthm@gmail.com> |
||
---|---|---|
.. | ||
gen_lsp_server | ||
ra_arena | ||
ra_assists | ||
ra_batch | ||
ra_cli | ||
ra_db | ||
ra_fmt | ||
ra_hir | ||
ra_ide_api | ||
ra_ide_api_light | ||
ra_lsp_server | ||
ra_mbe | ||
ra_parser | ||
ra_project_model | ||
ra_syntax | ||
ra_text_edit | ||
ra_tt | ||
test_utils | ||
thread_worker | ||
tools |