-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Closed
Labels
A-parserparser issuesparser issues
Description
Currently the parser and rest of the rust-analyzer doesn't know about if_let_guard. The feature currently has a PR on rustc to unmark it as incomplete.
This is not a high priority issue as it is probably not going to be stabilized super soon but it would be good to have rust-analyzer able to parse code with this in it.
These can do things like introduce bindings into the scope of the match arm:
#![feature(if_let_guard)]
fn main() {
let somevar = Some(4);
match 2 {
2 if let Some(v) = somevar => println!("2 {}", v),
_ => println!("not 2")
}
}Parse tree:
Parse tree
jade/play-7qw63xe5 » ~/dev/rust-analyzer/target/release/rust-analyzer parse < src/main.rs
SOURCE_FILE@0..179
ATTR@0..25
POUND@0..1 "#"
BANG@1..2 "!"
L_BRACK@2..3 "["
META@3..24
PATH@3..10
PATH_SEGMENT@3..10
NAME_REF@3..10
IDENT@3..10 "feature"
TOKEN_TREE@10..24
L_PAREN@10..11 "("
IDENT@11..23 "if_let_guard"
R_PAREN@23..24 ")"
R_BRACK@24..25 "]"
WHITESPACE@25..26 "\n"
FN@26..178
FN_KW@26..28 "fn"
WHITESPACE@28..29 " "
NAME@29..33
IDENT@29..33 "main"
PARAM_LIST@33..35
L_PAREN@33..34 "("
R_PAREN@34..35 ")"
WHITESPACE@35..36 " "
BLOCK_EXPR@36..178
L_CURLY@36..37 "{"
WHITESPACE@37..42 "\n "
LET_STMT@42..64
LET_KW@42..45 "let"
WHITESPACE@45..46 " "
IDENT_PAT@46..53
NAME@46..53
IDENT@46..53 "somevar"
WHITESPACE@53..54 " "
EQ@54..55 "="
WHITESPACE@55..56 " "
CALL_EXPR@56..63
PATH_EXPR@56..60
PATH@56..60
PATH_SEGMENT@56..60
NAME_REF@56..60
IDENT@56..60 "Some"
ARG_LIST@60..63
L_PAREN@60..61 "("
LITERAL@61..62
INT_NUMBER@61..62 "4"
R_PAREN@62..63 ")"
SEMICOLON@63..64 ";"
WHITESPACE@64..69 "\n "
MATCH_EXPR@69..176
MATCH_KW@69..74 "match"
WHITESPACE@74..75 " "
LITERAL@75..76
INT_NUMBER@75..76 "2"
WHITESPACE@76..77 " "
MATCH_ARM_LIST@77..176
L_CURLY@77..78 "{"
WHITESPACE@78..87 "\n "
MATCH_ARM@87..91
LITERAL_PAT@87..88
LITERAL@87..88
INT_NUMBER@87..88 "2"
WHITESPACE@88..89 " "
MATCH_GUARD@89..91
IF_KW@89..91 "if"
WHITESPACE@91..92 " "
MATCH_ARM@92..113
ERROR@92..95
LET_KW@92..95 "let"
WHITESPACE@95..96 " "
BIN_EXPR@96..113
CALL_EXPR@96..103
PATH_EXPR@96..100
PATH@96..100
PATH_SEGMENT@96..100
NAME_REF@96..100
IDENT@96..100 "Some"
ARG_LIST@100..103
L_PAREN@100..101 "("
PATH_EXPR@101..102
PATH@101..102
PATH_SEGMENT@101..102
NAME_REF@101..102
IDENT@101..102 "v"
R_PAREN@102..103 ")"
WHITESPACE@103..104 " "
EQ@104..105 "="
WHITESPACE@105..106 " "
PATH_EXPR@106..113
PATH@106..113
PATH_SEGMENT@106..113
NAME_REF@106..113
IDENT@106..113 "somevar"
WHITESPACE@113..114 " "
MATCH_ARM@114..116
ERROR@114..115
EQ@114..115 "="
ERROR@115..116
R_ANGLE@115..116 ">"
WHITESPACE@116..118 " "
MATCH_ARM@118..138
MACRO_PAT@118..137
MACRO_CALL@118..137
PATH@118..125
PATH_SEGMENT@118..125
NAME_REF@118..125
IDENT@118..125 "println"
BANG@125..126 "!"
TOKEN_TREE@126..137
L_PAREN@126..127 "("
STRING@127..133 "\"2 {}\""
COMMA@133..134 ","
WHITESPACE@134..135 " "
IDENT@135..136 "v"
R_PAREN@136..137 ")"
ERROR@137..138
COMMA@137..138 ","
WHITESPACE@138..148 " \n "
MATCH_ARM@148..170
WILDCARD_PAT@148..149
UNDERSCORE@148..149 "_"
WHITESPACE@149..150 " "
FAT_ARROW@150..152 "=>"
WHITESPACE@152..153 " "
MACRO_CALL@153..170
PATH@153..160
PATH_SEGMENT@153..160
NAME_REF@153..160
IDENT@153..160 "println"
BANG@160..161 "!"
TOKEN_TREE@161..170
L_PAREN@161..162 "("
STRING@162..169 "\"not 2\""
R_PAREN@169..170 ")"
WHITESPACE@170..175 "\n "
R_CURLY@175..176 "}"
WHITESPACE@176..177 "\n"
R_CURLY@177..178 "}"
WHITESPACE@178..179 "\n"
LeSeulArtichaut
Metadata
Metadata
Assignees
Labels
A-parserparser issuesparser issues