@spyglassmc/java-edition 0.1.1 → 0.2.0

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 (87) hide show
  1. package/lib/binder/index.d.ts +3 -3
  2. package/lib/binder/index.js +11 -17
  3. package/lib/common/index.js +4 -28
  4. package/lib/dependency/common.d.ts +8 -5
  5. package/lib/dependency/common.js +18 -18
  6. package/lib/dependency/index.d.ts +6 -6
  7. package/lib/dependency/index.js +21 -48
  8. package/lib/dependency/mcmeta.d.ts +2 -3
  9. package/lib/dependency/mcmeta.js +28 -100
  10. package/lib/index.d.ts +3 -3
  11. package/lib/index.js +27 -50
  12. package/lib/json/checker/data/advancement.d.ts +13 -13
  13. package/lib/json/checker/data/advancement.js +259 -262
  14. package/lib/json/checker/data/biome.d.ts +3 -3
  15. package/lib/json/checker/data/biome.js +98 -101
  16. package/lib/json/checker/data/common.d.ts +2 -2
  17. package/lib/json/checker/data/common.js +145 -152
  18. package/lib/json/checker/data/dimension.d.ts +3 -3
  19. package/lib/json/checker/data/dimension.js +148 -151
  20. package/lib/json/checker/data/feature.d.ts +8 -8
  21. package/lib/json/checker/data/feature.js +369 -372
  22. package/lib/json/checker/data/index.d.ts +2 -2
  23. package/lib/json/checker/data/index.js +36 -39
  24. package/lib/json/checker/data/loot_table.d.ts +7 -7
  25. package/lib/json/checker/data/loot_table.js +125 -128
  26. package/lib/json/checker/data/recipe.d.ts +1 -1
  27. package/lib/json/checker/data/recipe.js +25 -28
  28. package/lib/json/checker/data/structure.d.ts +7 -7
  29. package/lib/json/checker/data/structure.js +80 -83
  30. package/lib/json/checker/data/tag.js +23 -26
  31. package/lib/json/checker/data/text_component.d.ts +1 -1
  32. package/lib/json/checker/data/text_component.js +61 -64
  33. package/lib/json/checker/index.js +14 -19
  34. package/lib/json/checker/util/advancement.d.ts +1 -1
  35. package/lib/json/checker/util/advancement.js +4 -8
  36. package/lib/json/checker/util/block_states.d.ts +1 -1
  37. package/lib/json/checker/util/block_states.js +21 -45
  38. package/lib/json/checker/util/color.d.ts +1 -1
  39. package/lib/json/checker/util/color.js +20 -25
  40. package/lib/json/checker/util/index.d.ts +7 -7
  41. package/lib/json/checker/util/index.js +7 -19
  42. package/lib/json/checker/util/nbt.d.ts +2 -3
  43. package/lib/json/checker/util/nbt.js +17 -22
  44. package/lib/json/checker/util/recipe.d.ts +1 -1
  45. package/lib/json/checker/util/recipe.js +4 -8
  46. package/lib/json/checker/util/uuid.d.ts +1 -1
  47. package/lib/json/checker/util/uuid.js +4 -7
  48. package/lib/json/checker/util/version.d.ts +13 -13
  49. package/lib/json/checker/util/version.js +7 -13
  50. package/lib/json/index.d.ts +1 -1
  51. package/lib/json/index.js +4 -27
  52. package/lib/mcfunction/checker/index.d.ts +1 -1
  53. package/lib/mcfunction/checker/index.js +79 -103
  54. package/lib/mcfunction/colorizer/index.d.ts +1 -1
  55. package/lib/mcfunction/colorizer/index.js +6 -31
  56. package/lib/mcfunction/common/index.js +7 -29
  57. package/lib/mcfunction/completer/argument.js +95 -119
  58. package/lib/mcfunction/completer/index.d.ts +1 -1
  59. package/lib/mcfunction/completer/index.js +1 -13
  60. package/lib/mcfunction/index.d.ts +6 -6
  61. package/lib/mcfunction/index.js +19 -54
  62. package/lib/mcfunction/inlayHintProvider.js +3 -26
  63. package/lib/mcfunction/node/argument.d.ts +3 -3
  64. package/lib/mcfunction/node/argument.js +47 -69
  65. package/lib/mcfunction/node/index.d.ts +1 -1
  66. package/lib/mcfunction/node/index.js +1 -13
  67. package/lib/mcfunction/parser/argument.d.ts +1 -1
  68. package/lib/mcfunction/parser/argument.js +76 -101
  69. package/lib/mcfunction/parser/index.d.ts +1 -1
  70. package/lib/mcfunction/parser/index.js +1 -13
  71. package/lib/mcfunction/signatureHelpProvider.js +3 -26
  72. package/lib/mcfunction/tree/argument.js +1 -2
  73. package/lib/mcfunction/tree/index.d.ts +1 -6
  74. package/lib/mcfunction/tree/index.js +1 -18
  75. package/lib/mcfunction/tree/patch.d.ts +4 -0
  76. package/lib/mcfunction/tree/patch.js +748 -0
  77. package/package.json +8 -7
  78. package/lib/mcfunction/tree/1.15.d.ts +0 -9
  79. package/lib/mcfunction/tree/1.15.js +0 -542
  80. package/lib/mcfunction/tree/1.16.d.ts +0 -10
  81. package/lib/mcfunction/tree/1.16.js +0 -77
  82. package/lib/mcfunction/tree/1.17.d.ts +0 -12
  83. package/lib/mcfunction/tree/1.17.js +0 -166
  84. package/lib/mcfunction/tree/1.18.d.ts +0 -26
  85. package/lib/mcfunction/tree/1.18.js +0 -6
  86. package/lib/mcfunction/tree/1.19.d.ts +0 -26
  87. package/lib/mcfunction/tree/1.19.js +0 -6
