brighterscript 0.66.0-alpha.9 → 0.67.1

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 (472) hide show
  1. package/CHANGELOG.md +123 -73
  2. package/README.md +14 -418
  3. package/dist/BsConfig.d.ts +25 -2
  4. package/dist/Cache.js +3 -3
  5. package/dist/Cache.js.map +1 -1
  6. package/dist/CodeActionUtil.d.ts +3 -3
  7. package/dist/CodeActionUtil.js.map +1 -1
  8. package/dist/CommentFlagProcessor.d.ts +3 -4
  9. package/dist/CommentFlagProcessor.js +4 -3
  10. package/dist/CommentFlagProcessor.js.map +1 -1
  11. package/dist/DependencyGraph.js +8 -8
  12. package/dist/DependencyGraph.js.map +1 -1
  13. package/dist/DiagnosticFilterer.d.ts +8 -4
  14. package/dist/DiagnosticFilterer.js +71 -38
  15. package/dist/DiagnosticFilterer.js.map +1 -1
  16. package/dist/DiagnosticMessages.d.ts +15 -36
  17. package/dist/DiagnosticMessages.js +15 -61
  18. package/dist/DiagnosticMessages.js.map +1 -1
  19. package/dist/DiagnosticSeverityAdjuster.js +3 -0
  20. package/dist/DiagnosticSeverityAdjuster.js.map +1 -1
  21. package/dist/FunctionScope.d.ts +2 -3
  22. package/dist/FunctionScope.js +0 -3
  23. package/dist/FunctionScope.js.map +1 -1
  24. package/dist/LanguageServer.d.ts +1 -2
  25. package/dist/LanguageServer.js +31 -35
  26. package/dist/LanguageServer.js.map +1 -1
  27. package/dist/Logger.d.ts +5 -9
  28. package/dist/Logger.js +18 -22
  29. package/dist/Logger.js.map +1 -1
  30. package/dist/PluginInterface.d.ts +13 -15
  31. package/dist/PluginInterface.js +16 -70
  32. package/dist/PluginInterface.js.map +1 -1
  33. package/dist/Program.d.ts +105 -138
  34. package/dist/Program.js +479 -702
  35. package/dist/Program.js.map +1 -1
  36. package/dist/ProgramBuilder.d.ts +8 -19
  37. package/dist/ProgramBuilder.js +85 -89
  38. package/dist/ProgramBuilder.js.map +1 -1
  39. package/dist/Scope.d.ts +56 -46
  40. package/dist/Scope.js +281 -217
  41. package/dist/Scope.js.map +1 -1
  42. package/dist/Stopwatch.js +1 -1
  43. package/dist/Stopwatch.js.map +1 -1
  44. package/dist/SymbolTable.d.ts +12 -68
  45. package/dist/SymbolTable.js +28 -213
  46. package/dist/SymbolTable.js.map +1 -1
  47. package/dist/XmlScope.d.ts +5 -7
  48. package/dist/XmlScope.js +36 -76
  49. package/dist/XmlScope.js.map +1 -1
  50. package/dist/astUtils/{Editor.d.ts → AstEditor.d.ts} +1 -6
  51. package/dist/astUtils/{Editor.js → AstEditor.js} +3 -9
  52. package/dist/astUtils/AstEditor.js.map +1 -0
  53. package/dist/astUtils/{Editor.spec.js → AstEditor.spec.js} +6 -10
  54. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  55. package/dist/astUtils/creators.d.ts +8 -19
  56. package/dist/astUtils/creators.js +22 -54
  57. package/dist/astUtils/creators.js.map +1 -1
  58. package/dist/astUtils/creators.spec.js +0 -10
  59. package/dist/astUtils/creators.spec.js.map +1 -1
  60. package/dist/astUtils/reflection.d.ts +45 -81
  61. package/dist/astUtils/reflection.js +157 -220
  62. package/dist/astUtils/reflection.js.map +1 -1
  63. package/dist/astUtils/reflection.spec.js +19 -96
  64. package/dist/astUtils/reflection.spec.js.map +1 -1
  65. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  66. package/dist/astUtils/visitors.d.ts +14 -18
  67. package/dist/astUtils/visitors.js +9 -22
  68. package/dist/astUtils/visitors.js.map +1 -1
  69. package/dist/astUtils/visitors.spec.js +9 -62
  70. package/dist/astUtils/visitors.spec.js.map +1 -1
  71. package/dist/astUtils/xml.d.ts +9 -9
  72. package/dist/astUtils/xml.js +6 -6
  73. package/dist/astUtils/xml.js.map +1 -1
  74. package/dist/bscPlugin/BscPlugin.d.ts +8 -11
  75. package/dist/bscPlugin/BscPlugin.js +21 -29
  76. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  77. package/dist/bscPlugin/CallExpressionInfo.d.ts +6 -5
  78. package/dist/bscPlugin/CallExpressionInfo.js +2 -2
  79. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  80. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +11 -11
  81. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  82. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
  83. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  84. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +1 -49
  85. package/dist/bscPlugin/completions/CompletionsProcessor.js +23 -424
  86. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  87. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  88. package/dist/bscPlugin/definition/DefinitionProvider.js +200 -0
  89. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  90. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  91. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  92. package/dist/bscPlugin/hover/HoverProcessor.d.ts +3 -7
  93. package/dist/bscPlugin/hover/HoverProcessor.js +88 -128
  94. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  95. package/dist/bscPlugin/hover/HoverProcessor.spec.js +24 -336
  96. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  97. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  98. package/dist/bscPlugin/references/ReferencesProvider.js +56 -0
  99. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  100. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  101. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  102. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +0 -1
  103. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +5 -49
  104. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  105. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -22
  106. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  107. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  108. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  109. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  110. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +290 -0
  111. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  112. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  113. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  114. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  115. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  116. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  117. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  118. package/dist/bscPlugin/symbols/symbolUtils.js +140 -0
  119. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  120. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.d.ts → BrsFilePreTranspileProcessor.d.ts} +2 -4
  121. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.js → BrsFilePreTranspileProcessor.js} +15 -36
  122. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
  123. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +46 -0
  124. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -0
  125. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +1 -0
  126. package/dist/bscPlugin/validation/BrsFileValidator.js +30 -41
  127. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  128. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +2 -2
  129. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  130. package/dist/bscPlugin/validation/ProgramValidator.d.ts +3 -3
  131. package/dist/bscPlugin/validation/ProgramValidator.js +6 -6
  132. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -1
  133. package/dist/bscPlugin/validation/ScopeValidator.d.ts +6 -28
  134. package/dist/bscPlugin/validation/ScopeValidator.js +166 -387
  135. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  136. package/dist/bscPlugin/validation/XmlFileValidator.js +9 -9
  137. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  138. package/dist/diagnosticUtils.d.ts +2 -3
  139. package/dist/diagnosticUtils.js +5 -5
  140. package/dist/diagnosticUtils.js.map +1 -1
  141. package/dist/examples/plugins/removePrint.js +1 -1
  142. package/dist/examples/plugins/removePrint.js.map +1 -1
  143. package/dist/files/BrsFile.Class.spec.js +143 -114
  144. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  145. package/dist/files/BrsFile.d.ts +61 -83
  146. package/dist/files/BrsFile.js +559 -612
  147. package/dist/files/BrsFile.js.map +1 -1
  148. package/dist/files/BrsFile.spec.js +1365 -1201
  149. package/dist/files/BrsFile.spec.js.map +1 -1
  150. package/dist/files/XmlFile.d.ts +28 -56
  151. package/dist/files/XmlFile.js +103 -89
  152. package/dist/files/XmlFile.js.map +1 -1
  153. package/dist/files/XmlFile.spec.js +179 -122
  154. package/dist/files/XmlFile.spec.js.map +1 -1
  155. package/dist/files/tests/imports.spec.js +19 -29
  156. package/dist/files/tests/imports.spec.js.map +1 -1
  157. package/dist/files/tests/optionalChaning.spec.js +14 -14
  158. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  159. package/dist/globalCallables.js +83 -88
  160. package/dist/globalCallables.js.map +1 -1
  161. package/dist/index.d.ts +1 -9
  162. package/dist/index.js +1 -9
  163. package/dist/index.js.map +1 -1
  164. package/dist/interfaces.d.ts +173 -423
  165. package/dist/interfaces.js +0 -24
  166. package/dist/interfaces.js.map +1 -1
  167. package/dist/lexer/Lexer.d.ts +9 -15
  168. package/dist/lexer/Lexer.js +35 -46
  169. package/dist/lexer/Lexer.js.map +1 -1
  170. package/dist/lexer/Lexer.spec.js +48 -40
  171. package/dist/lexer/Lexer.spec.js.map +1 -1
  172. package/dist/lexer/Token.d.ts +1 -5
  173. package/dist/lexer/Token.js +1 -1
  174. package/dist/lexer/Token.js.map +1 -1
  175. package/dist/lexer/TokenKind.d.ts +0 -6
  176. package/dist/lexer/TokenKind.js +2 -14
  177. package/dist/lexer/TokenKind.js.map +1 -1
  178. package/dist/logging.d.ts +9 -0
  179. package/dist/logging.js +16 -0
  180. package/dist/logging.js.map +1 -0
  181. package/dist/parser/AstNode.d.ts +6 -90
  182. package/dist/parser/AstNode.js +5 -96
  183. package/dist/parser/AstNode.js.map +1 -1
  184. package/dist/parser/AstNode.spec.js.map +1 -1
  185. package/dist/parser/BrsTranspileState.d.ts +3 -4
  186. package/dist/parser/BrsTranspileState.js +2 -3
  187. package/dist/parser/BrsTranspileState.js.map +1 -1
  188. package/dist/parser/Expression.d.ts +114 -137
  189. package/dist/parser/Expression.js +244 -373
  190. package/dist/parser/Expression.js.map +1 -1
  191. package/dist/parser/Parser.Class.spec.js +19 -46
  192. package/dist/parser/Parser.Class.spec.js.map +1 -1
  193. package/dist/parser/Parser.d.ts +18 -14
  194. package/dist/parser/Parser.js +196 -175
  195. package/dist/parser/Parser.js.map +1 -1
  196. package/dist/parser/Parser.spec.d.ts +0 -2
  197. package/dist/parser/Parser.spec.js +10 -674
  198. package/dist/parser/Parser.spec.js.map +1 -1
  199. package/dist/parser/SGParser.d.ts +6 -44
  200. package/dist/parser/SGParser.js +198 -194
  201. package/dist/parser/SGParser.js.map +1 -1
  202. package/dist/parser/SGParser.spec.js +11 -14
  203. package/dist/parser/SGParser.spec.js.map +1 -1
  204. package/dist/parser/SGTypes.d.ts +52 -280
  205. package/dist/parser/SGTypes.js +185 -562
  206. package/dist/parser/SGTypes.js.map +1 -1
  207. package/dist/parser/Statement.d.ts +140 -172
  208. package/dist/parser/Statement.js +201 -337
  209. package/dist/parser/Statement.js.map +1 -1
  210. package/dist/parser/Statement.spec.js.map +1 -1
  211. package/dist/parser/TranspileState.d.ts +3 -2
  212. package/dist/parser/TranspileState.js +8 -10
  213. package/dist/parser/TranspileState.js.map +1 -1
  214. package/dist/parser/tests/Parser.spec.js +3 -5
  215. package/dist/parser/tests/Parser.spec.js.map +1 -1
  216. package/dist/parser/tests/controlFlow/For.spec.js +8 -16
  217. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  218. package/dist/parser/tests/controlFlow/ForEach.spec.js +6 -12
  219. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  220. package/dist/parser/tests/controlFlow/While.spec.js +4 -8
  221. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  222. package/dist/parser/tests/expression/Call.spec.js +4 -4
  223. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  224. package/dist/parser/tests/expression/Indexing.spec.js +25 -0
  225. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  226. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +73 -29
  227. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  228. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
  229. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  230. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
  231. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  232. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +47 -35
  233. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  234. package/dist/parser/tests/expression/TernaryExpression.spec.js +83 -36
  235. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  236. package/dist/parser/tests/expression/UnaryExpression.spec.js +2 -2
  237. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -1
  238. package/dist/parser/tests/statement/ConstStatement.spec.js +26 -27
  239. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  240. package/dist/parser/tests/statement/Continue.spec.js +2 -2
  241. package/dist/parser/tests/statement/Continue.spec.js.map +1 -1
  242. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  243. package/dist/parser/tests/statement/Enum.spec.js +393 -90
  244. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  245. package/dist/parser/tests/statement/For.spec.js +6 -6
  246. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  247. package/dist/parser/tests/statement/ForEach.spec.js +4 -4
  248. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  249. package/dist/parser/tests/statement/Function.spec.js +1 -1
  250. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  251. package/dist/parser/tests/statement/InterfaceStatement.spec.js +18 -18
  252. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  253. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  254. package/dist/parser/tests/statement/PrintStatement.spec.js +13 -16
  255. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  256. package/dist/parser/tests/statement/ReturnStatement.spec.js +3 -5
  257. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  258. package/dist/parser/tests/statement/Set.spec.js +13 -26
  259. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  260. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  261. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  262. package/dist/preprocessor/Chunk.js +1 -2
  263. package/dist/preprocessor/Chunk.js.map +1 -1
  264. package/dist/preprocessor/Preprocessor.d.ts +3 -4
  265. package/dist/preprocessor/Preprocessor.js +3 -3
  266. package/dist/preprocessor/Preprocessor.js.map +1 -1
  267. package/dist/preprocessor/PreprocessorParser.js +8 -1
  268. package/dist/preprocessor/PreprocessorParser.js.map +1 -1
  269. package/dist/roku-types/data.json +293 -243
  270. package/dist/roku-types/index.d.ts +38 -17
  271. package/dist/types/ArrayType.d.ts +4 -9
  272. package/dist/types/ArrayType.js +24 -72
  273. package/dist/types/ArrayType.js.map +1 -1
  274. package/dist/types/ArrayType.spec.js +10 -39
  275. package/dist/types/ArrayType.spec.js.map +1 -1
  276. package/dist/types/BooleanType.d.ts +4 -8
  277. package/dist/types/BooleanType.js +8 -19
  278. package/dist/types/BooleanType.js.map +1 -1
  279. package/dist/types/BooleanType.spec.js +3 -9
  280. package/dist/types/BooleanType.spec.js.map +1 -1
  281. package/dist/types/BscType.d.ts +2 -29
  282. package/dist/types/BscType.js +0 -113
  283. package/dist/types/BscType.js.map +1 -1
  284. package/dist/types/CustomType.d.ts +9 -0
  285. package/dist/types/CustomType.js +32 -0
  286. package/dist/types/CustomType.js.map +1 -0
  287. package/dist/types/DoubleType.d.ts +4 -8
  288. package/dist/types/DoubleType.js +20 -23
  289. package/dist/types/DoubleType.js.map +1 -1
  290. package/dist/types/DoubleType.spec.js +3 -11
  291. package/dist/types/DoubleType.spec.js.map +1 -1
  292. package/dist/types/DynamicType.d.ts +3 -9
  293. package/dist/types/DynamicType.js +2 -18
  294. package/dist/types/DynamicType.js.map +1 -1
  295. package/dist/types/DynamicType.spec.js +4 -15
  296. package/dist/types/DynamicType.spec.js.map +1 -1
  297. package/dist/types/FloatType.d.ts +4 -8
  298. package/dist/types/FloatType.js +20 -23
  299. package/dist/types/FloatType.js.map +1 -1
  300. package/dist/types/FloatType.spec.js +3 -3
  301. package/dist/types/FloatType.spec.js.map +1 -1
  302. package/dist/types/FunctionType.d.ts +20 -10
  303. package/dist/types/FunctionType.js +52 -27
  304. package/dist/types/FunctionType.js.map +1 -1
  305. package/dist/types/FunctionType.spec.js +23 -0
  306. package/dist/types/FunctionType.spec.js.map +1 -0
  307. package/dist/types/IntegerType.d.ts +4 -8
  308. package/dist/types/IntegerType.js +20 -23
  309. package/dist/types/IntegerType.js.map +1 -1
  310. package/dist/types/IntegerType.spec.js +3 -7
  311. package/dist/types/IntegerType.spec.js.map +1 -1
  312. package/dist/types/InterfaceType.d.ts +10 -12
  313. package/dist/types/InterfaceType.js +48 -23
  314. package/dist/types/InterfaceType.js.map +1 -1
  315. package/dist/types/InterfaceType.spec.js +45 -82
  316. package/dist/types/InterfaceType.spec.js.map +1 -1
  317. package/dist/types/InvalidType.d.ts +4 -7
  318. package/dist/types/InvalidType.js +8 -18
  319. package/dist/types/InvalidType.js.map +1 -1
  320. package/dist/types/InvalidType.spec.js +3 -7
  321. package/dist/types/InvalidType.spec.js.map +1 -1
  322. package/dist/types/LongIntegerType.d.ts +4 -8
  323. package/dist/types/LongIntegerType.js +20 -23
  324. package/dist/types/LongIntegerType.js.map +1 -1
  325. package/dist/types/LongIntegerType.spec.js +3 -9
  326. package/dist/types/LongIntegerType.spec.js.map +1 -1
  327. package/dist/types/ObjectType.d.ts +4 -8
  328. package/dist/types/ObjectType.js +7 -21
  329. package/dist/types/ObjectType.js.map +1 -1
  330. package/dist/types/ObjectType.spec.js +2 -2
  331. package/dist/types/ObjectType.spec.js.map +1 -1
  332. package/dist/types/StringType.d.ts +4 -11
  333. package/dist/types/StringType.js +8 -23
  334. package/dist/types/StringType.js.map +1 -1
  335. package/dist/types/StringType.spec.js +2 -2
  336. package/dist/types/StringType.spec.js.map +1 -1
  337. package/dist/types/UninitializedType.d.ts +3 -7
  338. package/dist/types/UninitializedType.js +3 -14
  339. package/dist/types/UninitializedType.js.map +1 -1
  340. package/dist/types/VoidType.d.ts +4 -8
  341. package/dist/types/VoidType.js +8 -18
  342. package/dist/types/VoidType.js.map +1 -1
  343. package/dist/types/VoidType.spec.js +2 -2
  344. package/dist/types/VoidType.spec.js.map +1 -1
  345. package/dist/util.d.ts +43 -104
  346. package/dist/util.js +243 -640
  347. package/dist/util.js.map +1 -1
  348. package/dist/validators/ClassValidator.d.ts +6 -1
  349. package/dist/validators/ClassValidator.js +61 -20
  350. package/dist/validators/ClassValidator.js.map +1 -1
  351. package/package.json +13 -11
  352. package/dist/ActionPipeline.d.ts +0 -10
  353. package/dist/ActionPipeline.js +0 -40
  354. package/dist/ActionPipeline.js.map +0 -1
  355. package/dist/AstValidationSegmenter.d.ts +0 -25
  356. package/dist/AstValidationSegmenter.js +0 -150
  357. package/dist/AstValidationSegmenter.js.map +0 -1
  358. package/dist/CacheVerifier.d.ts +0 -7
  359. package/dist/CacheVerifier.js +0 -20
  360. package/dist/CacheVerifier.js.map +0 -1
  361. package/dist/astUtils/Editor.js.map +0 -1
  362. package/dist/astUtils/Editor.spec.js.map +0 -1
  363. package/dist/bscPlugin/FileWriter.d.ts +0 -6
  364. package/dist/bscPlugin/FileWriter.js +0 -24
  365. package/dist/bscPlugin/FileWriter.js.map +0 -1
  366. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +0 -1658
  367. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +0 -1
  368. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +0 -9
  369. package/dist/bscPlugin/fileProviders/FileProvider.js +0 -51
  370. package/dist/bscPlugin/fileProviders/FileProvider.js.map +0 -1
  371. package/dist/bscPlugin/serialize/BslibInjector.spec.js +0 -19
  372. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +0 -1
  373. package/dist/bscPlugin/serialize/BslibManager.d.ts +0 -9
  374. package/dist/bscPlugin/serialize/BslibManager.js +0 -40
  375. package/dist/bscPlugin/serialize/BslibManager.js.map +0 -1
  376. package/dist/bscPlugin/serialize/FileSerializer.d.ts +0 -9
  377. package/dist/bscPlugin/serialize/FileSerializer.js +0 -72
  378. package/dist/bscPlugin/serialize/FileSerializer.js.map +0 -1
  379. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +0 -1
  380. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +0 -41
  381. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +0 -1
  382. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +0 -11
  383. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +0 -53
  384. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +0 -1
  385. package/dist/bscPlugin/validation/ScopeValidator.spec.js +0 -2004
  386. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +0 -1
  387. package/dist/files/AssetFile.d.ts +0 -26
  388. package/dist/files/AssetFile.js +0 -26
  389. package/dist/files/AssetFile.js.map +0 -1
  390. package/dist/files/Factory.d.ts +0 -25
  391. package/dist/files/Factory.js +0 -22
  392. package/dist/files/Factory.js.map +0 -1
  393. package/dist/files/File.d.ts +0 -106
  394. package/dist/files/File.js +0 -16
  395. package/dist/files/File.js.map +0 -1
  396. package/dist/files/LazyFileData.d.ts +0 -20
  397. package/dist/files/LazyFileData.js +0 -54
  398. package/dist/files/LazyFileData.js.map +0 -1
  399. package/dist/files/LazyFileData.spec.js +0 -27
  400. package/dist/files/LazyFileData.spec.js.map +0 -1
  401. package/dist/parser/tests/expression/TypeExpression.spec.js +0 -127
  402. package/dist/parser/tests/expression/TypeExpression.spec.js.map +0 -1
  403. package/dist/types/AssociativeArrayType.d.ts +0 -11
  404. package/dist/types/AssociativeArrayType.js +0 -52
  405. package/dist/types/AssociativeArrayType.js.map +0 -1
  406. package/dist/types/BaseFunctionType.d.ts +0 -9
  407. package/dist/types/BaseFunctionType.js +0 -25
  408. package/dist/types/BaseFunctionType.js.map +0 -1
  409. package/dist/types/BscTypeKind.d.ts +0 -25
  410. package/dist/types/BscTypeKind.js +0 -30
  411. package/dist/types/BscTypeKind.js.map +0 -1
  412. package/dist/types/BuiltInInterfaceAdder.d.ts +0 -23
  413. package/dist/types/BuiltInInterfaceAdder.js +0 -160
  414. package/dist/types/BuiltInInterfaceAdder.js.map +0 -1
  415. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +0 -1
  416. package/dist/types/BuiltInInterfaceAdder.spec.js +0 -116
  417. package/dist/types/BuiltInInterfaceAdder.spec.js.map +0 -1
  418. package/dist/types/ClassType.d.ts +0 -17
  419. package/dist/types/ClassType.js +0 -58
  420. package/dist/types/ClassType.js.map +0 -1
  421. package/dist/types/ClassType.spec.d.ts +0 -1
  422. package/dist/types/ClassType.spec.js +0 -77
  423. package/dist/types/ClassType.spec.js.map +0 -1
  424. package/dist/types/ComponentType.d.ts +0 -26
  425. package/dist/types/ComponentType.js +0 -83
  426. package/dist/types/ComponentType.js.map +0 -1
  427. package/dist/types/EnumType.d.ts +0 -40
  428. package/dist/types/EnumType.js +0 -81
  429. package/dist/types/EnumType.js.map +0 -1
  430. package/dist/types/EnumType.spec.d.ts +0 -1
  431. package/dist/types/EnumType.spec.js +0 -33
  432. package/dist/types/EnumType.spec.js.map +0 -1
  433. package/dist/types/InheritableType.d.ts +0 -28
  434. package/dist/types/InheritableType.js +0 -152
  435. package/dist/types/InheritableType.js.map +0 -1
  436. package/dist/types/NamespaceType.d.ts +0 -12
  437. package/dist/types/NamespaceType.js +0 -28
  438. package/dist/types/NamespaceType.js.map +0 -1
  439. package/dist/types/ReferenceType.d.ts +0 -63
  440. package/dist/types/ReferenceType.js +0 -423
  441. package/dist/types/ReferenceType.js.map +0 -1
  442. package/dist/types/ReferenceType.spec.d.ts +0 -1
  443. package/dist/types/ReferenceType.spec.js +0 -137
  444. package/dist/types/ReferenceType.spec.js.map +0 -1
  445. package/dist/types/TypedFunctionType.d.ts +0 -33
  446. package/dist/types/TypedFunctionType.js +0 -106
  447. package/dist/types/TypedFunctionType.js.map +0 -1
  448. package/dist/types/TypedFunctionType.spec.d.ts +0 -1
  449. package/dist/types/TypedFunctionType.spec.js +0 -122
  450. package/dist/types/TypedFunctionType.spec.js.map +0 -1
  451. package/dist/types/UnionType.d.ts +0 -20
  452. package/dist/types/UnionType.js +0 -123
  453. package/dist/types/UnionType.js.map +0 -1
  454. package/dist/types/UnionType.spec.d.ts +0 -1
  455. package/dist/types/UnionType.spec.js +0 -130
  456. package/dist/types/UnionType.spec.js.map +0 -1
  457. package/dist/types/helper.spec.d.ts +0 -1
  458. package/dist/types/helper.spec.js +0 -145
  459. package/dist/types/helper.spec.js.map +0 -1
  460. package/dist/types/helpers.d.ts +0 -24
  461. package/dist/types/helpers.js +0 -178
  462. package/dist/types/helpers.js.map +0 -1
  463. package/dist/types/index.d.ts +0 -22
  464. package/dist/types/index.js +0 -39
  465. package/dist/types/index.js.map +0 -1
  466. /package/dist/astUtils/{Editor.spec.d.ts → AstEditor.spec.d.ts} +0 -0
  467. /package/dist/bscPlugin/{completions/CompletionsProcessor.spec.d.ts → definition/DefinitionProvider.spec.d.ts} +0 -0
  468. /package/dist/bscPlugin/{serialize/BslibInjector.spec.d.ts → references/ReferencesProvider.spec.d.ts} +0 -0
  469. /package/dist/bscPlugin/{transpile/BrsFileTranspileProcessor.spec.d.ts → symbols/DocumentSymbolProcessor.spec.d.ts} +0 -0
  470. /package/dist/bscPlugin/{validation/ScopeValidator.spec.d.ts → symbols/WorkspaceSymbolProcessor.spec.d.ts} +0 -0
  471. /package/dist/{files/LazyFileData.spec.d.ts → bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts} +0 -0
  472. /package/dist/{parser/tests/expression/TypeExpression.spec.d.ts → types/FunctionType.spec.d.ts} +0 -0
