1+ import { validationError } from "../error.js" ;
12import { Base } from "./base.js" ;
23import {
34 type_with_extended_attributes ,
@@ -23,16 +24,18 @@ export class IterableLike extends Base {
2324 ? tokeniser . consume ( "maplike" , "setlike" )
2425 : tokens . async
2526 ? tokeniser . consume ( "iterable" )
26- : tokeniser . consume ( "iterable" , "maplike" , "setlike" ) ;
27+ : tokeniser . consume ( "iterable" , "async_iterable" , " maplike", "setlike" ) ;
2728 if ( ! tokens . base ) {
2829 tokeniser . unconsume ( start_position ) ;
2930 return ;
3031 }
3132
3233 const { type } = ret ;
3334 const secondTypeRequired = type === "maplike" ;
34- const secondTypeAllowed = secondTypeRequired || type === "iterable" ;
35- const argumentAllowed = ret . async && type === "iterable" ;
35+ const secondTypeAllowed =
36+ secondTypeRequired || type === "iterable" || type === "async_iterable" ;
37+ const argumentAllowed =
38+ type === "async_iterable" || ( ret . async && type === "iterable" ) ;
3639
3740 tokens . open =
3841 tokeniser . consume ( "<" ) ||
@@ -86,6 +89,18 @@ export class IterableLike extends Base {
8689 }
8790
8891 * validate ( defs ) {
92+ if ( this . async && this . type === "iterable" ) {
93+ const message = "`async iterable` is now changed to `async_iterable`." ;
94+ yield validationError (
95+ this . tokens . async ,
96+ this ,
97+ "obsolete-async-iterable-syntax" ,
98+ message ,
99+ {
100+ autofix : autofixAsyncIterableSyntax ( this ) ,
101+ } ,
102+ ) ;
103+ }
89104 for ( const type of this . idlType ) {
90105 yield * type . validate ( defs ) ;
91106 }
@@ -114,3 +129,18 @@ export class IterableLike extends Base {
114129 ) ;
115130 }
116131}
132+
133+ /**
134+ * @param {IterableLike } iterableLike
135+ */
136+ function autofixAsyncIterableSyntax ( iterableLike ) {
137+ return ( ) => {
138+ const async = iterableLike . tokens . async ;
139+ iterableLike . tokens . base = {
140+ ...async ,
141+ type : "async_iterable" ,
142+ value : "async_iterable" ,
143+ } ;
144+ delete iterableLike . tokens . async ;
145+ } ;
146+ }
0 commit comments