@spyglassmc/java-edition 0.3.8 → 0.3.10

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.
Files changed (35) hide show
  1. package/lib/binder/index.d.ts +11 -9
  2. package/lib/binder/index.js +149 -150
  3. package/lib/common/index.js +6 -9
  4. package/lib/dependency/common.d.ts +5 -0
  5. package/lib/dependency/common.js +8 -0
  6. package/lib/dependency/index.js +7 -17
  7. package/lib/dependency/mcmeta.d.ts +6 -12
  8. package/lib/dependency/mcmeta.js +21 -38
  9. package/lib/index.d.ts +1 -0
  10. package/lib/index.js +74 -32
  11. package/lib/json/checker/index.d.ts +3 -10
  12. package/lib/json/checker/index.js +36 -244
  13. package/lib/json/index.d.ts +0 -1
  14. package/lib/json/index.js +0 -3
  15. package/lib/mcfunction/checker/index.d.ts +0 -2
  16. package/lib/mcfunction/checker/index.js +254 -183
  17. package/lib/mcfunction/common/index.d.ts +4 -2
  18. package/lib/mcfunction/common/index.js +56 -52
  19. package/lib/mcfunction/completer/argument.js +112 -57
  20. package/lib/mcfunction/index.d.ts +3 -2
  21. package/lib/mcfunction/index.js +18 -19
  22. package/lib/mcfunction/inlayHintProvider.js +2 -3
  23. package/lib/mcfunction/mcdocAttributes.d.ts +4 -0
  24. package/lib/mcfunction/mcdocAttributes.js +74 -0
  25. package/lib/mcfunction/node/argument.d.ts +115 -12
  26. package/lib/mcfunction/node/argument.js +131 -63
  27. package/lib/mcfunction/parser/argument.d.ts +14 -4
  28. package/lib/mcfunction/parser/argument.js +380 -212
  29. package/lib/mcfunction/signatureHelpProvider.d.ts +2 -1
  30. package/lib/mcfunction/signatureHelpProvider.js +10 -18
  31. package/lib/mcfunction/tree/argument.d.ts +68 -1
  32. package/lib/mcfunction/tree/patch.js +279 -77
  33. package/lib/mcfunction/tree/patchValidator.d.ts +7 -0
  34. package/lib/mcfunction/tree/patchValidator.js +25 -0
  35. 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(commandTreeName: string): core.SignatureHelpProvider<core.FileNode<mcf.McfunctionNode>>;
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(commandTreeName) {
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