More correct raw ident handling
This commit is contained in:
parent
302508d5bb
commit
2ffea72f74
@ -190,16 +190,19 @@ fn next_token_inner(c: char, ptr: &mut Ptr) -> SyntaxKind {
|
||||
}
|
||||
|
||||
fn scan_ident(c: char, ptr: &mut Ptr) -> SyntaxKind {
|
||||
match (c, ptr.current()) {
|
||||
let is_raw = match (c, ptr.current()) {
|
||||
('r', Some('#')) => {
|
||||
ptr.bump();
|
||||
true
|
||||
}
|
||||
('_', Some(c)) if !is_ident_continue(c) => return UNDERSCORE,
|
||||
_ => {}
|
||||
}
|
||||
_ => false,
|
||||
};
|
||||
ptr.bump_while(is_ident_continue);
|
||||
if let Some(kind) = SyntaxKind::from_keyword(ptr.current_token_text()) {
|
||||
return kind;
|
||||
if !is_raw {
|
||||
if let Some(kind) = SyntaxKind::from_keyword(ptr.current_token_text()) {
|
||||
return kind;
|
||||
}
|
||||
}
|
||||
IDENT
|
||||
}
|
||||
|
@ -0,0 +1 @@
|
||||
fn foo() { let r#struct = 92; let r#trait = r#struct * 2; }
|
49
crates/ra_syntax/tests/data/parser/ok/0041_raw_keywords.txt
Normal file
49
crates/ra_syntax/tests/data/parser/ok/0041_raw_keywords.txt
Normal file
@ -0,0 +1,49 @@
|
||||
SOURCE_FILE@[0; 59)
|
||||
FN_DEF@[0; 59)
|
||||
FN_KW@[0; 2)
|
||||
WHITESPACE@[2; 3)
|
||||
NAME@[3; 6)
|
||||
IDENT@[3; 6) "foo"
|
||||
PARAM_LIST@[6; 8)
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
BLOCK@[9; 59)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 11)
|
||||
LET_STMT@[11; 29)
|
||||
LET_KW@[11; 14)
|
||||
WHITESPACE@[14; 15)
|
||||
BIND_PAT@[15; 23)
|
||||
NAME@[15; 23)
|
||||
IDENT@[15; 23) "r#struct"
|
||||
WHITESPACE@[23; 24)
|
||||
EQ@[24; 25)
|
||||
WHITESPACE@[25; 26)
|
||||
LITERAL@[26; 28)
|
||||
INT_NUMBER@[26; 28) "92"
|
||||
SEMI@[28; 29)
|
||||
WHITESPACE@[29; 30)
|
||||
LET_STMT@[30; 57)
|
||||
LET_KW@[30; 33)
|
||||
WHITESPACE@[33; 34)
|
||||
BIND_PAT@[34; 41)
|
||||
NAME@[34; 41)
|
||||
IDENT@[34; 41) "r#trait"
|
||||
WHITESPACE@[41; 42)
|
||||
EQ@[42; 43)
|
||||
WHITESPACE@[43; 44)
|
||||
BIN_EXPR@[44; 56)
|
||||
PATH_EXPR@[44; 52)
|
||||
PATH@[44; 52)
|
||||
PATH_SEGMENT@[44; 52)
|
||||
NAME_REF@[44; 52)
|
||||
IDENT@[44; 52) "r#struct"
|
||||
WHITESPACE@[52; 53)
|
||||
STAR@[53; 54)
|
||||
WHITESPACE@[54; 55)
|
||||
LITERAL@[55; 56)
|
||||
INT_NUMBER@[55; 56) "2"
|
||||
SEMI@[56; 57)
|
||||
WHITESPACE@[57; 58)
|
||||
R_CURLY@[58; 59)
|
Loading…
x
Reference in New Issue
Block a user