@@ -11,11 +11,16 @@ export type BranchNode =
1111 | CapturingGroup
1212 | CharacterClass
1313 | CharacterClassRange
14+ | ClassIntersection
15+ | ClassStringDisjunction
16+ | ClassSubtraction
17+ | ExpressionCharacterClass
1418 | Group
1519 | LookaroundAssertion
1620 | Pattern
1721 | Quantifier
1822 | RegExpLiteral
23+ | StringAlternative
1924
2025/**
2126 * The type which includes all leaf nodes.
@@ -41,17 +46,29 @@ export type QuantifiableElement =
4146 | Character
4247 | CharacterClass
4348 | CharacterSet
49+ | ExpressionCharacterClass
4450 | Group
4551 | LookaheadAssertion
4652
4753/**
4854 * The type which includes all character class atom nodes.
4955 */
5056export type CharacterClassElement =
57+ | ClassRangesCharacterClassElement
58+ | UnicodeSetsCharacterClassElement
59+ export type ClassRangesCharacterClassElement =
5160 | Character
5261 | CharacterClassRange
5362 | EscapeCharacterSet
5463 | UnicodePropertyCharacterSet
64+ export type UnicodeSetsCharacterClassElement =
65+ | Character
66+ | CharacterClassRange
67+ | ClassStringDisjunction
68+ | EscapeCharacterSet
69+ | ExpressionCharacterClass
70+ | UnicodePropertyCharacterSet
71+ | UnicodeSetsCharacterClass
5572
5673/**
5774 * The type which defines common properties for all node types.
@@ -166,12 +183,35 @@ export interface Quantifier extends NodeBase {
166183 * The character class.
167184 * E.g. `[ab]`, `[^ab]`
168185 */
169- export interface CharacterClass extends NodeBase {
186+ export type CharacterClass =
187+ | ClassRangesCharacterClass
188+ | UnicodeSetsCharacterClass
189+ interface BaseCharacterClass extends NodeBase {
170190 type : "CharacterClass"
171- parent : Alternative | Quantifier
191+ parent :
192+ | Alternative
193+ | ExpressionCharacterClass
194+ | Quantifier
195+ | UnicodeSetsCharacterClass
196+ unicodeSets : boolean
172197 negate : boolean
173198 elements : CharacterClassElement [ ]
174199}
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+ }
175215
176216/**
177217 * The character class.
@@ -239,7 +279,12 @@ export interface AnyCharacterSet extends NodeBase {
239279 */
240280export interface EscapeCharacterSet extends NodeBase {
241281 type : "CharacterSet"
242- parent : Alternative | CharacterClass | Quantifier
282+ parent :
283+ | Alternative
284+ | CharacterClass
285+ | ClassIntersection
286+ | ClassSubtraction
287+ | Quantifier
243288 kind : "digit" | "space" | "word"
244289 negate : boolean
245290}
@@ -248,14 +293,98 @@ export interface EscapeCharacterSet extends NodeBase {
248293 * The unicode property escape.
249294 * E.g. `\p{ASCII}`, `\P{ASCII}`, `\p{Script=Hiragana}`
250295 */
251- export interface UnicodePropertyCharacterSet extends NodeBase {
296+ export type UnicodePropertyCharacterSet =
297+ | CharacterUnicodePropertyCharacterSet
298+ | StringsUnicodePropertyCharacterSet
299+ interface BaseUnicodePropertyCharacterSet extends NodeBase {
252300 type : "CharacterSet"
253- parent : Alternative | CharacterClass | Quantifier
301+ parent :
302+ | Alternative
303+ | CharacterClass
304+ | ClassIntersection
305+ | ClassSubtraction
306+ | Quantifier
254307 kind : "property"
308+ strings : boolean
255309 key : string
256310 value : string | null
257311 negate : boolean
258312}
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+ }
259388
260389/**
261390 * The character.
@@ -264,7 +393,14 @@ export interface UnicodePropertyCharacterSet extends NodeBase {
264393 */
265394export interface Character extends NodeBase {
266395 type : "Character"
267- parent : Alternative | CharacterClass | CharacterClassRange | Quantifier
396+ parent :
397+ | Alternative
398+ | CharacterClass
399+ | CharacterClassRange
400+ | ClassIntersection
401+ | ClassSubtraction
402+ | Quantifier
403+ | StringAlternative
268404 value : number // a code point.
269405}
270406
@@ -292,4 +428,5 @@ export interface Flags extends NodeBase {
292428 multiline : boolean
293429 sticky : boolean
294430 unicode : boolean
431+ unicodeSets : boolean
295432}
0 commit comments