brighterscript 1.0.0-alpha.23 → 1.0.0-alpha.25

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 (536) hide show
  1. package/CHANGELOG.md +585 -218
  2. package/README.md +45 -139
  3. package/bsconfig.schema.json +41 -0
  4. package/dist/ActionPipeline.d.ts +10 -0
  5. package/dist/ActionPipeline.js +40 -0
  6. package/dist/ActionPipeline.js.map +1 -0
  7. package/dist/AstValidationSegmenter.d.ts +25 -0
  8. package/dist/AstValidationSegmenter.js +152 -0
  9. package/dist/AstValidationSegmenter.js.map +1 -0
  10. package/dist/BsConfig.d.ts +39 -4
  11. package/dist/BusyStatusTracker.d.ts +31 -0
  12. package/dist/BusyStatusTracker.js +83 -0
  13. package/dist/BusyStatusTracker.js.map +1 -0
  14. package/dist/Cache.js +3 -3
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +3 -3
  20. package/dist/CodeActionUtil.js.map +1 -1
  21. package/dist/CommentFlagProcessor.d.ts +3 -2
  22. package/dist/CommentFlagProcessor.js +5 -4
  23. package/dist/CommentFlagProcessor.js.map +1 -1
  24. package/dist/DependencyGraph.d.ts +3 -2
  25. package/dist/DependencyGraph.js +11 -10
  26. package/dist/DependencyGraph.js.map +1 -1
  27. package/dist/DiagnosticCollection.js +9 -5
  28. package/dist/DiagnosticCollection.js.map +1 -1
  29. package/dist/DiagnosticFilterer.d.ts +1 -0
  30. package/dist/DiagnosticFilterer.js +5 -3
  31. package/dist/DiagnosticFilterer.js.map +1 -1
  32. package/dist/DiagnosticMessages.d.ts +79 -15
  33. package/dist/DiagnosticMessages.js +134 -21
  34. package/dist/DiagnosticMessages.js.map +1 -1
  35. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  36. package/dist/DiagnosticSeverityAdjuster.js +41 -0
  37. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  38. package/dist/FunctionScope.d.ts +28 -0
  39. package/dist/FunctionScope.js +52 -0
  40. package/dist/FunctionScope.js.map +1 -0
  41. package/dist/KeyedThrottler.d.ts +3 -3
  42. package/dist/KeyedThrottler.js +3 -3
  43. package/dist/KeyedThrottler.js.map +1 -1
  44. package/dist/LanguageServer.d.ts +23 -11
  45. package/dist/LanguageServer.js +222 -87
  46. package/dist/LanguageServer.js.map +1 -1
  47. package/dist/Logger.d.ts +3 -2
  48. package/dist/Logger.js +11 -3
  49. package/dist/Logger.js.map +1 -1
  50. package/dist/PluginInterface.d.ts +21 -3
  51. package/dist/PluginInterface.js +74 -6
  52. package/dist/PluginInterface.js.map +1 -1
  53. package/dist/Program.d.ts +162 -81
  54. package/dist/Program.js +903 -732
  55. package/dist/Program.js.map +1 -1
  56. package/dist/ProgramBuilder.d.ts +22 -12
  57. package/dist/ProgramBuilder.js +132 -104
  58. package/dist/ProgramBuilder.js.map +1 -1
  59. package/dist/Scope.d.ts +95 -134
  60. package/dist/Scope.js +477 -551
  61. package/dist/Scope.js.map +1 -1
  62. package/dist/Stopwatch.js +1 -1
  63. package/dist/Stopwatch.js.map +1 -1
  64. package/dist/SymbolTable.d.ts +95 -29
  65. package/dist/SymbolTable.js +256 -102
  66. package/dist/SymbolTable.js.map +1 -1
  67. package/dist/Throttler.d.ts +12 -0
  68. package/dist/Throttler.js +39 -0
  69. package/dist/Throttler.js.map +1 -1
  70. package/dist/Watcher.d.ts +0 -3
  71. package/dist/Watcher.js +0 -3
  72. package/dist/Watcher.js.map +1 -1
  73. package/dist/XmlScope.d.ts +4 -6
  74. package/dist/XmlScope.js +74 -68
  75. package/dist/XmlScope.js.map +1 -1
  76. package/dist/astUtils/CachedLookups.d.ts +48 -0
  77. package/dist/astUtils/CachedLookups.js +323 -0
  78. package/dist/astUtils/CachedLookups.js.map +1 -0
  79. package/dist/astUtils/{AstEditor.d.ts → Editor.d.ts} +9 -5
  80. package/dist/astUtils/{AstEditor.js → Editor.js} +10 -4
  81. package/dist/astUtils/Editor.js.map +1 -0
  82. package/dist/astUtils/{AstEditor.spec.js → Editor.spec.js} +68 -64
  83. package/dist/astUtils/Editor.spec.js.map +1 -0
  84. package/dist/astUtils/creators.d.ts +10 -10
  85. package/dist/astUtils/creators.js +26 -16
  86. package/dist/astUtils/creators.js.map +1 -1
  87. package/dist/astUtils/creators.spec.js +5 -5
  88. package/dist/astUtils/creators.spec.js.map +1 -1
  89. package/dist/astUtils/reflection.d.ts +132 -100
  90. package/dist/astUtils/reflection.js +225 -166
  91. package/dist/astUtils/reflection.js.map +1 -1
  92. package/dist/astUtils/reflection.spec.js +208 -126
  93. package/dist/astUtils/reflection.spec.js.map +1 -1
  94. package/dist/astUtils/stackedVisitor.spec.js +12 -12
  95. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  96. package/dist/astUtils/visitors.d.ts +54 -35
  97. package/dist/astUtils/visitors.js +29 -3
  98. package/dist/astUtils/visitors.js.map +1 -1
  99. package/dist/astUtils/visitors.spec.js +178 -33
  100. package/dist/astUtils/visitors.spec.js.map +1 -1
  101. package/dist/astUtils/xml.d.ts +9 -9
  102. package/dist/astUtils/xml.js +9 -9
  103. package/dist/astUtils/xml.js.map +1 -1
  104. package/dist/bscPlugin/BscPlugin.d.ts +12 -2
  105. package/dist/bscPlugin/BscPlugin.js +41 -3
  106. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  107. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  108. package/dist/bscPlugin/CallExpressionInfo.js +131 -0
  109. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  110. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  111. package/dist/bscPlugin/FileWriter.js +24 -0
  112. package/dist/bscPlugin/FileWriter.js.map +1 -0
  113. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  114. package/dist/bscPlugin/SignatureHelpUtil.js +135 -0
  115. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  116. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +1 -1
  117. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +21 -12
  118. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  119. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +86 -12
  120. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  121. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +57 -0
  122. package/dist/bscPlugin/completions/CompletionsProcessor.js +544 -0
  123. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  124. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1909 -0
  125. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  126. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  127. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  128. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  129. package/dist/bscPlugin/hover/HoverProcessor.d.ts +17 -0
  130. package/dist/bscPlugin/hover/HoverProcessor.js +188 -0
  131. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  132. package/dist/bscPlugin/hover/HoverProcessor.spec.js +513 -0
  133. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  134. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +3 -1
  135. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +102 -29
  136. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  137. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +167 -6
  138. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  139. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  140. package/dist/bscPlugin/serialize/BslibInjector.spec.js +19 -0
  141. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  142. package/dist/bscPlugin/serialize/BslibManager.d.ts +9 -0
  143. package/dist/bscPlugin/serialize/BslibManager.js +40 -0
  144. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  145. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  146. package/dist/bscPlugin/serialize/FileSerializer.js +72 -0
  147. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  148. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +16 -0
  149. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +123 -0
  150. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  151. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  152. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +41 -0
  153. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  154. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  155. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  156. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  157. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +22 -1
  158. package/dist/bscPlugin/validation/BrsFileValidator.js +316 -29
  159. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  160. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  161. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +264 -0
  162. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  163. package/dist/bscPlugin/validation/ProgramValidator.d.ts +10 -0
  164. package/dist/bscPlugin/validation/ProgramValidator.js +32 -0
  165. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  166. package/dist/bscPlugin/validation/ScopeValidator.d.ts +56 -8
  167. package/dist/bscPlugin/validation/ScopeValidator.js +514 -116
  168. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  169. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  170. package/dist/bscPlugin/validation/ScopeValidator.spec.js +2454 -0
  171. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  172. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  173. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  174. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  175. package/dist/cli.js +107 -8
  176. package/dist/cli.js.map +1 -1
  177. package/dist/deferred.d.ts +3 -3
  178. package/dist/deferred.js.map +1 -1
  179. package/dist/diagnosticUtils.d.ts +8 -2
  180. package/dist/diagnosticUtils.js +47 -17
  181. package/dist/diagnosticUtils.js.map +1 -1
  182. package/dist/examples/plugins/removePrint.js +8 -10
  183. package/dist/examples/plugins/removePrint.js.map +1 -1
  184. package/dist/files/AssetFile.d.ts +26 -0
  185. package/dist/files/AssetFile.js +26 -0
  186. package/dist/files/AssetFile.js.map +1 -0
  187. package/dist/files/BrsFile.Class.spec.js +529 -486
  188. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  189. package/dist/files/BrsFile.d.ts +124 -112
  190. package/dist/files/BrsFile.js +819 -1131
  191. package/dist/files/BrsFile.js.map +1 -1
  192. package/dist/files/BrsFile.spec.js +1869 -1277
  193. package/dist/files/BrsFile.spec.js.map +1 -1
  194. package/dist/files/BscFile.d.ts +104 -0
  195. package/dist/files/BscFile.js +16 -0
  196. package/dist/files/BscFile.js.map +1 -0
  197. package/dist/files/Factory.d.ts +25 -0
  198. package/dist/files/Factory.js +22 -0
  199. package/dist/files/Factory.js.map +1 -0
  200. package/dist/files/LazyFileData.d.ts +20 -0
  201. package/dist/files/LazyFileData.js +54 -0
  202. package/dist/files/LazyFileData.js.map +1 -0
  203. package/dist/files/LazyFileData.spec.d.ts +1 -0
  204. package/dist/files/LazyFileData.spec.js +27 -0
  205. package/dist/files/LazyFileData.spec.js.map +1 -0
  206. package/dist/files/XmlFile.d.ts +70 -32
  207. package/dist/files/XmlFile.js +106 -117
  208. package/dist/files/XmlFile.js.map +1 -1
  209. package/dist/files/XmlFile.spec.js +325 -262
  210. package/dist/files/XmlFile.spec.js.map +1 -1
  211. package/dist/files/tests/imports.spec.js +49 -41
  212. package/dist/files/tests/imports.spec.js.map +1 -1
  213. package/dist/files/tests/optionalChaning.spec.js +104 -40
  214. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  215. package/dist/globalCallables.js +16 -18
  216. package/dist/globalCallables.js.map +1 -1
  217. package/dist/index.d.ts +13 -2
  218. package/dist/index.js +15 -2
  219. package/dist/index.js.map +1 -1
  220. package/dist/interfaces.d.ts +440 -150
  221. package/dist/interfaces.js +27 -0
  222. package/dist/interfaces.js.map +1 -1
  223. package/dist/lexer/Character.spec.js +5 -5
  224. package/dist/lexer/Character.spec.js.map +1 -1
  225. package/dist/lexer/Lexer.d.ts +12 -5
  226. package/dist/lexer/Lexer.js +28 -13
  227. package/dist/lexer/Lexer.js.map +1 -1
  228. package/dist/lexer/Lexer.spec.js +187 -134
  229. package/dist/lexer/Lexer.spec.js.map +1 -1
  230. package/dist/lexer/Token.d.ts +9 -1
  231. package/dist/lexer/Token.js +9 -1
  232. package/dist/lexer/Token.js.map +1 -1
  233. package/dist/lexer/TokenKind.d.ts +9 -0
  234. package/dist/lexer/TokenKind.js +30 -5
  235. package/dist/lexer/TokenKind.js.map +1 -1
  236. package/dist/parser/AstNode.d.ts +162 -0
  237. package/dist/parser/AstNode.js +225 -0
  238. package/dist/parser/AstNode.js.map +1 -0
  239. package/dist/parser/AstNode.spec.d.ts +1 -0
  240. package/dist/parser/AstNode.spec.js +165 -0
  241. package/dist/parser/AstNode.spec.js.map +1 -0
  242. package/dist/parser/BrsTranspileState.d.ts +4 -7
  243. package/dist/parser/BrsTranspileState.js +4 -12
  244. package/dist/parser/BrsTranspileState.js.map +1 -1
  245. package/dist/parser/Expression.d.ts +126 -167
  246. package/dist/parser/Expression.js +524 -394
  247. package/dist/parser/Expression.js.map +1 -1
  248. package/dist/parser/Parser.Class.spec.js +152 -146
  249. package/dist/parser/Parser.Class.spec.js.map +1 -1
  250. package/dist/parser/Parser.d.ts +45 -196
  251. package/dist/parser/Parser.js +470 -926
  252. package/dist/parser/Parser.js.map +1 -1
  253. package/dist/parser/Parser.spec.d.ts +3 -1
  254. package/dist/parser/Parser.spec.js +1034 -805
  255. package/dist/parser/Parser.spec.js.map +1 -1
  256. package/dist/parser/SGParser.d.ts +9 -8
  257. package/dist/parser/SGParser.js +10 -8
  258. package/dist/parser/SGParser.js.map +1 -1
  259. package/dist/parser/SGParser.spec.js +27 -38
  260. package/dist/parser/SGParser.spec.js.map +1 -1
  261. package/dist/parser/SGTypes.d.ts +98 -35
  262. package/dist/parser/SGTypes.js +169 -99
  263. package/dist/parser/SGTypes.js.map +1 -1
  264. package/dist/parser/Statement.d.ts +208 -122
  265. package/dist/parser/Statement.js +599 -364
  266. package/dist/parser/Statement.js.map +1 -1
  267. package/dist/parser/Statement.spec.js +45 -21
  268. package/dist/parser/Statement.spec.js.map +1 -1
  269. package/dist/parser/TranspileState.d.ts +1 -1
  270. package/dist/parser/TranspileState.js +7 -12
  271. package/dist/parser/TranspileState.js.map +1 -1
  272. package/dist/parser/tests/Parser.spec.js +3 -2
  273. package/dist/parser/tests/Parser.spec.js.map +1 -1
  274. package/dist/parser/tests/controlFlow/For.spec.js +33 -23
  275. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  276. package/dist/parser/tests/controlFlow/ForEach.spec.js +25 -20
  277. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  278. package/dist/parser/tests/controlFlow/If.spec.js +96 -94
  279. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  280. package/dist/parser/tests/controlFlow/While.spec.js +22 -16
  281. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  282. package/dist/parser/tests/expression/Additive.spec.js +8 -8
  283. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  284. package/dist/parser/tests/expression/ArrayLiterals.spec.js +58 -21
  285. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  286. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +61 -20
  287. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  288. package/dist/parser/tests/expression/Boolean.spec.js +8 -8
  289. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  290. package/dist/parser/tests/expression/Call.spec.js +129 -21
  291. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  292. package/dist/parser/tests/expression/Exponential.spec.js +5 -5
  293. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  294. package/dist/parser/tests/expression/Function.spec.js +36 -36
  295. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  296. package/dist/parser/tests/expression/Indexing.spec.js +67 -22
  297. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  298. package/dist/parser/tests/expression/Multiplicative.spec.js +9 -9
  299. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  300. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +123 -81
  301. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  302. package/dist/parser/tests/expression/PrefixUnary.spec.js +12 -12
  303. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  304. package/dist/parser/tests/expression/Primary.spec.js +12 -12
  305. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  306. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
  307. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  308. package/dist/parser/tests/expression/Relational.spec.js +13 -13
  309. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  310. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
  311. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  312. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +221 -81
  313. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  314. package/dist/parser/tests/expression/TernaryExpression.spec.js +287 -105
  315. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  316. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  317. package/dist/parser/tests/expression/TypeExpression.spec.js +127 -0
  318. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  319. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  320. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  321. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  322. package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
  323. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  324. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  325. package/dist/parser/tests/statement/ConstStatement.spec.js +262 -0
  326. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  327. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  328. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  329. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  330. package/dist/parser/tests/statement/Declaration.spec.js +19 -19
  331. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  332. package/dist/parser/tests/statement/Dim.spec.js +22 -22
  333. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  334. package/dist/parser/tests/statement/Enum.spec.js +111 -300
  335. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  336. package/dist/parser/tests/statement/For.spec.js +9 -10
  337. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  338. package/dist/parser/tests/statement/ForEach.spec.js +8 -9
  339. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  340. package/dist/parser/tests/statement/Function.spec.js +44 -35
  341. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  342. package/dist/parser/tests/statement/Goto.spec.js +5 -5
  343. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  344. package/dist/parser/tests/statement/Increment.spec.js +20 -20
  345. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  346. package/dist/parser/tests/statement/InterfaceStatement.spec.js +30 -196
  347. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  348. package/dist/parser/tests/statement/LibraryStatement.spec.js +11 -11
  349. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  350. package/dist/parser/tests/statement/Misc.spec.js +16 -78
  351. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  352. package/dist/parser/tests/statement/PrintStatement.spec.js +107 -90
  353. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  354. package/dist/parser/tests/statement/ReturnStatement.spec.js +14 -12
  355. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  356. package/dist/parser/tests/statement/Set.spec.js +48 -35
  357. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  358. package/dist/parser/tests/statement/Stop.spec.js +6 -6
  359. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  360. package/dist/parser/tests/statement/Throw.spec.js +6 -6
  361. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  362. package/dist/parser/tests/statement/TryCatch.spec.js +18 -16
  363. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  364. package/dist/preprocessor/Manifest.d.ts +1 -1
  365. package/dist/preprocessor/Manifest.js +3 -3
  366. package/dist/preprocessor/Manifest.js.map +1 -1
  367. package/dist/preprocessor/Manifest.spec.js +8 -8
  368. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  369. package/dist/preprocessor/Preprocessor.d.ts +5 -6
  370. package/dist/preprocessor/Preprocessor.js +15 -11
  371. package/dist/preprocessor/Preprocessor.js.map +1 -1
  372. package/dist/preprocessor/Preprocessor.spec.js +25 -25
  373. package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
  374. package/dist/preprocessor/PreprocessorParser.d.ts +1 -1
  375. package/dist/preprocessor/PreprocessorParser.js +7 -1
  376. package/dist/preprocessor/PreprocessorParser.js.map +1 -1
  377. package/dist/preprocessor/PreprocessorParser.spec.js +13 -13
  378. package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
  379. package/dist/roku-types/data.json +6544 -10519
  380. package/dist/roku-types/index.d.ts +662 -1934
  381. package/dist/types/ArrayType.d.ts +10 -9
  382. package/dist/types/ArrayType.js +65 -60
  383. package/dist/types/ArrayType.js.map +1 -1
  384. package/dist/types/ArrayType.spec.js +36 -68
  385. package/dist/types/ArrayType.spec.js.map +1 -1
  386. package/dist/types/AssociativeArrayType.d.ts +11 -0
  387. package/dist/types/AssociativeArrayType.js +52 -0
  388. package/dist/types/AssociativeArrayType.js.map +1 -0
  389. package/dist/types/BaseFunctionType.d.ts +9 -0
  390. package/dist/types/BaseFunctionType.js +25 -0
  391. package/dist/types/BaseFunctionType.js.map +1 -0
  392. package/dist/types/BooleanType.d.ts +8 -5
  393. package/dist/types/BooleanType.js +14 -7
  394. package/dist/types/BooleanType.js.map +1 -1
  395. package/dist/types/BooleanType.spec.js +10 -6
  396. package/dist/types/BooleanType.spec.js.map +1 -1
  397. package/dist/types/BscType.d.ts +32 -21
  398. package/dist/types/BscType.js +118 -21
  399. package/dist/types/BscType.js.map +1 -1
  400. package/dist/types/BscTypeKind.d.ts +25 -0
  401. package/dist/types/BscTypeKind.js +30 -0
  402. package/dist/types/BscTypeKind.js.map +1 -0
  403. package/dist/types/BuiltInInterfaceAdder.d.ts +23 -0
  404. package/dist/types/BuiltInInterfaceAdder.js +164 -0
  405. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  406. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  407. package/dist/types/BuiltInInterfaceAdder.spec.js +116 -0
  408. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  409. package/dist/types/ClassType.d.ts +17 -0
  410. package/dist/types/ClassType.js +58 -0
  411. package/dist/types/ClassType.js.map +1 -0
  412. package/dist/types/ClassType.spec.d.ts +1 -0
  413. package/dist/types/ClassType.spec.js +77 -0
  414. package/dist/types/ClassType.spec.js.map +1 -0
  415. package/dist/types/ComponentType.d.ts +26 -0
  416. package/dist/types/ComponentType.js +83 -0
  417. package/dist/types/ComponentType.js.map +1 -0
  418. package/dist/types/DoubleType.d.ts +8 -5
  419. package/dist/types/DoubleType.js +18 -16
  420. package/dist/types/DoubleType.js.map +1 -1
  421. package/dist/types/DoubleType.spec.js +12 -6
  422. package/dist/types/DoubleType.spec.js.map +1 -1
  423. package/dist/types/DynamicType.d.ts +10 -5
  424. package/dist/types/DynamicType.js +16 -4
  425. package/dist/types/DynamicType.js.map +1 -1
  426. package/dist/types/DynamicType.spec.js +16 -5
  427. package/dist/types/DynamicType.spec.js.map +1 -1
  428. package/dist/types/EnumType.d.ts +30 -12
  429. package/dist/types/EnumType.js +43 -17
  430. package/dist/types/EnumType.js.map +1 -1
  431. package/dist/types/EnumType.spec.d.ts +1 -0
  432. package/dist/types/EnumType.spec.js +33 -0
  433. package/dist/types/EnumType.spec.js.map +1 -0
  434. package/dist/types/FloatType.d.ts +8 -5
  435. package/dist/types/FloatType.js +18 -16
  436. package/dist/types/FloatType.js.map +1 -1
  437. package/dist/types/FloatType.spec.js +4 -6
  438. package/dist/types/FloatType.spec.js.map +1 -1
  439. package/dist/types/FunctionType.d.ts +13 -8
  440. package/dist/types/FunctionType.js +30 -14
  441. package/dist/types/FunctionType.js.map +1 -1
  442. package/dist/types/InheritableType.d.ts +28 -0
  443. package/dist/types/InheritableType.js +152 -0
  444. package/dist/types/InheritableType.js.map +1 -0
  445. package/dist/types/IntegerType.d.ts +8 -5
  446. package/dist/types/IntegerType.js +18 -16
  447. package/dist/types/IntegerType.js.map +1 -1
  448. package/dist/types/IntegerType.spec.js +8 -6
  449. package/dist/types/IntegerType.spec.js.map +1 -1
  450. package/dist/types/InterfaceType.d.ts +12 -13
  451. package/dist/types/InterfaceType.js +20 -48
  452. package/dist/types/InterfaceType.js.map +1 -1
  453. package/dist/types/InterfaceType.spec.js +90 -56
  454. package/dist/types/InterfaceType.spec.js.map +1 -1
  455. package/dist/types/InvalidType.d.ts +7 -5
  456. package/dist/types/InvalidType.js +13 -7
  457. package/dist/types/InvalidType.js.map +1 -1
  458. package/dist/types/InvalidType.spec.js +8 -6
  459. package/dist/types/InvalidType.spec.js.map +1 -1
  460. package/dist/types/LongIntegerType.d.ts +8 -5
  461. package/dist/types/LongIntegerType.js +17 -15
  462. package/dist/types/LongIntegerType.js.map +1 -1
  463. package/dist/types/LongIntegerType.spec.js +10 -6
  464. package/dist/types/LongIntegerType.spec.js.map +1 -1
  465. package/dist/types/NamespaceType.d.ts +12 -0
  466. package/dist/types/NamespaceType.js +28 -0
  467. package/dist/types/NamespaceType.js.map +1 -0
  468. package/dist/types/ObjectType.d.ts +9 -8
  469. package/dist/types/ObjectType.js +21 -11
  470. package/dist/types/ObjectType.js.map +1 -1
  471. package/dist/types/ObjectType.spec.js +3 -3
  472. package/dist/types/ObjectType.spec.js.map +1 -1
  473. package/dist/types/ReferenceType.d.ts +63 -0
  474. package/dist/types/ReferenceType.js +423 -0
  475. package/dist/types/ReferenceType.js.map +1 -0
  476. package/dist/types/ReferenceType.spec.d.ts +1 -0
  477. package/dist/types/ReferenceType.spec.js +137 -0
  478. package/dist/types/ReferenceType.spec.js.map +1 -0
  479. package/dist/types/StringType.d.ts +11 -5
  480. package/dist/types/StringType.js +18 -7
  481. package/dist/types/StringType.js.map +1 -1
  482. package/dist/types/StringType.spec.js +3 -5
  483. package/dist/types/StringType.spec.js.map +1 -1
  484. package/dist/types/TypedFunctionType.d.ts +22 -17
  485. package/dist/types/TypedFunctionType.js +78 -60
  486. package/dist/types/TypedFunctionType.js.map +1 -1
  487. package/dist/types/TypedFunctionType.spec.js +105 -20
  488. package/dist/types/TypedFunctionType.spec.js.map +1 -1
  489. package/dist/types/UninitializedType.d.ts +8 -6
  490. package/dist/types/UninitializedType.js +13 -7
  491. package/dist/types/UninitializedType.js.map +1 -1
  492. package/dist/types/UnionType.d.ts +20 -0
  493. package/dist/types/UnionType.js +123 -0
  494. package/dist/types/UnionType.js.map +1 -0
  495. package/dist/types/UnionType.spec.d.ts +1 -0
  496. package/dist/types/UnionType.spec.js +130 -0
  497. package/dist/types/UnionType.spec.js.map +1 -0
  498. package/dist/types/VoidType.d.ts +8 -5
  499. package/dist/types/VoidType.js +14 -7
  500. package/dist/types/VoidType.js.map +1 -1
  501. package/dist/types/VoidType.spec.js +3 -3
  502. package/dist/types/VoidType.spec.js.map +1 -1
  503. package/dist/types/helper.spec.d.ts +1 -0
  504. package/dist/types/helper.spec.js +145 -0
  505. package/dist/types/helper.spec.js.map +1 -0
  506. package/dist/types/helpers.d.ts +19 -37
  507. package/dist/types/helpers.js +159 -99
  508. package/dist/types/helpers.js.map +1 -1
  509. package/dist/types/index.d.ts +22 -0
  510. package/dist/types/index.js +39 -0
  511. package/dist/types/index.js.map +1 -0
  512. package/dist/util.d.ts +167 -131
  513. package/dist/util.js +890 -350
  514. package/dist/util.js.map +1 -1
  515. package/dist/validators/ClassValidator.d.ts +7 -25
  516. package/dist/validators/ClassValidator.js +103 -194
  517. package/dist/validators/ClassValidator.js.map +1 -1
  518. package/package.json +165 -149
  519. package/dist/astUtils/AstEditor.js.map +0 -1
  520. package/dist/astUtils/AstEditor.spec.js.map +0 -1
  521. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +0 -8
  522. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +0 -40
  523. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +0 -1
  524. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -32
  525. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
  526. package/dist/parser/SGTypes.spec.js +0 -351
  527. package/dist/parser/SGTypes.spec.js.map +0 -1
  528. package/dist/types/CustomType.d.ts +0 -12
  529. package/dist/types/CustomType.js +0 -44
  530. package/dist/types/CustomType.js.map +0 -1
  531. package/dist/types/LazyType.d.ts +0 -16
  532. package/dist/types/LazyType.js +0 -44
  533. package/dist/types/LazyType.js.map +0 -1
  534. /package/dist/astUtils/{AstEditor.spec.d.ts → Editor.spec.d.ts} +0 -0
  535. /package/dist/bscPlugin/{transpile/BrsFilePreTranspileProcessor.spec.d.ts → completions/CompletionsProcessor.spec.d.ts} +0 -0
  536. /package/dist/{parser/SGTypes.spec.d.ts → bscPlugin/hover/HoverProcessor.spec.d.ts} +0 -0
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BinaryOperatorReferenceType = exports.TypePropertyReferenceType = exports.ReferenceType = exports.referenceTypeFactory = void 0;
4
+ const reflection_1 = require("../astUtils/reflection");
5
+ const BscType_1 = require("./BscType");
6
+ const DynamicType_1 = require("./DynamicType");
7
+ const BscTypeKind_1 = require("./BscTypeKind");
8
+ function referenceTypeFactory(memberKey, fullName, flags, tableProvider) {
9
+ return new ReferenceType(memberKey, fullName, flags, tableProvider);
10
+ }
11
+ exports.referenceTypeFactory = referenceTypeFactory;
12
+ class ReferenceType extends BscType_1.BscType {
13
+ /**
14
+ * ReferenceTypes are used when the actual type may be resolved later from a Symbol table
15
+ * @param memberKey which key do we use to look up this type in the given table?
16
+ * @param fullName the full/display name for this type
17
+ * @param flags is this type available at typetime, runtime, etc.
18
+ * @param tableProvider function that returns a SymbolTable that we use for the lookup.
19
+ */
20
+ constructor(memberKey, fullName, flags, tableProvider) {
21
+ super(memberKey);
22
+ this.memberKey = memberKey;
23
+ this.fullName = fullName;
24
+ this.flags = flags;
25
+ this.tableProvider = tableProvider;
26
+ this.kind = BscTypeKind_1.BscTypeKind.ReferenceType;
27
+ this.circRefCount = 0;
28
+ this.referenceChain = new Set();
29
+ this.propertyTypeReference = new Map();
30
+ this.memberTypeReferences = new Map();
31
+ this.callFuncMemberTypeReferences = new Map();
32
+ this.futureMemberTableProvider = () => {
33
+ return {
34
+ name: `FutureMemberTableProvider: '${this.__identifier}'`,
35
+ getSymbolType: (innerName, innerOptions) => {
36
+ const resolvedType = this.resolve();
37
+ if (resolvedType) {
38
+ return resolvedType.getMemberType(innerName, innerOptions);
39
+ }
40
+ },
41
+ setCachedType: (innerName, innerResolvedTypeCacheEntry, options) => {
42
+ const resolvedType = this.resolve();
43
+ if (resolvedType) {
44
+ resolvedType.memberTable.setCachedType(innerName, innerResolvedTypeCacheEntry, options);
45
+ }
46
+ }
47
+ };
48
+ };
49
+ this.futureCallFuncMemberTableProvider = () => {
50
+ return {
51
+ name: `FutureCallFuncMemberTableProvider: '${this.__identifier}'`,
52
+ getSymbolType: (innerName, innerOptions) => {
53
+ const resolvedType = this.resolve();
54
+ if ((0, reflection_1.isComponentType)(resolvedType)) {
55
+ return resolvedType.getCallFuncType(innerName, innerOptions);
56
+ }
57
+ },
58
+ setCachedType: (innerName, innerResolvedTypeCacheEntry, options) => {
59
+ const resolvedType = this.resolve();
60
+ if ((0, reflection_1.isComponentType)(resolvedType)) {
61
+ resolvedType.getCallFuncTable().setCachedType(innerName, innerResolvedTypeCacheEntry, options);
62
+ }
63
+ }
64
+ };
65
+ };
66
+ // eslint-disable-next-line no-constructor-return
67
+ return new Proxy(this, {
68
+ get: (target, propName, receiver) => {
69
+ if (propName === '__reflection') {
70
+ // Cheeky way to get `isReferenceType` reflection to work
71
+ return this.__reflection;
72
+ }
73
+ if (propName === '__identifier') {
74
+ // Cheeky way to get `isReferenceType` reflection to work
75
+ return this.__identifier;
76
+ }
77
+ if (propName === 'fullName') {
78
+ return this.fullName;
79
+ }
80
+ if (propName === 'isResolvable') {
81
+ return () => {
82
+ var _a, _b;
83
+ let resultSoFar = this.resolve();
84
+ while (resultSoFar && (0, reflection_1.isReferenceType)(resultSoFar)) {
85
+ resultSoFar = (_b = (_a = resultSoFar).getTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
86
+ }
87
+ return !!resultSoFar;
88
+ };
89
+ }
90
+ if (propName === 'getTarget') {
91
+ return () => {
92
+ return this.resolve();
93
+ };
94
+ }
95
+ if (propName === 'tableProvider') {
96
+ return this.tableProvider;
97
+ }
98
+ if (propName === 'isEqual') {
99
+ //Need to be able to check equality without resolution, because resolution need to check equality
100
+ //To see if you need to make a UnionType
101
+ return (targetType, data) => {
102
+ if (!targetType) {
103
+ return false;
104
+ }
105
+ const resolvedType = this.resolve();
106
+ let equal = false;
107
+ if (resolvedType && !(0, reflection_1.isReferenceType)(resolvedType)) {
108
+ equal = resolvedType.isEqual(targetType, data);
109
+ }
110
+ else if ((0, reflection_1.isReferenceType)(targetType)) {
111
+ equal = this.fullName.toLowerCase() === targetType.fullName.toLowerCase() &&
112
+ (this.tableProvider === targetType.tableProvider ||
113
+ this.tableProvider().name === targetType.tableProvider().name);
114
+ }
115
+ else {
116
+ equal = targetType.isEqual(this, data);
117
+ }
118
+ return equal;
119
+ };
120
+ }
121
+ if (propName === 'isTypeCompatible') {
122
+ //Need to be able to check equality without resolution, because resolution need to check equality
123
+ //To see if you need to make a UnionType
124
+ return (targetType, data) => {
125
+ if (!targetType) {
126
+ return false;
127
+ }
128
+ if ((0, reflection_1.isDynamicType)(targetType)) {
129
+ return true;
130
+ }
131
+ const resolvedType = this.resolve();
132
+ if (resolvedType && !(0, reflection_1.isReferenceType)(resolvedType)) {
133
+ return resolvedType.isTypeCompatible(targetType, data);
134
+ }
135
+ else if ((0, reflection_1.isReferenceType)(targetType)) {
136
+ return this.fullName.toLowerCase() === targetType.fullName.toLowerCase() &&
137
+ this.tableProvider === targetType.tableProvider;
138
+ }
139
+ return targetType.isTypeCompatible(this, data);
140
+ };
141
+ }
142
+ //There may be some need to specifically get members on ReferenceType in the future
143
+ // eg: if (Reflect.has(target, name)) {
144
+ // return Reflect.get(target, propName, receiver);
145
+ let innerType = this.resolve();
146
+ if (!innerType) {
147
+ // No real BscType found - we may need to handle some specific cases
148
+ if (propName === 'getMemberType') {
149
+ // We're looking for a member of a reference type
150
+ // Since we don't know what type this is, yet, return ReferenceType
151
+ return (memberName, options) => {
152
+ const resolvedType = this.resolve();
153
+ if (resolvedType) {
154
+ return resolvedType.getMemberType(memberName, options);
155
+ }
156
+ const refLookUp = `${memberName.toLowerCase()}-${options.flags}`;
157
+ let memberTypeReference = this.memberTypeReferences.get(refLookUp);
158
+ if (memberTypeReference) {
159
+ return memberTypeReference;
160
+ }
161
+ memberTypeReference = new ReferenceType(memberName, this.makeMemberFullName(memberName), options.flags, this.futureMemberTableProvider);
162
+ this.memberTypeReferences.set(refLookUp, memberTypeReference);
163
+ return memberTypeReference;
164
+ };
165
+ }
166
+ else if (propName === 'getCallFuncType') {
167
+ // We're looking for a callfunc member of a reference type
168
+ // Since we don't know what type this is, yet, return ReferenceType
169
+ return (memberName, options) => {
170
+ const resolvedType = this.resolve();
171
+ if ((0, reflection_1.isComponentType)(resolvedType)) {
172
+ return resolvedType.getCallFuncType(memberName, options);
173
+ }
174
+ const refLookUp = `${memberName.toLowerCase()}-${options.flags}-callfunc`;
175
+ let callFuncMemberTypeReference = this.callFuncMemberTypeReferences.get(refLookUp);
176
+ if (callFuncMemberTypeReference) {
177
+ return callFuncMemberTypeReference;
178
+ }
179
+ callFuncMemberTypeReference = new ReferenceType(memberName, this.makeMemberFullName(memberName), options.flags, this.futureCallFuncMemberTableProvider);
180
+ this.callFuncMemberTypeReferences.set(refLookUp, callFuncMemberTypeReference);
181
+ return callFuncMemberTypeReference;
182
+ };
183
+ }
184
+ else if (propName === 'toString') {
185
+ // This type was never found
186
+ // For diagnostics, we should return the expected name of of the type
187
+ return () => this.fullName;
188
+ }
189
+ else if (propName === 'toTypeString') {
190
+ // For transpilation, we should 'dynamic'
191
+ return () => 'dynamic';
192
+ }
193
+ else if (propName === 'returnType') {
194
+ let propRefType = this.propertyTypeReference.get(propName);
195
+ if (!propRefType) {
196
+ propRefType = new TypePropertyReferenceType(this, propName);
197
+ this.propertyTypeReference.set(propName, propRefType);
198
+ }
199
+ return propRefType;
200
+ }
201
+ else if (propName === 'memberTable') {
202
+ return this.memberTable;
203
+ }
204
+ else if (propName === 'getMemberTable') {
205
+ return () => {
206
+ return this.memberTable;
207
+ };
208
+ }
209
+ else if (propName === 'callFuncTable') {
210
+ return this.callFuncMemberTable;
211
+ }
212
+ else if (propName === 'getCallFuncTable') {
213
+ return () => {
214
+ return this.callFuncMemberTable;
215
+ };
216
+ }
217
+ else if (propName === 'isTypeCompatible') {
218
+ return (targetType) => {
219
+ return (0, reflection_1.isDynamicType)(targetType);
220
+ };
221
+ }
222
+ else if (propName === 'isEqual') {
223
+ return (targetType) => {
224
+ if ((0, reflection_1.isReferenceType)(targetType)) {
225
+ return this.fullName.toLowerCase() === targetType.toString().toLowerCase() &&
226
+ this.tableProvider() === targetType.tableProvider();
227
+ }
228
+ return false;
229
+ };
230
+ }
231
+ else if (propName === 'addBuiltInInterfaces') {
232
+ // this is an unknown type. There is no use in adding built in interfaces
233
+ // return no-op function
234
+ return () => { };
235
+ }
236
+ else if (propName === 'hasAddedBuiltInInterfaces') {
237
+ // this is an unknown type. There is no use in adding built in interfaces
238
+ return true;
239
+ }
240
+ }
241
+ if (!innerType) {
242
+ innerType = DynamicType_1.DynamicType.instance;
243
+ }
244
+ const result = Reflect.get(innerType, propName, innerType);
245
+ return result;
246
+ },
247
+ set: (target, name, value, receiver) => {
248
+ //There may be some need to specifically set members on ReferenceType in the future
249
+ // eg: if (Reflect.has(target, name)) {
250
+ // return Reflect.set(target, name, value, receiver);
251
+ let innerType = this.resolve();
252
+ // Look for circular references
253
+ if (!innerType || this.referenceChain.has(innerType)) {
254
+ return false;
255
+ }
256
+ const result = Reflect.set(innerType, name, value, innerType);
257
+ this.referenceChain.clear();
258
+ return result;
259
+ }
260
+ });
261
+ }
262
+ /**
263
+ * Resolves the type based on the original name and the table provider
264
+ */
265
+ resolve() {
266
+ var _a, _b;
267
+ const symbolTable = this.tableProvider();
268
+ if (!symbolTable) {
269
+ return;
270
+ }
271
+ // Look for circular references
272
+ let resolvedType = symbolTable.getSymbolType(this.memberKey, { flags: this.flags, onlyCacheResolvedTypes: true });
273
+ if (!resolvedType) {
274
+ // could not find this member
275
+ return;
276
+ }
277
+ if ((0, reflection_1.isAnyReferenceType)(resolvedType)) {
278
+ // If this is a referenceType, keep digging down until we have a non reference Type.
279
+ while (resolvedType && (0, reflection_1.isAnyReferenceType)(resolvedType)) {
280
+ if (this.referenceChain.has(resolvedType)) {
281
+ // this is a circular reference
282
+ this.circRefCount++;
283
+ }
284
+ if (this.circRefCount > 1) {
285
+ //It is possible that we could properly resolve the case that one reference points to itself
286
+ //see test: '[Scope][symbolTable lookups with enhanced typing][finds correct class field type with default value enums are used]
287
+ return;
288
+ }
289
+ this.referenceChain.add(resolvedType);
290
+ resolvedType = (_b = (_a = resolvedType).getTarget) === null || _b === void 0 ? void 0 : _b.call(_a);
291
+ }
292
+ this.tableProvider().setCachedType(this.memberKey, { type: resolvedType }, { flags: this.flags });
293
+ }
294
+ if (resolvedType && !(0, reflection_1.isAnyReferenceType)(resolvedType)) {
295
+ this.circRefCount = 0;
296
+ this.referenceChain.clear();
297
+ }
298
+ return resolvedType;
299
+ }
300
+ get __reflection() {
301
+ return { name: 'ReferenceType' };
302
+ }
303
+ makeMemberFullName(memberName) {
304
+ return this.fullName + '.' + memberName;
305
+ }
306
+ }
307
+ exports.ReferenceType = ReferenceType;
308
+ /**
309
+ * Use this class for when you need to reference a property of a BscType, and that property is also a BscType,
310
+ * Especially when the instance with the property may not have been instantiated/discovered yet
311
+ *
312
+ * For Example, FunctionType.returnType --- if the FunctionExpression has not been walked yet, it will be a ReferenceType
313
+ * if we just access .returnType on a ReferenceType that doesn't have access to an actual FunctionType yet, .returnType will be undefined
314
+ * So when we use this class, it maintains that reference to a potential ReferenceType, and this class will change from
315
+ * returning undefined to the ACTUAL .returnType when the ReferenceType can be resolved.
316
+ *
317
+ * This is really cool. It's like programming with time-travel.
318
+ */
319
+ class TypePropertyReferenceType extends BscType_1.BscType {
320
+ constructor(outerType, propertyName) {
321
+ super(propertyName);
322
+ this.outerType = outerType;
323
+ this.propertyName = propertyName;
324
+ // eslint-disable-next-line no-constructor-return
325
+ return new Proxy(this, {
326
+ get: (target, propName, receiver) => {
327
+ var _a;
328
+ if (propName === '__reflection') {
329
+ // Cheeky way to get `isTypePropertyReferenceType` reflection to work
330
+ return { name: 'TypePropertyReferenceType' };
331
+ }
332
+ if ((0, reflection_1.isAnyReferenceType)(this.outerType) && !this.outerType.isResolvable()) {
333
+ if (propName === 'getMemberType') {
334
+ //If we're calling `getMemberType()`, we need it to proxy to using the actual symbol table
335
+ //So if that symbol is ever populated, the correct type is passed through
336
+ return (memberName, options) => {
337
+ const fullMemberName = this.outerType.toString() + '.' + memberName;
338
+ return new ReferenceType(memberName, fullMemberName, options.flags, () => {
339
+ return {
340
+ name: `TypePropertyReferenceType : '${fullMemberName}'`,
341
+ getSymbolType: (innerName, innerOptions) => {
342
+ var _a, _b;
343
+ return (_b = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a[this.propertyName]) === null || _b === void 0 ? void 0 : _b.getMemberType(innerName, innerOptions);
344
+ },
345
+ setCachedType: (innerName, innerTypeCacheEntry, innerOptions) => {
346
+ var _a, _b;
347
+ return (_b = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a[this.propertyName]) === null || _b === void 0 ? void 0 : _b.memberTable.setCachedType(innerName, innerTypeCacheEntry, innerOptions);
348
+ }
349
+ };
350
+ });
351
+ };
352
+ }
353
+ if (propName === 'isResolvable') {
354
+ return () => false;
355
+ }
356
+ }
357
+ let inner = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a[this.propertyName];
358
+ if (!inner) {
359
+ inner = DynamicType_1.DynamicType.instance;
360
+ }
361
+ if (inner) {
362
+ const result = Reflect.get(inner, propName, inner);
363
+ return result;
364
+ }
365
+ },
366
+ set: (target, name, value, receiver) => {
367
+ //There may be some need to specifically set members on ReferenceType in the future
368
+ // eg: if (Reflect.has(target, name)) {
369
+ // return Reflect.set(target, name, value, receiver);
370
+ let inner = this.outerType[this.propertyName];
371
+ if (inner) {
372
+ const result = Reflect.set(inner, name, value, inner);
373
+ return result;
374
+ }
375
+ }
376
+ });
377
+ }
378
+ }
379
+ exports.TypePropertyReferenceType = TypePropertyReferenceType;
380
+ /**
381
+ * Use this class for when there is a binary operator and either the left hand side and/or the right hand side
382
+ * are ReferenceTypes
383
+ */
384
+ class BinaryOperatorReferenceType extends BscType_1.BscType {
385
+ constructor(leftType, operator, rightType, binaryOpResolver) {
386
+ super(operator.text);
387
+ this.leftType = leftType;
388
+ this.operator = operator;
389
+ this.rightType = rightType;
390
+ // eslint-disable-next-line no-constructor-return
391
+ return new Proxy(this, {
392
+ get: (target, propName, receiver) => {
393
+ var _a;
394
+ if (propName === '__reflection') {
395
+ // Cheeky way to get `BinaryOperatorReferenceType` reflection to work
396
+ return { name: 'BinaryOperatorReferenceType' };
397
+ }
398
+ let resultType = (_a = this.cachedType) !== null && _a !== void 0 ? _a : DynamicType_1.DynamicType.instance;
399
+ if (!this.cachedType) {
400
+ if (((0, reflection_1.isAnyReferenceType)(this.leftType) && !this.leftType.isResolvable()) ||
401
+ ((0, reflection_1.isAnyReferenceType)(this.rightType) && !this.rightType.isResolvable())) {
402
+ if (propName === 'isResolvable') {
403
+ return () => false;
404
+ }
405
+ if (propName === 'getTarget') {
406
+ return () => undefined;
407
+ }
408
+ }
409
+ else {
410
+ resultType = binaryOpResolver(this.leftType, this.operator, this.rightType);
411
+ this.cachedType = resultType;
412
+ }
413
+ }
414
+ if (resultType) {
415
+ const result = Reflect.get(resultType, propName, resultType);
416
+ return result;
417
+ }
418
+ }
419
+ });
420
+ }
421
+ }
422
+ exports.BinaryOperatorReferenceType = BinaryOperatorReferenceType;
423
+ //# sourceMappingURL=ReferenceType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceType.js","sourceRoot":"","sources":["../../src/types/ReferenceType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const SymbolTable_1 = require("../SymbolTable");
5
+ const SymbolTable_2 = require("../SymbolTable");
6
+ const testHelpers_spec_1 = require("../testHelpers.spec");
7
+ const DynamicType_1 = require("./DynamicType");
8
+ const IntegerType_1 = require("./IntegerType");
9
+ const ReferenceType_1 = require("./ReferenceType");
10
+ const StringType_1 = require("./StringType");
11
+ const FloatType_1 = require("./FloatType");
12
+ const ClassType_1 = require("./ClassType");
13
+ const reflection_1 = require("../astUtils/reflection");
14
+ const TypedFunctionType_1 = require("./TypedFunctionType");
15
+ const NamespaceType_1 = require("./NamespaceType");
16
+ const creators_1 = require("../astUtils/creators");
17
+ const TokenKind_1 = require("../lexer/TokenKind");
18
+ const util_1 = require("../util");
19
+ const runtimeFlag = SymbolTable_2.SymbolTypeFlag.runtime;
20
+ describe('ReferenceType', () => {
21
+ it('can be checked with reflection', () => {
22
+ const table = new SymbolTable_1.SymbolTable('test');
23
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
24
+ (0, chai_1.expect)((0, reflection_1.isReferenceType)(ref)).to.be.true;
25
+ });
26
+ it('defaults to dynamic type if it can not resolve', () => {
27
+ (0, testHelpers_spec_1.expectTypeToBe)(new ReferenceType_1.ReferenceType('test', 'test', runtimeFlag, () => undefined), DynamicType_1.DynamicType);
28
+ const table = new SymbolTable_1.SymbolTable('testTable');
29
+ (0, testHelpers_spec_1.expectTypeToBe)(new ReferenceType_1.ReferenceType('test', 'test', runtimeFlag, () => table), DynamicType_1.DynamicType);
30
+ table.addSymbol('someVar', null, StringType_1.StringType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
31
+ (0, testHelpers_spec_1.expectTypeToBe)(new ReferenceType_1.ReferenceType('test', 'test', runtimeFlag, () => table), DynamicType_1.DynamicType);
32
+ });
33
+ it('can resolve based on a symbol table', () => {
34
+ const table = new SymbolTable_1.SymbolTable('test');
35
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
36
+ table.addSymbol('someVar', null, StringType_1.StringType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
37
+ (0, testHelpers_spec_1.expectTypeToBe)(ref, StringType_1.StringType);
38
+ });
39
+ it('resolves before checking assigning and convertible', () => {
40
+ const table = new SymbolTable_1.SymbolTable('test');
41
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
42
+ table.addSymbol('someVar', null, IntegerType_1.IntegerType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
43
+ (0, chai_1.expect)(ref.isTypeCompatible(FloatType_1.FloatType.instance)).to.be.true;
44
+ });
45
+ it('resolves before stringifying', () => {
46
+ const table = new SymbolTable_1.SymbolTable('test');
47
+ const ref = new ReferenceType_1.ReferenceType('someKlass', 'someKlass', runtimeFlag, () => table);
48
+ table.addSymbol('someKlass', null, new ClassType_1.ClassType('SomeKlass'), SymbolTable_2.SymbolTypeFlag.runtime);
49
+ (0, chai_1.expect)(ref.toString()).to.eq('SomeKlass');
50
+ });
51
+ describe('circular references', () => {
52
+ it('catches circular references', () => {
53
+ const table = new SymbolTable_1.SymbolTable('test');
54
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
55
+ table.addSymbol('someVar', null, ref, SymbolTable_2.SymbolTypeFlag.runtime);
56
+ (0, testHelpers_spec_1.expectTypeToBe)(ref, DynamicType_1.DynamicType);
57
+ });
58
+ it('catches circular references of many levels', () => {
59
+ const table = new SymbolTable_1.SymbolTable('test');
60
+ const ref1 = new ReferenceType_1.ReferenceType('someVar1', 'someVar1', runtimeFlag, () => table);
61
+ const ref2 = new ReferenceType_1.ReferenceType('someVar2', 'someVar2', runtimeFlag, () => table);
62
+ const ref3 = new ReferenceType_1.ReferenceType('someVar3', 'someVar3', runtimeFlag, () => table);
63
+ table.addSymbol('someVar0', null, ref1, SymbolTable_2.SymbolTypeFlag.runtime);
64
+ table.addSymbol('someVar1', null, ref2, SymbolTable_2.SymbolTypeFlag.runtime);
65
+ table.addSymbol('someVar2', null, ref3, SymbolTable_2.SymbolTypeFlag.runtime);
66
+ table.addSymbol('someVar3', null, ref1, SymbolTable_2.SymbolTypeFlag.runtime);
67
+ (0, testHelpers_spec_1.expectTypeToBe)(table.getSymbol('someVar0', SymbolTable_2.SymbolTypeFlag.runtime)[0].type, DynamicType_1.DynamicType);
68
+ });
69
+ it('catches circular references in a binary expression', () => {
70
+ const table = new SymbolTable_1.SymbolTable('test');
71
+ const ref = new ReferenceType_1.ReferenceType('notHere', 'notHere', runtimeFlag, () => table);
72
+ const binRef = new ReferenceType_1.BinaryOperatorReferenceType(ref, (0, creators_1.createToken)(TokenKind_1.TokenKind.Plus), StringType_1.StringType.instance, (l, o, r) => {
73
+ return util_1.util.binaryOperatorResultType(l, o, r);
74
+ });
75
+ const binRef2 = new ReferenceType_1.BinaryOperatorReferenceType(ref, (0, creators_1.createToken)(TokenKind_1.TokenKind.Plus), binRef, (l, o, r) => {
76
+ return util_1.util.binaryOperatorResultType(l, o, r);
77
+ });
78
+ table.addSymbol('notHere', null, binRef2, SymbolTable_2.SymbolTypeFlag.runtime);
79
+ (0, testHelpers_spec_1.expectTypeToBe)(table.getSymbolType('notHere', { flags: SymbolTable_2.SymbolTypeFlag.runtime }), DynamicType_1.DynamicType);
80
+ });
81
+ });
82
+ });
83
+ describe('PropertyReferenceType', () => {
84
+ it('can be checked with reflection', () => {
85
+ const func = new TypedFunctionType_1.TypedFunctionType(StringType_1.StringType.instance);
86
+ const propRef = new ReferenceType_1.TypePropertyReferenceType(func, 'returnType');
87
+ (0, chai_1.expect)((0, reflection_1.isTypePropertyReferenceType)(propRef)).to.be.true;
88
+ });
89
+ it('can resolve a FunctionType.returnType', () => {
90
+ const func = new TypedFunctionType_1.TypedFunctionType(StringType_1.StringType.instance);
91
+ const propRef = new ReferenceType_1.TypePropertyReferenceType(func, 'returnType');
92
+ (0, testHelpers_spec_1.expectTypeToBe)(propRef, StringType_1.StringType);
93
+ });
94
+ it('can resolve a property on a ReferenceType', () => {
95
+ const table = new SymbolTable_1.SymbolTable('test');
96
+ const ref = new ReferenceType_1.ReferenceType('someFunc', 'someFunc', runtimeFlag, () => table);
97
+ const propRef = new ReferenceType_1.TypePropertyReferenceType(ref, 'returnType');
98
+ // `ref` will resolve to DynamicType, and its returnType is DynamicType.Instance
99
+ (0, testHelpers_spec_1.expectTypeToBe)(propRef, DynamicType_1.DynamicType);
100
+ // Set ref to resolve to a function
101
+ table.addSymbol('someFunc', null, new TypedFunctionType_1.TypedFunctionType(IntegerType_1.IntegerType.instance), SymbolTable_2.SymbolTypeFlag.runtime);
102
+ (0, testHelpers_spec_1.expectTypeToBe)(propRef, IntegerType_1.IntegerType);
103
+ });
104
+ it('resolves members of a property on a ReferenceType', () => {
105
+ const table = new SymbolTable_1.SymbolTable('test');
106
+ const fnRef = new ReferenceType_1.ReferenceType('someFunc', 'someFunc', runtimeFlag, () => table);
107
+ const returnRef = new ReferenceType_1.TypePropertyReferenceType(fnRef, 'returnType');
108
+ const returnPropRef = returnRef.getMemberType('myNum', { flags: SymbolTable_2.SymbolTypeFlag.runtime });
109
+ // `ref` will resolve to DynamicType, and its returnType is DynamicType.Instance
110
+ (0, testHelpers_spec_1.expectTypeToBe)(returnPropRef, DynamicType_1.DynamicType);
111
+ // Set fnRef to resolve to a function that returns a complex type
112
+ const klassType = new ClassType_1.ClassType('Klass');
113
+ klassType.addMember('myNum', null, IntegerType_1.IntegerType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
114
+ table.addSymbol('someFunc', null, new TypedFunctionType_1.TypedFunctionType(klassType), SymbolTable_2.SymbolTypeFlag.runtime);
115
+ // returnPropRef = someFunc().myNum
116
+ (0, testHelpers_spec_1.expectTypeToBe)(fnRef, TypedFunctionType_1.TypedFunctionType);
117
+ (0, testHelpers_spec_1.expectTypeToBe)(returnRef, ClassType_1.ClassType);
118
+ (0, testHelpers_spec_1.expectTypeToBe)(returnPropRef, IntegerType_1.IntegerType);
119
+ });
120
+ describe('toString', () => {
121
+ it('returns the full name, if resolvable or not', () => {
122
+ let nsA = new NamespaceType_1.NamespaceType('Alpha');
123
+ let nsAB = new NamespaceType_1.NamespaceType('Alpha.Beta');
124
+ let nsABC = new NamespaceType_1.NamespaceType('Alpha.Beta.Charlie');
125
+ nsA.addMember('Beta', null, nsAB, SymbolTable_2.SymbolTypeFlag.typetime);
126
+ nsAB.addMember('Charlie', null, nsABC, SymbolTable_2.SymbolTypeFlag.typetime);
127
+ let myRef = new ReferenceType_1.ReferenceType('MyKlass', 'Alpha.Beta.Charlie.MyKlass', SymbolTable_2.SymbolTypeFlag.typetime, () => nsABC.memberTable);
128
+ (0, chai_1.expect)(myRef.isResolvable()).to.be.false;
129
+ (0, chai_1.expect)(myRef.toString()).to.eq('Alpha.Beta.Charlie.MyKlass');
130
+ let myKlass = new ClassType_1.ClassType('Alpha.Beta.Charlie.MyKlass');
131
+ nsABC.addMember('MyKlass', null, myKlass, SymbolTable_2.SymbolTypeFlag.typetime);
132
+ (0, chai_1.expect)(myRef.isResolvable()).to.be.true;
133
+ (0, chai_1.expect)(myRef.toString()).to.eq('Alpha.Beta.Charlie.MyKlass');
134
+ });
135
+ });
136
+ });
137
+ //# sourceMappingURL=ReferenceType.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceType.spec.js","sourceRoot":"","sources":["../../src/types/ReferenceType.spec.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
- import type { BscType } from './BscType';
2
- export declare class StringType implements BscType {
1
+ import { BscType } from './BscType';
2
+ import { BscTypeKind } from './BscTypeKind';
3
+ import type { TypeCompatibilityData } from '../interfaces';
4
+ export declare class StringType extends BscType {
3
5
  typeText?: string;
4
6
  constructor(typeText?: string);
5
- isAssignableTo(targetType: BscType): boolean;
6
- isConvertibleTo(targetType: BscType): boolean;
7
+ readonly kind = BscTypeKind.StringType;
8
+ /**
9
+ * A static instance that can be used to reduce memory and constructor costs, since there's nothing unique about this
10
+ */
11
+ static instance: StringType;
12
+ isTypeCompatible(targetType: BscType, data?: TypeCompatibilityData): any;
7
13
  toString(): string;
8
14
  toTypeString(): string;
9
- equals(targetType: BscType): boolean;
15
+ isEqual(targetType: BscType): boolean;
10
16
  }