@@ -11,11 +11,16 @@ export type BranchNode =
11
11
| CapturingGroup
12
12
| CharacterClass
13
13
| CharacterClassRange
14
+ | ClassIntersection
15
+ | ClassStringDisjunction
16
+ | ClassSubtraction
17
+ | ExpressionCharacterClass
14
18
| Group
15
19
| LookaroundAssertion
16
20
| Pattern
17
21
| Quantifier
18
22
| RegExpLiteral
23
+ | StringAlternative
19
24
20
25
/**
21
26
* The type which includes all leaf nodes.
@@ -41,17 +46,29 @@ export type QuantifiableElement =
41
46
| Character
42
47
| CharacterClass
43
48
| CharacterSet
49
+ | ExpressionCharacterClass
44
50
| Group
45
51
| LookaheadAssertion
46
52
47
53
/**
48
54
* The type which includes all character class atom nodes.
49
55
*/
50
56
export type CharacterClassElement =
57
+ | ClassRangesCharacterClassElement
58
+ | UnicodeSetsCharacterClassElement
59
+ export type ClassRangesCharacterClassElement =
51
60
| Character
52
61
| CharacterClassRange
53
62
| EscapeCharacterSet
54
63
| UnicodePropertyCharacterSet
64
+ export type UnicodeSetsCharacterClassElement =
65
+ | Character
66
+ | CharacterClassRange
67
+ | ClassStringDisjunction
68
+ | EscapeCharacterSet
69
+ | ExpressionCharacterClass
70
+ | UnicodePropertyCharacterSet
71
+ | UnicodeSetsCharacterClass
55
72
56
73
/**
57
74
* The type which defines common properties for all node types.
@@ -166,12 +183,35 @@ export interface Quantifier extends NodeBase {
166
183
* The character class.
167
184
* E.g. `[ab]`, `[^ab]`
168
185
*/
169
- export interface CharacterClass extends NodeBase {
186
+ export type CharacterClass =
187
+ | ClassRangesCharacterClass
188
+ | UnicodeSetsCharacterClass
189
+ interface BaseCharacterClass extends NodeBase {
170
190
type : "CharacterClass"
171
- parent : Alternative | Quantifier
191
+ parent :
192
+ | Alternative
193
+ | ExpressionCharacterClass
194
+ | Quantifier
195
+ | UnicodeSetsCharacterClass
196
+ unicodeSets : boolean
172
197
negate : boolean
173
198
elements : CharacterClassElement [ ]
174
199
}
200
+ export interface ClassRangesCharacterClass extends BaseCharacterClass {
201
+ parent : Alternative | Quantifier
202
+ unicodeSets : false
203
+ elements : ClassRangesCharacterClassElement [ ]
204
+ }
205
+ /** UnicodeSetsCharacterClass is the CharacterClass when in Unicode sets mode. So it may contain strings. */
206
+ export interface UnicodeSetsCharacterClass extends BaseCharacterClass {
207
+ parent :
208
+ | Alternative
209
+ | ExpressionCharacterClass
210
+ | Quantifier
211
+ | UnicodeSetsCharacterClass
212
+ unicodeSets : true
213
+ elements : UnicodeSetsCharacterClassElement [ ]
214
+ }
175
215
176
216
/**
177
217
* The character class.
@@ -239,7 +279,12 @@ export interface AnyCharacterSet extends NodeBase {
239
279
*/
240
280
export interface EscapeCharacterSet extends NodeBase {
241
281
type : "CharacterSet"
242
- parent : Alternative | CharacterClass | Quantifier
282
+ parent :
283
+ | Alternative
284
+ | CharacterClass
285
+ | ClassIntersection
286
+ | ClassSubtraction
287
+ | Quantifier
243
288
kind : "digit" | "space" | "word"
244
289
negate : boolean
245
290
}
@@ -248,14 +293,98 @@ export interface EscapeCharacterSet extends NodeBase {
248
293
* The unicode property escape.
249
294
* E.g. `\p{ASCII}`, `\P{ASCII}`, `\p{Script=Hiragana}`
250
295
*/
251
- export interface UnicodePropertyCharacterSet extends NodeBase {
296
+ export type UnicodePropertyCharacterSet =
297
+ | CharacterUnicodePropertyCharacterSet
298
+ | StringsUnicodePropertyCharacterSet
299
+ interface BaseUnicodePropertyCharacterSet extends NodeBase {
252
300
type : "CharacterSet"
253
- parent : Alternative | CharacterClass | Quantifier
301
+ parent :
302
+ | Alternative
303
+ | CharacterClass
304
+ | ClassIntersection
305
+ | ClassSubtraction
306
+ | Quantifier
254
307
kind : "property"
308
+ strings : boolean
255
309
key : string
256
310
value : string | null
257
311
negate : boolean
258
312
}
313
+ export interface CharacterUnicodePropertyCharacterSet
314
+ extends BaseUnicodePropertyCharacterSet {
315
+ strings : false
316
+ value : string | null
317
+ negate : boolean
318
+ }
319
+ /** StringsUnicodePropertyCharacterSet is Unicode property escape with property of strings. */
320
+ export interface StringsUnicodePropertyCharacterSet
321
+ extends BaseUnicodePropertyCharacterSet {
322
+ strings : true
323
+ value : null
324
+ negate : false
325
+ }
326
+
327
+ /**
328
+ * The expression character class.
329
+ * E.g. `[a--b]`, `[a&&b]`,`[^a--b]`, `[^a&&b]`
330
+ */
331
+ export interface ExpressionCharacterClass extends NodeBase {
332
+ type : "ExpressionCharacterClass"
333
+ parent :
334
+ | Alternative
335
+ | ExpressionCharacterClass
336
+ | Quantifier
337
+ | UnicodeSetsCharacterClass
338
+ negate : boolean
339
+ expression : ClassIntersection | ClassSubtraction
340
+ }
341
+
342
+ export type ClassSetOperand =
343
+ | Character
344
+ | ClassStringDisjunction
345
+ | EscapeCharacterSet
346
+ | ExpressionCharacterClass
347
+ | UnicodePropertyCharacterSet
348
+ | UnicodeSetsCharacterClass
349
+
350
+ /**
351
+ * The character class intersection.
352
+ * E.g. `a&&b`
353
+ */
354
+ export interface ClassIntersection extends NodeBase {
355
+ type : "ClassIntersection"
356
+ parent : ClassIntersection | ExpressionCharacterClass
357
+ left : ClassIntersection | ClassSetOperand
358
+ right : ClassSetOperand
359
+ }
360
+
361
+ /**
362
+ * The character class subtraction.
363
+ * E.g. `a--b`
364
+ */
365
+ export interface ClassSubtraction extends NodeBase {
366
+ type : "ClassSubtraction"
367
+ parent : ClassSubtraction | ExpressionCharacterClass
368
+ left : ClassSetOperand | ClassSubtraction
369
+ right : ClassSetOperand
370
+ }
371
+
372
+ /**
373
+ * The character class string disjunction.
374
+ * E.g. `\q{a|b}`
375
+ */
376
+ export interface ClassStringDisjunction extends NodeBase {
377
+ type : "ClassStringDisjunction"
378
+ parent : ClassIntersection | ClassSubtraction | UnicodeSetsCharacterClass
379
+ alternatives : StringAlternative [ ]
380
+ }
381
+
382
+ /** StringAlternative is only used for `\q{alt}`({@link ClassStringDisjunction}). */
383
+ export interface StringAlternative extends NodeBase {
384
+ type : "StringAlternative"
385
+ parent : ClassStringDisjunction
386
+ elements : Character [ ]
387
+ }
259
388
260
389
/**
261
390
* The character.
@@ -264,7 +393,14 @@ export interface UnicodePropertyCharacterSet extends NodeBase {
264
393
*/
265
394
export interface Character extends NodeBase {
266
395
type : "Character"
267
- parent : Alternative | CharacterClass | CharacterClassRange | Quantifier
396
+ parent :
397
+ | Alternative
398
+ | CharacterClass
399
+ | CharacterClassRange
400
+ | ClassIntersection
401
+ | ClassSubtraction
402
+ | Quantifier
403
+ | StringAlternative
268
404
value : number // a code point.
269
405
}
270
406
@@ -292,4 +428,5 @@ export interface Flags extends NodeBase {
292
428
multiline : boolean
293
429
sticky : boolean
294
430
unicode : boolean
431
+ unicodeSets : boolean
295
432
}
0 commit comments