@spyglassmc/java-edition 0.3.7 → 0.3.9
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 +11 -9
- package/lib/binder/index.js +149 -150
- package/lib/common/index.js +6 -9
- package/lib/dependency/common.d.ts +5 -0
- package/lib/dependency/common.js +8 -0
- package/lib/dependency/index.js +7 -17
- package/lib/dependency/mcmeta.d.ts +6 -12
- package/lib/dependency/mcmeta.js +21 -38
- package/lib/index.d.ts +1 -0
- package/lib/index.js +74 -32
- package/lib/json/checker/index.d.ts +3 -10
- package/lib/json/checker/index.js +36 -244
- package/lib/json/index.d.ts +0 -1
- package/lib/json/index.js +0 -3
- package/lib/mcfunction/checker/index.d.ts +0 -2
- package/lib/mcfunction/checker/index.js +254 -183
- package/lib/mcfunction/common/index.d.ts +4 -2
- package/lib/mcfunction/common/index.js +56 -52
- package/lib/mcfunction/completer/argument.js +112 -57
- package/lib/mcfunction/index.d.ts +3 -2
- package/lib/mcfunction/index.js +18 -19
- package/lib/mcfunction/inlayHintProvider.js +2 -3
- package/lib/mcfunction/mcdocAttributes.d.ts +4 -0
- package/lib/mcfunction/mcdocAttributes.js +71 -0
- package/lib/mcfunction/node/argument.d.ts +115 -12
- package/lib/mcfunction/node/argument.js +131 -63
- package/lib/mcfunction/parser/argument.d.ts +14 -4
- package/lib/mcfunction/parser/argument.js +380 -212
- package/lib/mcfunction/signatureHelpProvider.d.ts +2 -1
- package/lib/mcfunction/signatureHelpProvider.js +10 -18
- package/lib/mcfunction/tree/argument.d.ts +68 -1
- package/lib/mcfunction/tree/patch.js +279 -77
- package/lib/mcfunction/tree/patchValidator.d.ts +7 -0
- package/lib/mcfunction/tree/patchValidator.js +25 -0
- package/package.json +8 -9
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as core from '@spyglassmc/core';
|
|
2
2
|
import * as mcf from '@spyglassmc/mcfunction';
|
|
3
|
+
import type { RootTreeNode } from '../dependency';
|
|
3
4
|
/**
|
|
4
5
|
* Only command options that can be satisfied by the current command node will be listed in `signatures`.
|
|
5
6
|
* Only parameters at and immediately after the `offset` will be listed in `parameters`.
|
|
6
7
|
*/
|
|
7
|
-
export declare function signatureHelpProvider(
|
|
8
|
+
export declare function signatureHelpProvider(rootTreeNode: RootTreeNode): core.SignatureHelpProvider<core.FileNode<mcf.McfunctionNode>>;
|
|
8
9
|
//# sourceMappingURL=signatureHelpProvider.d.ts.map
|
|
@@ -4,14 +4,17 @@ import * as mcf from '@spyglassmc/mcfunction';
|
|
|
4
4
|
* Only command options that can be satisfied by the current command node will be listed in `signatures`.
|
|
5
5
|
* Only parameters at and immediately after the `offset` will be listed in `parameters`.
|
|
6
6
|
*/
|
|
7
|
-
export function signatureHelpProvider(
|
|
8
|
-
const rootTreeNode = mcf.CommandTreeRegistry.instance.get(commandTreeName);
|
|
7
|
+
export function signatureHelpProvider(rootTreeNode) {
|
|
9
8
|
return (fileNode, ctx) => {
|
|
10
9
|
if (fileNode.children[0]?.type !== 'mcfunction:entry') {
|
|
11
10
|
// Not mcfunction.
|
|
12
11
|
return undefined;
|
|
13
12
|
}
|
|
14
13
|
const node = getSelectedCommandNode(fileNode, ctx.offset);
|
|
14
|
+
if (!mcf.CommandNode.is(node)) {
|
|
15
|
+
// Not a command node.
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
15
18
|
const argumentNodes = node ? node.children : [];
|
|
16
19
|
const options = getOptions(rootTreeNode, argumentNodes);
|
|
17
20
|
if (options.length === 0) {
|
|
@@ -31,24 +34,16 @@ export function signatureHelpProvider(commandTreeName) {
|
|
|
31
34
|
// No matching syntax for the selected argument node.
|
|
32
35
|
return undefined;
|
|
33
36
|
}
|
|
34
|
-
const ans = {
|
|
35
|
-
activeSignature: 0,
|
|
36
|
-
signatures: [],
|
|
37
|
-
};
|
|
37
|
+
const ans = { activeSignature: 0, signatures: [] };
|
|
38
38
|
ans.signatures = options.map((v) => {
|
|
39
39
|
const part1 = v[selectedIndex];
|
|
40
|
-
const part2 = selectedIndex + 1 < v.length
|
|
41
|
-
? ` ${v[selectedIndex + 1]}`
|
|
42
|
-
: '';
|
|
40
|
+
const part2 = selectedIndex + 1 < v.length ? ` ${v[selectedIndex + 1]}` : '';
|
|
43
41
|
const label = `${part1}${part2}`;
|
|
44
42
|
return {
|
|
45
43
|
label,
|
|
46
44
|
activeParameter: 0,
|
|
47
45
|
// documentation: localize('mcfunction.signature-help.command-documentation', v[0]),
|
|
48
|
-
parameters: [
|
|
49
|
-
{ label: [0, part1.length] },
|
|
50
|
-
{ label: [part1.length, label.length] },
|
|
51
|
-
],
|
|
46
|
+
parameters: [{ label: [0, part1.length] }, { label: [part1.length, label.length] }],
|
|
52
47
|
};
|
|
53
48
|
});
|
|
54
49
|
return ans;
|
|
@@ -65,8 +60,7 @@ function getOptions(rootTreeNode, argumentNodes) {
|
|
|
65
60
|
if (!name) {
|
|
66
61
|
break;
|
|
67
62
|
}
|
|
68
|
-
treeNode = mcf.resolveParentTreeNode(treeNode, rootTreeNode).treeNode
|
|
69
|
-
?.children?.[name];
|
|
63
|
+
treeNode = mcf.resolveParentTreeNode(treeNode, rootTreeNode).treeNode?.children?.[name];
|
|
70
64
|
if (!treeNode) {
|
|
71
65
|
break;
|
|
72
66
|
}
|
|
@@ -75,9 +69,7 @@ function getOptions(rootTreeNode, argumentNodes) {
|
|
|
75
69
|
if (treeNode) {
|
|
76
70
|
treeNode = mcf.resolveParentTreeNode(treeNode, rootTreeNode).treeNode;
|
|
77
71
|
if (treeNode?.children) {
|
|
78
|
-
return mcf
|
|
79
|
-
.treeNodeChildrenToStringArray(treeNode.children, treeNode.executable)
|
|
80
|
-
.map((v) => [...current, v]);
|
|
72
|
+
return mcf.treeNodeChildrenToStringArray(treeNode.children, treeNode.executable).map((v) => [...current, v]);
|
|
81
73
|
}
|
|
82
74
|
}
|
|
83
75
|
return current.length ? [current] : [];
|
|
@@ -101,23 +101,80 @@ export interface MinecraftItemPredicateArgumentTreeNode extends mcf.ArgumentTree
|
|
|
101
101
|
export interface MinecraftItemSlotArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
102
102
|
parser: 'minecraft:item_slot';
|
|
103
103
|
}
|
|
104
|
+
export interface MinecraftItemSlotsArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
105
|
+
parser: 'minecraft:item_slots';
|
|
106
|
+
}
|
|
104
107
|
export interface MinecraftItemStackArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
105
108
|
parser: 'minecraft:item_stack';
|
|
106
109
|
}
|
|
110
|
+
export interface MinecraftLootModifierArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
111
|
+
parser: 'minecraft:loot_modifier';
|
|
112
|
+
}
|
|
113
|
+
export interface MinecraftLootPredicateArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
114
|
+
parser: 'minecraft:loot_predicate';
|
|
115
|
+
}
|
|
116
|
+
export interface MinecraftLootTableArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
117
|
+
parser: 'minecraft:loot_table';
|
|
118
|
+
}
|
|
107
119
|
export interface MinecraftMessageArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
108
120
|
parser: 'minecraft:message';
|
|
109
121
|
}
|
|
110
122
|
export interface MinecraftMobEffectArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
111
123
|
parser: 'minecraft:mob_effect';
|
|
112
124
|
}
|
|
125
|
+
export interface NbtParserProperties extends Record<string, unknown> {
|
|
126
|
+
/**
|
|
127
|
+
* The NBT checker should check this argument by dispatching on `dispatcher`
|
|
128
|
+
* with a static index inferred from the argument with the name `dispatchedBy`
|
|
129
|
+
* and optionally indexing on the dispatched type by indices inferred from the
|
|
130
|
+
* argument named by `indexedBy`.
|
|
131
|
+
*/
|
|
132
|
+
dispatcher: 'minecraft:block' | 'minecraft:entity' | 'minecraft:storage' | 'minecraft:macro_function';
|
|
133
|
+
/**
|
|
134
|
+
* The name of a vec3, an entity, an entity resource location, or a
|
|
135
|
+
* storage resource location argument.
|
|
136
|
+
*
|
|
137
|
+
* @see {@link NbtParserProperties.dispatcher}
|
|
138
|
+
*/
|
|
139
|
+
dispatchedBy: string;
|
|
140
|
+
/**
|
|
141
|
+
* The name of an NBT path argument.
|
|
142
|
+
*
|
|
143
|
+
* @see {@link NbtParserProperties.dispatcher}
|
|
144
|
+
*/
|
|
145
|
+
indexedBy?: string;
|
|
146
|
+
/**
|
|
147
|
+
* @default {@link core.SymbolAccessType.Read}
|
|
148
|
+
*/
|
|
149
|
+
accessType?: core.SymbolAccessType;
|
|
150
|
+
/**
|
|
151
|
+
* `true` if the NBT checker should check this argument as a predicate. In a
|
|
152
|
+
* predicate NBT argument, keys can be missing, resource location strings must
|
|
153
|
+
* include the default namespace and numbers must have the exact type match.
|
|
154
|
+
*/
|
|
155
|
+
isPredicate?: boolean;
|
|
156
|
+
/**
|
|
157
|
+
* `true` if the NBT checker should check this argument as a merge. In a
|
|
158
|
+
* merge NBT argument, keys can be missing.
|
|
159
|
+
*/
|
|
160
|
+
isMerge?: boolean;
|
|
161
|
+
/**
|
|
162
|
+
* `true` if the NBT checker should check this type using the list item of
|
|
163
|
+
* {@link indexedBy}
|
|
164
|
+
*/
|
|
165
|
+
isListIndex?: boolean;
|
|
166
|
+
}
|
|
113
167
|
export interface MinecraftNbtCompoundTagArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
114
168
|
parser: 'minecraft:nbt_compound_tag';
|
|
169
|
+
properties?: NbtParserProperties;
|
|
115
170
|
}
|
|
116
171
|
export interface MinecraftNbtPathArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
117
172
|
parser: 'minecraft:nbt_path';
|
|
173
|
+
properties?: NbtParserProperties;
|
|
118
174
|
}
|
|
119
175
|
export interface MinecraftNbtTagArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
120
176
|
parser: 'minecraft:nbt_tag';
|
|
177
|
+
properties?: NbtParserProperties;
|
|
121
178
|
}
|
|
122
179
|
export interface MinecraftObjectiveArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
123
180
|
parser: 'minecraft:objective';
|
|
@@ -153,18 +210,28 @@ export interface MinecraftResourceOrTagArgumentTreeNode extends mcf.ArgumentTree
|
|
|
153
210
|
registry: string;
|
|
154
211
|
};
|
|
155
212
|
}
|
|
213
|
+
export interface MinecraftResourceOrTagKeyArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
214
|
+
parser: 'minecraft:resource_or_tag_key';
|
|
215
|
+
properties: {
|
|
216
|
+
registry: string;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
156
219
|
export interface MinecraftRotationArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
157
220
|
parser: 'minecraft:rotation';
|
|
158
221
|
}
|
|
159
222
|
export interface MinecraftScoreHolderArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
160
223
|
parser: 'minecraft:score_holder';
|
|
161
224
|
properties: {
|
|
225
|
+
usageType: core.SymbolUsageType;
|
|
162
226
|
amount: 'single' | 'multiple';
|
|
163
227
|
};
|
|
164
228
|
}
|
|
165
229
|
export interface MinecraftScoreboardSlotArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
166
230
|
parser: 'minecraft:scoreboard_slot';
|
|
167
231
|
}
|
|
232
|
+
export interface MinecraftStyleArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
233
|
+
parser: 'minecraft:style';
|
|
234
|
+
}
|
|
168
235
|
export interface MinecraftSwizzleArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
169
236
|
parser: 'minecraft:swizzle';
|
|
170
237
|
}
|
|
@@ -193,5 +260,5 @@ export interface MinecraftVec3ArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
|
193
260
|
export interface SpyglassmcTagArgumentTreeNode extends mcf.ArgumentTreeNode {
|
|
194
261
|
parser: 'spyglassmc:tag';
|
|
195
262
|
}
|
|
196
|
-
export type ArgumentTreeNode = BrigadierBoolArgumentTreeNode | BrigadierDoubleArgumentTreeNode | BrigadierFloatArgumentTreeNode | BrigadierIntegerArgumentTreeNode | BrigadierLongArgumentTreeNode | BrigadierStringArgumentTreeNode | MinecraftAngleArgumentTreeNode | MinecraftBlockPosArgumentTreeNode | MinecraftBlockPredicateArgumentTreeNode | MinecraftBlockStateArgumentTreeNode | MinecraftColorArgumentTreeNode | MinecraftColumnPosArgumentTreeNode | MinecraftComponentArgumentTreeNode | MinecraftDimensionArgumentTreeNode | MinecraftEntityArgumentTreeNode | MinecraftEntityAnchorArgumentTreeNode | MinecraftEntitySummonArgumentTreeNode | MinecraftFloatRangeArgumentTreeNode | MinecraftFunctionArgumentTreeNode | MinecraftGamemodeArgumentTreeNode | MinecraftGameProfileArgumentTreeNode | MinecraftHeightmapArgumentTreeNode | MinecraftIntRangeArgumentTreeNode | MinecraftItemEnchantmentArgumentTreeNode | MinecraftItemPredicateArgumentTreeNode | MinecraftItemSlotArgumentTreeNode | MinecraftItemStackArgumentTreeNode | MinecraftMessageArgumentTreeNode | MinecraftMobEffectArgumentTreeNode | MinecraftNbtCompoundTagArgumentTreeNode | MinecraftNbtPathArgumentTreeNode | MinecraftNbtTagArgumentTreeNode | MinecraftObjectiveArgumentTreeNode | MinecraftObjectiveCriteriaArgumentTreeNode | MinecraftOperationArgumentTreeNode | MinecraftParticleArgumentTreeNode | MinecraftResourceArgumentTreeNode | MinecraftResourceKeyArgumentTreeNode | MinecraftResourceLocationArgumentTreeNode | MinecraftResourceOrTagArgumentTreeNode | MinecraftRotationArgumentTreeNode | MinecraftScoreHolderArgumentTreeNode | MinecraftScoreboardSlotArgumentTreeNode | MinecraftSwizzleArgumentTreeNode | MinecraftTeamArgumentTreeNode | MinecraftTemplateMirrorArgumentTreeNode | MinecraftTemplateRotationArgumentTreeNode | MinecraftTimeArgumentTreeNode | MinecraftUuidArgumentTreeNode | MinecraftVec2ArgumentTreeNode | MinecraftVec3ArgumentTreeNode | SpyglassmcTagArgumentTreeNode;
|
|
263
|
+
export type ArgumentTreeNode = BrigadierBoolArgumentTreeNode | BrigadierDoubleArgumentTreeNode | BrigadierFloatArgumentTreeNode | BrigadierIntegerArgumentTreeNode | BrigadierLongArgumentTreeNode | BrigadierStringArgumentTreeNode | MinecraftAngleArgumentTreeNode | MinecraftBlockPosArgumentTreeNode | MinecraftBlockPredicateArgumentTreeNode | MinecraftBlockStateArgumentTreeNode | MinecraftColorArgumentTreeNode | MinecraftColumnPosArgumentTreeNode | MinecraftComponentArgumentTreeNode | MinecraftDimensionArgumentTreeNode | MinecraftEntityArgumentTreeNode | MinecraftEntityAnchorArgumentTreeNode | MinecraftEntitySummonArgumentTreeNode | MinecraftFloatRangeArgumentTreeNode | MinecraftFunctionArgumentTreeNode | MinecraftGamemodeArgumentTreeNode | MinecraftGameProfileArgumentTreeNode | MinecraftHeightmapArgumentTreeNode | MinecraftIntRangeArgumentTreeNode | MinecraftItemEnchantmentArgumentTreeNode | MinecraftItemPredicateArgumentTreeNode | MinecraftItemSlotArgumentTreeNode | MinecraftItemSlotsArgumentTreeNode | MinecraftItemStackArgumentTreeNode | MinecraftLootModifierArgumentTreeNode | MinecraftLootPredicateArgumentTreeNode | MinecraftLootTableArgumentTreeNode | MinecraftMessageArgumentTreeNode | MinecraftMobEffectArgumentTreeNode | MinecraftNbtCompoundTagArgumentTreeNode | MinecraftNbtPathArgumentTreeNode | MinecraftNbtTagArgumentTreeNode | MinecraftObjectiveArgumentTreeNode | MinecraftObjectiveCriteriaArgumentTreeNode | MinecraftOperationArgumentTreeNode | MinecraftParticleArgumentTreeNode | MinecraftResourceArgumentTreeNode | MinecraftResourceKeyArgumentTreeNode | MinecraftResourceLocationArgumentTreeNode | MinecraftResourceOrTagArgumentTreeNode | MinecraftResourceOrTagKeyArgumentTreeNode | MinecraftRotationArgumentTreeNode | MinecraftScoreHolderArgumentTreeNode | MinecraftScoreboardSlotArgumentTreeNode | MinecraftStyleArgumentTreeNode | MinecraftSwizzleArgumentTreeNode | MinecraftTeamArgumentTreeNode | MinecraftTemplateMirrorArgumentTreeNode | MinecraftTemplateRotationArgumentTreeNode | MinecraftTimeArgumentTreeNode | MinecraftUuidArgumentTreeNode | MinecraftVec2ArgumentTreeNode | MinecraftVec3ArgumentTreeNode | SpyglassmcTagArgumentTreeNode;
|
|
197
264
|
//# sourceMappingURL=argument.d.ts.map
|