@bscotch/gml-parser 1.14.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.
Files changed (208) hide show
  1. package/LICENSE.md +29 -0
  2. package/README.md +151 -0
  3. package/assets/GmlSpec.xml +11419 -0
  4. package/dist/index.d.ts +16 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +13 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/jsdoc.d.ts +79 -0
  9. package/dist/jsdoc.d.ts.map +1 -0
  10. package/dist/jsdoc.feather.d.ts +23 -0
  11. package/dist/jsdoc.feather.d.ts.map +1 -0
  12. package/dist/jsdoc.feather.js +143 -0
  13. package/dist/jsdoc.feather.js.map +1 -0
  14. package/dist/jsdoc.js +468 -0
  15. package/dist/jsdoc.js.map +1 -0
  16. package/dist/jsdoc.test.d.ts +2 -0
  17. package/dist/jsdoc.test.d.ts.map +1 -0
  18. package/dist/jsdoc.test.js +185 -0
  19. package/dist/jsdoc.test.js.map +1 -0
  20. package/dist/lexer.d.ts +3 -0
  21. package/dist/lexer.d.ts.map +1 -0
  22. package/dist/lexer.js +14 -0
  23. package/dist/lexer.js.map +1 -0
  24. package/dist/lexer.test.d.ts +2 -0
  25. package/dist/lexer.test.d.ts.map +1 -0
  26. package/dist/lexer.test.js +78 -0
  27. package/dist/lexer.test.js.map +1 -0
  28. package/dist/lib.objects.d.ts +190 -0
  29. package/dist/lib.objects.d.ts.map +1 -0
  30. package/dist/lib.objects.js +242 -0
  31. package/dist/lib.objects.js.map +1 -0
  32. package/dist/logger.d.ts +13 -0
  33. package/dist/logger.d.ts.map +1 -0
  34. package/dist/logger.js +14 -0
  35. package/dist/logger.js.map +1 -0
  36. package/dist/modules.d.ts +19 -0
  37. package/dist/modules.d.ts.map +1 -0
  38. package/dist/modules.js +320 -0
  39. package/dist/modules.js.map +1 -0
  40. package/dist/modules.test.d.ts +2 -0
  41. package/dist/modules.test.d.ts.map +1 -0
  42. package/dist/modules.test.js +57 -0
  43. package/dist/modules.test.js.map +1 -0
  44. package/dist/modules.types.d.ts +78 -0
  45. package/dist/modules.types.d.ts.map +1 -0
  46. package/dist/modules.types.js +2 -0
  47. package/dist/modules.types.js.map +1 -0
  48. package/dist/modules.util.d.ts +5 -0
  49. package/dist/modules.util.d.ts.map +1 -0
  50. package/dist/modules.util.js +13 -0
  51. package/dist/modules.util.js.map +1 -0
  52. package/dist/parser.d.ts +121 -0
  53. package/dist/parser.d.ts.map +1 -0
  54. package/dist/parser.js +571 -0
  55. package/dist/parser.js.map +1 -0
  56. package/dist/parser.test.d.ts +2 -0
  57. package/dist/parser.test.d.ts.map +1 -0
  58. package/dist/parser.test.js +143 -0
  59. package/dist/parser.test.js.map +1 -0
  60. package/dist/parser.utility.d.ts +29 -0
  61. package/dist/parser.utility.d.ts.map +1 -0
  62. package/dist/parser.utility.js +125 -0
  63. package/dist/parser.utility.js.map +1 -0
  64. package/dist/project.asset.d.ts +115 -0
  65. package/dist/project.asset.d.ts.map +1 -0
  66. package/dist/project.asset.js +802 -0
  67. package/dist/project.asset.js.map +1 -0
  68. package/dist/project.code.d.ts +130 -0
  69. package/dist/project.code.d.ts.map +1 -0
  70. package/dist/project.code.js +570 -0
  71. package/dist/project.code.js.map +1 -0
  72. package/dist/project.d.ts +533 -0
  73. package/dist/project.d.ts.map +1 -0
  74. package/dist/project.diagnostics.d.ts +32 -0
  75. package/dist/project.diagnostics.d.ts.map +1 -0
  76. package/dist/project.diagnostics.js +23 -0
  77. package/dist/project.diagnostics.js.map +1 -0
  78. package/dist/project.js +1216 -0
  79. package/dist/project.js.map +1 -0
  80. package/dist/project.location.d.ts +133 -0
  81. package/dist/project.location.d.ts.map +1 -0
  82. package/dist/project.location.js +219 -0
  83. package/dist/project.location.js.map +1 -0
  84. package/dist/project.native.d.ts +26 -0
  85. package/dist/project.native.d.ts.map +1 -0
  86. package/dist/project.native.js +321 -0
  87. package/dist/project.native.js.map +1 -0
  88. package/dist/project.spec.d.ts +1298 -0
  89. package/dist/project.spec.d.ts.map +1 -0
  90. package/dist/project.spec.js +263 -0
  91. package/dist/project.spec.js.map +1 -0
  92. package/dist/project.test.d.ts +2 -0
  93. package/dist/project.test.d.ts.map +1 -0
  94. package/dist/project.test.js +633 -0
  95. package/dist/project.test.js.map +1 -0
  96. package/dist/shaderDefaults.d.ts +3 -0
  97. package/dist/shaderDefaults.d.ts.map +1 -0
  98. package/dist/shaderDefaults.js +32 -0
  99. package/dist/shaderDefaults.js.map +1 -0
  100. package/dist/signifiers.d.ts +54 -0
  101. package/dist/signifiers.d.ts.map +1 -0
  102. package/dist/signifiers.flags.d.ts +38 -0
  103. package/dist/signifiers.flags.d.ts.map +1 -0
  104. package/dist/signifiers.flags.js +131 -0
  105. package/dist/signifiers.flags.js.map +1 -0
  106. package/dist/signifiers.js +117 -0
  107. package/dist/signifiers.js.map +1 -0
  108. package/dist/spine.d.ts +28 -0
  109. package/dist/spine.d.ts.map +1 -0
  110. package/dist/spine.js +64 -0
  111. package/dist/spine.js.map +1 -0
  112. package/dist/spine.test.d.ts +2 -0
  113. package/dist/spine.test.d.ts.map +1 -0
  114. package/dist/spine.test.js +420 -0
  115. package/dist/spine.test.js.map +1 -0
  116. package/dist/spine.types.d.ts +89 -0
  117. package/dist/spine.types.d.ts.map +1 -0
  118. package/dist/spine.types.js +2 -0
  119. package/dist/spine.types.js.map +1 -0
  120. package/dist/test.lib.d.ts +3 -0
  121. package/dist/test.lib.d.ts.map +1 -0
  122. package/dist/test.lib.js +16 -0
  123. package/dist/test.lib.js.map +1 -0
  124. package/dist/tokens.categories.d.ts +22 -0
  125. package/dist/tokens.categories.d.ts.map +1 -0
  126. package/dist/tokens.categories.js +78 -0
  127. package/dist/tokens.categories.js.map +1 -0
  128. package/dist/tokens.code.d.ts +2 -0
  129. package/dist/tokens.code.d.ts.map +1 -0
  130. package/dist/tokens.code.js +523 -0
  131. package/dist/tokens.code.js.map +1 -0
  132. package/dist/tokens.d.ts +130 -0
  133. package/dist/tokens.d.ts.map +1 -0
  134. package/dist/tokens.js +13 -0
  135. package/dist/tokens.js.map +1 -0
  136. package/dist/tokens.lib.d.ts +15 -0
  137. package/dist/tokens.lib.d.ts.map +1 -0
  138. package/dist/tokens.lib.js +12 -0
  139. package/dist/tokens.lib.js.map +1 -0
  140. package/dist/tokens.shared.d.ts +4 -0
  141. package/dist/tokens.shared.d.ts.map +1 -0
  142. package/dist/tokens.shared.js +35 -0
  143. package/dist/tokens.shared.js.map +1 -0
  144. package/dist/tokens.strings.d.ts +5 -0
  145. package/dist/tokens.strings.d.ts.map +1 -0
  146. package/dist/tokens.strings.js +111 -0
  147. package/dist/tokens.strings.js.map +1 -0
  148. package/dist/types.checks.d.ts +50 -0
  149. package/dist/types.checks.d.ts.map +1 -0
  150. package/dist/types.checks.js +246 -0
  151. package/dist/types.checks.js.map +1 -0
  152. package/dist/types.d.ts +152 -0
  153. package/dist/types.d.ts.map +1 -0
  154. package/dist/types.feather.d.ts +21 -0
  155. package/dist/types.feather.d.ts.map +1 -0
  156. package/dist/types.feather.js +156 -0
  157. package/dist/types.feather.js.map +1 -0
  158. package/dist/types.hover.d.ts +4 -0
  159. package/dist/types.hover.d.ts.map +1 -0
  160. package/dist/types.hover.js +99 -0
  161. package/dist/types.hover.js.map +1 -0
  162. package/dist/types.js +457 -0
  163. package/dist/types.js.map +1 -0
  164. package/dist/types.primitives.d.ts +10 -0
  165. package/dist/types.primitives.d.ts.map +1 -0
  166. package/dist/types.primitives.js +88 -0
  167. package/dist/types.primitives.js.map +1 -0
  168. package/dist/types.sprites.d.ts +8 -0
  169. package/dist/types.sprites.d.ts.map +1 -0
  170. package/dist/types.sprites.js +417 -0
  171. package/dist/types.sprites.js.map +1 -0
  172. package/dist/types.test.d.ts +2 -0
  173. package/dist/types.test.d.ts.map +1 -0
  174. package/dist/types.test.js +62 -0
  175. package/dist/types.test.js.map +1 -0
  176. package/dist/util.d.ts +50 -0
  177. package/dist/util.d.ts.map +1 -0
  178. package/dist/util.js +168 -0
  179. package/dist/util.js.map +1 -0
  180. package/dist/util.test.d.ts +3 -0
  181. package/dist/util.test.d.ts.map +1 -0
  182. package/dist/util.test.js +63 -0
  183. package/dist/util.test.js.map +1 -0
  184. package/dist/visitor.assign.d.ts +24 -0
  185. package/dist/visitor.assign.d.ts.map +1 -0
  186. package/dist/visitor.assign.js +112 -0
  187. package/dist/visitor.assign.js.map +1 -0
  188. package/dist/visitor.d.ts +89 -0
  189. package/dist/visitor.d.ts.map +1 -0
  190. package/dist/visitor.functionExpression.d.ts +7 -0
  191. package/dist/visitor.functionExpression.d.ts.map +1 -0
  192. package/dist/visitor.functionExpression.js +216 -0
  193. package/dist/visitor.functionExpression.js.map +1 -0
  194. package/dist/visitor.globals.d.ts +59 -0
  195. package/dist/visitor.globals.d.ts.map +1 -0
  196. package/dist/visitor.globals.js +271 -0
  197. package/dist/visitor.globals.js.map +1 -0
  198. package/dist/visitor.identifierAccessor.d.ts +6 -0
  199. package/dist/visitor.identifierAccessor.d.ts.map +1 -0
  200. package/dist/visitor.identifierAccessor.js +381 -0
  201. package/dist/visitor.identifierAccessor.js.map +1 -0
  202. package/dist/visitor.js +605 -0
  203. package/dist/visitor.js.map +1 -0
  204. package/dist/visitor.processor.d.ts +66 -0
  205. package/dist/visitor.processor.d.ts.map +1 -0
  206. package/dist/visitor.processor.js +147 -0
  207. package/dist/visitor.processor.js.map +1 -0
  208. package/package.json +63 -0