@@ -1,34 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.FieldStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
3
+ exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.ClassFieldStatement = exports.FieldStatement = exports.ClassMethodStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
4
4
  const TokenKind_1 = require("../lexer/TokenKind");
5
5
  const Expression_1 = require("./Expression");
6
6
  const util_1 = require("../util");
7
7
  const Parser_1 = require("./Parser");
8
8
  const visitors_1 = require("../astUtils/visitors");
9
9
  const reflection_1 = require("../astUtils/reflection");
10
- const interfaces_1 = require("../interfaces");
11
- const SymbolTable_1 = require("../SymbolTable");
12
10
  const creators_1 = require("../astUtils/creators");
13
11
  const DynamicType_1 = require("../types/DynamicType");
14
- const SymbolTable_2 = require("../SymbolTable");
12
+ const SymbolTable_1 = require("../SymbolTable");
15
13
  const AstNode_1 = require("./AstNode");
16
- const AstNode_2 = require("./AstNode");
17
- const ClassType_1 = require("../types/ClassType");
18
- const EnumType_1 = require("../types/EnumType");
19
- const NamespaceType_1 = require("../types/NamespaceType");
20
- const InterfaceType_1 = require("../types/InterfaceType");
21
- const VoidType_1 = require("../types/VoidType");
22
- const TypedFunctionType_1 = require("../types/TypedFunctionType");
23
- class EmptyStatement extends AstNode_2.Statement {
14
+ class EmptyStatement extends AstNode_1.Statement {
24
15
  constructor(
25
16
  /**
26
17
  * Create a negative range to indicate this is an interpolated location
27
18
  */
28
- range = creators_1.interpolatedRange) {
19
+ range = undefined) {
29
20
  super();
30
21
  this.range = range;
31
- this.kind = AstNode_1.AstNodeKind.EmptyStatement;
32
22
  }
33
23
  transpile(state) {
34
24
  return [];
@@ -41,12 +31,11 @@ exports.EmptyStatement = EmptyStatement;
41
31
  /**
42
32
  * This is a top-level statement. Consider this the root of the AST
43
33
  */
44
- class Body extends AstNode_2.Statement {
34
+ class Body extends AstNode_1.Statement {
45
35
  constructor(statements = []) {
46
36
  super();
47
37
  this.statements = statements;
48
- this.kind = AstNode_1.AstNodeKind.Body;
49
- this.symbolTable = new SymbolTable_2.SymbolTable('Body', () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
38
+ this.symbolTable = new SymbolTable_1.SymbolTable('Body', () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
50
39
  }
51
40
  get range() {
52
41
  var _a;
@@ -54,6 +43,7 @@ class Body extends AstNode_2.Statement {
54
43
  return util_1.util.createBoundingRange(...((_a = this.statements) !== null && _a !== void 0 ? _a : []));
55
44
  }
56
45
  transpile(state) {
46
+ var _a, _b;
57
47
  let result = [];
58
48
  for (let i = 0; i < this.statements.length; i++) {
59
49
  let statement = this.statements[i];
@@ -63,20 +53,20 @@ class Body extends AstNode_2.Statement {
63
53
  //this is the first statement. do nothing related to spacing and newlines
64
54
  //if comment is on same line as prior sibling
65
55
  }
66
- else if ((0, reflection_1.isCommentStatement)(statement) && previousStatement && statement.range.start.line === previousStatement.range.end.line) {
56
+ else if ((0, reflection_1.isCommentStatement)(statement) && previousStatement && ((_a = statement.range) === null || _a === void 0 ? void 0 : _a.start.line) === ((_b = previousStatement.range) === null || _b === void 0 ? void 0 : _b.end.line)) {
67
57
  result.push(' ');
68
58
  //add double newline if this is a comment, and next is a function
69
59
  }
70
60
  else if ((0, reflection_1.isCommentStatement)(statement) && nextStatement && (0, reflection_1.isFunctionStatement)(nextStatement)) {
71
- result.push('\n\n');
61
+ result.push(state.newline, state.newline);
72
62
  //add double newline if is function not preceeded by a comment
73
63
  }
74
64
  else if ((0, reflection_1.isFunctionStatement)(statement) && previousStatement && !((0, reflection_1.isCommentStatement)(previousStatement))) {
75
- result.push('\n\n');
65
+ result.push(state.newline, state.newline);
76
66
  }
77
67
  else {
78
68
  //separate statements by a single newline
79
- result.push('\n');
69
+ result.push(state.newline);
80
70
  }
81
71
  result.push(...statement.transpile(state));
82
72
  }
@@ -99,17 +89,21 @@ class Body extends AstNode_2.Statement {
99
89
  }
100
90
  }
101
91
  exports.Body = Body;
102
- class AssignmentStatement extends AstNode_2.Statement {
103
- constructor(equals, name, value, asToken, typeExpression) {
92
+ class AssignmentStatement extends AstNode_1.Statement {
93
+ constructor(equals, name, value) {
104
94
  super();
105
95
  this.equals = equals;
106
96
  this.name = name;
107
97
  this.value = value;
108
- this.asToken = asToken;
109
- this.typeExpression = typeExpression;
110
- this.kind = AstNode_1.AstNodeKind.AssignmentStatement;
111
98
  this.range = util_1.util.createBoundingRange(name, equals, value);
112
99
  }
100
+ /**
101
+ * Get the name of the wrapping namespace (if it exists)
102
+ * @deprecated use `.findAncestor(isFunctionExpression)` instead.
103
+ */
104
+ get containingFunction() {
105
+ return this.findAncestor(reflection_1.isFunctionExpression);
106
+ }
113
107
  transpile(state) {
114
108
  var _a, _b;
115
109
  //if the value is a compound assignment, just transpile the expression itself
@@ -128,27 +122,16 @@ class AssignmentStatement extends AstNode_2.Statement {
128
122
  }
129
123
  walk(visitor, options) {
130
124
  if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
131
- //TODO: Walk TypeExpression. We need to decide how to implement types on assignments
132
125
  (0, visitors_1.walk)(this, 'value', visitor, options);
133
126
  }
134
127
  }
135
- getType(options) {
136
- // TODO: Do we still need this.typeExpression?
137
- var _a;
138
- // Note: compound assignments (eg. +=) are internally dealt with via the RHS being a BinaryExpression
139
- // so this.value will be a BinaryExpression, and BinaryExpressions can figure out their own types
140
- const rhs = this.value.getType(Object.assign(Object.assign({}, options), { typeChain: undefined }));
141
- (_a = options.typeChain) === null || _a === void 0 ? void 0 : _a.push(new interfaces_1.TypeChainEntry(this.name.text, rhs, options.flags, this.name.range));
142
- return rhs;
143
- }
144
128
  }
145
129
  exports.AssignmentStatement = AssignmentStatement;
146
- class Block extends AstNode_2.Statement {
130
+ class Block extends AstNode_1.Statement {
147
131
  constructor(statements, startingRange) {
148
132
  super();
149
133
  this.statements = statements;
150
134
  this.startingRange = startingRange;
151
- this.kind = AstNode_1.AstNodeKind.Block;
152
135
  this.range = util_1.util.createBoundingRange({ range: this.startingRange }, ...(statements !== null && statements !== void 0 ? statements : []));
153
136
  }
154
137
  transpile(state) {
@@ -182,11 +165,10 @@ class Block extends AstNode_2.Statement {
182
165
  }
183
166
  }
184
167
  exports.Block = Block;
185
- class ExpressionStatement extends AstNode_2.Statement {
168
+ class ExpressionStatement extends AstNode_1.Statement {
186
169
  constructor(expression) {
187
170
  super();
188
171
  this.expression = expression;
189
- this.kind = AstNode_1.AstNodeKind.ExpressionStatement;
190
172
  this.range = this.expression.range;
191
173
  }
192
174
  transpile(state) {
@@ -199,12 +181,11 @@ class ExpressionStatement extends AstNode_2.Statement {
199
181
  }
200
182
  }
201
183
  exports.ExpressionStatement = ExpressionStatement;
202
- class CommentStatement extends AstNode_2.Statement {
184
+ class CommentStatement extends AstNode_1.Statement {
203
185
  constructor(comments) {
204
186
  var _a;
205
187
  super();
206
188
  this.comments = comments;
207
- this.kind = AstNode_1.AstNodeKind.CommentStatement;
208
189
  this.visitMode = visitors_1.InternalWalkMode.visitStatements | visitors_1.InternalWalkMode.visitExpressions;
209
190
  if (((_a = this.comments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
210
191
  this.range = util_1.util.createBoundingRange(...this.comments);
@@ -223,7 +204,7 @@ class CommentStatement extends AstNode_2.Statement {
223
204
  result.push(state.transpileToken(comment));
224
205
  //add newline for all except final comment
225
206
  if (i < this.comments.length - 1) {
226
- result.push('\n');
207
+ result.push(state.newline);
227
208
  }
228
209
  }
229
210
  return result;
@@ -236,11 +217,10 @@ class CommentStatement extends AstNode_2.Statement {
236
217
  }
237
218
  }
238
219
  exports.CommentStatement = CommentStatement;
239
- class ExitForStatement extends AstNode_2.Statement {
220
+ class ExitForStatement extends AstNode_1.Statement {
240
221
  constructor(tokens) {
241
222
  super();
242
223
  this.tokens = tokens;
243
- this.kind = AstNode_1.AstNodeKind.ExitForStatement;
244
224
  this.range = this.tokens.exitFor.range;
245
225
  }
246
226
  transpile(state) {
@@ -253,11 +233,10 @@ class ExitForStatement extends AstNode_2.Statement {
253
233
  }
254
234
  }
255
235
  exports.ExitForStatement = ExitForStatement;
256
- class ExitWhileStatement extends AstNode_2.Statement {
236
+ class ExitWhileStatement extends AstNode_1.Statement {
257
237
  constructor(tokens) {
258
238
  super();
259
239
  this.tokens = tokens;
260
- this.kind = AstNode_1.AstNodeKind.ExitWhileStatement;
261
240
  this.range = this.tokens.exitWhile.range;
262
241
  }
263
242
  transpile(state) {
@@ -270,12 +249,11 @@ class ExitWhileStatement extends AstNode_2.Statement {
270
249
  }
271
250
  }
272
251
  exports.ExitWhileStatement = ExitWhileStatement;
273
- class FunctionStatement extends AstNode_2.Statement {
252
+ class FunctionStatement extends AstNode_1.Statement {
274
253
  constructor(name, func) {
275
254
  super();
276
255
  this.name = name;
277
256
  this.func = func;
278
- this.kind = AstNode_1.AstNodeKind.FunctionStatement;
279
257
  this.range = this.func.range;
280
258
  }
281
259
  /**
@@ -293,8 +271,13 @@ class FunctionStatement extends AstNode_2.Statement {
293
271
  return this.name.text;
294
272
  }
295
273
  }
296
- getLeadingTrivia() {
297
- return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
274
+ /**
275
+ * Get the name of the wrapping namespace (if it exists)
276
+ * @deprecated use `.findAncestor(isNamespaceStatement)` instead.
277
+ */
278
+ get namespaceName() {
279
+ var _a;
280
+ return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
298
281
  }
299
282
  transpile(state) {
300
283
  //create a fake token using the full transpiled name
@@ -315,15 +298,9 @@ class FunctionStatement extends AstNode_2.Statement {
315
298
  (0, visitors_1.walk)(this, 'func', visitor, options);
316
299
  }
317
300
  }
318
- getType(options) {
319
- var _a;
320
- const funcExprType = this.func.getType(options);
321
- funcExprType.setName((_a = this.name) === null || _a === void 0 ? void 0 : _a.text);
322
- return funcExprType;
323
- }
324
301
  }
325
302
  exports.FunctionStatement = FunctionStatement;
326
- class IfStatement extends AstNode_2.Statement {
303
+ class IfStatement extends AstNode_1.Statement {
327
304
  constructor(tokens, condition, thenBranch, elseBranch, isInline) {
328
305
  super();
329
306
  this.tokens = tokens;
@@ -331,7 +308,6 @@ class IfStatement extends AstNode_2.Statement {
331
308
  this.thenBranch = thenBranch;
332
309
  this.elseBranch = elseBranch;
333
310
  this.isInline = isInline;
334
- this.kind = AstNode_1.AstNodeKind.IfStatement;
335
311
  this.range = util_1.util.createBoundingRange(tokens.if, condition, tokens.then, thenBranch, tokens.else, elseBranch, tokens.endIf);
336
312
  }
337
313
  transpile(state) {
@@ -410,12 +386,11 @@ class IfStatement extends AstNode_2.Statement {
410
386
  }
411
387
  }
412
388
  exports.IfStatement = IfStatement;
413
- class IncrementStatement extends AstNode_2.Statement {
389
+ class IncrementStatement extends AstNode_1.Statement {
414
390
  constructor(value, operator) {
415
391
  super();
416
392
  this.value = value;
417
393
  this.operator = operator;
418
- this.kind = AstNode_1.AstNodeKind.IncrementStatement;
419
394
  this.range = util_1.util.createBoundingRange(value, operator);
420
395
  }
421
396
  transpile(state) {
@@ -434,7 +409,7 @@ exports.IncrementStatement = IncrementStatement;
434
409
  /**
435
410
  * Represents a `print` statement within BrightScript.
436
411
  */
437
- class PrintStatement extends AstNode_2.Statement {
412
+ class PrintStatement extends AstNode_1.Statement {
438
413
  /**
439
414
  * Creates a new internal representation of a BrightScript `print` statement.
440
415
  * @param tokens the tokens for this statement
@@ -445,7 +420,6 @@ class PrintStatement extends AstNode_2.Statement {
445
420
  super();
446
421
  this.tokens = tokens;
447
422
  this.expressions = expressions;
448
- this.kind = AstNode_1.AstNodeKind.PrintStatement;
449
423
  this.range = util_1.util.createBoundingRange(tokens.print, ...(expressions !== null && expressions !== void 0 ? expressions : []));
450
424
  }
451
425
  transpile(state) {
@@ -477,7 +451,7 @@ class PrintStatement extends AstNode_2.Statement {
477
451
  }
478
452
  }
479
453
  exports.PrintStatement = PrintStatement;
480
- class DimStatement extends AstNode_2.Statement {
454
+ class DimStatement extends AstNode_1.Statement {
481
455
  constructor(dimToken, identifier, openingSquare, dimensions, closingSquare) {
482
456
  super();
483
457
  this.dimToken = dimToken;
@@ -485,7 +459,6 @@ class DimStatement extends AstNode_2.Statement {
485
459
  this.openingSquare = openingSquare;
486
460
  this.dimensions = dimensions;
487
461
  this.closingSquare = closingSquare;
488
- this.kind = AstNode_1.AstNodeKind.DimStatement;
489
462
  this.range = util_1.util.createBoundingRange(dimToken, identifier, openingSquare, ...(dimensions !== null && dimensions !== void 0 ? dimensions : []), closingSquare);
490
463
  }
491
464
  transpile(state) {
@@ -505,18 +478,17 @@ class DimStatement extends AstNode_2.Statement {
505
478
  return result;
506
479
  }
507
480
  walk(visitor, options) {
508
- var _a;
509
- if (((_a = this.dimensions) === null || _a === void 0 ? void 0 : _a.length) > 0 && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
481
+ var _a, _b;
482
+ if (((_a = this.dimensions) === null || _a === void 0 ? void 0 : _a.length) !== undefined && ((_b = this.dimensions) === null || _b === void 0 ? void 0 : _b.length) > 0 && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
510
483
  (0, visitors_1.walkArray)(this.dimensions, visitor, options, this);
511
484
  }
512
485
  }
513
486
  }
514
487
  exports.DimStatement = DimStatement;
515
- class GotoStatement extends AstNode_2.Statement {
488
+ class GotoStatement extends AstNode_1.Statement {
516
489
  constructor(tokens) {
517
490
  super();
518
491
  this.tokens = tokens;
519
- this.kind = AstNode_1.AstNodeKind.GotoStatement;
520
492
  this.range = util_1.util.createBoundingRange(tokens.goto, tokens.label);
521
493
  }
522
494
  transpile(state) {
@@ -531,16 +503,12 @@ class GotoStatement extends AstNode_2.Statement {
531
503
  }
532
504
  }
533
505
  exports.GotoStatement = GotoStatement;
534
- class LabelStatement extends AstNode_2.Statement {
506
+ class LabelStatement extends AstNode_1.Statement {
535
507
  constructor(tokens) {
536
508
  super();
537
509
  this.tokens = tokens;
538
- this.kind = AstNode_1.AstNodeKind.LabelStatement;
539
510
  this.range = util_1.util.createBoundingRange(tokens.identifier, tokens.colon);
540
511
  }
541
- getLeadingTrivia() {
542
- return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.identifier.leadingTrivia);
543
- }
544
512
  transpile(state) {
545
513
  return [
546
514
  state.transpileToken(this.tokens.identifier),
@@ -552,12 +520,11 @@ class LabelStatement extends AstNode_2.Statement {
552
520
  }
553
521
  }
554
522
  exports.LabelStatement = LabelStatement;
555
- class ReturnStatement extends AstNode_2.Statement {
523
+ class ReturnStatement extends AstNode_1.Statement {
556
524
  constructor(tokens, value) {
557
525
  super();
558
526
  this.tokens = tokens;
559
527
  this.value = value;
560
- this.kind = AstNode_1.AstNodeKind.ReturnStatement;
561
528
  this.range = util_1.util.createBoundingRange(tokens.return, value);
562
529
  }
563
530
  transpile(state) {
@@ -576,11 +543,10 @@ class ReturnStatement extends AstNode_2.Statement {
576
543
  }
577
544
  }
578
545
  exports.ReturnStatement = ReturnStatement;
579
- class EndStatement extends AstNode_2.Statement {
546
+ class EndStatement extends AstNode_1.Statement {
580
547
  constructor(tokens) {
581
548
  super();
582
549
  this.tokens = tokens;
583
- this.kind = AstNode_1.AstNodeKind.EndStatement;
584
550
  this.range = tokens.end.range;
585
551
  }
586
552
  transpile(state) {
@@ -593,12 +559,11 @@ class EndStatement extends AstNode_2.Statement {
593
559
  }
594
560
  }
595
561
  exports.EndStatement = EndStatement;
596
- class StopStatement extends AstNode_2.Statement {
562
+ class StopStatement extends AstNode_1.Statement {
597
563
  constructor(tokens) {
598
564
  var _a;
599
565
  super();
600
566
  this.tokens = tokens;
601
- this.kind = AstNode_1.AstNodeKind.StopStatement;
602
567
  this.range = (_a = tokens === null || tokens === void 0 ? void 0 : tokens.stop) === null || _a === void 0 ? void 0 : _a.range;
603
568
  }
604
569
  transpile(state) {
@@ -611,7 +576,7 @@ class StopStatement extends AstNode_2.Statement {
611
576
  }
612
577
  }
613
578
  exports.StopStatement = StopStatement;
614
- class ForStatement extends AstNode_2.Statement {
579
+ class ForStatement extends AstNode_1.Statement {
615
580
  constructor(forToken, counterDeclaration, toToken, finalValue, body, endForToken, stepToken, increment) {
616
581
  super();
617
582
  this.forToken = forToken;
@@ -622,7 +587,6 @@ class ForStatement extends AstNode_2.Statement {
622
587
  this.endForToken = endForToken;
623
588
  this.stepToken = stepToken;
624
589
  this.increment = increment;
625
- this.kind = AstNode_1.AstNodeKind.ForStatement;
626
590
  this.range = util_1.util.createBoundingRange(forToken, counterDeclaration, toToken, finalValue, stepToken, increment, body, endForToken);
627
591
  }
628
592
  transpile(state) {
@@ -663,14 +627,13 @@ class ForStatement extends AstNode_2.Statement {
663
627
  }
664
628
  }
665
629
  exports.ForStatement = ForStatement;
666
- class ForEachStatement extends AstNode_2.Statement {
630
+ class ForEachStatement extends AstNode_1.Statement {
667
631
  constructor(tokens, item, target, body) {
668
632
  super();
669
633
  this.tokens = tokens;
670
634
  this.item = item;
671
635
  this.target = target;
672
636
  this.body = body;
673
- this.kind = AstNode_1.AstNodeKind.ForEachStatement;
674
637
  this.range = util_1.util.createBoundingRange(tokens.forEach, item, tokens.in, target, body, tokens.endFor);
675
638
  }
676
639
  transpile(state) {
@@ -703,13 +666,12 @@ class ForEachStatement extends AstNode_2.Statement {
703
666
  }
704
667
  }
705
668
  exports.ForEachStatement = ForEachStatement;
706
- class WhileStatement extends AstNode_2.Statement {
669
+ class WhileStatement extends AstNode_1.Statement {
707
670
  constructor(tokens, condition, body) {
708
671
  super();
709
672
  this.tokens = tokens;
710
673
  this.condition = condition;
711
674
  this.body = body;
712
- this.kind = AstNode_1.AstNodeKind.WhileStatement;
713
675
  this.range = util_1.util.createBoundingRange(tokens.while, condition, body, tokens.endWhile);
714
676
  }
715
677
  transpile(state) {
@@ -738,14 +700,13 @@ class WhileStatement extends AstNode_2.Statement {
738
700
  }
739
701
  }
740
702
  exports.WhileStatement = WhileStatement;
741
- class DottedSetStatement extends AstNode_2.Statement {
703
+ class DottedSetStatement extends AstNode_1.Statement {
742
704
  constructor(obj, name, value, dot) {
743
705
  super();
744
706
  this.obj = obj;
745
707
  this.name = name;
746
708
  this.value = value;
747
709
  this.dot = dot;
748
- this.kind = AstNode_1.AstNodeKind.DottedSetStatement;
749
710
  this.range = util_1.util.createBoundingRange(obj, dot, name, value);
750
711
  }
751
712
  transpile(state) {
@@ -775,54 +736,59 @@ class DottedSetStatement extends AstNode_2.Statement {
775
736
  }
776
737
  }
777
738
  exports.DottedSetStatement = DottedSetStatement;
778
- class IndexedSetStatement extends AstNode_2.Statement {
779
- constructor(obj, index, value, openingSquare, closingSquare) {
739
+ class IndexedSetStatement extends AstNode_1.Statement {
740
+ constructor(obj, index, value, openingSquare, closingSquare, additionalIndexes) {
741
+ var _a;
780
742
  super();
781
743
  this.obj = obj;
782
744
  this.index = index;
783
745
  this.value = value;
784
746
  this.openingSquare = openingSquare;
785
747
  this.closingSquare = closingSquare;
786
- this.kind = AstNode_1.AstNodeKind.IndexedSetStatement;
748
+ this.additionalIndexes = additionalIndexes;
787
749
  this.range = util_1.util.createBoundingRange(obj, openingSquare, index, closingSquare, value);
750
+ (_a = this.additionalIndexes) !== null && _a !== void 0 ? _a : (this.additionalIndexes = []);
788
751
  }
789
752
  transpile(state) {
790
- var _a, _b;
753
+ var _a, _b, _c, _d;
791
754
  //if the value is a component assignment, don't add the obj, index or operator...the expression will handle that
792
755
  if (TokenKind_1.CompoundAssignmentOperators.includes((_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.operator) === null || _b === void 0 ? void 0 : _b.kind)) {
793
756
  return this.value.transpile(state);
794
757
  }
795
758
  else {
796
- return [
797
- //obj
798
- ...this.obj.transpile(state),
799
- // [
800
- state.transpileToken(this.openingSquare),
801
- // index
802
- ...this.index.transpile(state),
803
- // ]
804
- state.transpileToken(this.closingSquare),
805
- // =
806
- ' = ',
807
- // value
808
- ...this.value.transpile(state)
809
- ];
759
+ const result = [];
760
+ result.push(
761
+ //obj
762
+ ...this.obj.transpile(state),
763
+ // [
764
+ state.transpileToken(this.openingSquare));
765
+ const indexes = [this.index, ...(_c = this.additionalIndexes) !== null && _c !== void 0 ? _c : []];
766
+ for (let i = 0; i < indexes.length; i++) {
767
+ //add comma between indexes
768
+ if (i > 0) {
769
+ result.push(', ');
770
+ }
771
+ let index = indexes[i];
772
+ result.push(...((_d = index === null || index === void 0 ? void 0 : index.transpile(state)) !== null && _d !== void 0 ? _d : []));
773
+ }
774
+ result.push(state.transpileToken(this.closingSquare), ' = ', ...this.value.transpile(state));
775
+ return result;
810
776
  }
811
777
  }
812
778
  walk(visitor, options) {
813
779
  if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
814
780
  (0, visitors_1.walk)(this, 'obj', visitor, options);
815
781
  (0, visitors_1.walk)(this, 'index', visitor, options);
782
+ (0, visitors_1.walkArray)(this.additionalIndexes, visitor, options, this);
816
783
  (0, visitors_1.walk)(this, 'value', visitor, options);
817
784
  }
818
785
  }
819
786
  }
820
787
  exports.IndexedSetStatement = IndexedSetStatement;
821
- class LibraryStatement extends AstNode_2.Statement {
788
+ class LibraryStatement extends AstNode_1.Statement {
822
789
  constructor(tokens) {
823
790
  super();
824
791
  this.tokens = tokens;
825
- this.kind = AstNode_1.AstNodeKind.LibraryStatement;
826
792
  this.range = util_1.util.createBoundingRange(this.tokens.library, this.tokens.filePath);
827
793
  }
828
794
  transpile(state) {
@@ -842,47 +808,36 @@ class LibraryStatement extends AstNode_2.Statement {
842
808
  }
843
809
  }
844
810
  exports.LibraryStatement = LibraryStatement;
845
- class NamespaceStatement extends AstNode_2.Statement {
846
- constructor(keyword, nameExpression, body, endKeyword) {
811
+ class NamespaceStatement extends AstNode_1.Statement {
812
+ constructor(keyword,
813
+ // this should technically only be a VariableExpression or DottedGetExpression, but that can be enforced elsewhere
814
+ nameExpression, body, endKeyword) {
847
815
  super();
848
816
  this.keyword = keyword;
849
817
  this.nameExpression = nameExpression;
850
818
  this.body = body;
851
819
  this.endKeyword = endKeyword;
852
- this.kind = AstNode_1.AstNodeKind.NamespaceStatement;
853
820
  this.name = this.getName(Parser_1.ParseMode.BrighterScript);
854
- this.symbolTable = new SymbolTable_2.SymbolTable(`NamespaceStatement: '${this.name}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
821
+ this.symbolTable = new SymbolTable_1.SymbolTable(`NamespaceStatement: '${this.name}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
855
822
  }
856
823
  get range() {
857
824
  return this.cacheRange();
858
825
  }
859
826
  cacheRange() {
860
- var _a;
861
827
  if (!this._range) {
862
- this._range = (_a = util_1.util.createBoundingRange(this.keyword, this.nameExpression, this.body, this.endKeyword)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
828
+ this._range = util_1.util.createBoundingRange(this.keyword, this.nameExpression, this.body, this.endKeyword);
863
829
  }
864
830
  return this._range;
865
831
  }
866
832
  getName(parseMode) {
867
- var _a, _b;
868
- const sep = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
869
- let name = util_1.util.getAllDottedGetPartsAsString(this.nameExpression, parseMode);
870
- if (((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === AstNode_1.AstNodeKind.NamespaceStatement) {
871
- name = this.parent.parent.getName(parseMode) + sep + name;
833
+ const parentNamespace = this.findAncestor(reflection_1.isNamespaceStatement);
834
+ let name = this.nameExpression.getName(parseMode);
835
+ if (parentNamespace) {
836
+ const sep = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
837
+ name = parentNamespace.getName(parseMode) + sep + name;
872
838
  }
873
839
  return name;
874
840
  }
875
- getLeadingTrivia() {
876
- return util_1.util.concatAnnotationLeadingTrivia(this, this.keyword.leadingTrivia);
877
- }
878
- getNameParts() {
879
- var _a, _b;
880
- let parts = util_1.util.getAllDottedGetParts(this.nameExpression);
881
- if (((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === AstNode_1.AstNodeKind.NamespaceStatement) {
882
- parts = this.parent.parent.getNameParts().concat(parts);
883
- }
884
- return parts;
885
- }
886
841
  transpile(state) {
887
842
  //namespaces don't actually have any real content, so just transpile their bodies
888
843
  return this.body.transpile(state);
@@ -907,24 +862,21 @@ class NamespaceStatement extends AstNode_2.Statement {
907
862
  (0, visitors_1.walk)(this, 'body', visitor, options);
908
863
  }
909
864
  }
910
- getType(options) {
911
- const resultType = new NamespaceType_1.NamespaceType(this.name);
912
- return resultType;
913
- }
914
865
  }
915
866
  exports.NamespaceStatement = NamespaceStatement;
916
- class ImportStatement extends AstNode_2.Statement {
867
+ class ImportStatement extends AstNode_1.Statement {
917
868
  constructor(importToken, filePathToken) {
918
869
  super();
919
870
  this.importToken = importToken;
920
871
  this.filePathToken = filePathToken;
921
- this.kind = AstNode_1.AstNodeKind.ImportStatement;
922
872
  this.range = util_1.util.createBoundingRange(importToken, filePathToken);
923
873
  if (this.filePathToken) {
924
874
  //remove quotes
925
875
  this.filePath = this.filePathToken.text.replace(/"/g, '');
926
- //adjust the range to exclude the quotes
927
- this.filePathToken.range = util_1.util.createRange(this.filePathToken.range.start.line, this.filePathToken.range.start.character + 1, this.filePathToken.range.end.line, this.filePathToken.range.end.character - 1);
876
+ if (this.filePathToken.range) {
877
+ //adjust the range to exclude the quotes
878
+ this.filePathToken.range = util_1.util.createRange(this.filePathToken.range.start.line, this.filePathToken.range.start.character + 1, this.filePathToken.range.end.line, this.filePathToken.range.end.character - 1);
879
+ }
928
880
  }
929
881
  }
930
882
  transpile(state) {
@@ -953,12 +905,11 @@ class ImportStatement extends AstNode_2.Statement {
953
905
  }
954
906
  }
955
907
  exports.ImportStatement = ImportStatement;
956
- class InterfaceStatement extends AstNode_2.Statement {
908
+ class InterfaceStatement extends AstNode_1.Statement {
957
909
  constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken) {
958
910
  super();
959
911
  this.parentInterfaceName = parentInterfaceName;
960
912
  this.body = body;
961
- this.kind = AstNode_1.AstNodeKind.InterfaceStatement;
962
913
  this.tokens = {};
963
914
  this.tokens.interface = interfaceToken;
964
915
  this.tokens.name = name;
@@ -966,18 +917,20 @@ class InterfaceStatement extends AstNode_2.Statement {
966
917
  this.tokens.endInterface = endInterfaceToken;
967
918
  this.range = util_1.util.createBoundingRange(this.tokens.interface, this.tokens.name, this.tokens.extends, this.parentInterfaceName, ...this.body, this.tokens.endInterface);
968
919
  }
920
+ /**
921
+ * Get the name of the wrapping namespace (if it exists)
922
+ * @deprecated use `.findAncestor(isNamespaceStatement)` instead.
923
+ */
924
+ get namespaceName() {
925
+ var _a;
926
+ return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
927
+ }
969
928
  get fields() {
970
929
  return this.body.filter(x => (0, reflection_1.isInterfaceFieldStatement)(x));
971
930
  }
972
931
  get methods() {
973
932
  return this.body.filter(x => (0, reflection_1.isInterfaceMethodStatement)(x));
974
933
  }
975
- hasParentInterface() {
976
- return !!this.parentInterfaceName;
977
- }
978
- getLeadingTrivia() {
979
- return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.interface.leadingTrivia);
980
- }
981
934
  /**
982
935
  * The name of the interface WITH its leading namespace (if applicable)
983
936
  */
@@ -1031,7 +984,7 @@ class InterfaceStatement extends AstNode_2.Statement {
1031
984
  result.push(...annotation.getTypedef(state), state.newline, state.indent());
1032
985
  }
1033
986
  result.push(this.tokens.interface.text, ' ', this.tokens.name.text);
1034
- const parentInterfaceName = (_b = this.parentInterfaceName) === null || _b === void 0 ? void 0 : _b.getName();
987
+ const parentInterfaceName = (_b = this.parentInterfaceName) === null || _b === void 0 ? void 0 : _b.getName(Parser_1.ParseMode.BrighterScript);
1035
988
  if (parentInterfaceName) {
1036
989
  result.push(' extends ', parentInterfaceName);
1037
990
  }
@@ -1060,43 +1013,22 @@ class InterfaceStatement extends AstNode_2.Statement {
1060
1013
  (0, visitors_1.walkArray)(this.body, visitor, options, this);
1061
1014
  }
1062
1015
  }
1063
- getType(options) {
1064
- var _a, _b, _c, _d;
1065
- const superIface = (_a = this.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.getType(options);
1066
- const resultType = new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), superIface);
1067
- for (const statement of this.methods) {
1068
- const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
1069
- const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
1070
- resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, memberType, flag);
1071
- }
1072
- for (const statement of this.fields) {
1073
- const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
1074
- const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
1075
- resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, memberType, flag);
1076
- }
1077
- (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(this.getName(Parser_1.ParseMode.BrighterScript), resultType, options.flags, this.range));
1078
- return resultType;
1079
- }
1080
1016
  }
1081
1017
  exports.InterfaceStatement = InterfaceStatement;
1082
- class InterfaceFieldStatement extends AstNode_2.Statement {
1083
- constructor(nameToken, asToken, typeExpression, optionalToken) {
1018
+ class InterfaceFieldStatement extends AstNode_1.Statement {
1019
+ constructor(nameToken, asToken, typeToken, type, optionalToken) {
1084
1020
  super();
1085
- this.typeExpression = typeExpression;
1086
- this.kind = AstNode_1.AstNodeKind.InterfaceFieldStatement;
1021
+ this.type = type;
1087
1022
  this.tokens = {};
1088
1023
  this.tokens.optional = optionalToken;
1089
1024
  this.tokens.name = nameToken;
1090
1025
  this.tokens.as = asToken;
1091
- this.range = util_1.util.createBoundingRange(this.tokens.optional, this.tokens.name, this.tokens.as, this.typeExpression);
1026
+ this.tokens.type = typeToken;
1027
+ this.range = util_1.util.createBoundingRange(optionalToken, nameToken, asToken, typeToken);
1092
1028
  }
1093
1029
  transpile(state) {
1094
1030
  throw new Error('Method not implemented.');
1095
1031
  }
1096
- getLeadingTrivia() {
1097
- var _a, _b;
1098
- return util_1.util.concatAnnotationLeadingTrivia(this, (_b = (_a = this.tokens.optional) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : this.tokens.name.leadingTrivia);
1099
- }
1100
1032
  get name() {
1101
1033
  return this.tokens.name.text;
1102
1034
  }
@@ -1104,12 +1036,10 @@ class InterfaceFieldStatement extends AstNode_2.Statement {
1104
1036
  return !!this.tokens.optional;
1105
1037
  }
1106
1038
  walk(visitor, options) {
1107
- if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
1108
- (0, visitors_1.walk)(this, 'typeExpression', visitor, options);
1109
- }
1039
+ //nothing to walk
1110
1040
  }
1111
1041
  getTypedef(state) {
1112
- var _a;
1042
+ var _a, _b, _c;
1113
1043
  const result = [];
1114
1044
  for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
1115
1045
  result.push(...annotation.getTypedef(state), state.newline, state.indent());
@@ -1118,25 +1048,18 @@ class InterfaceFieldStatement extends AstNode_2.Statement {
1118
1048
  result.push(this.tokens.optional.text, ' ');
1119
1049
  }
1120
1050
  result.push(this.tokens.name.text);
1121
- if (this.typeExpression) {
1122
- result.push(' as ', ...this.typeExpression.getTypedef(state));
1051
+ if (((_c = (_b = this.tokens.type) === null || _b === void 0 ? void 0 : _b.text) === null || _c === void 0 ? void 0 : _c.length) > 0) {
1052
+ result.push(' as ', this.tokens.type.text);
1123
1053
  }
1124
1054
  return result;
1125
1055
  }
1126
- getType(options) {
1127
- var _a, _b;
1128
- return (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(options)) !== null && _b !== void 0 ? _b : DynamicType_1.DynamicType.instance;
1129
- }
1130
1056
  }
1131
1057
  exports.InterfaceFieldStatement = InterfaceFieldStatement;
1132
- //TODO: there is much that is similar with this and FunctionExpression.
1133
- //It would be nice to refactor this so there is less duplicated code
1134
- class InterfaceMethodStatement extends AstNode_2.Statement {
1135
- constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeExpression, optionalToken) {
1058
+ class InterfaceMethodStatement extends AstNode_1.Statement {
1059
+ constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeToken, returnType, optionalToken) {
1136
1060
  super();
1137
1061
  this.params = params;
1138
- this.returnTypeExpression = returnTypeExpression;
1139
- this.kind = AstNode_1.AstNodeKind.InterfaceMethodStatement;
1062
+ this.returnType = returnType;
1140
1063
  this.tokens = {};
1141
1064
  this.tokens.optional = optionalToken;
1142
1065
  this.tokens.functionType = functionTypeToken;
@@ -1144,31 +1067,20 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
1144
1067
  this.tokens.leftParen = leftParen;
1145
1068
  this.tokens.rightParen = rightParen;
1146
1069
  this.tokens.as = asToken;
1070
+ this.tokens.returnType = returnTypeToken;
1147
1071
  }
1148
1072
  transpile(state) {
1149
1073
  throw new Error('Method not implemented.');
1150
1074
  }
1151
1075
  get range() {
1152
1076
  var _a;
1153
- return util_1.util.createBoundingRange(this.tokens.optional, this.tokens.functionType, this.tokens.name, this.tokens.leftParen, ...((_a = this.params) !== null && _a !== void 0 ? _a : []), this.tokens.rightParen, this.tokens.as, this.returnTypeExpression);
1154
- }
1155
- /**
1156
- * Get the name of this method.
1157
- */
1158
- getName(parseMode) {
1159
- return this.tokens.name.text;
1077
+ return util_1.util.createBoundingRange(this.tokens.optional, this.tokens.functionType, this.tokens.name, this.tokens.leftParen, ...((_a = this.params) !== null && _a !== void 0 ? _a : []), this.tokens.rightParen, this.tokens.as, this.tokens.returnType);
1160
1078
  }
1161
1079
  get isOptional() {
1162
1080
  return !!this.tokens.optional;
1163
1081
  }
1164
- getLeadingTrivia() {
1165
- var _a, _b;
1166
- return util_1.util.concatAnnotationLeadingTrivia(this, (_b = (_a = this.tokens.optional) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : this.tokens.functionType.leadingTrivia);
1167
- }
1168
1082
  walk(visitor, options) {
1169
- if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
1170
- (0, visitors_1.walk)(this, 'returnTypeExpression', visitor, options);
1171
- }
1083
+ //nothing to walk
1172
1084
  }
1173
1085
  getTypedef(state) {
1174
1086
  var _a, _b;
@@ -1187,48 +1099,27 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
1187
1099
  }
1188
1100
  const param = params[i];
1189
1101
  result.push(param.name.text);
1190
- if (param.typeExpression) {
1191
- result.push(' as ', ...param.typeExpression.getTypedef(state));
1102
+ const typeToken = param.typeToken;
1103
+ if (typeToken && typeToken.text.length > 0) {
1104
+ result.push(' as ', typeToken.text);
1192
1105
  }
1193
1106
  }
1194
1107
  result.push(')');
1195
- if (this.returnTypeExpression) {
1196
- result.push(' as ', ...this.returnTypeExpression.getTypedef(state));
1108
+ const returnTypeToken = this.tokens.returnType;
1109
+ if (returnTypeToken && returnTypeToken.text.length > 0) {
1110
+ result.push(' as ', returnTypeToken.text);
1197
1111
  }
1198
1112
  return result;
1199
1113
  }
1200
- getType(options) {
1201
- var _a, _b, _c;
1202
- //if there's a defined return type, use that
1203
- let returnType = (_a = this.returnTypeExpression) === null || _a === void 0 ? void 0 : _a.getType(options);
1204
- const isSub = this.tokens.functionType.kind === TokenKind_1.TokenKind.Sub;
1205
- //if we don't have a return type and this is a sub, set the return type to `void`. else use `dynamic`
1206
- if (!returnType) {
1207
- returnType = isSub ? VoidType_1.VoidType.instance : DynamicType_1.DynamicType.instance;
1208
- }
1209
- const resultType = new TypedFunctionType_1.TypedFunctionType(returnType);
1210
- resultType.isSub = isSub;
1211
- for (let param of this.params) {
1212
- resultType.addParameter(param.name.text, param.getType(options), !!param.defaultValue);
1213
- }
1214
- if (options.typeChain) {
1215
- // need Interface type for type chain
1216
- (_b = this.parent) === null || _b === void 0 ? void 0 : _b.getType(options);
1217
- }
1218
- let funcName = this.getName(Parser_1.ParseMode.BrighterScript);
1219
- resultType.setName(funcName);
1220
- (_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.flags, this.range));
1221
- return resultType;
1222
- }
1223
1114
  }
1224
1115
  exports.InterfaceMethodStatement = InterfaceMethodStatement;
1225
- class ClassStatement extends AstNode_2.Statement {
1116
+ class ClassStatement extends AstNode_1.Statement {
1226
1117
  constructor(classKeyword,
1227
1118
  /**
1228
1119
  * The name of the class (without namespace prefix)
1229
1120
  */
1230
1121
  name, body, end, extendsKeyword, parentClassName) {
1231
- var _a, _b, _c, _d;
1122
+ var _a, _b, _c;
1232
1123
  super();
1233
1124
  this.classKeyword = classKeyword;
1234
1125
  this.name = name;
@@ -1236,24 +1127,30 @@ class ClassStatement extends AstNode_2.Statement {
1236
1127
  this.end = end;
1237
1128
  this.extendsKeyword = extendsKeyword;
1238
1129
  this.parentClassName = parentClassName;
1239
- this.kind = AstNode_1.AstNodeKind.ClassStatement;
1240
1130
  this.memberMap = {};
1241
1131
  this.methods = [];
1242
1132
  this.fields = [];
1243
1133
  this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
1244
- this.symbolTable = new SymbolTable_2.SymbolTable(`ClassStatement: '${(_b = this.name) === null || _b === void 0 ? void 0 : _b.text}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
1245
1134
  for (let statement of this.body) {
1246
1135
  if ((0, reflection_1.isMethodStatement)(statement)) {
1247
1136
  this.methods.push(statement);
1248
- this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
1137
+ this.memberMap[(_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text.toLowerCase()] = statement;
1249
1138
  }
1250
1139
  else if ((0, reflection_1.isFieldStatement)(statement)) {
1251
1140
  this.fields.push(statement);
1252
- this.memberMap[(_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text.toLowerCase()] = statement;
1141
+ this.memberMap[(_c = statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
1253
1142
  }
1254
1143
  }
1255
1144
  this.range = util_1.util.createBoundingRange(classKeyword, name, extendsKeyword, parentClassName, ...(body !== null && body !== void 0 ? body : []), end);
1256
1145
  }
1146
+ /**
1147
+ * Get the name of the wrapping namespace (if it exists)
1148
+ * @deprecated use `.findAncestor(isNamespaceStatement)` instead.
1149
+ */
1150
+ get namespaceName() {
1151
+ var _a;
1152
+ return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
1153
+ }
1257
1154
  getName(parseMode) {
1258
1155
  var _a;
1259
1156
  const name = (_a = this.name) === null || _a === void 0 ? void 0 : _a.text;
@@ -1273,9 +1170,6 @@ class ClassStatement extends AstNode_2.Statement {
1273
1170
  return undefined;
1274
1171
  }
1275
1172
  }
1276
- getLeadingTrivia() {
1277
- return util_1.util.concatAnnotationLeadingTrivia(this, this.classKeyword.leadingTrivia);
1278
- }
1279
1173
  transpile(state) {
1280
1174
  let result = [];
1281
1175
  //make the builder
@@ -1294,7 +1188,7 @@ class ClassStatement extends AstNode_2.Statement {
1294
1188
  result.push('class ', this.name.text);
1295
1189
  if (this.extendsKeyword && this.parentClassName) {
1296
1190
  const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1297
- const fqName = util_1.util.getFullyQualifiedClassName(this.parentClassName.getName(), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript));
1191
+ const fqName = util_1.util.getFullyQualifiedClassName(this.parentClassName.getName(Parser_1.ParseMode.BrighterScript), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript));
1298
1192
  result.push(` extends ${fqName}`);
1299
1193
  }
1300
1194
  result.push(state.newline);
@@ -1331,9 +1225,9 @@ class ClassStatement extends AstNode_2.Statement {
1331
1225
  let stmt = this;
1332
1226
  while (stmt) {
1333
1227
  if (stmt.parentClassName) {
1334
- const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1228
+ const namespace = stmt.findAncestor(reflection_1.isNamespaceStatement);
1335
1229
  //find the parent class
1336
- stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
1230
+ stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(Parser_1.ParseMode.BrighterScript), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
1337
1231
  myIndex++;
1338
1232
  }
1339
1233
  else {
@@ -1362,7 +1256,7 @@ class ClassStatement extends AstNode_2.Statement {
1362
1256
  while (stmt) {
1363
1257
  if (stmt.parentClassName) {
1364
1258
  const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1365
- stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
1259
+ stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(Parser_1.ParseMode.BrighterScript), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
1366
1260
  ancestors.push(stmt);
1367
1261
  }
1368
1262
  else {
@@ -1513,23 +1407,6 @@ class ClassStatement extends AstNode_2.Statement {
1513
1407
  (0, visitors_1.walkArray)(this.body, visitor, options, this);
1514
1408
  }
1515
1409
  }
1516
- getType(options) {
1517
- var _a, _b, _c, _d;
1518
- const superClass = (_a = this.parentClassName) === null || _a === void 0 ? void 0 : _a.getType(options);
1519
- const resultType = new ClassType_1.ClassType(this.getName(Parser_1.ParseMode.BrighterScript), superClass);
1520
- for (const statement of this.methods) {
1521
- const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
1522
- const flag = SymbolTable_1.SymbolTypeFlag.runtime;
1523
- resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, funcType, flag);
1524
- }
1525
- for (const statement of this.fields) {
1526
- const fieldType = statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
1527
- const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
1528
- resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, fieldType, flag);
1529
- }
1530
- (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.flags, this.range));
1531
- return resultType;
1532
- }
1533
1410
  }
1534
1411
  exports.ClassStatement = ClassStatement;
1535
1412
  const accessModifiers = [
@@ -1541,7 +1418,6 @@ class MethodStatement extends FunctionStatement {
1541
1418
  constructor(modifiers, name, func, override) {
1542
1419
  super(name, func);
1543
1420
  this.override = override;
1544
- this.kind = AstNode_1.AstNodeKind.MethodStatement;
1545
1421
  this.modifiers = [];
1546
1422
  if (modifiers) {
1547
1423
  if (Array.isArray(modifiers)) {
@@ -1562,9 +1438,6 @@ class MethodStatement extends FunctionStatement {
1562
1438
  getName(parseMode) {
1563
1439
  return this.name.text;
1564
1440
  }
1565
- getLeadingTrivia() {
1566
- return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
1567
- }
1568
1441
  transpile(state) {
1569
1442
  if (this.name.text.toLowerCase() === 'new') {
1570
1443
  this.ensureSuperConstructorCall(state);
@@ -1622,10 +1495,11 @@ class MethodStatement extends FunctionStatement {
1622
1495
  }
1623
1496
  //check whether any calls to super exist
1624
1497
  let containsSuperCall = this.func.body.statements.findIndex((x) => {
1498
+ var _a;
1625
1499
  //is a call statement
1626
1500
  return (0, reflection_1.isExpressionStatement)(x) && (0, reflection_1.isCallExpression)(x.expression) &&
1627
1501
  //is a call to super
1628
- util_1.util.findBeginningVariableExpression(x.expression.callee).name.text.toLowerCase() === 'super';
1502
+ ((_a = util_1.util.findBeginningVariableExpression(x.expression.callee)) === null || _a === void 0 ? void 0 : _a.name.text.toLowerCase()) === 'super';
1629
1503
  }) !== -1;
1630
1504
  //if a call to super exists, quit here
1631
1505
  if (containsSuperCall) {
@@ -1637,22 +1511,19 @@ class MethodStatement extends FunctionStatement {
1637
1511
  text: 'super',
1638
1512
  isReserved: false,
1639
1513
  range: state.classStatement.name.range,
1640
- leadingWhitespace: '',
1641
- leadingTrivia: []
1514
+ leadingWhitespace: ''
1642
1515
  }), {
1643
1516
  kind: TokenKind_1.TokenKind.LeftParen,
1644
1517
  text: '(',
1645
1518
  isReserved: false,
1646
1519
  range: state.classStatement.name.range,
1647
- leadingWhitespace: '',
1648
- leadingTrivia: []
1520
+ leadingWhitespace: ''
1649
1521
  }, {
1650
1522
  kind: TokenKind_1.TokenKind.RightParen,
1651
1523
  text: ')',
1652
1524
  isReserved: false,
1653
1525
  range: state.classStatement.name.range,
1654
- leadingWhitespace: '',
1655
- leadingTrivia: []
1526
+ leadingWhitespace: ''
1656
1527
  }, []));
1657
1528
  state.editor.arrayUnshift(this.func.body.statements, superCall);
1658
1529
  }
@@ -1660,20 +1531,20 @@ class MethodStatement extends FunctionStatement {
1660
1531
  * Inject field initializers at the top of the `new` function (after any present `super()` call)
1661
1532
  */
1662
1533
  injectFieldInitializersForConstructor(state) {
1534
+ var _a, _b, _c;
1663
1535
  let startingIndex = state.classStatement.hasParentClass() ? 1 : 0;
1664
1536
  let newStatements = [];
1665
1537
  //insert the field initializers in order
1666
1538
  for (let field of state.classStatement.fields) {
1667
1539
  let thisQualifiedName = Object.assign({}, field.name);
1668
- thisQualifiedName.text = 'm.' + field.name.text;
1669
- const fieldAssignment = field.initialValue
1670
- ? new AssignmentStatement(field.equal, thisQualifiedName, field.initialValue)
1671
- : new AssignmentStatement((0, creators_1.createToken)(TokenKind_1.TokenKind.Equal, '=', field.name.range), thisQualifiedName,
1540
+ thisQualifiedName.text = 'm.' + ((_a = field.name) === null || _a === void 0 ? void 0 : _a.text);
1541
+ if (field.initialValue) {
1542
+ newStatements.push(new AssignmentStatement(field.equal, thisQualifiedName, field.initialValue));
1543
+ }
1544
+ else {
1672
1545
  //if there is no initial value, set the initial value to `invalid`
1673
- (0, creators_1.createInvalidLiteral)('invalid', field.name.range));
1674
- // Add parent so namespace lookups work
1675
- fieldAssignment.parent = state.classStatement;
1676
- newStatements.push(fieldAssignment);
1546
+ newStatements.push(new AssignmentStatement((0, creators_1.createToken)(TokenKind_1.TokenKind.Equal, '=', (_b = field.name) === null || _b === void 0 ? void 0 : _b.range), thisQualifiedName, (0, creators_1.createInvalidLiteral)('invalid', (_c = field.name) === null || _c === void 0 ? void 0 : _c.range)));
1547
+ }
1677
1548
  }
1678
1549
  state.editor.arraySplice(this.func.body.statements, startingIndex, 0, ...newStatements);
1679
1550
  }
@@ -1684,30 +1555,38 @@ class MethodStatement extends FunctionStatement {
1684
1555
  }
1685
1556
  }
1686
1557
  exports.MethodStatement = MethodStatement;
1687
- class FieldStatement extends AstNode_2.Statement {
1688
- constructor(accessModifier, name, as, typeExpression, equal, initialValue, optional) {
1558
+ /**
1559
+ * @deprecated use `MethodStatement`
1560
+ */
1561
+ class ClassMethodStatement extends MethodStatement {
1562
+ }
1563
+ exports.ClassMethodStatement = ClassMethodStatement;
1564
+ class FieldStatement extends AstNode_1.Statement {
1565
+ constructor(accessModifier, name, as, type, equal, initialValue, optional) {
1689
1566
  super();
1690
1567
  this.accessModifier = accessModifier;
1691
1568
  this.name = name;
1692
1569
  this.as = as;
1693
- this.typeExpression = typeExpression;
1570
+ this.type = type;
1694
1571
  this.equal = equal;
1695
1572
  this.initialValue = initialValue;
1696
1573
  this.optional = optional;
1697
- this.kind = AstNode_1.AstNodeKind.FieldStatement;
1698
- this.range = util_1.util.createBoundingRange(accessModifier, optional, name, as, typeExpression, equal, initialValue);
1574
+ this.range = util_1.util.createBoundingRange(accessModifier, name, as, type, equal, initialValue);
1699
1575
  }
1700
1576
  /**
1701
1577
  * Derive a ValueKind from the type token, or the initial value.
1702
1578
  * Defaults to `DynamicType`
1703
1579
  */
1704
- getType(options) {
1705
- var _a, _b, _c, _d;
1706
- return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.typetime }))) !== null && _b !== void 0 ? _b : (_c = this.initialValue) === null || _c === void 0 ? void 0 : _c.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.runtime }))) !== null && _d !== void 0 ? _d : DynamicType_1.DynamicType.instance;
1707
- }
1708
- getLeadingTrivia() {
1709
- var _a, _b, _c, _d, _e, _f;
1710
- return util_1.util.concatAnnotationLeadingTrivia(this, (_f = (_d = (_b = (_a = this.accessModifier) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : (_c = this.optional) === null || _c === void 0 ? void 0 : _c.leadingTrivia) !== null && _d !== void 0 ? _d : (_e = this.name) === null || _e === void 0 ? void 0 : _e.leadingTrivia) !== null && _f !== void 0 ? _f : []);
1580
+ getType() {
1581
+ if (this.type) {
1582
+ return util_1.util.tokenToBscType(this.type);
1583
+ }
1584
+ else if ((0, reflection_1.isLiteralExpression)(this.initialValue)) {
1585
+ return this.initialValue.type;
1586
+ }
1587
+ else {
1588
+ return new DynamicType_1.DynamicType();
1589
+ }
1711
1590
  }
1712
1591
  get isOptional() {
1713
1592
  return !!this.optional;
@@ -1722,7 +1601,7 @@ class FieldStatement extends AstNode_2.Statement {
1722
1601
  for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
1723
1602
  result.push(...annotation.getTypedef(state), state.newline, state.indent());
1724
1603
  }
1725
- let type = this.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1604
+ let type = this.getType();
1726
1605
  if ((0, reflection_1.isInvalidType)(type) || (0, reflection_1.isVoidType)(type)) {
1727
1606
  type = new DynamicType_1.DynamicType();
1728
1607
  }
@@ -1735,20 +1614,24 @@ class FieldStatement extends AstNode_2.Statement {
1735
1614
  return result;
1736
1615
  }
1737
1616
  walk(visitor, options) {
1738
- if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
1739
- (0, visitors_1.walk)(this, 'typeExpression', visitor, options);
1617
+ if (this.initialValue && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
1740
1618
  (0, visitors_1.walk)(this, 'initialValue', visitor, options);
1741
1619
  }
1742
1620
  }
1743
1621
  }
1744
1622
  exports.FieldStatement = FieldStatement;
1745
- class TryCatchStatement extends AstNode_2.Statement {
1623
+ /**
1624
+ * @deprecated use `FieldStatement`
1625
+ */
1626
+ class ClassFieldStatement extends FieldStatement {
1627
+ }
1628
+ exports.ClassFieldStatement = ClassFieldStatement;
1629
+ class TryCatchStatement extends AstNode_1.Statement {
1746
1630
  constructor(tokens, tryBranch, catchStatement) {
1747
1631
  super();
1748
1632
  this.tokens = tokens;
1749
1633
  this.tryBranch = tryBranch;
1750
1634
  this.catchStatement = catchStatement;
1751
- this.kind = AstNode_1.AstNodeKind.TryCatchStatement;
1752
1635
  this.range = util_1.util.createBoundingRange(tokens.try, tryBranch, catchStatement, tokens.endTry);
1753
1636
  }
1754
1637
  transpile(state) {
@@ -1772,13 +1655,12 @@ class TryCatchStatement extends AstNode_2.Statement {
1772
1655
  }
1773
1656
  }
1774
1657
  exports.TryCatchStatement = TryCatchStatement;
1775
- class CatchStatement extends AstNode_2.Statement {
1658
+ class CatchStatement extends AstNode_1.Statement {
1776
1659
  constructor(tokens, exceptionVariable, catchBranch) {
1777
1660
  super();
1778
1661
  this.tokens = tokens;
1779
1662
  this.exceptionVariable = exceptionVariable;
1780
1663
  this.catchBranch = catchBranch;
1781
- this.kind = AstNode_1.AstNodeKind.CatchStatement;
1782
1664
  this.range = util_1.util.createBoundingRange(tokens.catch, exceptionVariable, catchBranch);
1783
1665
  }
1784
1666
  transpile(state) {
@@ -1797,12 +1679,11 @@ class CatchStatement extends AstNode_2.Statement {
1797
1679
  }
1798
1680
  }
1799
1681
  exports.CatchStatement = CatchStatement;
1800
- class ThrowStatement extends AstNode_2.Statement {
1682
+ class ThrowStatement extends AstNode_1.Statement {
1801
1683
  constructor(throwToken, expression) {
1802
1684
  super();
1803
1685
  this.throwToken = throwToken;
1804
1686
  this.expression = expression;
1805
- this.kind = AstNode_1.AstNodeKind.ThrowStatement;
1806
1687
  this.range = util_1.util.createBoundingRange(throwToken, expression);
1807
1688
  }
1808
1689
  transpile(state) {
@@ -1827,19 +1708,25 @@ class ThrowStatement extends AstNode_2.Statement {
1827
1708
  }
1828
1709
  }
1829
1710
  exports.ThrowStatement = ThrowStatement;
1830
- class EnumStatement extends AstNode_2.Statement {
1711
+ class EnumStatement extends AstNode_1.Statement {
1831
1712
  constructor(tokens, body) {
1832
1713
  var _a;
1833
1714
  super();
1834
1715
  this.tokens = tokens;
1835
1716
  this.body = body;
1836
- this.kind = AstNode_1.AstNodeKind.EnumStatement;
1837
- this.symbolTable = new SymbolTable_2.SymbolTable('Enum');
1838
1717
  this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
1839
1718
  }
1840
1719
  get range() {
1841
1720
  return util_1.util.createBoundingRange(this.tokens.enum, this.tokens.name, ...this.body, this.tokens.endEnum);
1842
1721
  }
1722
+ /**
1723
+ * Get the name of the wrapping namespace (if it exists)
1724
+ * @deprecated use `.findAncestor(isNamespaceStatement)` instead.
1725
+ */
1726
+ get namespaceName() {
1727
+ var _a;
1728
+ return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
1729
+ }
1843
1730
  getMembers() {
1844
1731
  const result = [];
1845
1732
  for (const statement of this.body) {
@@ -1849,9 +1736,6 @@ class EnumStatement extends AstNode_2.Statement {
1849
1736
  }
1850
1737
  return result;
1851
1738
  }
1852
- getLeadingTrivia() {
1853
- return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.enum.leadingTrivia);
1854
- }
1855
1739
  /**
1856
1740
  * Get a map of member names and their values.
1857
1741
  * All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
@@ -1946,27 +1830,13 @@ class EnumStatement extends AstNode_2.Statement {
1946
1830
  (0, visitors_1.walkArray)(this.body, visitor, options, this);
1947
1831
  }
1948
1832
  }
1949
- getType(options) {
1950
- var _a, _b, _c;
1951
- const members = this.getMembers();
1952
- const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options).underlyingType);
1953
- resultType.pushMemberProvider(() => this.getSymbolTable());
1954
- for (const statement of members) {
1955
- resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
1956
- }
1957
- return resultType;
1958
- }
1959
1833
  }
1960
1834
  exports.EnumStatement = EnumStatement;
1961
- class EnumMemberStatement extends AstNode_2.Statement {
1835
+ class EnumMemberStatement extends AstNode_1.Statement {
1962
1836
  constructor(tokens, value) {
1963
1837
  super();
1964
1838
  this.tokens = tokens;
1965
1839
  this.value = value;
1966
- this.kind = AstNode_1.AstNodeKind.EnumMemberStatement;
1967
- }
1968
- get range() {
1969
- return util_1.util.createBoundingRange(this.tokens.name, this.tokens.equal, this.value);
1970
1840
  }
1971
1841
  /**
1972
1842
  * The name of the member
@@ -1974,8 +1844,14 @@ class EnumMemberStatement extends AstNode_2.Statement {
1974
1844
  get name() {
1975
1845
  return this.tokens.name.text;
1976
1846
  }
1977
- getLeadingTrivia() {
1978
- return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.name.leadingTrivia);
1847
+ get range() {
1848
+ return util_1.util.createBoundingRange(this.tokens.name, this.tokens.equal, this.value);
1849
+ }
1850
+ /**
1851
+ * Get the value of this enum. Requires that `.parent` is set
1852
+ */
1853
+ getValue() {
1854
+ return this.parent.getMemberValue(this.name);
1979
1855
  }
1980
1856
  transpile(state) {
1981
1857
  return [];
@@ -1997,26 +1873,18 @@ class EnumMemberStatement extends AstNode_2.Statement {
1997
1873
  (0, visitors_1.walk)(this, 'value', visitor, options);
1998
1874
  }
1999
1875
  }
2000
- getType(options) {
2001
- var _a, _b, _c, _d;
2002
- return new EnumType_1.EnumMemberType((_a = this.parent) === null || _a === void 0 ? void 0 : _a.fullName, (_c = (_b = this.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, (_d = this.value) === null || _d === void 0 ? void 0 : _d.getType(options));
2003
- }
2004
1876
  }
2005
1877
  exports.EnumMemberStatement = EnumMemberStatement;
2006
- class ConstStatement extends AstNode_2.Statement {
1878
+ class ConstStatement extends AstNode_1.Statement {
2007
1879
  constructor(tokens, value) {
2008
1880
  super();
2009
1881
  this.tokens = tokens;
2010
1882
  this.value = value;
2011
- this.kind = AstNode_1.AstNodeKind.ConstStatement;
2012
1883
  this.range = util_1.util.createBoundingRange(this.tokens.const, this.tokens.name, this.tokens.equals, this.value);
2013
1884
  }
2014
1885
  get name() {
2015
1886
  return this.tokens.name.text;
2016
1887
  }
2017
- getLeadingTrivia() {
2018
- return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.const.leadingTrivia);
2019
- }
2020
1888
  /**
2021
1889
  * The name of the statement WITH its leading namespace (if applicable)
2022
1890
  */
@@ -2058,16 +1926,12 @@ class ConstStatement extends AstNode_2.Statement {
2058
1926
  (0, visitors_1.walk)(this, 'value', visitor, options);
2059
1927
  }
2060
1928
  }
2061
- getType(options) {
2062
- return this.value.getType(options);
2063
- }
2064
1929
  }
2065
1930
  exports.ConstStatement = ConstStatement;
2066
- class ContinueStatement extends AstNode_2.Statement {
1931
+ class ContinueStatement extends AstNode_1.Statement {
2067
1932
  constructor(tokens) {
2068
1933
  super();
2069
1934
  this.tokens = tokens;
2070
- this.kind = AstNode_1.AstNodeKind.ContinueStatement;
2071
1935
  this.range = util_1.util.createBoundingRange(tokens.continue, tokens.loopType);
2072
1936
  }
2073
1937
  transpile(state) {