diff --git a/grammar.ron b/grammar.ron index 0905c282a77..e3010b0092f 100644 --- a/grammar.ron +++ b/grammar.ron @@ -109,6 +109,7 @@ Grammar( "ARRAY_TYPE", "SLICE_TYPE", "REFERENCE_TYPE", + "PLACEHOLDER_TYPE", "EXTERN_BLOCK", "ENUM_VARIANT", diff --git a/src/parser/grammar/types.rs b/src/parser/grammar/types.rs index 003341db5f2..37b74bfe75c 100644 --- a/src/parser/grammar/types.rs +++ b/src/parser/grammar/types.rs @@ -7,6 +7,7 @@ pub(super) fn type_(p: &mut Parser) { STAR => pointer_type(p), L_BRACK => array_or_slice_type(p), AMPERSAND => reference_type(p), + UNDERSCORE => placeholder_type(p), IDENT => path_type(p), _ => { p.error("expected type"); @@ -130,6 +131,15 @@ fn reference_type(p: &mut Parser) { m.complete(p, REFERENCE_TYPE); } +// test placeholder_type +// type Placeholder = _; +fn placeholder_type(p: &mut Parser) { + assert!(p.at(UNDERSCORE)); + let m = p.start(); + p.bump(); + m.complete(p, PLACEHOLDER_TYPE); +} + fn path_type(p: &mut Parser) { assert!(p.at(IDENT)); let m = p.start(); diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs index 597550a3207..73539d6d48c 100644 --- a/src/syntax_kinds.rs +++ b/src/syntax_kinds.rs @@ -107,6 +107,7 @@ pub enum SyntaxKind { ARRAY_TYPE, SLICE_TYPE, REFERENCE_TYPE, + PLACEHOLDER_TYPE, EXTERN_BLOCK, ENUM_VARIANT, NAMED_FIELD, @@ -240,6 +241,7 @@ impl SyntaxKind { ARRAY_TYPE => &SyntaxInfo { name: "ARRAY_TYPE" }, SLICE_TYPE => &SyntaxInfo { name: "SLICE_TYPE" }, REFERENCE_TYPE => &SyntaxInfo { name: "REFERENCE_TYPE" }, + PLACEHOLDER_TYPE => &SyntaxInfo { name: "PLACEHOLDER_TYPE" }, EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" }, ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" }, NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" }, diff --git a/tests/data/parser/inline/0027_placeholder_type.rs b/tests/data/parser/inline/0027_placeholder_type.rs new file mode 100644 index 00000000000..7952dbd57d6 --- /dev/null +++ b/tests/data/parser/inline/0027_placeholder_type.rs @@ -0,0 +1 @@ +type Placeholder = _; diff --git a/tests/data/parser/inline/0027_placeholder_type.txt b/tests/data/parser/inline/0027_placeholder_type.txt new file mode 100644 index 00000000000..ab848836c59 --- /dev/null +++ b/tests/data/parser/inline/0027_placeholder_type.txt @@ -0,0 +1,13 @@ +FILE@[0; 22) + TYPE_ITEM@[0; 22) + TYPE_KW@[0; 4) + NAME@[4; 17) + WHITESPACE@[4; 5) + IDENT@[5; 16) "Placeholder" + WHITESPACE@[16; 17) + EQ@[17; 18) + PLACEHOLDER_TYPE@[18; 20) + WHITESPACE@[18; 19) + UNDERSCORE@[19; 20) + SEMI@[20; 21) + WHITESPACE@[21; 22)