@@ -8,6 +8,7 @@ use super::{
88 types:: ModifierFlags ,
99} ;
1010use crate :: {
11+ diagnostics,
1112 js:: { FunctionKind , VariableDeclarationContext , VariableDeclarationParent } ,
1213 lexer:: Kind ,
1314 list:: { NormalList , SeparatedList } ,
@@ -25,14 +26,30 @@ impl<'a> ParserImpl<'a> {
2526 pub ( crate ) fn parse_ts_enum_declaration (
2627 & mut self ,
2728 span : Span ,
28- modifiers : Modifiers < ' a > ,
29+ modifiers : & Modifiers < ' a > ,
2930 ) -> Result < Declaration < ' a > > {
3031 self . bump_any ( ) ; // bump `enum`
3132
3233 let id = self . parse_binding_identifier ( ) ?;
3334 let members = TSEnumMemberList :: parse ( self ) ?. members ;
3435 let span = self . end_span ( span) ;
35- Ok ( self . ast . ts_enum_declaration ( span, id, members, modifiers) )
36+
37+ for modifier in modifiers. iter ( ) {
38+ if !matches ! ( modifier. kind, ModifierKind :: Declare | ModifierKind :: Const ) {
39+ self . error ( diagnostics:: modifiers_cannot_appear (
40+ modifier. span ,
41+ modifier. kind . as_str ( ) ,
42+ ) ) ;
43+ }
44+ }
45+
46+ Ok ( self . ast . ts_enum_declaration (
47+ span,
48+ id,
49+ members,
50+ modifiers. is_contains_const ( ) ,
51+ modifiers. is_contains_declare ( ) ,
52+ ) )
3653 }
3754
3855 pub ( crate ) fn parse_ts_enum_member ( & mut self ) -> Result < TSEnumMember < ' a > > {
@@ -289,7 +306,7 @@ impl<'a> ParserImpl<'a> {
289306 . map ( Declaration :: TSModuleDeclaration )
290307 }
291308 Kind :: Type => self . parse_ts_type_alias_declaration ( start_span, modifiers) ,
292- Kind :: Enum => self . parse_ts_enum_declaration ( start_span, modifiers) ,
309+ Kind :: Enum => self . parse_ts_enum_declaration ( start_span, & modifiers) ,
293310 Kind :: Interface if self . is_at_interface_declaration ( ) => {
294311 self . parse_ts_interface_declaration ( start_span, modifiers)
295312 }
0 commit comments