6
6
*
7
7
*/
8
8
export abstract class BaseNode {
9
- public type = "BaseNode" ;
10
9
[ name : string ] : unknown ;
11
10
12
11
equals ( other : BaseNode , ignoredFields : Array < string > = [ "span" ] ) : boolean {
@@ -46,7 +45,7 @@ export abstract class BaseNode {
46
45
return true ;
47
46
}
48
47
49
- clone ( ) : BaseNode {
48
+ clone ( ) : this {
50
49
function visit ( value : unknown ) : unknown {
51
50
if ( value instanceof BaseNode ) {
52
51
return value . clone ( ) ;
@@ -79,7 +78,6 @@ function scalarsEqual(
79
78
* Base class for AST nodes which can have Spans.
80
79
*/
81
80
export abstract class SyntaxNode extends BaseNode {
82
- public type = "SyntaxNode" ;
83
81
public span ?: Span ;
84
82
85
83
addSpan ( start : number , end : number ) : void {
@@ -89,21 +87,20 @@ export abstract class SyntaxNode extends BaseNode {
89
87
90
88
export class Resource extends SyntaxNode {
91
89
public type = "Resource" as const ;
92
- public body : Array < Entry | Junk > ;
93
- constructor ( body : Array < Entry | Junk > = [ ] ) {
90
+ public body : Array < Entry > ;
91
+ constructor ( body : Array < Entry > = [ ] ) {
94
92
super ( ) ;
95
93
this . body = body ;
96
94
}
97
95
}
98
96
99
- /*
100
- * An abstract base class for useful elements of Resource.body.
101
- */
102
- export abstract class Entry extends SyntaxNode {
103
- public type = "Entry" ;
104
- }
97
+ export declare type Entry =
98
+ Message |
99
+ Term |
100
+ Comments |
101
+ Junk ;
105
102
106
- export class Message extends Entry {
103
+ export class Message extends SyntaxNode {
107
104
public type = "Message" as const ;
108
105
public id : Identifier ;
109
106
public value : Pattern | null ;
@@ -124,7 +121,7 @@ export class Message extends Entry {
124
121
}
125
122
}
126
123
127
- export class Term extends Entry {
124
+ export class Term extends SyntaxNode {
128
125
public type = "Term" as const ;
129
126
public id : Identifier ;
130
127
public value : Pattern ;
@@ -155,14 +152,9 @@ export class Pattern extends SyntaxNode {
155
152
}
156
153
}
157
154
158
- /*
159
- * An abstract base class for elements of Patterns.
160
- */
161
- export abstract class PatternElement extends SyntaxNode {
162
- public type = "PatternElement" ;
163
- }
155
+ export declare type PatternElement = TextElement | Placeable ;
164
156
165
- export class TextElement extends PatternElement {
157
+ export class TextElement extends SyntaxNode {
166
158
public type = "TextElement" as const ;
167
159
public value : string ;
168
160
@@ -172,7 +164,7 @@ export class TextElement extends PatternElement {
172
164
}
173
165
}
174
166
175
- export class Placeable extends PatternElement {
167
+ export class Placeable extends SyntaxNode {
176
168
public type = "Placeable" as const ;
177
169
public expression : Expression ;
178
170
@@ -182,16 +174,21 @@ export class Placeable extends PatternElement {
182
174
}
183
175
}
184
176
185
- /*
186
- * An abstract base class for expressions .
177
+ /**
178
+ * A subset of expressions which can be used as outside of Placeables .
187
179
*/
188
- export abstract class Expression extends SyntaxNode {
189
- public type = "Expression" ;
190
- }
180
+ export type InlineExpression =
181
+ StringLiteral |
182
+ NumberLiteral |
183
+ FunctionReference |
184
+ MessageReference |
185
+ TermReference |
186
+ VariableReference |
187
+ Placeable ;
188
+ export declare type Expression = InlineExpression | SelectExpression ;
191
189
192
190
// An abstract base class for Literals.
193
- export abstract class Literal extends Expression {
194
- public type = "Literal" ;
191
+ export abstract class BaseLiteral extends SyntaxNode {
195
192
public value : string ;
196
193
197
194
constructor ( value : string ) {
@@ -204,7 +201,7 @@ export abstract class Literal extends Expression {
204
201
abstract parse ( ) : { value : unknown }
205
202
}
206
203
207
- export class StringLiteral extends Literal {
204
+ export class StringLiteral extends BaseLiteral {
208
205
public type = "StringLiteral" as const ;
209
206
210
207
parse ( ) : { value : string } {
@@ -241,7 +238,7 @@ export class StringLiteral extends Literal {
241
238
}
242
239
}
243
240
244
- export class NumberLiteral extends Literal {
241
+ export class NumberLiteral extends BaseLiteral {
245
242
public type = "NumberLiteral" as const ;
246
243
247
244
parse ( ) : { value : number ; precision : number } {
@@ -254,7 +251,9 @@ export class NumberLiteral extends Literal {
254
251
}
255
252
}
256
253
257
- export class MessageReference extends Expression {
254
+ export declare type Literal = StringLiteral | NumberLiteral ;
255
+
256
+ export class MessageReference extends SyntaxNode {
258
257
public type = "MessageReference" as const ;
259
258
public id : Identifier ;
260
259
public attribute : Identifier | null ;
@@ -266,7 +265,7 @@ export class MessageReference extends Expression {
266
265
}
267
266
}
268
267
269
- export class TermReference extends Expression {
268
+ export class TermReference extends SyntaxNode {
270
269
public type = "TermReference" as const ;
271
270
public id : Identifier ;
272
271
public attribute : Identifier | null ;
@@ -284,7 +283,7 @@ export class TermReference extends Expression {
284
283
}
285
284
}
286
285
287
- export class VariableReference extends Expression {
286
+ export class VariableReference extends SyntaxNode {
288
287
public type = "VariableReference" as const ;
289
288
public id : Identifier ;
290
289
@@ -294,7 +293,7 @@ export class VariableReference extends Expression {
294
293
}
295
294
}
296
295
297
- export class FunctionReference extends Expression {
296
+ export class FunctionReference extends SyntaxNode {
298
297
public type = "FunctionReference" as const ;
299
298
public id : Identifier ;
300
299
public arguments : CallArguments ;
@@ -306,12 +305,12 @@ export class FunctionReference extends Expression {
306
305
}
307
306
}
308
307
309
- export class SelectExpression extends Expression {
308
+ export class SelectExpression extends SyntaxNode {
310
309
public type = "SelectExpression" as const ;
311
- public selector : Expression ;
310
+ public selector : InlineExpression ;
312
311
public variants : Array < Variant > ;
313
312
314
- constructor ( selector : Expression , variants : Array < Variant > ) {
313
+ constructor ( selector : InlineExpression , variants : Array < Variant > ) {
315
314
super ( ) ;
316
315
this . selector = selector ;
317
316
this . variants = variants ;
@@ -320,11 +319,11 @@ export class SelectExpression extends Expression {
320
319
321
320
export class CallArguments extends SyntaxNode {
322
321
public type = "CallArguments" as const ;
323
- public positional : Array < Expression > ;
322
+ public positional : Array < InlineExpression > ;
324
323
public named : Array < NamedArgument > ;
325
324
326
325
constructor (
327
- positional : Array < Expression > = [ ] ,
326
+ positional : Array < InlineExpression > = [ ] ,
328
327
named : Array < NamedArgument > = [ ]
329
328
) {
330
329
super ( ) ;
@@ -381,8 +380,7 @@ export class Identifier extends SyntaxNode {
381
380
}
382
381
}
383
382
384
- export abstract class BaseComment extends Entry {
385
- public type = "BaseComment" ;
383
+ export abstract class BaseComment extends SyntaxNode {
386
384
public content : string ;
387
385
constructor ( content : string ) {
388
386
super ( ) ;
@@ -401,6 +399,11 @@ export class ResourceComment extends BaseComment {
401
399
public type = "ResourceComment" as const ;
402
400
}
403
401
402
+ export declare type Comments =
403
+ Comment |
404
+ GroupComment |
405
+ ResourceComment ;
406
+
404
407
export class Junk extends SyntaxNode {
405
408
public type = "Junk" as const ;
406
409
public annotations : Array < Annotation > ;
@@ -418,7 +421,7 @@ export class Junk extends SyntaxNode {
418
421
}
419
422
420
423
export class Span extends BaseNode {
421
- public type = "Span" ;
424
+ public type = "Span" as const ;
422
425
public start : number ;
423
426
public end : number ;
424
427
@@ -430,7 +433,7 @@ export class Span extends BaseNode {
430
433
}
431
434
432
435
export class Annotation extends SyntaxNode {
433
- public type = "Annotation" ;
436
+ public type = "Annotation" as const ;
434
437
public code : string ;
435
438
public arguments : Array < unknown > ;
436
439
public message : string ;
0 commit comments