Parse outer attributes on StructPatternEtCetera

This commit is contained in:
zhoufan 2021-10-02 09:57:44 +08:00
parent 237ea0d34d
commit 0ee6b70b34
6 changed files with 103 additions and 32 deletions

View file

@ -1175,6 +1175,7 @@ impl BoxPat {
pub struct RestPat {
pub(crate) syntax: SyntaxNode,
}
impl ast::HasAttrs for RestPat {}
impl RestPat {
pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) }
}
@ -1289,7 +1290,7 @@ pub struct RecordPatFieldList {
impl RecordPatFieldList {
pub fn l_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['{']) }
pub fn fields(&self) -> AstChildren<RecordPatField> { support::children(&self.syntax) }
pub fn dotdot_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![..]) }
pub fn rest_pat(&self) -> Option<RestPat> { support::child(&self.syntax) }
pub fn r_curly_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T!['}']) }
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
@ -3687,6 +3688,7 @@ impl AstNode for AnyHasAttrs {
| MATCH_ARM_LIST
| MATCH_ARM
| IDENT_PAT
| REST_PAT
| RECORD_PAT_FIELD => true,
_ => false,
}

View file

@ -62,7 +62,8 @@ SOURCE_FILE@0..103
RECORD_PAT_FIELD_LIST@66..72
L_CURLY@66..67 "{"
WHITESPACE@67..68 " "
DOT2@68..70 ".."
REST_PAT@68..70
DOT2@68..70 ".."
WHITESPACE@70..71 " "
R_CURLY@71..72 "}"
WHITESPACE@72..73 " "

View file

@ -1,5 +1,5 @@
SOURCE_FILE@0..119
FN@0..118
SOURCE_FILE@0..156
FN@0..155
FN_KW@0..2 "fn"
WHITESPACE@2..3 " "
NAME@3..6
@ -8,8 +8,8 @@ SOURCE_FILE@0..119
L_PAREN@6..7 "("
R_PAREN@7..8 ")"
WHITESPACE@8..9 " "
BLOCK_EXPR@9..118
STMT_LIST@9..118
BLOCK_EXPR@9..155
STMT_LIST@9..155
L_CURLY@9..10 "{"
WHITESPACE@10..15 "\n "
LET_STMT@15..29
@ -89,7 +89,8 @@ SOURCE_FILE@0..119
UNDERSCORE@78..79 "_"
COMMA@79..80 ","
WHITESPACE@80..81 " "
DOT2@81..83 ".."
REST_PAT@81..83
DOT2@81..83 ".."
R_CURLY@83..84 "}"
WHITESPACE@84..85 " "
EQ@85..86 "="
@ -128,6 +129,47 @@ SOURCE_FILE@0..119
L_PAREN@113..114 "("
R_PAREN@114..115 ")"
SEMICOLON@115..116 ";"
WHITESPACE@116..117 "\n"
R_CURLY@117..118 "}"
WHITESPACE@118..119 "\n"
WHITESPACE@116..121 "\n "
LET_STMT@121..153
LET_KW@121..124 "let"
WHITESPACE@124..125 " "
RECORD_PAT@125..147
PATH@125..126
PATH_SEGMENT@125..126
NAME_REF@125..126
IDENT@125..126 "S"
WHITESPACE@126..127 " "
RECORD_PAT_FIELD_LIST@127..147
L_CURLY@127..128 "{"
WHITESPACE@128..129 " "
REST_PAT@129..145
ATTR@129..142
POUND@129..130 "#"
L_BRACK@130..131 "["
META@131..141
PATH@131..134
PATH_SEGMENT@131..134
NAME_REF@131..134
IDENT@131..134 "cfg"
TOKEN_TREE@134..141
L_PAREN@134..135 "("
IDENT@135..138 "any"
TOKEN_TREE@138..140
L_PAREN@138..139 "("
R_PAREN@139..140 ")"
R_PAREN@140..141 ")"
R_BRACK@141..142 "]"
WHITESPACE@142..143 " "
DOT2@143..145 ".."
WHITESPACE@145..146 " "
R_CURLY@146..147 "}"
WHITESPACE@147..148 " "
EQ@148..149 "="
WHITESPACE@149..150 " "
TUPLE_EXPR@150..152
L_PAREN@150..151 "("
R_PAREN@151..152 ")"
SEMICOLON@152..153 ";"
WHITESPACE@153..154 "\n"
R_CURLY@154..155 "}"
WHITESPACE@155..156 "\n"

View file

@ -3,4 +3,5 @@ fn foo() {
let S { f, ref mut g } = ();
let S { h: _, ..} = ();
let S { h: _, } = ();
let S { #[cfg(any())] .. } = ();
}