@@ -1,36 +1,14 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.register = exports.getMockNodes = void 0;
23
- const core_1 = require("@spyglassmc/core");
24
- const json = __importStar(require("@spyglassmc/json"));
25
- const locales_1 = require("@spyglassmc/locales");
26
- const common_1 = require("../../common");
27
- const common_2 = require("../common");
28
- const node_1 = require("../node");
29
- const getMockNodes = (rawTreeNode, range) => {
1
+ import { AstNode, BooleanNode, BrigadierStringOptions, completer, CompletionItem, FloatNode, getStates, InsertTextBuilder, IntegerNode, LiteralNode, Range, ResourceLocation, ResourceLocationNode, StringNode, SymbolNode } from '@spyglassmc/core';
2
+ import * as json from '@spyglassmc/json';
3
+ import { localeQuote, localize } from '@spyglassmc/locales';
4
+ import { getTagValues } from '../../common/index.js';
5
+ import { ColorArgumentValues, EntityAnchorArgumentValues, ItemSlotArgumentValues, OperationArgumentValues, ScoreboardSlotArgumentValues, SwizzleArgumentValues } from '../common/index.js';
6
+ import { BlockNode, CoordinateNode, EntitySelectorNode, IntRangeNode, ItemNode, ObjectiveCriteriaNode, ParticleNode, ScoreHolderNode, VectorNode } from '../node/index.js';
7
+ export const getMockNodes = (rawTreeNode, range) => {
30
8
  const treeNode = rawTreeNode;
31
9
  switch (treeNode.parser) {
32
10
  case 'brigadier:bool':
33
- return core_1.BooleanNode.mock(range);
11
+ return BooleanNode.mock(range);
34
12
  case 'brigadier:double':
35
13
  case 'brigadier:float':
36
14
  case 'brigadier:integer':
@@ -42,20 +20,20 @@ const getMockNodes = (rawTreeNode, range) => {
42
20
  return [];
43
21
  case 'brigadier:string':
44
22
  return treeNode.properties.type === 'phrase'
45
- ? core_1.StringNode.mock(range, core_1.BrigadierStringOptions)
23
+ ? StringNode.mock(range, BrigadierStringOptions)
46
24
  : [];
47
25
  case 'minecraft:angle':
48
- return node_1.CoordinateNode.mock(range);
26
+ return CoordinateNode.mock(range);
49
27
  case 'minecraft:block_pos':
50
- return node_1.VectorNode.mock(range, { dimension: 3, integersOnly: true });
28
+ return VectorNode.mock(range, { dimension: 3, integersOnly: true });
51
29
  case 'minecraft:block_predicate':
52
- return node_1.BlockNode.mock(range, true);
30
+ return BlockNode.mock(range, true);
53
31
  case 'minecraft:block_state':
54
- return node_1.BlockNode.mock(range, false);
32
+ return BlockNode.mock(range, false);
55
33
  case 'minecraft:color':
56
- return core_1.LiteralNode.mock(range, { pool: common_2.ColorArgumentValues });
34
+ return LiteralNode.mock(range, { pool: ColorArgumentValues });
57
35
  case 'minecraft:column_pos':
58
- return node_1.VectorNode.mock(range, { dimension: 2, integersOnly: true });
36
+ return VectorNode.mock(range, { dimension: 2, integersOnly: true });
59
37
  case 'minecraft:component':
60
38
  return [
61
39
  json.JsonArrayNode.mock(range),
@@ -63,60 +41,60 @@ const getMockNodes = (rawTreeNode, range) => {
63
41
  json.JsonStringNode.mock(range),
64
42
  ];
65
43
  case 'minecraft:dimension':
66
- return core_1.ResourceLocationNode.mock(range, { category: 'dimension' });
44
+ return ResourceLocationNode.mock(range, { category: 'dimension' });
67
45
  case 'minecraft:entity':
68
46
  case 'minecraft:game_profile':
69
- return node_1.EntitySelectorNode.mock(range);
47
+ return EntitySelectorNode.mock(range);
70
48
  case 'minecraft:entity_anchor':
71
- return core_1.LiteralNode.mock(range, { pool: common_2.EntityAnchorArgumentValues });
49
+ return LiteralNode.mock(range, { pool: EntityAnchorArgumentValues });
72
50
  case 'minecraft:entity_summon':
73
- return core_1.ResourceLocationNode.mock(range, { category: 'entity_type' });
51
+ return ResourceLocationNode.mock(range, { category: 'entity_type' });
74
52
  case 'minecraft:function':
75
- return core_1.ResourceLocationNode.mock(range, { category: 'function' });
53
+ return ResourceLocationNode.mock(range, { category: 'function' });
76
54
  case 'minecraft:int_range':
77
- return node_1.IntRangeNode.mock(range);
55
+ return IntRangeNode.mock(range);
78
56
  case 'minecraft:item_enchantment':
79
- return core_1.ResourceLocationNode.mock(range, { category: 'enchantment' });
57
+ return ResourceLocationNode.mock(range, { category: 'enchantment' });
80
58
  case 'minecraft:item_predicate':
81
- return node_1.ItemNode.mock(range, true);
59
+ return ItemNode.mock(range, true);
82
60
  case 'minecraft:item_slot':
83
- return core_1.LiteralNode.mock(range, { pool: common_2.ItemSlotArgumentValues });
61
+ return LiteralNode.mock(range, { pool: ItemSlotArgumentValues });
84
62
  case 'minecraft:item_stack':
85
- return node_1.ItemNode.mock(range, false);
63
+ return ItemNode.mock(range, false);
86
64
  case 'minecraft:mob_effect':
87
- return core_1.ResourceLocationNode.mock(range, { category: 'mob_effect' });
65
+ return ResourceLocationNode.mock(range, { category: 'mob_effect' });
88
66
  case 'minecraft:objective':
89
- return core_1.SymbolNode.mock(range, { category: 'objective' });
67
+ return SymbolNode.mock(range, { category: 'objective' });
90
68
  case 'minecraft:objective_criteria':
91
- return node_1.ObjectiveCriteriaNode.mock(range);
69
+ return ObjectiveCriteriaNode.mock(range);
92
70
  case 'minecraft:operation':
93
- return core_1.LiteralNode.mock(range, { pool: common_2.OperationArgumentValues, colorTokenType: 'operator' });
71
+ return LiteralNode.mock(range, { pool: OperationArgumentValues, colorTokenType: 'operator' });
94
72
  case 'minecraft:particle':
95
- return node_1.ParticleNode.mock(range);
73
+ return ParticleNode.mock(range);
96
74
  case 'minecraft:resource':
97
75
  case 'minecraft:resource_or_tag':
98
- return core_1.ResourceLocationNode.mock(range, {
99
- category: core_1.ResourceLocation.shorten(treeNode.properties.registry),
76
+ return ResourceLocationNode.mock(range, {
77
+ category: ResourceLocation.shorten(treeNode.properties.registry),
100
78
  allowTag: treeNode.parser === 'minecraft:resource_or_tag',
101
79
  });
102
80
  case 'minecraft:resource_location':
103
- return core_1.ResourceLocationNode.mock(range, treeNode.properties ?? { pool: [], allowUnknown: true });
81
+ return ResourceLocationNode.mock(range, treeNode.properties ?? { pool: [], allowUnknown: true });
104
82
  case 'minecraft:rotation':
105
- return node_1.VectorNode.mock(range, { dimension: 2, noLocal: true });
83
+ return VectorNode.mock(range, { dimension: 2, noLocal: true });
106
84
  case 'minecraft:scoreboard_slot':
107
- return core_1.LiteralNode.mock(range, { pool: common_2.ScoreboardSlotArgumentValues });
85
+ return LiteralNode.mock(range, { pool: ScoreboardSlotArgumentValues });
108
86
  case 'minecraft:score_holder':
109
- return node_1.ScoreHolderNode.mock(range);
87
+ return ScoreHolderNode.mock(range);
110
88
  case 'minecraft:swizzle':
111
- return core_1.LiteralNode.mock(range, { pool: common_2.SwizzleArgumentValues });
89
+ return LiteralNode.mock(range, { pool: SwizzleArgumentValues });
112
90
  case 'minecraft:team':
113
- return core_1.SymbolNode.mock(range, { category: 'team' });
91
+ return SymbolNode.mock(range, { category: 'team' });
114
92
  case 'minecraft:vec2':
115
- return node_1.VectorNode.mock(range, { dimension: 2, integersOnly: true });
93
+ return VectorNode.mock(range, { dimension: 2, integersOnly: true });
116
94
  case 'minecraft:vec3':
117
- return node_1.VectorNode.mock(range, { dimension: 3 });
95
+ return VectorNode.mock(range, { dimension: 3 });
118
96
  case 'spyglassmc:tag':
119
- return core_1.SymbolNode.mock(range, { category: 'tag' });
97
+ return SymbolNode.mock(range, { category: 'tag' });
120
98
  // ==== Unimplemented ====
121
99
  case 'minecraft:nbt_compound_tag':
122
100
  case 'minecraft:nbt_path':
@@ -126,33 +104,32 @@ const getMockNodes = (rawTreeNode, range) => {
126
104
  return [];
127
105
  }
128
106
  };
129
- exports.getMockNodes = getMockNodes;
130
107
  const block = (node, ctx) => {
131
108
  const ans = [];
132
- if (core_1.Range.contains(node.id, ctx.offset, true)) {
133
- ans.push(...core_1.completer.resourceLocation(node.id, ctx));
109
+ if (Range.contains(node.id, ctx.offset, true)) {
110
+ ans.push(...completer.resourceLocation(node.id, ctx));
134
111
  }
135
- if (node.states && core_1.Range.contains(core_1.Range.translate(node.states, 1, -1), ctx.offset, true)) {
112
+ if (node.states && Range.contains(Range.translate(node.states, 1, -1), ctx.offset, true)) {
136
113
  ans.push(...blockStates(node.states, ctx));
137
114
  }
138
115
  return ans;
139
116
  };
140
117
  const blockStates = (node, ctx) => {
141
- if (!node_1.BlockNode.is(node.parent)) {
118
+ if (!BlockNode.is(node.parent)) {
142
119
  return [];
143
120
  }
144
121
  const idNode = node.parent.id;
145
- const id = core_1.ResourceLocationNode.toString(idNode, 'full');
146
- const blocks = idNode.isTag ? (0, common_1.getTagValues)('tag/block', id, ctx) : [id];
147
- const states = (0, core_1.getStates)('block', blocks, ctx);
148
- return core_1.completer.record({
122
+ const id = ResourceLocationNode.toString(idNode, 'full');
123
+ const blocks = idNode.isTag ? getTagValues('tag/block', id, ctx) : [id];
124
+ const states = getStates('block', blocks, ctx);
125
+ return completer.record({
149
126
  key: (_record, pair, _ctx, range, insertValue, insertComma, existingKeys) => {
150
127
  return Object.keys(states)
151
128
  .filter(k => pair?.key?.value === k || !existingKeys.some(ek => ek.value === k))
152
- .map(k => core_1.CompletionItem.create(k, range, {
153
- kind: 10 /* Property */,
154
- detail: (0, locales_1.localize)('mcfunction.completer.block.states.default-value', (0, locales_1.localeQuote)(states[k][0])),
155
- insertText: new core_1.InsertTextBuilder()
129
+ .map(k => CompletionItem.create(k, range, {
130
+ kind: 10 /* CompletionKind.Property */,
131
+ detail: localize('mcfunction.completer.block.states.default-value', localeQuote(states[k][0])),
132
+ insertText: new InsertTextBuilder()
156
133
  .literal(k)
157
134
  .if(insertValue, b => b.literal('=').placeholder(...states[k]))
158
135
  .if(insertComma, b => b.literal(','))
@@ -161,8 +138,8 @@ const blockStates = (node, ctx) => {
161
138
  },
162
139
  value: (_record, pair, ctx) => {
163
140
  if (pair.key && states[pair.key.value]) {
164
- return states[pair.key.value].map(v => core_1.CompletionItem.create(v, pair.value ?? ctx.offset, {
165
- kind: 12 /* Value */,
141
+ return states[pair.key.value].map(v => CompletionItem.create(v, pair.value ?? ctx.offset, {
142
+ kind: 12 /* CompletionKind.Value */,
166
143
  }));
167
144
  }
168
145
  return [];
@@ -170,85 +147,85 @@ const blockStates = (node, ctx) => {
170
147
  })(node, ctx);
171
148
  };
172
149
  const coordinate = (node, _ctx) => {
173
- return [core_1.CompletionItem.create('~', node)];
150
+ return [CompletionItem.create('~', node)];
174
151
  };
175
152
  const item = (node, ctx) => {
176
153
  const ans = [];
177
- if (core_1.Range.contains(node.id, ctx.offset, true)) {
178
- ans.push(...core_1.completer.resourceLocation(node.id, ctx));
154
+ if (Range.contains(node.id, ctx.offset, true)) {
155
+ ans.push(...completer.resourceLocation(node.id, ctx));
179
156
  }
180
157
  return ans;
181
158
  };
182
159
  const objectiveCriteria = (node, ctx) => {
183
- const ans = node_1.ObjectiveCriteriaNode.SimpleValues.map(v => core_1.CompletionItem.create(v, node));
184
- if (!node.children?.[0] || core_1.Range.contains(node.children[0], ctx.offset, true)) {
185
- ans.push(...core_1.completer.resourceLocation(node.children?.[0] ?? core_1.ResourceLocationNode.mock(node, { category: 'stat_type', namespacePathSep: '.' }), ctx));
160
+ const ans = ObjectiveCriteriaNode.SimpleValues.map(v => CompletionItem.create(v, node));
161
+ if (!node.children?.[0] || Range.contains(node.children[0], ctx.offset, true)) {
162
+ ans.push(...completer.resourceLocation(node.children?.[0] ?? ResourceLocationNode.mock(node, { category: 'stat_type', namespacePathSep: '.' }), ctx));
186
163
  }
187
- if (node.children?.[1] && core_1.Range.contains(node.children[1], ctx.offset, true)) {
188
- ans.push(...core_1.completer.resourceLocation(node.children[1], ctx));
164
+ if (node.children?.[1] && Range.contains(node.children[1], ctx.offset, true)) {
165
+ ans.push(...completer.resourceLocation(node.children[1], ctx));
189
166
  }
190
167
  return ans;
191
168
  };
192
169
  const particle = (node, ctx) => {
193
- const child = core_1.AstNode.findChild(node, ctx.offset, true);
170
+ const child = AstNode.findChild(node, ctx.offset, true);
194
171
  if (child) {
195
- return core_1.completer.dispatch(child, ctx);
172
+ return completer.dispatch(child, ctx);
196
173
  }
197
- const id = core_1.ResourceLocationNode.toString(node.id, 'short');
174
+ const id = ResourceLocationNode.toString(node.id, 'short');
198
175
  const map = {
199
- block: [node_1.BlockNode.mock(ctx.offset, false)],
200
- block_marker: [node_1.BlockNode.mock(ctx.offset, false)],
201
- dust: [node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), core_1.FloatNode.mock(ctx.offset)],
202
- dust_color_transition: [node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), core_1.FloatNode.mock(ctx.offset), node_1.VectorNode.mock(ctx.offset, { dimension: 3 })],
203
- falling_dust: [node_1.BlockNode.mock(ctx.offset, false)],
204
- item: [node_1.ItemNode.mock(ctx.offset, false)],
205
- sculk_charge: [core_1.FloatNode.mock(ctx.offset)],
206
- vibration: [node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), node_1.VectorNode.mock(ctx.offset, { dimension: 3 }), core_1.IntegerNode.mock(ctx.offset)],
176
+ block: [BlockNode.mock(ctx.offset, false)],
177
+ block_marker: [BlockNode.mock(ctx.offset, false)],
178
+ dust: [VectorNode.mock(ctx.offset, { dimension: 3 }), FloatNode.mock(ctx.offset)],
179
+ dust_color_transition: [VectorNode.mock(ctx.offset, { dimension: 3 }), FloatNode.mock(ctx.offset), VectorNode.mock(ctx.offset, { dimension: 3 })],
180
+ falling_dust: [BlockNode.mock(ctx.offset, false)],
181
+ item: [ItemNode.mock(ctx.offset, false)],
182
+ sculk_charge: [FloatNode.mock(ctx.offset)],
183
+ vibration: [VectorNode.mock(ctx.offset, { dimension: 3 }), VectorNode.mock(ctx.offset, { dimension: 3 }), IntegerNode.mock(ctx.offset)],
207
184
  };
208
- if (node_1.ParticleNode.isSpecialType(id)) {
185
+ if (ParticleNode.isSpecialType(id)) {
209
186
  const numParamsBefore = node.children?.slice(1).filter(n => n.range.end < ctx.offset).length ?? 0;
210
187
  const mock = map[id][numParamsBefore];
211
188
  if (mock) {
212
- return core_1.completer.dispatch(mock, ctx);
189
+ return completer.dispatch(mock, ctx);
213
190
  }
214
191
  }
215
192
  return [];
216
193
  };
217
194
  const scoreHolder = (node, ctx) => {
218
195
  let ans;
219
- if (node.selector && core_1.Range.contains(node.selector, ctx.offset, true)) {
196
+ if (node.selector && Range.contains(node.selector, ctx.offset, true)) {
220
197
  ans = selector(node.selector, ctx);
221
- if (core_1.Range.contains(node.children[0], ctx.offset, true)) {
222
- ans.push(...core_1.completer.symbol(core_1.SymbolNode.mock(node, { category: 'score_holder' }), ctx));
198
+ if (Range.contains(node.children[0], ctx.offset, true)) {
199
+ ans.push(...completer.symbol(SymbolNode.mock(node, { category: 'score_holder' }), ctx));
223
200
  }
224
201
  }
225
202
  else {
226
- ans = core_1.completer.symbol(node.fakeName ?? core_1.SymbolNode.mock(node, { category: 'score_holder' }), ctx);
227
- ans.push(...selector(node_1.EntitySelectorNode.mock(node), ctx));
203
+ ans = completer.symbol(node.fakeName ?? SymbolNode.mock(node, { category: 'score_holder' }), ctx);
204
+ ans.push(...selector(EntitySelectorNode.mock(node), ctx));
228
205
  }
229
206
  return ans;
230
207
  };
231
208
  const selector = (node, ctx) => {
232
- if (core_1.Range.contains(node.children[0], ctx.offset, true)) {
233
- return core_1.completer.literal(node.children[0], ctx);
209
+ if (Range.contains(node.children[0], ctx.offset, true)) {
210
+ return completer.literal(node.children[0], ctx);
234
211
  }
235
- if (node.arguments && core_1.Range.contains(core_1.Range.translate(node.arguments, 1, -1), ctx.offset, true)) {
212
+ if (node.arguments && Range.contains(Range.translate(node.arguments, 1, -1), ctx.offset, true)) {
236
213
  return selectorArguments(node.arguments, ctx);
237
214
  }
238
215
  return [];
239
216
  };
240
217
  const selectorArguments = (node, ctx) => {
241
218
  const selector = node.parent;
242
- if (!node_1.EntitySelectorNode.is(selector)) {
219
+ if (!EntitySelectorNode.is(selector)) {
243
220
  return [];
244
221
  }
245
- return core_1.completer.record({
222
+ return completer.record({
246
223
  key: (record, pair, _ctx, range, insertValue, insertComma) => {
247
- return [...node_1.EntitySelectorNode.ArgumentKeys]
248
- .filter(k => node_1.EntitySelectorNode.canKeyExist(selector, record, k) === 0 /* Ok */)
249
- .map(k => core_1.CompletionItem.create(k, range, {
250
- kind: 10 /* Property */,
251
- insertText: new core_1.InsertTextBuilder()
224
+ return [...EntitySelectorNode.ArgumentKeys]
225
+ .filter(k => EntitySelectorNode.canKeyExist(selector, record, k) === 0 /* EntitySelectorNode.Result.Ok */)
226
+ .map(k => CompletionItem.create(k, range, {
227
+ kind: 10 /* CompletionKind.Property */,
228
+ insertText: new InsertTextBuilder()
252
229
  .literal(k)
253
230
  .if(insertValue, b => b.literal('=').placeholder()) // TODO
254
231
  .if(insertComma, b => b.literal(','))
@@ -257,17 +234,17 @@ const selectorArguments = (node, ctx) => {
257
234
  },
258
235
  value: (_record, pair, ctx) => {
259
236
  if (pair.value) {
260
- return core_1.completer.dispatch(pair.value, ctx);
237
+ return completer.dispatch(pair.value, ctx);
261
238
  }
262
239
  return [];
263
240
  },
264
241
  })(node, ctx);
265
242
  };
266
243
  const intRange = (node, _ctx) => {
267
- return [core_1.CompletionItem.create('-2147483648..2147483647', node, { kind: 21 /* Constant */ })];
244
+ return [CompletionItem.create('-2147483648..2147483647', node, { kind: 21 /* CompletionKind.Constant */ })];
268
245
  };
269
246
  const vector = (node, _ctx) => {
270
- const createCompletion = (coordinate, sortText) => core_1.CompletionItem.create(new Array(node.options.dimension).fill(coordinate).join(' '), node, { sortText });
247
+ const createCompletion = (coordinate, sortText) => CompletionItem.create(new Array(node.options.dimension).fill(coordinate).join(' '), node, { sortText });
271
248
  const ans = [];
272
249
  ans.push(createCompletion('~', 'a'));
273
250
  if (!node.options.noLocal) {
@@ -276,7 +253,7 @@ const vector = (node, _ctx) => {
276
253
  ans.push(createCompletion('0.0', 'c'));
277
254
  return ans;
278
255
  };
279
- function register(meta) {
256
+ export function register(meta) {
280
257
  meta.registerCompleter('mcfunction:block', block);
281
258
  meta.registerCompleter('mcfunction:coordinate', coordinate);
282
259
  meta.registerCompleter('mcfunction:entity_selector', selector);
@@ -288,5 +265,4 @@ function register(meta) {
288
265
  meta.registerCompleter('mcfunction:score_holder', scoreHolder);
289
266
  meta.registerCompleter('mcfunction:vector', vector);
290
267
  }
291
- exports.register = register;
292
268
  //# sourceMappingURL=argument.js.map
@@ -1,2 +1,2 @@
1
- export * from './argument';
1
+ export * from './argument.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,14 +1,2 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./argument"), exports);
1
+ export * from './argument.js';
14
2
  //# sourceMappingURL=index.js.map
@@ -1,8 +1,8 @@
1
1
  import type * as core from '@spyglassmc/core';
2
- import type { MajorVersion, McmetaCommands } from '../dependency';
3
- export * as checker from './checker';
4
- export * as colorizer from './colorizer';
5
- export * as completer from './completer';
6
- export * as parser from './parser';
7
- export declare const initialize: (ctx: core.ProjectInitializerContext, commands: McmetaCommands, majorVersion: MajorVersion) => void;
2
+ import type { McmetaCommands, ReleaseVersion } from '../dependency/index.js';
3
+ export * as checker from './checker/index.js';
4
+ export * as colorizer from './colorizer/index.js';
5
+ export * as completer from './completer/index.js';
6
+ export * as parser from './parser/index.js';
7
+ export declare const initialize: (ctx: core.ProjectInitializerContext, commands: McmetaCommands, releaseVersion: ReleaseVersion) => void;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1,58 +1,24 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.initialize = exports.parser = exports.completer = exports.colorizer = exports.checker = void 0;
23
- const mcf = __importStar(require("@spyglassmc/mcfunction"));
24
- const checker = __importStar(require("./checker"));
25
- const colorizer = __importStar(require("./colorizer"));
26
- const completer = __importStar(require("./completer"));
27
- const inlayHintProvider_1 = require("./inlayHintProvider");
28
- const parser = __importStar(require("./parser"));
29
- const signatureHelpProvider_1 = require("./signatureHelpProvider");
30
- const tree_1 = require("./tree");
31
- exports.checker = __importStar(require("./checker"));
32
- exports.colorizer = __importStar(require("./colorizer"));
33
- exports.completer = __importStar(require("./completer"));
34
- exports.parser = __importStar(require("./parser"));
35
- // DOCS: Update here when a new major version of Minecraft is released.
36
- const Trees = new Map([
37
- ['1.15', tree_1.Tree1_15],
38
- ['1.16', tree_1.Tree1_16],
39
- ['1.17', tree_1.Tree1_17],
40
- ['1.18', tree_1.Tree1_18],
41
- ['1.19', tree_1.Tree1_19],
42
- ]);
43
- const LatestTree = (() => {
44
- const values = [...Trees.values()];
45
- return values[values.length - 1];
46
- })();
1
+ import * as mcf from '@spyglassmc/mcfunction';
2
+ import * as checker from './checker/index.js';
3
+ import * as colorizer from './colorizer/index.js';
4
+ import * as completer from './completer/index.js';
5
+ import { inlayHintProvider } from './inlayHintProvider.js';
6
+ import * as parser from './parser/index.js';
7
+ import { signatureHelpProvider } from './signatureHelpProvider.js';
8
+ import { getPatch } from './tree/patch.js';
9
+ export * as checker from './checker/index.js';
10
+ export * as colorizer from './colorizer/index.js';
11
+ export * as completer from './completer/index.js';
12
+ export * as parser from './parser/index.js';
47
13
  /* istanbul ignore next */
48
- const initialize = (ctx, commands, majorVersion) => {
14
+ export const initialize = (ctx, commands, releaseVersion) => {
49
15
  const { meta } = ctx;
50
16
  mcf.initialize(ctx);
51
- mcf.CommandTreeRegistry.instance.register(majorVersion, commands, Trees.get(majorVersion) ?? LatestTree);
17
+ mcf.CommandTreeRegistry.instance.register(releaseVersion, commands, getPatch(releaseVersion));
52
18
  meta.registerLanguage('mcfunction', {
53
19
  extensions: ['.mcfunction'],
54
- parser: mcf.entry(majorVersion, parser.argument),
55
- completer: mcf.completer.entry(majorVersion, completer.getMockNodes),
20
+ parser: mcf.entry(releaseVersion, parser.argument),
21
+ completer: mcf.completer.entry(releaseVersion, completer.getMockNodes),
56
22
  triggerCharacters: [' ', '[', '=', '!', ',', '{', ':', '/', '.', '"', "'"],
57
23
  });
58
24
  meta.registerParser('mcfunction:block_predicate', parser.blockPredicate);
@@ -60,12 +26,11 @@ const initialize = (ctx, commands, majorVersion) => {
60
26
  meta.registerParser('mcfunction:particle', parser.particle);
61
27
  meta.registerParser('mcfunction:tag', parser.tag());
62
28
  meta.registerParser('mcfunction:team', parser.team());
63
- meta.registerParser('mcfunction:command', mcf.command(mcf.CommandTreeRegistry.instance.get(majorVersion), parser.argument));
29
+ meta.registerParser('mcfunction:command', mcf.command(mcf.CommandTreeRegistry.instance.get(releaseVersion), parser.argument));
64
30
  checker.register(meta);
65
31
  colorizer.register(meta);
66
32
  completer.register(meta);
67
- meta.registerInlayHintProvider(inlayHintProvider_1.inlayHintProvider);
68
- meta.registerSignatureHelpProvider((0, signatureHelpProvider_1.signatureHelpProvider)(majorVersion));
33
+ meta.registerInlayHintProvider(inlayHintProvider);
34
+ meta.registerSignatureHelpProvider(signatureHelpProvider(releaseVersion));
69
35
  };
70
- exports.initialize = initialize;
71
36
  //# sourceMappingURL=index.js.map
@@ -1,28 +1,6 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.inlayHintProvider = void 0;
23
- const core = __importStar(require("@spyglassmc/core"));
24
- const mcf = __importStar(require("@spyglassmc/mcfunction"));
25
- const inlayHintProvider = (node, ctx) => {
1
+ import * as core from '@spyglassmc/core';
2
+ import * as mcf from '@spyglassmc/mcfunction';
3
+ export const inlayHintProvider = (node, ctx) => {
26
4
  if (node.children[0]?.type !== 'mcfunction:entry') {
27
5
  return [];
28
6
  }
@@ -36,5 +14,4 @@ const inlayHintProvider = (node, ctx) => {
36
14
  });
37
15
  return ans;
38
16
  };
39
- exports.inlayHintProvider = inlayHintProvider;
40
17
  //# sourceMappingURL=inlayHintProvider.js.map
@@ -59,7 +59,7 @@ export declare type EntitySelectorVariable = typeof EntitySelectorVariables[numb
59
59
  export declare namespace EntitySelectorVariable {
60
60
  function is(value: string): value is EntitySelectorVariable;
61
61
  }
62
- export declare const EntitySelectorAtVariables: ("@a" | "@e" | "@p" | "@r" | "@s")[];
62
+ export declare const EntitySelectorAtVariables: ("@p" | "@a" | "@e" | "@r" | "@s")[];
63
63
  export declare type EntitySelectorAtVariable = typeof EntitySelectorAtVariables[number];
64
64
  export declare namespace EntitySelectorAtVariable {
65
65
  function is(value: string): value is EntitySelectorAtVariable;
@@ -80,7 +80,7 @@ export interface EntitySelectorNode extends core.AstNode {
80
80
  export declare namespace EntitySelectorNode {
81
81
  function is(node: core.AstNode | undefined): node is EntitySelectorNode;
82
82
  function mock(range: core.RangeLike): EntitySelectorNode;
83
- const ArgumentKeys: Set<"sort" | "type" | "predicate" | "tag" | "team" | "x" | "y" | "z" | "level" | "advancements" | "nbt" | "name" | "scores" | "limit" | "distance" | "gamemode" | "dx" | "dy" | "dz" | "x_rotation" | "y_rotation">;
83
+ const ArgumentKeys: Set<"predicate" | "tag" | "team" | "type" | "level" | "advancements" | "nbt" | "name" | "scores" | "limit" | "x" | "y" | "z" | "distance" | "gamemode" | "sort" | "dx" | "dy" | "dz" | "x_rotation" | "y_rotation">;
84
84
  type ArgumentKey = typeof ArgumentKeys extends Set<infer T> ? T : undefined;
85
85
  const enum Result {
86
86
  Ok = 0,
@@ -133,7 +133,7 @@ export interface ObjectiveCriteriaNode extends core.AstNode {
133
133
  }
134
134
  export declare namespace ObjectiveCriteriaNode {
135
135
  const SimpleValues: string[];
136
- const ComplexCategories: Map<string, "activity" | "attribute" | "block" | "block_entity_type" | "block_predicate_type" | "chunk_status" | "custom_stat" | "enchantment" | "entity_type" | "float_provider_type" | "fluid" | "game_event" | "height_provider_type" | "int_provider_type" | "item" | "loot_condition_type" | "loot_function_type" | "loot_nbt_provider_type" | "loot_number_provider_type" | "loot_pool_entry_type" | "loot_score_provider_type" | "memory_module_type" | "menu" | "mob_effect" | "motive" | "particle_type" | "point_of_interest_type" | "pos_rule_test" | "position_source_type" | "potion" | "recipe_serializer" | "recipe_type" | "rule_test" | "schedule" | "sensor_type" | "sound_event" | "stat_type" | "villager_profession" | "villager_type" | "worldgen/biome_source" | "worldgen/block_placer_type" | "worldgen/block_state_provider_type" | "worldgen/carver" | "worldgen/chunk_generator" | "worldgen/decorator" | "worldgen/feature" | "worldgen/feature_size_type" | "worldgen/foliage_placer_type" | "worldgen/material_condition" | "worldgen/material_rule" | "worldgen/placement_modifier_type" | "worldgen/structure_feature" | "worldgen/structure_piece" | "worldgen/structure_pool_element" | "worldgen/structure_processor" | "worldgen/surface_builder" | "worldgen/tree_decorator_type" | "worldgen/trunk_placer_type">;
136
+ const ComplexCategories: Map<string, "block" | "fluid" | "activity" | "attribute" | "block_entity_type" | "block_predicate_type" | "chunk_status" | "custom_stat" | "enchantment" | "entity_type" | "float_provider_type" | "game_event" | "height_provider_type" | "int_provider_type" | "item" | "loot_condition_type" | "loot_function_type" | "loot_nbt_provider_type" | "loot_number_provider_type" | "loot_pool_entry_type" | "loot_score_provider_type" | "memory_module_type" | "menu" | "mob_effect" | "motive" | "particle_type" | "point_of_interest_type" | "pos_rule_test" | "position_source_type" | "potion" | "recipe_serializer" | "recipe_type" | "rule_test" | "schedule" | "sensor_type" | "sound_event" | "stat_type" | "villager_profession" | "villager_type" | "worldgen/biome_source" | "worldgen/block_placer_type" | "worldgen/block_state_provider_type" | "worldgen/carver" | "worldgen/chunk_generator" | "worldgen/decorator" | "worldgen/feature" | "worldgen/feature_size_type" | "worldgen/foliage_placer_type" | "worldgen/material_condition" | "worldgen/material_rule" | "worldgen/placement_modifier_type" | "worldgen/structure_feature" | "worldgen/structure_piece" | "worldgen/structure_pool_element" | "worldgen/structure_processor" | "worldgen/surface_builder" | "worldgen/tree_decorator_type" | "worldgen/trunk_placer_type">;
137
137
  const ComplexSep = ":";
138
138
  function mock(range: core.RangeLike): ObjectiveCriteriaNode;
139
139
  }