@spyglassmc/mcdoc 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import { ColorToken } from '@spyglassmc/core';
2
- export const identifier = node => {
2
+ export const identifier = (node) => {
3
3
  return [ColorToken.create(node, 'variable')];
4
4
  };
5
- export const literal = node => {
5
+ export const literal = (node) => {
6
6
  return [ColorToken.create(node, node.colorTokenType ?? 'literal')];
7
7
  };
8
8
  export function registerMcdocColorizer(meta) {
@@ -13,7 +13,7 @@ export declare const TopLevelNode: Readonly<{
13
13
  }>;
14
14
  export interface DispatchStatementNode extends AstNode {
15
15
  type: 'mcdoc:dispatch_statement';
16
- children: (CommentNode | AttributeNode | LiteralNode | ResourceLocationNode | IndexBodyNode | TypeNode)[];
16
+ children: (CommentNode | AttributeNode | LiteralNode | ResourceLocationNode | IndexBodyNode | TypeParamBlockNode | TypeNode)[];
17
17
  }
18
18
  export declare const DispatchStatementNode: Readonly<{
19
19
  destruct(node: DispatchStatementNode): {
@@ -21,6 +21,7 @@ export declare const DispatchStatementNode: Readonly<{
21
21
  location?: ResourceLocationNode;
22
22
  index?: IndexBodyNode;
23
23
  target?: TypeNode;
24
+ typeParams?: TypeParamBlockNode;
24
25
  };
25
26
  is(node: AstNode | undefined): node is DispatchStatementNode;
26
27
  }>;
@@ -76,12 +77,12 @@ export declare const TypeNode: Readonly<{
76
77
  }>;
77
78
  export interface TypeBaseNode<CN extends AstNode> extends AstNode {
78
79
  type: `mcdoc:${string}`;
79
- children: (CommentNode | AttributeNode | IndexBodyNode | CN)[];
80
+ children: (CommentNode | AttributeNode | IndexBodyNode | TypeArgBlockNode | CN)[];
80
81
  }
81
82
  export declare const TypeBaseNode: Readonly<{
82
83
  destruct(node: TypeBaseNode<any>): {
84
+ appendixes: (IndexBodyNode | TypeArgBlockNode)[];
83
85
  attributes: AttributeNode[];
84
- indices: IndexBodyNode[];
85
86
  };
86
87
  }>;
87
88
  export interface AttributeNode extends AstNode {
@@ -135,6 +136,16 @@ export interface AttributeTreeNamedKeyValuePair {
135
136
  key: IdentifierNode | StringNode;
136
137
  value: AttributeValueNode;
137
138
  }
139
+ export interface TypeArgBlockNode extends AstNode {
140
+ type: 'mcdoc:type_arg_block';
141
+ children: (CommentNode | TypeNode)[];
142
+ }
143
+ export declare const TypeArgBlockNode: Readonly<{
144
+ destruct(node: TypeArgBlockNode): {
145
+ args: TypeNode[];
146
+ };
147
+ is(node: AstNode | undefined): node is TypeArgBlockNode;
148
+ }>;
138
149
  export interface AnyTypeNode extends TypeBaseNode<LiteralNode> {
139
150
  type: 'mcdoc:type/any';
140
151
  }
@@ -264,6 +275,7 @@ export declare const EnumNode: Readonly<{
264
275
  docComments?: DocCommentsNode;
265
276
  enumKind?: EnumKind;
266
277
  identifier?: IdentifierNode;
278
+ keyword: LiteralNode;
267
279
  };
268
280
  is(node: AstNode | undefined): node is EnumNode;
269
281
  }>;
@@ -316,16 +328,16 @@ export declare const StructNode: Readonly<{
316
328
  block: StructBlockNode;
317
329
  docComments?: DocCommentsNode;
318
330
  identifier?: IdentifierNode;
331
+ keyword: LiteralNode;
319
332
  };
320
333
  is(node: AstNode | undefined): node is StructNode;
321
334
  }>;
322
- export interface ReferenceTypeNode extends TypeBaseNode<PathNode | TypeNode> {
335
+ export interface ReferenceTypeNode extends TypeBaseNode<PathNode> {
323
336
  type: 'mcdoc:type/reference';
324
337
  }
325
338
  export declare const ReferenceTypeNode: Readonly<{
326
339
  destruct(node: ReferenceTypeNode): {
327
340
  path: PathNode;
328
- typeParameters: TypeNode[];
329
341
  };
330
342
  is(node: AstNode | undefined): node is ReferenceTypeNode;
331
343
  }>;
@@ -464,12 +476,14 @@ export declare const StructInjectionNode: Readonly<{
464
476
  }>;
465
477
  export interface TypeAliasNode extends AstNode {
466
478
  type: 'mcdoc:type_alias';
467
- children: (CommentNode | DocCommentsNode | LiteralNode | IdentifierNode | TypeParamBlockNode | TypeNode)[];
479
+ children: (CommentNode | PrelimNode | LiteralNode | IdentifierNode | TypeParamBlockNode | TypeNode)[];
468
480
  }
469
481
  export declare const TypeAliasNode: Readonly<{
470
482
  destruct(node: TypeAliasNode): {
483
+ attributes: AttributeNode[];
471
484
  docComments?: DocCommentsNode;
472
- identifier?: IdentifierNode;
485
+ identifier: IdentifierNode;
486
+ keyword: LiteralNode;
473
487
  typeParams?: TypeParamBlockNode;
474
488
  rhs?: TypeNode;
475
489
  };
package/lib/node/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { atArray, CommentNode, FloatNode, ResourceLocationNode, StringNode } from '@spyglassmc/core';
1
+ import { atArray, CommentNode, FloatNode, ResourceLocationNode, StringNode, } from '@spyglassmc/core';
2
2
  export const ModuleNode = Object.freeze({
3
3
  is(node) {
4
4
  return node?.type === 'mcdoc:module';
@@ -22,10 +22,12 @@ export const DispatchStatementNode = Object.freeze({
22
22
  location: node.children.find(ResourceLocationNode.is),
23
23
  index: node.children.find(IndexBodyNode.is),
24
24
  target: node.children.find(TypeNode.is),
25
+ typeParams: node.children.find(TypeParamBlockNode.is),
25
26
  };
26
27
  },
27
28
  is(node) {
28
- return node?.type === 'mcdoc:dispatch_statement';
29
+ return (node?.type ===
30
+ 'mcdoc:dispatch_statement');
29
31
  },
30
32
  });
31
33
  export const LiteralNode = Object.freeze({
@@ -50,7 +52,10 @@ export const IndexNode = Object.freeze({
50
52
  });
51
53
  export const StaticIndexNode = Object.freeze({
52
54
  is(node) {
53
- return LiteralNode.is(node) || IdentifierNode.is(node) || StringNode.is(node) || ResourceLocationNode.is(node);
55
+ return (LiteralNode.is(node) ||
56
+ IdentifierNode.is(node) ||
57
+ StringNode.is(node) ||
58
+ ResourceLocationNode.is(node));
54
59
  },
55
60
  });
56
61
  export const IdentifierNode = Object.freeze({
@@ -65,12 +70,12 @@ export const DynamicIndexNode = Object.freeze({
65
70
  };
66
71
  },
67
72
  is(node) {
68
- return node?.type === 'mcdoc:dynamic_index';
73
+ return (node?.type === 'mcdoc:dynamic_index');
69
74
  },
70
75
  });
71
76
  export const AccessorKeyNode = Object.freeze({
72
77
  is(node) {
73
- return LiteralNode.is(node) || IdentifierNode.is(node) || StringNode.is(node);
78
+ return (LiteralNode.is(node) || IdentifierNode.is(node) || StringNode.is(node));
74
79
  },
75
80
  });
76
81
  export const TypeNode = Object.freeze({
@@ -93,8 +98,8 @@ export const TypeNode = Object.freeze({
93
98
  export const TypeBaseNode = Object.freeze({
94
99
  destruct(node) {
95
100
  return {
101
+ appendixes: node.children.filter((n) => IndexBodyNode.is(n) || TypeArgBlockNode.is(n)),
96
102
  attributes: node.children.filter(AttributeNode.is),
97
- indices: node.children.filter(IndexBodyNode.is),
98
103
  };
99
104
  },
100
105
  });
@@ -122,7 +127,7 @@ export const AttributeTreeNode = Object.freeze({
122
127
  };
123
128
  },
124
129
  is(node) {
125
- return node?.type === 'mcdoc:attribute/tree';
130
+ return (node?.type === 'mcdoc:attribute/tree');
126
131
  },
127
132
  });
128
133
  export const AttributeTreePosValuesNode = Object.freeze({
@@ -132,7 +137,8 @@ export const AttributeTreePosValuesNode = Object.freeze({
132
137
  };
133
138
  },
134
139
  is(node) {
135
- return node?.type === 'mcdoc:attribute/tree/pos';
140
+ return (node?.type ===
141
+ 'mcdoc:attribute/tree/pos');
136
142
  },
137
143
  });
138
144
  export const AttributeTreeNamedValuesNode = Object.freeze({
@@ -156,7 +162,18 @@ export const AttributeTreeNamedValuesNode = Object.freeze({
156
162
  return ans;
157
163
  },
158
164
  is(node) {
159
- return node?.type === 'mcdoc:attribute/tree/named';
165
+ return (node?.type ===
166
+ 'mcdoc:attribute/tree/named');
167
+ },
168
+ });
169
+ export const TypeArgBlockNode = Object.freeze({
170
+ destruct(node) {
171
+ return {
172
+ args: node.children.filter(TypeNode.is),
173
+ };
174
+ },
175
+ is(node) {
176
+ return (node?.type === 'mcdoc:type_arg_block');
160
177
  },
161
178
  });
162
179
  export const AnyTypeNode = Object.freeze({
@@ -189,7 +206,7 @@ export const LiteralTypeNode = Object.freeze({
189
206
  });
190
207
  export const LiteralTypeValueNode = Object.freeze({
191
208
  is(node) {
192
- return LiteralNode.is(node) || TypedNumberNode.is(node) || StringNode.is(node);
209
+ return (LiteralNode.is(node) || TypedNumberNode.is(node) || StringNode.is(node));
193
210
  },
194
211
  });
195
212
  export const TypedNumberNode = Object.freeze({
@@ -207,11 +224,12 @@ export const NumericTypeNode = Object.freeze({
207
224
  destruct(node) {
208
225
  return {
209
226
  numericKind: node.children.find(LiteralNode.is),
210
- valueRange: node.children.find(FloatRangeNode.is) || node.children.find(IntRangeNode.is),
227
+ valueRange: node.children.find(FloatRangeNode.is) ||
228
+ node.children.find(IntRangeNode.is),
211
229
  };
212
230
  },
213
231
  is(node) {
214
- return node?.type === 'mcdoc:type/numeric_type';
232
+ return (node?.type === 'mcdoc:type/numeric_type');
215
233
  },
216
234
  });
217
235
  export const RangeExclusiveChar = '<';
@@ -294,7 +312,8 @@ export const PrimitiveArrayTypeNode = Object.freeze({
294
312
  };
295
313
  },
296
314
  is(node) {
297
- return node?.type === 'mcdoc:type/primitive_array';
315
+ return (node?.type ===
316
+ 'mcdoc:type/primitive_array');
298
317
  },
299
318
  });
300
319
  export const ListTypeNode = Object.freeze({
@@ -328,7 +347,15 @@ export const TupleTypeNode = Object.freeze({
328
347
  return node?.type === 'mcdoc:type/tuple';
329
348
  },
330
349
  });
331
- const EnumKinds = new Set(['byte', 'short', 'int', 'long', 'float', 'double', 'string']);
350
+ const EnumKinds = new Set([
351
+ 'byte',
352
+ 'short',
353
+ 'int',
354
+ 'long',
355
+ 'float',
356
+ 'double',
357
+ 'string',
358
+ ]);
332
359
  export const EnumNode = Object.freeze({
333
360
  kinds: EnumKinds,
334
361
  destruct(node) {
@@ -337,6 +364,7 @@ export const EnumNode = Object.freeze({
337
364
  docComments: node.children.find(DocCommentsNode.is),
338
365
  enumKind: getEnumKind(node),
339
366
  identifier: node.children.find(IdentifierNode.is),
367
+ keyword: node.children.find(LiteralNode.is),
340
368
  };
341
369
  function getEnumKind(node) {
342
370
  for (const literal of node.children.filter(LiteralNode.is)) {
@@ -359,14 +387,14 @@ export const DocCommentsNode = Object.freeze({
359
387
  if (!node) {
360
388
  return undefined;
361
389
  }
362
- let comments = node.children.map(doc => doc.comment);
390
+ let comments = node.children.map((doc) => doc.comment);
363
391
  // If every comment contains a leading space or is empty, stripe the leading spaces off.
364
392
  // e.g. /// This is an example doc comment.
365
393
  // ///
366
394
  // /// Another line.
367
395
  // should be converted to "This is an example doc comment.\n\nAnother line."
368
- if (comments.every(s => s.length === 0 || s.startsWith(' '))) {
369
- comments = comments.map(s => s.slice(1));
396
+ if (comments.every((s) => s.length === 0 || s.startsWith(' '))) {
397
+ comments = comments.map((s) => s.slice(1));
370
398
  }
371
399
  return comments.join('\n');
372
400
  },
@@ -412,6 +440,7 @@ export const StructNode = Object.freeze({
412
440
  block: node.children.find(StructBlockNode.is),
413
441
  docComments: node.children.find(DocCommentsNode.is),
414
442
  identifier: node.children.find(IdentifierNode.is),
443
+ keyword: node.children.find(LiteralNode.is),
415
444
  };
416
445
  },
417
446
  is(node) {
@@ -422,11 +451,10 @@ export const ReferenceTypeNode = Object.freeze({
422
451
  destruct(node) {
423
452
  return {
424
453
  path: node.children.find(PathNode.is),
425
- typeParameters: node.children.filter(TypeNode.is),
426
454
  };
427
455
  },
428
456
  is(node) {
429
- return node?.type === 'mcdoc:type/reference';
457
+ return (node?.type === 'mcdoc:type/reference');
430
458
  },
431
459
  });
432
460
  export const TypeParamBlockNode = Object.freeze({
@@ -436,7 +464,8 @@ export const TypeParamBlockNode = Object.freeze({
436
464
  };
437
465
  },
438
466
  is(node) {
439
- return node?.type === 'mcdoc:type_param_block';
467
+ return (node?.type ===
468
+ 'mcdoc:type_param_block');
440
469
  },
441
470
  });
442
471
  export const TypeParamNode = Object.freeze({
@@ -488,12 +517,15 @@ export const StructPairFieldNode = Object.freeze({
488
517
  };
489
518
  },
490
519
  is(node) {
491
- return node?.type === 'mcdoc:struct/field/pair';
520
+ return (node?.type ===
521
+ 'mcdoc:struct/field/pair');
492
522
  },
493
523
  });
494
524
  export const StructKeyNode = Object.freeze({
495
525
  is(node) {
496
- return StringNode.is(node) || IdentifierNode.is(node) || StructMapKeyNode.is(node);
526
+ return (StringNode.is(node) ||
527
+ IdentifierNode.is(node) ||
528
+ StructMapKeyNode.is(node));
497
529
  },
498
530
  });
499
531
  export const StructMapKeyNode = Object.freeze({
@@ -503,7 +535,7 @@ export const StructMapKeyNode = Object.freeze({
503
535
  };
504
536
  },
505
537
  is(node) {
506
- return node?.type === 'mcdoc:struct/map_key';
538
+ return (node?.type === 'mcdoc:struct/map_key');
507
539
  },
508
540
  });
509
541
  export const StructSpreadFieldNode = Object.freeze({
@@ -514,7 +546,8 @@ export const StructSpreadFieldNode = Object.freeze({
514
546
  };
515
547
  },
516
548
  is(node) {
517
- return node?.type === 'mcdoc:struct/field/spread';
549
+ return (node?.type ===
550
+ 'mcdoc:struct/field/spread');
518
551
  },
519
552
  });
520
553
  export const DispatcherTypeNode = Object.freeze({
@@ -525,7 +558,7 @@ export const DispatcherTypeNode = Object.freeze({
525
558
  };
526
559
  },
527
560
  is(node) {
528
- return node?.type === 'mcdoc:type/dispatcher';
561
+ return (node?.type === 'mcdoc:type/dispatcher');
529
562
  },
530
563
  });
531
564
  export const UnionTypeNode = Object.freeze({
@@ -555,19 +588,22 @@ export const InjectionContentNode = Object.freeze({
555
588
  });
556
589
  export const EnumInjectionNode = Object.freeze({
557
590
  is(node) {
558
- return node?.type === 'mcdoc:injection/enum';
591
+ return (node?.type === 'mcdoc:injection/enum');
559
592
  },
560
593
  });
561
594
  export const StructInjectionNode = Object.freeze({
562
595
  is(node) {
563
- return node?.type === 'mcdoc:injection/struct';
596
+ return (node?.type ===
597
+ 'mcdoc:injection/struct');
564
598
  },
565
599
  });
566
600
  export const TypeAliasNode = Object.freeze({
567
601
  destruct(node) {
568
602
  return {
603
+ attributes: node.children.filter(AttributeNode.is),
569
604
  docComments: node.children.find(DocCommentsNode.is),
570
605
  identifier: node.children.find(IdentifierNode.is),
606
+ keyword: node.children.find(LiteralNode.is),
571
607
  typeParams: node.children.find(TypeParamBlockNode.is),
572
608
  rhs: node.children.find(TypeNode.is),
573
609
  };
@@ -584,7 +620,7 @@ export const UseStatementNode = Object.freeze({
584
620
  };
585
621
  },
586
622
  is(node) {
587
- return node?.type === 'mcdoc:use_statement';
623
+ return (node?.type === 'mcdoc:use_statement');
588
624
  },
589
625
  });
590
626
  //# sourceMappingURL=index.js.map
@@ -25,7 +25,7 @@ export declare const typedNumber: InfallibleParser<TypedNumberNode>;
25
25
  export declare const enum_: Parser<EnumNode>;
26
26
  export declare const struct: Parser<StructNode>;
27
27
  export declare const injection: Parser<InjectionNode>;
28
- export declare const typeAlias: Parser<TypeAliasNode>;
28
+ export declare const typeAliasStatement: Parser<TypeAliasNode>;
29
29
  export declare const useStatement: Parser<UseStatementNode>;
30
30
  export declare const module_: Parser<ModuleNode>;
31
31
  export declare const anyType: Parser<AnyTypeNode>;