@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,216 @@
1
+ import { withCtxKind } from './parser.js';
2
+ import { Range, fixITokenLocation } from './project.location.js';
3
+ import { Signifier } from './signifiers.js';
4
+ import { getTypeOfKind } from './types.checks.js';
5
+ import { typeFromFeatherString } from './types.feather.js';
6
+ import { Type, TypeStore } from './types.js';
7
+ import { withableTypes } from './types.primitives.js';
8
+ import { assert } from './util.js';
9
+ /** Visit a function's CST and update any signifiers and types */
10
+ export function visitFunctionExpression(children, ctx) {
11
+ const functionName = children.Identifier?.[0]?.image;
12
+ const docs = ctx.docs || this.PROCESSOR.consumeJsdoc();
13
+ ctx.docs = undefined;
14
+ const assignedTo = ctx.signifier;
15
+ ctx.signifier = undefined;
16
+ if (!children.blockStatement) {
17
+ // Then we're in a recovery situation and should just move along
18
+ return;
19
+ }
20
+ // Reset the list of return values
21
+ ctx = {
22
+ ...ctx,
23
+ returns: [],
24
+ };
25
+ // Compute useful properties of this function to help figure out
26
+ // how to define its symbol, type, scope, etc.
27
+ const nameLocation = functionName
28
+ ? this.PROCESSOR.range(children.Identifier[0])
29
+ : undefined;
30
+ const isConstructor = !!children.constructorSuffix;
31
+ const bodyLocation = children.blockStatement[0].location;
32
+ const isFunctionStatement = ctx.ctxKindStack.at(-1) === 'functionStatement';
33
+ const isMixin = !!docs?.jsdoc.mixin;
34
+ /** If this function has a corresponding signifier, either
35
+ * because it is a function declaration or because it is a
36
+ * function expression assigned to a variable, then that's
37
+ * what this is.
38
+ *
39
+ * @remarks Function expressions need not be assigned to anything, necessarily, so they may not have a signifier.
40
+ */
41
+ let signifier;
42
+ if (assignedTo) {
43
+ signifier = assignedTo;
44
+ }
45
+ else if (isFunctionStatement && functionName) {
46
+ // Then this function is being created by declaration,
47
+ // without being assigned to a variable. Find or create
48
+ // the signifier and update its definedAt & refs.
49
+ const matching = this.FIND_ITEM(children, { excludeParents: true });
50
+ if (matching?.item.$tag === 'Sym') {
51
+ signifier = matching.item;
52
+ }
53
+ else {
54
+ signifier = new Signifier(this.PROCESSOR.currentSelf, functionName);
55
+ // This function is overriding any parent function of the same name
56
+ signifier.override = true;
57
+ this.PROCESSOR.currentSelf.addMember(signifier);
58
+ }
59
+ if (nameLocation && signifier && !signifier.def) {
60
+ signifier?.definedAt(nameLocation);
61
+ signifier?.addRef(nameLocation, true);
62
+ }
63
+ }
64
+ // Get or create the function type. Use the existing type if there is one.
65
+ signifier?.describe(docs?.jsdoc.description);
66
+ const functionType = signifier?.getTypeByKind('Function') ||
67
+ getTypeOfKind(ctx.type, 'Function')?.derive() ||
68
+ new Type('Function').named(functionName);
69
+ signifier?.setType(functionType);
70
+ if (signifier && docs?.jsdoc.deprecated) {
71
+ signifier.deprecated = true;
72
+ }
73
+ if (signifier && docs?.jsdoc.mixin) {
74
+ signifier.mixin = true;
75
+ }
76
+ functionType.isConstructor = isConstructor;
77
+ functionType.self = isConstructor
78
+ ? functionType.self || this.PROCESSOR.createStruct(bodyLocation)
79
+ : undefined;
80
+ if (isConstructor) {
81
+ functionType.self?.named(functionName);
82
+ }
83
+ functionType.returns ||= new TypeStore();
84
+ // Determine the function context.
85
+ let docContextRaw = docs?.jsdoc.kind === 'self'
86
+ ? docs.type[0]
87
+ : docs?.jsdoc.kind === 'function'
88
+ ? docs.type[0]?.self
89
+ : undefined;
90
+ if (docContextRaw && docContextRaw.kind === 'Function') {
91
+ // Then we use the function's construct if it is a constructor, else its context.
92
+ docContextRaw = docContextRaw.self;
93
+ }
94
+ const docContext = getTypeOfKind(docContextRaw, withableTypes);
95
+ let context;
96
+ if (isConstructor) {
97
+ context = functionType.self;
98
+ }
99
+ else if (docContext) {
100
+ context = docContext;
101
+ }
102
+ else if (ctx.self) {
103
+ // Then we're inside of a method() call, and the self
104
+ // is from the prior argument, and we aren't overriding
105
+ // using jsdoc.
106
+ context = ctx.self;
107
+ }
108
+ else if (isMixin) {
109
+ // Then we want to use a new struct type as the context,
110
+ // allowing calls to this function to add those variables to themselves.
111
+ // Try to keep the old context if possible.
112
+ context =
113
+ functionType.self && functionType.self !== this.PROCESSOR.currentSelf
114
+ ? functionType.self
115
+ : this.PROCESSOR.createStruct(bodyLocation);
116
+ }
117
+ ctx.self = undefined; // Just to make sure nothing downstream uses it
118
+ context ||= this.PROCESSOR.currentSelf;
119
+ functionType.self = context;
120
+ // Ensure local context
121
+ const currentLocalContext = this.PROCESSOR.currentLocalScope;
122
+ functionType.local ||= Type.Struct;
123
+ assert(functionType.local !== currentLocalContext, 'Function local context incorrectly set to prior local context.');
124
+ // Functions have their own localscope as well as their self scope,
125
+ // so we need to push both.
126
+ const startParen = fixITokenLocation(children.functionParameters[0].children.StartParen[0]);
127
+ this.PROCESSOR.scope.setEnd(startParen);
128
+ this.PROCESSOR.pushScope(startParen, functionType.self, functionType.local, true);
129
+ // Handle definitiveScope -- if this is a constructor or mixin,
130
+ // we want to push a new definitiveScope.
131
+ this.PROCESSOR.pushDefinitiveSelf(isConstructor || isMixin ? functionType.self : undefined);
132
+ // Add function signature components. Must take into account that we may
133
+ // be updating after an edit.
134
+ const cstParams = children.functionParameters?.[0]?.children.functionParameter || [];
135
+ let totalParams = 0;
136
+ for (let i = 0; i < cstParams.length; i++) {
137
+ const paramCtx = withCtxKind(ctx, 'functionParam');
138
+ const paramToken = cstParams[i].children.Identifier[0];
139
+ const name = paramToken.image;
140
+ const range = this.PROCESSOR.range(paramToken);
141
+ // Use JSDocs to determine the type, description, etc of the parameter
142
+ let fromJsdoc = docs?.type?.[0]?.local?.getMember(name);
143
+ if (fromJsdoc && paramToken.image !== fromJsdoc.name) {
144
+ this.PROCESSOR.addDiagnostic('JSDOC_MISMATCH', paramToken, `Parameter name mismatch`);
145
+ // Unset it so we don't accidentally use it!
146
+ fromJsdoc = undefined;
147
+ }
148
+ const paramDoc = fromJsdoc
149
+ ? docs?.jsdoc.params?.find((p) => p.name?.content === name)
150
+ : undefined;
151
+ // Params are just local variables
152
+ let param = functionType.local.getMember(name);
153
+ param = functionType
154
+ .addParameter(i, param || name, {
155
+ optional: fromJsdoc?.optional || !!cstParams[i].children.Assign,
156
+ })
157
+ .definedAt(range);
158
+ param.describe(fromJsdoc?.description);
159
+ param.addRef(range, true);
160
+ let inferredType;
161
+ if (cstParams[i].children.assignmentRightHandSide) {
162
+ inferredType = this.assignmentRightHandSide(cstParams[i].children.assignmentRightHandSide[0].children, paramCtx);
163
+ }
164
+ const paramType = fromJsdoc?.type.type || inferredType || this.ANY;
165
+ param.setType(paramType);
166
+ // Add a reference to the jsdoc name
167
+ if (paramDoc?.name) {
168
+ param.addRef(Range.from(this.PROCESSOR.file, paramDoc.name));
169
+ }
170
+ totalParams++;
171
+ }
172
+ // If we have more args defined in JSDocs, add them as *undeclared* params
173
+ const docsParams = docs?.jsdoc.params;
174
+ if ((docsParams?.length || 0) > cstParams.length) {
175
+ const extraParams = docsParams.slice(cstParams.length);
176
+ assert(extraParams, 'Expected extra params');
177
+ for (let i = 0; i < extraParams.length; i++) {
178
+ const idx = cstParams.length + i;
179
+ const paramDoc = extraParams[i];
180
+ assert(paramDoc, 'Expected extra param');
181
+ const type = docs.type[0]?.local?.getMember(paramDoc.name.content)
182
+ ?.type;
183
+ functionType
184
+ .addParameter(idx, paramDoc.name.content, {
185
+ optional: paramDoc.optional,
186
+ type: type?.type ||
187
+ typeFromFeatherString(paramDoc.type?.content || 'Any', this.PROCESSOR.project.types, false),
188
+ })
189
+ .describe(paramDoc.description);
190
+ totalParams++;
191
+ }
192
+ }
193
+ // Remove any excess parameters, e.g. if we're updating a
194
+ // prior definition. This is tricky since we may need to do something
195
+ // about references to legacy params.
196
+ functionType.truncateParameters(totalParams);
197
+ // Process the function body
198
+ this.visit(children.blockStatement, withCtxKind(ctx, 'functionBody'));
199
+ // Pop the definitiveScope
200
+ this.PROCESSOR.popDefinitiveSelf();
201
+ // Update the RETURN type based on the return statements found in the body
202
+ if (docs?.type[0]?.returns) {
203
+ functionType.setReturnType(docs.type[0].returns.type);
204
+ // TODO: Check against the inferred return types
205
+ }
206
+ else {
207
+ functionType.setReturnType(ctx.returns?.length ? ctx.returns : this.UNDEFINED);
208
+ }
209
+ // End the scope
210
+ const endBrace = fixITokenLocation(children.blockStatement[0].children.EndBrace[0]);
211
+ this.PROCESSOR.scope.setEnd(endBrace);
212
+ this.PROCESSOR.popScope(endBrace, true);
213
+ assert(functionType.local !== this.PROCESSOR.currentLocalScope, 'Local scope not popped correctly');
214
+ return functionType;
215
+ }
216
+ //# sourceMappingURL=visitor.functionExpression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.functionExpression.js","sourceRoot":"","sources":["../src/visitor.functionExpression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { CstNode, CstNodeLocation, IToken } from 'chevrotain';
2
+ import { EnumStatementCstChildren, FunctionExpressionCstChildren, GlobalVarDeclarationCstChildren, IdentifierAccessorCstChildren, JsdocGmlCstChildren, JsdocJsCstChildren, MacroStatementCstChildren } from '../gml-cst.js';
3
+ import { JsdocSummary } from './jsdoc.js';
4
+ import { GmlVisitorBase } from './parser.js';
5
+ import type { Code } from './project.code.js';
6
+ import { Position, Range } from './project.location.js';
7
+ import { Signifier } from './signifiers.js';
8
+ import { StructType } from './types.js';
9
+ export declare function registerGlobals(file: Code): void;
10
+ declare class GlobalDeclarationsProcessor {
11
+ readonly file: Code;
12
+ protected readonly localScopeStack: StructType[];
13
+ readonly start: Position;
14
+ constructor(file: Code);
15
+ range(loc: CstNodeLocation): Range;
16
+ get currentLocalScope(): StructType;
17
+ pushLocalScope(): void;
18
+ popLocalScope(): void;
19
+ get asset(): import("./project.asset.js").Asset<"animcurves" | "extensions" | "fonts" | "notes" | "objects" | "particles" | "paths" | "rooms" | "scripts" | "sequences" | "shaders" | "sounds" | "sprites" | "tilesets" | "timelines">;
20
+ get project(): import("./project.js").Project;
21
+ get globalSelf(): StructType;
22
+ }
23
+ /**
24
+ * Visits the CST and creates symbols for global signifiers.
25
+ */
26
+ export declare class GmlGlobalDeclarationsVisitor extends GmlVisitorBase {
27
+ readonly PROCESSOR: GlobalDeclarationsProcessor;
28
+ static validated: boolean;
29
+ EXTRACT_GLOBAL_DECLARATIONS(input: CstNode): GlobalDeclarationsProcessor;
30
+ /**
31
+ * Register a global identifier from its declaration. Note that
32
+ * global identifiers are not deleted when their definitions are,
33
+ * so we need to either create *or update* the corresponding symbol/typeMember.
34
+ */
35
+ REGISTER_GLOBAL(children: {
36
+ Identifier?: IToken[];
37
+ }): Signifier | undefined;
38
+ REGISTER_GLOBAL_BY_NAME(name: string, range: Range, isNotDef?: boolean): Signifier;
39
+ REGISTER_JSDOC_GLOBAL(jsdoc: JsdocSummary): void;
40
+ jsdocJs(children: JsdocJsCstChildren): void;
41
+ jsdocGml(children: JsdocGmlCstChildren): void;
42
+ /**
43
+ * Collect the enum symbol *and* its members, since all of those
44
+ * are globally visible.
45
+ */
46
+ enumStatement(children: EnumStatementCstChildren): void;
47
+ /**
48
+ * Identify global function declarations and store them as
49
+ * symbols or `global.` types. For constructors, add the
50
+ * corresponding types.
51
+ */
52
+ functionExpression(children: FunctionExpressionCstChildren): void;
53
+ globalVarDeclaration(children: GlobalVarDeclarationCstChildren): void;
54
+ macroStatement(children: MacroStatementCstChildren): void;
55
+ identifierAccessor(children: IdentifierAccessorCstChildren): void;
56
+ constructor(PROCESSOR: GlobalDeclarationsProcessor);
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=visitor.globals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.globals.d.ts","sourceRoot":"","sources":["../src/visitor.globals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,6BAA6B,EAC7B,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAc,MAAM,YAAY,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAgB,UAAU,EAAQ,MAAM,YAAY,CAAC;AAG5D,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,QAUzC;AAED,cAAM,2BAA2B;IAInB,QAAQ,CAAC,IAAI,EAAE,IAAI;IAH/B,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,CAAM;IACtD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAEJ,IAAI,EAAE,IAAI;IAM/B,KAAK,CAAC,GAAG,EAAE,eAAe;IAI1B,IAAI,iBAAiB,eAEpB;IAED,cAAc;IAKd,aAAa;IAIb,IAAI,KAAK,8NAER;IAED,IAAI,OAAO,mCAEV;IAED,IAAI,UAAU,eAEb;CACF;AAED;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,cAAc;IAsPlD,QAAQ,CAAC,SAAS,EAAE,2BAA2B;IArP3D,MAAM,CAAC,SAAS,UAAS;IAEzB,2BAA2B,CAAC,KAAK,EAAE,OAAO;IAQ1C;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,GAAG,SAAS;IAO3E,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,UAAQ;IA4BpE,qBAAqB,CAAC,KAAK,EAAE,YAAY;IAehC,OAAO,CAAC,QAAQ,EAAE,kBAAkB;IAIpC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB;IAM/C;;;OAGG;IACM,aAAa,CAAC,QAAQ,EAAE,wBAAwB;IAiCzD;;;;OAIG;IACM,kBAAkB,CAAC,QAAQ,EAAE,6BAA6B;IA6F1D,oBAAoB,CAAC,QAAQ,EAAE,+BAA+B;IAI9D,cAAc,CAAC,QAAQ,EAAE,yBAAyB;IAKlD,kBAAkB,CAAC,QAAQ,EAAE,6BAA6B;gBA0B9C,SAAS,EAAE,2BAA2B;CAS5D"}
@@ -0,0 +1,271 @@
1
+ import { parseJsdoc } from './jsdoc.js';
2
+ import { logger } from './logger.js';
3
+ import { GmlVisitorBase } from './parser.js';
4
+ import { identifierFrom } from './parser.utility.js';
5
+ import { Diagnostic } from './project.diagnostics.js';
6
+ import { Range } from './project.location.js';
7
+ import { Signifier } from './signifiers.js';
8
+ import { typeFromParsedJsdocs } from './types.feather.js';
9
+ import { Type } from './types.js';
10
+ import { StitchParserError, assert } from './util.js';
11
+ export function registerGlobals(file) {
12
+ try {
13
+ const processor = new GlobalDeclarationsProcessor(file);
14
+ const visitor = new GmlGlobalDeclarationsVisitor(processor);
15
+ visitor.EXTRACT_GLOBAL_DECLARATIONS(file.cst);
16
+ }
17
+ catch (parseError) {
18
+ const err = new StitchParserError(`Error parsing globals in ${file.path}`);
19
+ err.cause = parseError;
20
+ logger.error(err);
21
+ }
22
+ }
23
+ class GlobalDeclarationsProcessor {
24
+ file;
25
+ localScopeStack = [];
26
+ start;
27
+ constructor(file) {
28
+ this.file = file;
29
+ this.localScopeStack.push(file.scopes[0].local);
30
+ assert(file.scopes[0], 'File must have a global scope');
31
+ this.start = file.scopes[0].start;
32
+ }
33
+ range(loc) {
34
+ return Range.fromCst(this.start.file, loc);
35
+ }
36
+ get currentLocalScope() {
37
+ return this.localScopeStack.at(-1);
38
+ }
39
+ pushLocalScope() {
40
+ const localScope = new Type('Struct');
41
+ this.localScopeStack.push(localScope);
42
+ }
43
+ popLocalScope() {
44
+ this.localScopeStack.pop();
45
+ }
46
+ get asset() {
47
+ return this.file.asset;
48
+ }
49
+ get project() {
50
+ return this.asset.project;
51
+ }
52
+ get globalSelf() {
53
+ return this.project.self;
54
+ }
55
+ }
56
+ /**
57
+ * Visits the CST and creates symbols for global signifiers.
58
+ */
59
+ export class GmlGlobalDeclarationsVisitor extends GmlVisitorBase {
60
+ PROCESSOR;
61
+ static validated = false;
62
+ EXTRACT_GLOBAL_DECLARATIONS(input) {
63
+ this.PROCESSOR.file.callsSuper = false;
64
+ // If we are reprocessing, we want the list of globals that used
65
+ // to be declared here in case any have gone missing.
66
+ this.visit(input);
67
+ return this.PROCESSOR;
68
+ }
69
+ /**
70
+ * Register a global identifier from its declaration. Note that
71
+ * global identifiers are not deleted when their definitions are,
72
+ * so we need to either create *or update* the corresponding symbol/typeMember.
73
+ */
74
+ REGISTER_GLOBAL(children) {
75
+ const name = children.Identifier?.[0];
76
+ if (!name)
77
+ return;
78
+ const range = this.PROCESSOR.range(name);
79
+ return this.REGISTER_GLOBAL_BY_NAME(name.image, range);
80
+ }
81
+ REGISTER_GLOBAL_BY_NAME(name, range, isNotDef = false) {
82
+ // Create it if it doesn't already exist.
83
+ let symbol = this.PROCESSOR.globalSelf.getMember(name);
84
+ if (!symbol) {
85
+ symbol = new Signifier(this.PROCESSOR.project.self, name);
86
+ // Add the symbol and type to the project.
87
+ this.PROCESSOR.globalSelf.addMember(symbol);
88
+ }
89
+ // Ensure it's defined here.
90
+ if (!isNotDef && !symbol.native) {
91
+ symbol.definedAt(range);
92
+ }
93
+ else if (!isNotDef) {
94
+ this.PROCESSOR.file.addDiagnostic('INVALID_OPERATION', new Diagnostic(`"${name}" already exists as a built-in symbol.`, range, 'warning'));
95
+ }
96
+ symbol.addRef(range, !isNotDef && !symbol.native);
97
+ symbol.global = true;
98
+ symbol.macro = false; // Reset macro status
99
+ symbol.enum = false; // Reset enum status
100
+ return symbol;
101
+ }
102
+ REGISTER_JSDOC_GLOBAL(jsdoc) {
103
+ if (jsdoc.kind !== 'globalvar') {
104
+ return;
105
+ }
106
+ const symbol = this.REGISTER_GLOBAL_BY_NAME(jsdoc.name.content, Range.from(this.PROCESSOR.file, jsdoc.name));
107
+ symbol.setType(typeFromParsedJsdocs(jsdoc, this.PROCESSOR.project.types, false));
108
+ symbol.describe(jsdoc.description);
109
+ // NOTE: references to types are added during local processing so they are not needed here
110
+ }
111
+ jsdocJs(children) {
112
+ this.REGISTER_JSDOC_GLOBAL(parseJsdoc(children.JsdocJs[0]));
113
+ }
114
+ jsdocGml(children) {
115
+ for (const line of children.JsdocGmlLine) {
116
+ this.REGISTER_JSDOC_GLOBAL(parseJsdoc(line));
117
+ }
118
+ }
119
+ /**
120
+ * Collect the enum symbol *and* its members, since all of those
121
+ * are globally visible.
122
+ */
123
+ enumStatement(children) {
124
+ const symbol = this.REGISTER_GLOBAL(children);
125
+ assert(symbol, 'Enum symbol should exist');
126
+ symbol.enum = true;
127
+ let type = symbol.getTypeByKind('Enum');
128
+ if (!type) {
129
+ symbol.setType(new Type('Enum'));
130
+ type = symbol.getTypeByKind('Enum');
131
+ }
132
+ if (symbol.type.type.length > 1) {
133
+ symbol.setType(type);
134
+ }
135
+ type.named(symbol.name);
136
+ type.signifier = symbol;
137
+ this.PROCESSOR.project.types.set(`Enum.${symbol.name}`, type);
138
+ // Upsert the enum members
139
+ for (let i = 0; i < children.enumMember.length; i++) {
140
+ const name = children.enumMember[i].children.Identifier[0];
141
+ const range = this.PROCESSOR.range(name);
142
+ // Does member already exist?
143
+ const member = type.getMember(name.image) || type.addMember(name.image);
144
+ const memberType = member.type.type[0] || new Type('EnumMember').named(name.image);
145
+ member.setType(memberType);
146
+ memberType.signifier = member;
147
+ member.enumMember = true;
148
+ member.idx = i;
149
+ member.definedAt(range);
150
+ member.addRef(range, true);
151
+ }
152
+ }
153
+ /**
154
+ * Identify global function declarations and store them as
155
+ * symbols or `global.` types. For constructors, add the
156
+ * corresponding types.
157
+ */
158
+ functionExpression(children) {
159
+ const isGlobal = this.PROCESSOR.currentLocalScope ===
160
+ this.PROCESSOR.file.scopes[0].local &&
161
+ this.PROCESSOR.asset.assetKind === 'scripts';
162
+ // Functions create a new localscope. Keeping track of that is important
163
+ // for making sure that we're looking at a global function declaration.
164
+ this.PROCESSOR.pushLocalScope();
165
+ const name = children.Identifier?.[0];
166
+ if (name && isGlobal) {
167
+ // Add the function to a table of functions
168
+ const constructorNode = children.constructorSuffix?.[0];
169
+ let parentConstructs;
170
+ if (constructorNode?.children.Identifier) {
171
+ // Ensure that the parent type exists
172
+ const parentName = constructorNode.children.Identifier[0]?.image;
173
+ if (parentName) {
174
+ const parentNameRange = this.PROCESSOR.range(constructorNode.children.Identifier[0]);
175
+ const parentSignifier = this.REGISTER_GLOBAL_BY_NAME(parentName, parentNameRange, true);
176
+ let parentType = parentSignifier.type.type[0];
177
+ if (!parentType) {
178
+ parentType = new Type('Function').named(parentName);
179
+ parentSignifier.setType(parentType);
180
+ }
181
+ // Ensure it has a constructs type
182
+ parentType.isConstructor = true;
183
+ parentConstructs =
184
+ parentType.self ||
185
+ new Type('Struct').named(parentName);
186
+ parentType.self = parentConstructs;
187
+ parentConstructs.signifier = parentSignifier;
188
+ this.PROCESSOR.project.types.set(`Struct.${parentName}`, parentConstructs);
189
+ }
190
+ }
191
+ const signifier = this.REGISTER_GLOBAL(children);
192
+ // Make sure that the types all exist
193
+ let type = signifier.getTypeByKind('Function');
194
+ if (!type) {
195
+ // Create the type if needed, but if there's already an existing
196
+ // type with this name grab that instead (helps reduce reference
197
+ // problems during editing)
198
+ const typeName = `Function.${name.image}`;
199
+ type = (this.PROCESSOR.project.types.get(typeName) ||
200
+ new Type('Function').named(name.image));
201
+ signifier.setType(type);
202
+ type = signifier.getTypeByKind('Function');
203
+ this.PROCESSOR.project.types.set(typeName, type);
204
+ }
205
+ // Global functions can only have one type!
206
+ if (signifier.type.type.length > 1) {
207
+ signifier.setType(type);
208
+ }
209
+ // Reset the self context to account for the user changing a function
210
+ // from a constructor to a regular function and vice versa
211
+ type.self = undefined;
212
+ // Ensure that the type links back to the signifier
213
+ type.signifier = signifier;
214
+ // If it's a constructor, ensure the type exists
215
+ if (constructorNode) {
216
+ type.self = (this.PROCESSOR.project.types.get(`Struct.${name.image}`) ||
217
+ new Type('Struct').named(name.image));
218
+ type.self.signifier = signifier;
219
+ this.PROCESSOR.project.types.set(`Struct.${name.image}`, type.self);
220
+ }
221
+ if (parentConstructs && type.self) {
222
+ type.self.extends = parentConstructs;
223
+ }
224
+ // Initialize the local scope
225
+ type.local ||= Type.Struct;
226
+ }
227
+ this.visit(children.blockStatement);
228
+ // End the scope
229
+ this.PROCESSOR.popLocalScope();
230
+ }
231
+ globalVarDeclaration(children) {
232
+ this.REGISTER_GLOBAL(children);
233
+ }
234
+ macroStatement(children) {
235
+ const symbol = this.REGISTER_GLOBAL(children);
236
+ symbol.macro = true;
237
+ }
238
+ identifierAccessor(children) {
239
+ // Add global.whatever symbols
240
+ const identifier = identifierFrom(children);
241
+ if (identifier?.type === 'Global') {
242
+ const globalIdentifier = children.accessorSuffixes?.[0].children.dotAccessSuffix?.[0].children
243
+ .identifier[0].children;
244
+ if (globalIdentifier?.Identifier) {
245
+ this.REGISTER_GLOBAL(globalIdentifier);
246
+ }
247
+ }
248
+ else if (identifier?.type === 'Identifier' &&
249
+ children.accessorSuffixes?.[0].children.functionArguments) {
250
+ // See if this is a function call for `event_inherited()`
251
+ if (identifier.name === 'event_inherited') {
252
+ this.PROCESSOR.file.callsSuper = true;
253
+ }
254
+ }
255
+ // Still visit the rest
256
+ if (children.accessorSuffixes) {
257
+ this.visit(children.accessorSuffixes);
258
+ }
259
+ }
260
+ constructor(PROCESSOR) {
261
+ super();
262
+ this.PROCESSOR = PROCESSOR;
263
+ if (!GmlGlobalDeclarationsVisitor.validated) {
264
+ // Validator logic only needs to run once, since
265
+ // new instances will be the same.
266
+ this.validateVisitor();
267
+ GmlGlobalDeclarationsVisitor.validated = true;
268
+ }
269
+ }
270
+ }
271
+ //# sourceMappingURL=visitor.globals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.globals.js","sourceRoot":"","sources":["../src/visitor.globals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { IdentifierAccessorCstChildren } from '../gml-cst.js';
2
+ import { type VisitorContext } from './parser.js';
3
+ import { Type, TypeStore } from './types.js';
4
+ import type { GmlSignifierVisitor } from './visitor.js';
5
+ export declare function visitIdentifierAccessor(this: GmlSignifierVisitor, children: IdentifierAccessorCstChildren, ctx: VisitorContext): Type[] | TypeStore[];
6
+ //# sourceMappingURL=visitor.identifierAccessor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visitor.identifierAccessor.d.ts","sourceRoot":"","sources":["../src/visitor.identifierAccessor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,6BAA6B,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAyBrE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAI3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAuBxD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,6BAA6B,EACvC,GAAG,EAAE,cAAc,GAClB,IAAI,EAAE,GAAG,SAAS,EAAE,CAyFtB"}