fix: Fix parsing of integer/keyword name refs in various places

This commit is contained in:
Lukas Wirth 2024-12-05 14:37:38 +01:00
parent f499faf72b
commit df7ab62a06
33 changed files with 351 additions and 133 deletions

View file

@ -210,10 +210,6 @@ mod ok {
run_and_expect_no_errors("test_data/parser/inline/ok/extern_crate_rename.rs");
}
#[test]
fn extern_crate_self() {
run_and_expect_no_errors("test_data/parser/inline/ok/extern_crate_self.rs");
}
#[test]
fn field_expr() { run_and_expect_no_errors("test_data/parser/inline/ok/field_expr.rs"); }
#[test]
fn fn_() { run_and_expect_no_errors("test_data/parser/inline/ok/fn_.rs"); }
@ -774,6 +770,10 @@ mod err {
run_and_expect_errors("test_data/parser/inline/err/pointer_type_no_mutability.rs");
}
#[test]
fn precise_capturing_invalid() {
run_and_expect_errors("test_data/parser/inline/err/precise_capturing_invalid.rs");
}
#[test]
fn pub_expr() { run_and_expect_errors("test_data/parser/inline/err/pub_expr.rs"); }
#[test]
fn record_literal_before_ellipsis_recovery() {

View file

@ -13,4 +13,4 @@ SOURCE_FILE
ERROR
INT_NUMBER "92"
SEMICOLON ";"
error 9: expected identifier
error 9: expected identifier, `self`, `super`, `crate`, or `Self`

View file

@ -115,10 +115,10 @@ SOURCE_FILE
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"
error 30: expected identifier
error 30: expected identifier, `self`, `super`, `crate`, or `Self`
error 31: expected COMMA
error 37: expected expression
error 75: expected identifier
error 75: expected identifier, `self`, `super`, `crate`, or `Self`
error 76: expected SEMICOLON
error 82: expected expression
error 83: expected SEMICOLON

View file

@ -98,7 +98,7 @@ SOURCE_FILE
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"
error 25: expected identifier
error 25: expected identifier, `self`, `super`, `crate`, or `Self`
error 39: expected COMMA
error 39: expected expression
error 55: expected expression

View file

@ -11,4 +11,4 @@ SOURCE_FILE
IDENT "S"
SEMICOLON ";"
WHITESPACE "\n"
error 4: expected identifier
error 4: expected identifier, `self`, `super`, `crate`, or `Self`

View file

@ -11,4 +11,4 @@ SOURCE_FILE
COLON2 "::"
SEMICOLON ";"
WHITESPACE "\n"
error 11: expected identifier
error 11: expected identifier, `self`, `super`, `crate`, or `Self`

View file

@ -66,18 +66,18 @@ SOURCE_FILE
EQ "="
R_BRACK "]"
WHITESPACE "\n"
error 3: expected identifier
error 3: expected identifier, `self`, `super`, `crate`, or `Self`
error 11: expected expression
error 11: expected expression
error 20: expected identifier
error 28: expected identifier
error 20: expected identifier, `self`, `super`, `crate`, or `Self`
error 28: expected identifier, `self`, `super`, `crate`, or `Self`
error 30: expected expression
error 30: expected expression
error 41: expected L_PAREN
error 41: expected identifier
error 41: expected identifier, `self`, `super`, `crate`, or `Self`
error 41: expected R_PAREN
error 52: expected L_PAREN
error 52: expected identifier
error 52: expected identifier, `self`, `super`, `crate`, or `Self`
error 54: expected expression
error 54: expected expression
error 54: expected R_PAREN

View file

@ -0,0 +1,28 @@
SOURCE_FILE
TYPE_ALIAS
TYPE_KW "type"
WHITESPACE " "
NAME
IDENT "T"
WHITESPACE " "
EQ "="
WHITESPACE " "
IMPL_TRAIT_TYPE
IMPL_KW "impl"
WHITESPACE " "
TYPE_BOUND_LIST
TYPE_BOUND
USE_KW "use"
USE_BOUND_GENERIC_ARGS
L_ANGLE "<"
ERROR
SELF_KW "self"
COMMA ","
WHITESPACE " "
ERROR
INT_NUMBER "1"
R_ANGLE ">"
SEMICOLON ";"
WHITESPACE "\n"
error 18: expected identifier or `Self`
error 24: expected identifier or `Self`

View file

@ -0,0 +1 @@
type T = impl use<self, 1>;

View file

@ -12,6 +12,38 @@ SOURCE_FILE
STMT_LIST
L_CURLY "{"
WHITESPACE "\n "
EXPR_STMT
RECORD_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
WHITESPACE " "
RECORD_EXPR_FIELD_LIST
L_CURLY "{"
WHITESPACE " "
RECORD_EXPR_FIELD
NAME_REF
IDENT "field"
WHITESPACE " "
DOT2 ".."
CALL_EXPR
PATH_EXPR
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "default"
ARG_LIST
L_PAREN "("
R_PAREN ")"
WHITESPACE " "
R_CURLY "}"
WHITESPACE "\n "
RECORD_EXPR
PATH
PATH_SEGMENT
@ -23,7 +55,7 @@ SOURCE_FILE
WHITESPACE " "
RECORD_EXPR_FIELD
NAME_REF
IDENT "field"
INT_NUMBER "0"
WHITESPACE " "
DOT2 ".."
CALL_EXPR
@ -47,3 +79,6 @@ SOURCE_FILE
WHITESPACE "\n"
error 25: expected `:`
error 25: expected COMMA
error 42: expected SEMICOLON
error 52: expected `:`
error 52: expected COMMA

View file

@ -1,3 +1,4 @@
fn main() {
S { field ..S::default() }
S { 0 ..S::default() }
}

View file

@ -12,6 +12,31 @@ SOURCE_FILE
STMT_LIST
L_CURLY "{"
WHITESPACE "\n "
EXPR_STMT
RECORD_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
WHITESPACE " "
RECORD_EXPR_FIELD_LIST
L_CURLY "{"
WHITESPACE " "
RECORD_EXPR_FIELD
NAME_REF
IDENT "field"
WHITESPACE " "
ERROR
EQ "="
WHITESPACE " "
PATH_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "foo"
WHITESPACE " "
R_CURLY "}"
WHITESPACE "\n "
RECORD_EXPR
PATH
PATH_SEGMENT
@ -23,7 +48,7 @@ SOURCE_FILE
WHITESPACE " "
RECORD_EXPR_FIELD
NAME_REF
IDENT "field"
INT_NUMBER "0"
WHITESPACE " "
ERROR
EQ "="
@ -39,3 +64,5 @@ SOURCE_FILE
R_CURLY "}"
WHITESPACE "\n"
error 26: expected `:`
error 33: expected SEMICOLON
error 44: expected `:`

View file

@ -1,3 +1,4 @@
fn main() {
S { field = foo }
S { 0 = foo }
}

View file

@ -12,32 +12,70 @@ SOURCE_FILE
STMT_LIST
L_CURLY "{"
WHITESPACE "\n "
RECORD_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
WHITESPACE " "
RECORD_EXPR_FIELD_LIST
L_CURLY "{"
EXPR_STMT
RECORD_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
WHITESPACE " "
CALL_EXPR
PATH_EXPR
PATH
RECORD_EXPR_FIELD_LIST
L_CURLY "{"
WHITESPACE " "
CALL_EXPR
PATH_EXPR
PATH
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "S"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "default"
ARG_LIST
L_PAREN "("
R_PAREN ")"
IDENT "default"
ARG_LIST
L_PAREN "("
R_PAREN ")"
WHITESPACE " "
R_CURLY "}"
SEMICOLON ";"
WHITESPACE "\n "
EXPR_STMT
RECORD_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "S"
WHITESPACE " "
R_CURLY "}"
RECORD_EXPR_FIELD_LIST
L_CURLY "{"
WHITESPACE " "
LITERAL
INT_NUMBER "0"
ERROR
COLON ":"
ERROR
COLON ":"
RECORD_EXPR_FIELD
CALL_EXPR
PATH_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "default"
ARG_LIST
L_PAREN "("
R_PAREN ")"
WHITESPACE " "
R_CURLY "}"
SEMICOLON ";"
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"
error 19: expected DOT2
error 43: expected DOT2
error 45: expected COMMA
error 45: expected identifier
error 46: expected COMMA
error 46: expected identifier
error 47: expected COMMA

View file

@ -1,3 +1,4 @@
fn main() {
S { S::default() }
S { S::default() };
S { 0::default() };
}

View file

@ -8,3 +8,12 @@ SOURCE_FILE
IDENT "foo"
SEMICOLON ";"
WHITESPACE "\n"
EXTERN_CRATE
EXTERN_KW "extern"
WHITESPACE " "
CRATE_KW "crate"
WHITESPACE " "
NAME_REF
SELF_KW "self"
SEMICOLON ";"
WHITESPACE "\n"

View file

@ -1 +1,2 @@
extern crate foo;
extern crate self;

View file

@ -14,3 +14,18 @@ SOURCE_FILE
IDENT "bar"
SEMICOLON ";"
WHITESPACE "\n"
EXTERN_CRATE
EXTERN_KW "extern"
WHITESPACE " "
CRATE_KW "crate"
WHITESPACE " "
NAME_REF
SELF_KW "self"
WHITESPACE " "
RENAME
AS_KW "as"
WHITESPACE " "
NAME
IDENT "bar"
SEMICOLON ";"
WHITESPACE "\n"

View file

@ -1 +1,2 @@
extern crate foo as bar;
extern crate self as bar;

View file

@ -1,10 +0,0 @@
SOURCE_FILE
EXTERN_CRATE
EXTERN_KW "extern"
WHITESPACE " "
CRATE_KW "crate"
WHITESPACE " "
NAME_REF
SELF_KW "self"
SEMICOLON ";"
WHITESPACE "\n"

View file

@ -1 +0,0 @@
extern crate self;

View file

@ -12,6 +12,30 @@ SOURCE_FILE
STMT_LIST
L_CURLY "{"
WHITESPACE "\n "
EXPR_STMT
FIELD_EXPR
PATH_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "x"
DOT "."
NAME_REF
SELF_KW "self"
SEMICOLON ";"
WHITESPACE "\n "
EXPR_STMT
FIELD_EXPR
PATH_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "x"
DOT "."
NAME_REF
SELF_TYPE_KW "Self"
SEMICOLON ";"
WHITESPACE "\n "
EXPR_STMT
FIELD_EXPR
PATH_EXPR

View file

@ -1,4 +1,6 @@
fn foo() {
x.self;
x.Self;
x.foo;
x.0.bar;
x.0.1;

View file

@ -101,6 +101,20 @@ SOURCE_FILE
L_PAREN "("
R_PAREN ")"
SEMICOLON ";"
WHITESPACE "\n "
CALL_EXPR
FIELD_EXPR
PATH_EXPR
PATH
PATH_SEGMENT
NAME_REF
IDENT "x"
DOT "."
NAME_REF
INT_NUMBER "0"
ARG_LIST
L_PAREN "("
R_PAREN ")"
WHITESPACE "\n"
R_CURLY "}"
WHITESPACE "\n"

View file

@ -3,4 +3,5 @@ fn foo() {
y.bar::<T>(1, 2,);
x.0.0.call();
x.0. call();
x.0()
}