@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.
- package/lib/binder/index.d.ts +7 -0
- package/lib/binder/index.js +268 -175
- package/lib/colorizer/index.js +2 -2
- package/lib/node/index.d.ts +21 -7
- package/lib/node/index.js +64 -28
- package/lib/parser/index.d.ts +1 -1
- package/lib/parser/index.js +162 -147
- package/lib/type/index.d.ts +39 -23
- package/lib/type/index.js +138 -56
- package/lib/uri_processors.js +5 -5
- package/package.json +3 -3
package/lib/colorizer/index.js
CHANGED
|
@@ -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) {
|
package/lib/node/index.d.ts
CHANGED
|
@@ -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
|
|
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 |
|
|
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
|
|
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 ===
|
|
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) ||
|
|
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 ===
|
|
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 ===
|
|
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) ||
|
|
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 ===
|
|
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([
|
|
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 ===
|
|
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 ===
|
|
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) ||
|
|
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 ===
|
|
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 ===
|
|
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
|
package/lib/parser/index.d.ts
CHANGED
|
@@ -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
|
|
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>;
|