mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
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 {
|
fn scan_ident(c: char, ptr: &mut Ptr) -> SyntaxKind {
|
||||||
match (c, ptr.current()) {
|
let is_raw = match (c, ptr.current()) {
|
||||||
('r', Some('#')) => {
|
('r', Some('#')) => {
|
||||||
ptr.bump();
|
ptr.bump();
|
||||||
|
true
|
||||||
}
|
}
|
||||||
('_', Some(c)) if !is_ident_continue(c) => return UNDERSCORE,
|
('_', Some(c)) if !is_ident_continue(c) => return UNDERSCORE,
|
||||||
_ => {}
|
_ => false,
|
||||||
}
|
};
|
||||||
ptr.bump_while(is_ident_continue);
|
ptr.bump_while(is_ident_continue);
|
||||||
if let Some(kind) = SyntaxKind::from_keyword(ptr.current_token_text()) {
|
if !is_raw {
|
||||||
return kind;
|
if let Some(kind) = SyntaxKind::from_keyword(ptr.current_token_text()) {
|
||||||
|
return kind;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
IDENT
|
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…
Reference in New Issue
Block a user