@@ -0,0 +1,570 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { sequential } from '@bscotch/utility';
3
+ import MagicString from 'magic-string';
4
+ import { getEventFromFilename } from './lib.objects.js';
5
+ import { logger } from './logger.js';
6
+ import { parser } from './parser.js';
7
+ import { Diagnostic, } from './project.diagnostics.js';
8
+ import { Position, Range, Scope, } from './project.location.js';
9
+ import { getTypeOfKind } from './types.checks.js';
10
+ import { Type } from './types.js';
11
+ import { assert, isBeforeRange, isInRange } from './util.js';
12
+ import { registerGlobals } from './visitor.globals.js';
13
+ import { registerSignifiers } from './visitor.js';
14
+ /** Represenation of a GML code file. */
15
+ export class Code {
16
+ asset;
17
+ path;
18
+ $tag = 'gmlFile';
19
+ scopes = [];
20
+ jsdocs = [];
21
+ diagnostics;
22
+ /** List of all symbol references in this file, in order of appearance. */
23
+ _refs = [];
24
+ /** Ranges representing function call arguments,
25
+ * in order of appearance. Useful for signature help. */
26
+ _functionArgRanges = [];
27
+ /** Ranges representing locations where new struct
28
+ * members could be added. Useful for autocomplete. */
29
+ _structNewMemberRanges = [];
30
+ /** List of function calls, where each root item is a list
31
+ * of argument ranges for that call. Useful for diagnostics.*/
32
+ _functionCalls = [];
33
+ _rangesAreSorted = false;
34
+ content;
35
+ _parsed;
36
+ // Metadata
37
+ /** For object events, whether or not `event_inherited` is unambiguously being called */
38
+ callsSuper = false;
39
+ constructor(asset, path) {
40
+ this.asset = asset;
41
+ this.path = path;
42
+ this.clearAllDiagnostics();
43
+ }
44
+ /**
45
+ * If this is the Create event for an object, that object's
46
+ * variables. Else undefined. Used for determining the initial
47
+ * "definitive self" during code processing.
48
+ */
49
+ get definitiveSelf() {
50
+ if (this.isCreateEvent) {
51
+ return this.asset.variables;
52
+ }
53
+ return;
54
+ }
55
+ /** When set to `true`, this file will be flagged for reprocessing. */
56
+ set dirty(value) {
57
+ if (value) {
58
+ this.project.queueDirtyFileUpdate(this);
59
+ }
60
+ }
61
+ get isScript() {
62
+ return this.asset.assetKind === 'scripts';
63
+ }
64
+ get isObjectEvent() {
65
+ return this.asset.assetKind === 'objects';
66
+ }
67
+ get isCreateEvent() {
68
+ return this.name === 'Create_0';
69
+ }
70
+ get isStepEvent() {
71
+ return this.name.startsWith('Step_');
72
+ }
73
+ get project() {
74
+ return this.asset.project;
75
+ }
76
+ get startPosition() {
77
+ return Position.fromFileStart(this);
78
+ }
79
+ /**
80
+ * If this is an object event and Stitch knows about
81
+ * its type, return the info about that event.
82
+ */
83
+ get objectEventInfo() {
84
+ if (!this.isObjectEvent)
85
+ return undefined;
86
+ return getEventFromFilename(this.path.absolute);
87
+ }
88
+ /** A zero-length range at the start of the file. */
89
+ get startRange() {
90
+ return new Range(this.startPosition, this.startPosition);
91
+ }
92
+ isInRange(range, offset) {
93
+ return isInRange(range, offset);
94
+ }
95
+ isBeforeRange(range, offset) {
96
+ return isBeforeRange(range, offset);
97
+ }
98
+ getTextAt(offsetStart, offsetEnd) {
99
+ return this.content.slice(offsetStart, offsetEnd + 1);
100
+ }
101
+ getReferenceAt(offset, column) {
102
+ if (typeof offset === 'number' && typeof column === 'number') {
103
+ offset = { line: offset, column };
104
+ }
105
+ assert(this.refs, 'Refs must be an array');
106
+ for (let i = 0; i < this.refs.length; i++) {
107
+ const ref = this.refs[i];
108
+ if (this.isInRange(ref, offset)) {
109
+ return ref;
110
+ }
111
+ else if (this.isBeforeRange(ref, offset)) {
112
+ return undefined;
113
+ }
114
+ }
115
+ return undefined;
116
+ }
117
+ getJsdocAt(offset, column) {
118
+ if (typeof offset === 'number' && typeof column === 'number') {
119
+ offset = { line: offset, column };
120
+ }
121
+ assert(this.jsdocs, 'Jsdocs must be an array');
122
+ for (let i = 0; i < this.jsdocs.length; i++) {
123
+ const jsdoc = this.jsdocs[i];
124
+ if (this.isInRange(jsdoc, offset)) {
125
+ return jsdoc;
126
+ }
127
+ else if (this.isBeforeRange(jsdoc, offset)) {
128
+ return undefined;
129
+ }
130
+ }
131
+ return undefined;
132
+ }
133
+ getFunctionArgRangeAt(offset, column) {
134
+ if (typeof offset === 'number' && typeof column === 'number') {
135
+ offset = { line: offset, column };
136
+ }
137
+ let match;
138
+ const ranges = this.functionArgRanges;
139
+ assert(ranges, 'Function arg ranges must be an array');
140
+ for (let i = 0; i < ranges.length; i++) {
141
+ const argRange = ranges[i];
142
+ if (this.isInRange(argRange, offset)) {
143
+ // These could be nested, so an outer arg range might contain an inner one.
144
+ // Since these are sorted by start offset, we can return the *last* one to ensure that we're in the innermost range.
145
+ match = argRange;
146
+ continue;
147
+ }
148
+ else if (this.isBeforeRange(argRange, offset)) {
149
+ return match;
150
+ }
151
+ }
152
+ return match;
153
+ }
154
+ getStructNewMemberRangeAt(offset, column) {
155
+ if (typeof offset === 'number' && typeof column === 'number') {
156
+ offset = { line: offset, column };
157
+ }
158
+ const ranges = this.structNewMemberRanges;
159
+ for (let i = 0; i < ranges.length; i++) {
160
+ const range = ranges[i];
161
+ if (this.isInRange(range, offset)) {
162
+ return range;
163
+ }
164
+ else if (this.isBeforeRange(range, offset)) {
165
+ return undefined;
166
+ }
167
+ }
168
+ return undefined;
169
+ }
170
+ getScopeRangeAt(offset, column) {
171
+ if (typeof offset === 'number' && typeof column === 'number') {
172
+ offset = { line: offset, column };
173
+ }
174
+ for (const scopeRange of this.scopes) {
175
+ if (this.isInRange(scopeRange, offset)) {
176
+ return scopeRange;
177
+ }
178
+ }
179
+ // Default to the last scope,
180
+ // since we can end up with wonkiness with EOF trailing whitespace
181
+ return this.scopes.at(-1);
182
+ }
183
+ getInScopeSymbolsAt(offset, column) {
184
+ if (typeof offset === 'number' && typeof column === 'number') {
185
+ offset = { line: offset, column };
186
+ }
187
+ const scopeRange = this.getScopeRangeAt(offset);
188
+ if (!scopeRange) {
189
+ return [];
190
+ }
191
+ if (scopeRange.isDotAccessor) {
192
+ // Then only return self variables
193
+ // Filter out those that cannot be dot-accessed on global
194
+ // (native functions, etc.)
195
+ if (scopeRange.self === this.project.self) {
196
+ return this.project.self.listMembers().filter((x) => {
197
+ // Only stuff defined in the project could appear as an autocomplete
198
+ const definedInProject = !x.native && !!x.def?.file;
199
+ const canLiveOnGlobal = !x.macro && !getTypeOfKind(x, ['Enum']);
200
+ return definedInProject && canLiveOnGlobal;
201
+ });
202
+ }
203
+ else {
204
+ return scopeRange.self.listMembers().filter((x) => x.def || x.native);
205
+ }
206
+ }
207
+ // Add to a flat list, and remove all entries that don't have
208
+ // a definition if they are not native
209
+ const allSignifiers = [
210
+ // Local variables
211
+ ...(scopeRange.local.listMembers() || []),
212
+ // Self variables, if not global
213
+ ...((scopeRange.self !== this.project.self
214
+ ? scopeRange.self.listMembers()
215
+ : []) || []),
216
+ // Project globals
217
+ ...(this.project.self.listMembers() || []),
218
+ ];
219
+ // Signifiers were added in order of precedence, so we can remove
220
+ // non-uniques by just keeping the first one we find.
221
+ const uniqueSignifiers = new Map();
222
+ for (const signifier of allSignifiers) {
223
+ if (!uniqueSignifiers.has(signifier.name) &&
224
+ (signifier.def || signifier.native)) {
225
+ uniqueSignifiers.set(signifier.name, signifier);
226
+ }
227
+ }
228
+ return [...uniqueSignifiers.values()];
229
+ }
230
+ getDiagnostics() {
231
+ return { ...this.diagnostics };
232
+ }
233
+ get refs() {
234
+ this.sortRanges();
235
+ return [...this._refs];
236
+ }
237
+ get functionArgRanges() {
238
+ this.sortRanges();
239
+ return [...this._functionArgRanges];
240
+ }
241
+ get structNewMemberRanges() {
242
+ this.sortRanges();
243
+ return [...this._structNewMemberRanges];
244
+ }
245
+ get name() {
246
+ return this.path.name;
247
+ }
248
+ get basename() {
249
+ return this.path.basename;
250
+ }
251
+ get cst() {
252
+ return this._parsed.cst;
253
+ }
254
+ /**
255
+ * Load the file and parse it, resulting in an updated
256
+ * CST for future steps. If content is directly provided,
257
+ * it will be used instead of reading from disk. This
258
+ * is useful for editors that want to provide a live preview.
259
+ */
260
+ async parse(content) {
261
+ this.clearAllDiagnostics();
262
+ this.content =
263
+ typeof content === 'string' ? content : await this.path.read();
264
+ this._parsed = parser.parse(this.content);
265
+ for (const diagnostic of this._parsed.errors) {
266
+ const fromToken = isNaN(diagnostic.token.startOffset)
267
+ ? diagnostic.previousToken
268
+ : diagnostic.token;
269
+ logger.debug('SYNTAX ERROR', diagnostic?.message, this.path?.absolute, fromToken);
270
+ this.diagnostics.SYNTAX_ERROR.push(Diagnostic.error(diagnostic.message, Range.fromCst(this, fromToken || diagnostic.token), diagnostic));
271
+ }
272
+ }
273
+ /**
274
+ * Replace all refs for a signifier with a new name,
275
+ * followed by fully reprocessing the file.
276
+ */
277
+ async renameSignifier(signifier, newName) {
278
+ const renameableRefs = this.refs.filter((ref) => ref.item === signifier && ref.isRenameable);
279
+ // Rename using magic-string so we don't have to track changed positions
280
+ const updated = new MagicString(this.content);
281
+ for (const ref of renameableRefs) {
282
+ updated.update(ref.start.offset, ref.end.offset + 1, ref.toRenamed(newName));
283
+ }
284
+ // Save to disk and reprocess
285
+ this.content = updated.toString();
286
+ await this.path.write(this.content);
287
+ await this.reload(this.content);
288
+ }
289
+ clearDiagnosticCollection(collection) {
290
+ this.diagnostics[collection] = [];
291
+ }
292
+ clearAllDiagnostics() {
293
+ this.diagnostics = {
294
+ GLOBAL_SELF: [],
295
+ INVALID_OPERATION: [],
296
+ JSDOC_MISMATCH: [],
297
+ MISSING_EVENT_INHERITED: [],
298
+ MISSING_REQUIRED_ARGUMENT: [],
299
+ SYNTAX_ERROR: [],
300
+ TOO_MANY_ARGUMENTS: [],
301
+ UNDECLARED_GLOBAL_REFERENCE: [],
302
+ UNDECLARED_VARIABLE_REFERENCE: [],
303
+ JSDOC: [],
304
+ UNUSED: [],
305
+ };
306
+ }
307
+ addDiagnostic(collection, diagnostic) {
308
+ this.diagnostics[collection].push(diagnostic);
309
+ }
310
+ addRef(ref) {
311
+ this._refs.push(ref);
312
+ }
313
+ addStructNewMemberRange(range) {
314
+ this._structNewMemberRanges.push(range);
315
+ }
316
+ addFunctionArgRange(range) {
317
+ this._functionArgRanges.push(range);
318
+ }
319
+ addFunctionCall(call) {
320
+ this._functionCalls.push(call);
321
+ }
322
+ sortRanges() {
323
+ if (this._rangesAreSorted)
324
+ return;
325
+ const sorter = (a, b) => {
326
+ assert(a, 'Ref a does not exist');
327
+ assert(b, 'Ref b does not exist');
328
+ assert(a.start && b.start, 'Ref does not have a start');
329
+ return a.start.offset - b.start.offset;
330
+ };
331
+ this._refs.sort(sorter);
332
+ this._functionArgRanges.sort(sorter);
333
+ this._structNewMemberRanges.sort(sorter);
334
+ this._rangesAreSorted = true;
335
+ }
336
+ initializeScopeRanges() {
337
+ const self = this.asset.variables || this.project.self;
338
+ // Re-use the root local scope if it exists
339
+ const local = this.scopes[0]?.local || new Type('Struct');
340
+ this.scopes.length = 0;
341
+ this.jsdocs.length = 0;
342
+ const position = Position.fromFileStart(this);
343
+ this.scopes.push(new Scope(position, local, self));
344
+ }
345
+ reset() {
346
+ this.initializeScopeRanges();
347
+ // Remove each reference in *this file* from its symbol.
348
+ const cleared = new Set();
349
+ for (const ref of this._refs) {
350
+ const signifier = ref.item;
351
+ if (cleared.has(signifier)) {
352
+ continue;
353
+ }
354
+ // If the symbol was declared in this file, remove its location
355
+ // to flag it as undeclared.
356
+ const isDefinedInThisFile = this === signifier.def?.file;
357
+ if (isDefinedInThisFile) {
358
+ signifier.unsetDef();
359
+ }
360
+ // Remove all references to this symbol found in this file.
361
+ // Flag all other files as being dirty so they get reprocessed.
362
+ for (const symbolRef of signifier.refs) {
363
+ if (this === symbolRef.file) {
364
+ signifier.refs.delete(symbolRef);
365
+ }
366
+ else {
367
+ symbolRef.file.dirty = true;
368
+ }
369
+ }
370
+ cleared.add(signifier);
371
+ }
372
+ // Reset this file's refs list
373
+ this._refs = [];
374
+ this._functionArgRanges = [];
375
+ this._structNewMemberRanges = [];
376
+ this._functionCalls = [];
377
+ this._rangesAreSorted = false;
378
+ }
379
+ async removeFromYy() {
380
+ if (!this.asset.isObject)
381
+ return;
382
+ const eventInfo = this.objectEventInfo;
383
+ if (!eventInfo) {
384
+ logger.warn(`Stitch does not know about the ${this.name} event type!`);
385
+ return;
386
+ }
387
+ // find the match for this event
388
+ const yy = this.asset.yy;
389
+ const eventIdx = yy.eventList.findIndex((event) => event.eventNum === eventInfo.eventNum &&
390
+ event.eventType === eventInfo.eventType);
391
+ if (eventIdx > -1) {
392
+ yy.eventList.splice(eventIdx, 1);
393
+ await this.asset.saveYy();
394
+ }
395
+ }
396
+ async remove() {
397
+ // update yy file
398
+ await this.removeFromYy();
399
+ // remove from asset's list of files
400
+ this.asset.gmlFiles.delete(this.path.absolute.toLocaleLowerCase());
401
+ // remove file
402
+ await this.path.delete();
403
+ // reset to clear refs and diagnostics
404
+ this.reset();
405
+ }
406
+ /**
407
+ * Reprocess after a modification to the file. Optionally
408
+ * provide new content to use instead of reading from disk.
409
+ */
410
+ async reload(content, options) {
411
+ await this.parse(content);
412
+ this.updateGlobals();
413
+ this.updateAllSymbols();
414
+ this.updateDiagnostics();
415
+ // Re-run diagnostics on everything that ended up dirty due to the changes
416
+ if (options?.reloadDirty) {
417
+ this.project.drainDirtyFileUpdateQueue();
418
+ }
419
+ }
420
+ discoverEventInheritanceWarnings() {
421
+ this.diagnostics.MISSING_EVENT_INHERITED = [];
422
+ if (this.asset.assetKind !== 'objects' || !this.asset.parent) {
423
+ return;
424
+ }
425
+ // Then the type will have been set up to inherit from the parent.
426
+ // BUT. If this event does not call `event_inherited()`, then we
427
+ // need to unlink the type.
428
+ if (!this.callsSuper) {
429
+ // TODO: Provide this as an option?
430
+ // this.diagnostics.MISSING_EVENT_INHERITED.push({
431
+ // $tag: 'diagnostic',
432
+ // message: `Event does not call \`event_inherited()\`, so it will not inherit from its parent.`,
433
+ // severity: 'warning',
434
+ // location: this.startRange,
435
+ // });
436
+ if (this.isCreateEvent) {
437
+ // Unlink the type from the parent.
438
+ // (If there is no create event, then event_inherited is implicit)
439
+ this.asset.variables.extends = this.project.native.objectInstanceBase;
440
+ }
441
+ }
442
+ else if (this.isCreateEvent) {
443
+ // Ensure that the type is set as the parent by re-assigning it.
444
+ // eslint-disable-next-line no-self-assign
445
+ this.asset.parent = this.asset.parent;
446
+ }
447
+ }
448
+ computeFunctionCallDiagnostics() {
449
+ // Look through the function call ranges to see if we have too many or too few arguments.
450
+ assert(this._functionCalls, 'Function calls must be initialized');
451
+ this.diagnostics.MISSING_REQUIRED_ARGUMENT = [];
452
+ this.diagnostics.TOO_MANY_ARGUMENTS = [];
453
+ calls: for (let i = 0; i < this._functionCalls.length; i++) {
454
+ const args = this._functionCalls[i];
455
+ assert(args, 'Function call args must be initialized');
456
+ const func = args[0].type;
457
+ if (!func.signifier) {
458
+ // Then this was a generic function type and we don't know
459
+ // how many args it takes or what it returns.
460
+ continue;
461
+ }
462
+ const params = func.listParameters() || [];
463
+ // Handle missing arguments
464
+ for (let j = 0; j < params.length; j++) {
465
+ const param = params[j];
466
+ const arg = args[j];
467
+ const argIsEmpty = !arg?.hasExpression;
468
+ if (param && !param.optional && argIsEmpty) {
469
+ this.diagnostics.MISSING_REQUIRED_ARGUMENT.push(Diagnostic.error(`Missing required argument \`${param.name}\` for function \`${func.name}\`.`, arg || args[0]));
470
+ // There may be more missing args but
471
+ // that just starts to get noisy.
472
+ continue calls;
473
+ }
474
+ }
475
+ if (params.at(-1)?.name === '...') {
476
+ // Then we can't have too many arguments
477
+ continue;
478
+ }
479
+ if (!params.length && args.length === 1 && !args[0].hasExpression) {
480
+ // Then this is a zero-arg function and we aren't providing any args.
481
+ continue;
482
+ }
483
+ // Handle extra arguments.
484
+ for (let j = params.length; j < args.length; j++) {
485
+ const arg = args[j];
486
+ this.diagnostics.TOO_MANY_ARGUMENTS.push(Diagnostic.warn(`Extra argument for function \`${func.name}\`.`, arg));
487
+ }
488
+ }
489
+ }
490
+ computeUndeclaredSymbolDiagnostics() {
491
+ this.diagnostics.UNDECLARED_VARIABLE_REFERENCE = [];
492
+ const undeclaredSymbols = new Set();
493
+ outer: for (const ref of this._refs) {
494
+ if (ref.item.def || ref.item.native || undeclaredSymbols.has(ref.item)) {
495
+ continue;
496
+ }
497
+ // Handle global prefixes setting
498
+ const prefixes = this.project.options?.settings?.autoDeclareGlobalsPrefixes || [];
499
+ for (const prefix of prefixes) {
500
+ if (ref.item.name.startsWith(prefix)) {
501
+ // Then mark it as *global* and *declared*
502
+ ref.item.global = true;
503
+ ref.item.local = false;
504
+ ref.item.instance = false;
505
+ ref.item.def = {};
506
+ ref.item.describe(`Auto-declared by global prefix \`${prefix}\``);
507
+ continue outer;
508
+ }
509
+ }
510
+ this.diagnostics.UNDECLARED_VARIABLE_REFERENCE.push(Diagnostic.error(`Undeclared symbol \`${ref.item.name}\``, ref, 'warn'));
511
+ undeclaredSymbols.add(ref.item);
512
+ }
513
+ }
514
+ computeJsdocDiagnostics() {
515
+ this.diagnostics.JSDOC = [];
516
+ for (const jsdoc of this.jsdocs) {
517
+ for (const diagnostic of jsdoc.diagnostics) {
518
+ this.diagnostics.JSDOC.push(Diagnostic.warn(diagnostic.message, new Range(Position.from(this, diagnostic.start), Position.from(this, diagnostic.end))));
519
+ }
520
+ }
521
+ }
522
+ computeUnusedSymbolDiagnostics() {
523
+ this.diagnostics.UNUSED = [];
524
+ const unused = new Set();
525
+ for (const ref of this.refs) {
526
+ if (unused.has(ref.item) ||
527
+ !ref.isDef ||
528
+ ref.item.native ||
529
+ !ref.item.getTypeByKind('Function') ||
530
+ !ref.item.global // For now restrict to global functions. The rest requires some nuance!
531
+ ) {
532
+ continue;
533
+ }
534
+ // Are all refs to the definition?
535
+ const hasNonDefRefs = [...ref.item.refs.values()].some((r) => !r.isDef);
536
+ if (!hasNonDefRefs) {
537
+ unused.add(ref.item);
538
+ this.diagnostics.UNUSED.push(Diagnostic.info(`Unused function \`${ref.item.name}\``, ref));
539
+ }
540
+ }
541
+ }
542
+ /** Update and emit diagnostics */
543
+ updateDiagnostics() {
544
+ this.discoverEventInheritanceWarnings();
545
+ this.computeFunctionCallDiagnostics();
546
+ this.computeUndeclaredSymbolDiagnostics();
547
+ this.computeJsdocDiagnostics();
548
+ this.computeUnusedSymbolDiagnostics();
549
+ const allDiagnostics = [];
550
+ for (const items of Object.values(this.diagnostics)) {
551
+ allDiagnostics.push(...items);
552
+ }
553
+ this.project.emitDiagnostics(this, allDiagnostics);
554
+ return allDiagnostics;
555
+ }
556
+ updateGlobals() {
557
+ this.reset();
558
+ return registerGlobals(this);
559
+ }
560
+ updateAllSymbols() {
561
+ registerSignifiers(this);
562
+ }
563
+ }
564
+ __decorate([
565
+ sequential,
566
+ __metadata("design:type", Function),
567
+ __metadata("design:paramtypes", [Function, String]),
568
+ __metadata("design:returntype", Promise)
569
+ ], Code.prototype, "renameSignifier", null);
570
+ //# sourceMappingURL=project.code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.code.js","sourceRoot":"","sources":["../src/project.code.ts"],"names":[],"mappings":"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"}