brighterscript 1.0.0-alpha.5 → 1.0.0-alpha.50

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 (715) hide show
  1. package/README.md +76 -138
  2. package/bsconfig.schema.json +121 -5
  3. package/dist/ActionPipeline.d.ts +10 -0
  4. package/dist/ActionPipeline.js +40 -0
  5. package/dist/ActionPipeline.js.map +1 -0
  6. package/dist/AstValidationSegmenter.d.ts +45 -0
  7. package/dist/AstValidationSegmenter.js +322 -0
  8. package/dist/AstValidationSegmenter.js.map +1 -0
  9. package/dist/BsConfig.d.ts +72 -39
  10. package/dist/BusyStatusTracker.d.ts +61 -0
  11. package/dist/BusyStatusTracker.js +148 -0
  12. package/dist/BusyStatusTracker.js.map +1 -0
  13. package/dist/Cache.d.ts +3 -8
  14. package/dist/Cache.js +9 -14
  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 +12 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +7 -6
  23. package/dist/CommentFlagProcessor.js +11 -8
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +642 -0
  27. package/dist/CrossScopeValidator.js.map +1 -0
  28. package/dist/DependencyGraph.d.ts +8 -3
  29. package/dist/DependencyGraph.js +49 -16
  30. package/dist/DependencyGraph.js.map +1 -1
  31. package/dist/DiagnosticCollection.d.ts +21 -5
  32. package/dist/DiagnosticCollection.js +77 -24
  33. package/dist/DiagnosticCollection.js.map +1 -1
  34. package/dist/DiagnosticFilterer.d.ts +27 -6
  35. package/dist/DiagnosticFilterer.js +273 -60
  36. package/dist/DiagnosticFilterer.js.map +1 -1
  37. package/dist/DiagnosticManager.d.ts +82 -0
  38. package/dist/DiagnosticManager.js +406 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +558 -196
  41. package/dist/DiagnosticMessages.js +870 -340
  42. package/dist/DiagnosticMessages.js.map +1 -1
  43. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  44. package/dist/DiagnosticSeverityAdjuster.js +45 -0
  45. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  46. package/dist/FunctionScope.d.ts +28 -0
  47. package/dist/FunctionScope.js +52 -0
  48. package/dist/FunctionScope.js.map +1 -0
  49. package/dist/KeyedThrottler.d.ts +3 -3
  50. package/dist/KeyedThrottler.js +3 -3
  51. package/dist/KeyedThrottler.js.map +1 -1
  52. package/dist/LanguageServer.d.ts +100 -105
  53. package/dist/LanguageServer.js +444 -745
  54. package/dist/LanguageServer.js.map +1 -1
  55. package/dist/Logger.d.ts +17 -13
  56. package/dist/Logger.js +64 -34
  57. package/dist/Logger.js.map +1 -1
  58. package/dist/PluginInterface.d.ts +32 -10
  59. package/dist/PluginInterface.js +117 -7
  60. package/dist/PluginInterface.js.map +1 -1
  61. package/dist/Program.d.ts +241 -98
  62. package/dist/Program.js +1432 -717
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +47 -23
  65. package/dist/ProgramBuilder.js +224 -178
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +149 -109
  68. package/dist/Scope.js +557 -550
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/SemanticTokenUtils.js +5 -1
  71. package/dist/SemanticTokenUtils.js.map +1 -1
  72. package/dist/Stopwatch.d.ts +4 -0
  73. package/dist/Stopwatch.js +8 -1
  74. package/dist/Stopwatch.js.map +1 -1
  75. package/dist/SymbolTable.d.ts +136 -24
  76. package/dist/SymbolTable.js +565 -64
  77. package/dist/SymbolTable.js.map +1 -1
  78. package/dist/SymbolTypeFlag.d.ts +9 -0
  79. package/dist/SymbolTypeFlag.js +14 -0
  80. package/dist/SymbolTypeFlag.js.map +1 -0
  81. package/dist/Throttler.d.ts +12 -0
  82. package/dist/Throttler.js +39 -0
  83. package/dist/Throttler.js.map +1 -1
  84. package/dist/Watcher.d.ts +0 -3
  85. package/dist/Watcher.js +0 -3
  86. package/dist/Watcher.js.map +1 -1
  87. package/dist/XmlScope.d.ts +5 -15
  88. package/dist/XmlScope.js +34 -90
  89. package/dist/XmlScope.js.map +1 -1
  90. package/dist/astUtils/CachedLookups.d.ts +50 -0
  91. package/dist/astUtils/CachedLookups.js +334 -0
  92. package/dist/astUtils/CachedLookups.js.map +1 -0
  93. package/dist/astUtils/CachedLookups.spec.js +39 -0
  94. package/dist/astUtils/CachedLookups.spec.js.map +1 -0
  95. package/dist/astUtils/Editor.d.ts +69 -0
  96. package/dist/astUtils/Editor.js +245 -0
  97. package/dist/astUtils/Editor.js.map +1 -0
  98. package/dist/astUtils/Editor.spec.js +258 -0
  99. package/dist/astUtils/Editor.spec.js.map +1 -0
  100. package/dist/astUtils/creators.d.ts +54 -19
  101. package/dist/astUtils/creators.js +242 -42
  102. package/dist/astUtils/creators.js.map +1 -1
  103. package/dist/astUtils/creators.spec.js +5 -5
  104. package/dist/astUtils/creators.spec.js.map +1 -1
  105. package/dist/astUtils/reflection.d.ts +196 -85
  106. package/dist/astUtils/reflection.js +497 -144
  107. package/dist/astUtils/reflection.js.map +1 -1
  108. package/dist/astUtils/reflection.spec.js +267 -167
  109. package/dist/astUtils/reflection.spec.js.map +1 -1
  110. package/dist/astUtils/stackedVisitor.js.map +1 -1
  111. package/dist/astUtils/stackedVisitor.spec.js +14 -14
  112. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  113. package/dist/astUtils/visitors.d.ts +116 -53
  114. package/dist/astUtils/visitors.js +95 -15
  115. package/dist/astUtils/visitors.js.map +1 -1
  116. package/dist/astUtils/visitors.spec.js +629 -51
  117. package/dist/astUtils/visitors.spec.js.map +1 -1
  118. package/dist/astUtils/xml.d.ts +9 -8
  119. package/dist/astUtils/xml.js +12 -7
  120. package/dist/astUtils/xml.js.map +1 -1
  121. package/dist/bscPlugin/BscPlugin.d.ts +24 -4
  122. package/dist/bscPlugin/BscPlugin.js +88 -4
  123. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  124. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  125. package/dist/bscPlugin/CallExpressionInfo.js +143 -0
  126. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  127. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  128. package/dist/bscPlugin/FileWriter.js +24 -0
  129. package/dist/bscPlugin/FileWriter.js.map +1 -0
  130. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  131. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  132. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  133. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +6 -5
  134. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +173 -27
  135. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  136. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +138 -21
  137. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  138. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  139. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  140. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  141. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +2512 -0
  142. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  143. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  144. package/dist/bscPlugin/definition/DefinitionProvider.js +212 -0
  145. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  146. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  147. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  148. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  149. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  150. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  151. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  152. package/dist/bscPlugin/hover/HoverProcessor.js +230 -0
  153. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  154. package/dist/bscPlugin/hover/HoverProcessor.spec.js +991 -0
  155. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  156. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  157. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  158. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  159. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
  160. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  161. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  162. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  163. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  164. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  165. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  166. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +564 -0
  167. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  168. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  169. package/dist/bscPlugin/serialize/BslibInjector.spec.js +33 -0
  170. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  171. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  172. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  173. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  174. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  175. package/dist/bscPlugin/serialize/FileSerializer.js +75 -0
  176. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  177. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  178. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  179. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  180. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +1 -0
  181. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +291 -0
  182. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  183. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  184. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  185. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  186. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +1 -0
  187. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  188. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  189. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  190. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  191. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  192. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +27 -0
  193. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +418 -0
  194. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  195. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  196. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +75 -0
  197. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  198. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  199. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  200. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  201. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  202. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  203. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  204. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +37 -0
  205. package/dist/bscPlugin/validation/BrsFileValidator.js +638 -0
  206. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  207. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  208. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1517 -0
  209. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  210. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  211. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  212. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  213. package/dist/bscPlugin/validation/ScopeValidator.d.ts +141 -0
  214. package/dist/bscPlugin/validation/ScopeValidator.js +1323 -0
  215. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  216. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  217. package/dist/bscPlugin/validation/ScopeValidator.spec.js +6135 -0
  218. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  219. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  220. package/dist/bscPlugin/validation/XmlFileValidator.js +36 -0
  221. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  222. package/dist/cli.js +126 -27
  223. package/dist/cli.js.map +1 -1
  224. package/dist/common/Sequencer.d.ts +53 -0
  225. package/dist/common/Sequencer.js +233 -0
  226. package/dist/common/Sequencer.js.map +1 -0
  227. package/dist/common/Sequencer.spec.d.ts +1 -0
  228. package/dist/common/Sequencer.spec.js +75 -0
  229. package/dist/common/Sequencer.spec.js.map +1 -0
  230. package/dist/deferred.d.ts +5 -3
  231. package/dist/deferred.js +10 -0
  232. package/dist/deferred.js.map +1 -1
  233. package/dist/diagnosticUtils.d.ts +10 -3
  234. package/dist/diagnosticUtils.js +64 -25
  235. package/dist/diagnosticUtils.js.map +1 -1
  236. package/dist/examples/plugins/removePrint.d.ts +2 -2
  237. package/dist/examples/plugins/removePrint.js +8 -12
  238. package/dist/examples/plugins/removePrint.js.map +1 -1
  239. package/dist/files/AssetFile.d.ts +24 -0
  240. package/dist/files/AssetFile.js +25 -0
  241. package/dist/files/AssetFile.js.map +1 -0
  242. package/dist/files/BrsFile.Class.spec.js +1213 -259
  243. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  244. package/dist/files/BrsFile.d.ts +145 -87
  245. package/dist/files/BrsFile.js +836 -934
  246. package/dist/files/BrsFile.js.map +1 -1
  247. package/dist/files/BrsFile.spec.js +4226 -902
  248. package/dist/files/BrsFile.spec.js.map +1 -1
  249. package/dist/files/BscFile.d.ts +102 -0
  250. package/dist/files/BscFile.js +15 -0
  251. package/dist/files/BscFile.js.map +1 -0
  252. package/dist/files/Factory.d.ts +25 -0
  253. package/dist/files/Factory.js +22 -0
  254. package/dist/files/Factory.js.map +1 -0
  255. package/dist/files/LazyFileData.d.ts +21 -0
  256. package/dist/files/LazyFileData.js +54 -0
  257. package/dist/files/LazyFileData.js.map +1 -0
  258. package/dist/files/LazyFileData.spec.d.ts +1 -0
  259. package/dist/files/LazyFileData.spec.js +27 -0
  260. package/dist/files/LazyFileData.spec.js.map +1 -0
  261. package/dist/files/XmlFile.d.ts +80 -41
  262. package/dist/files/XmlFile.js +161 -137
  263. package/dist/files/XmlFile.js.map +1 -1
  264. package/dist/files/XmlFile.spec.js +444 -336
  265. package/dist/files/XmlFile.spec.js.map +1 -1
  266. package/dist/files/tests/imports.spec.js +62 -52
  267. package/dist/files/tests/imports.spec.js.map +1 -1
  268. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  269. package/dist/files/tests/optionalChaning.spec.js +152 -0
  270. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  271. package/dist/globalCallables.d.ts +3 -1
  272. package/dist/globalCallables.js +424 -184
  273. package/dist/globalCallables.js.map +1 -1
  274. package/dist/index.d.ts +32 -4
  275. package/dist/index.js +54 -7
  276. package/dist/index.js.map +1 -1
  277. package/dist/interfaces.d.ts +942 -125
  278. package/dist/interfaces.js +21 -0
  279. package/dist/interfaces.js.map +1 -1
  280. package/dist/lexer/Character.spec.js +5 -5
  281. package/dist/lexer/Character.spec.js.map +1 -1
  282. package/dist/lexer/Lexer.d.ts +51 -12
  283. package/dist/lexer/Lexer.js +215 -65
  284. package/dist/lexer/Lexer.js.map +1 -1
  285. package/dist/lexer/Lexer.spec.js +812 -568
  286. package/dist/lexer/Lexer.spec.js.map +1 -1
  287. package/dist/lexer/Token.d.ts +27 -11
  288. package/dist/lexer/Token.js +10 -2
  289. package/dist/lexer/Token.js.map +1 -1
  290. package/dist/lexer/TokenKind.d.ts +40 -2
  291. package/dist/lexer/TokenKind.js +147 -10
  292. package/dist/lexer/TokenKind.js.map +1 -1
  293. package/dist/logging.d.ts +14 -0
  294. package/dist/logging.js +29 -0
  295. package/dist/logging.js.map +1 -0
  296. package/dist/lsp/ActionQueue.d.ts +35 -0
  297. package/dist/lsp/ActionQueue.js +115 -0
  298. package/dist/lsp/ActionQueue.js.map +1 -0
  299. package/dist/lsp/ActionQueue.spec.d.ts +1 -0
  300. package/dist/lsp/ActionQueue.spec.js +80 -0
  301. package/dist/lsp/ActionQueue.spec.js.map +1 -0
  302. package/dist/lsp/DocumentManager.d.ts +63 -0
  303. package/dist/lsp/DocumentManager.js +122 -0
  304. package/dist/lsp/DocumentManager.js.map +1 -0
  305. package/dist/lsp/DocumentManager.spec.d.ts +1 -0
  306. package/dist/lsp/DocumentManager.spec.js +103 -0
  307. package/dist/lsp/DocumentManager.spec.js.map +1 -0
  308. package/dist/lsp/LspProject.d.ts +239 -0
  309. package/dist/lsp/LspProject.js +3 -0
  310. package/dist/lsp/LspProject.js.map +1 -0
  311. package/dist/lsp/PathFilterer.d.ts +75 -0
  312. package/dist/lsp/PathFilterer.js +196 -0
  313. package/dist/lsp/PathFilterer.js.map +1 -0
  314. package/dist/lsp/PathFilterer.spec.d.ts +1 -0
  315. package/dist/lsp/PathFilterer.spec.js +182 -0
  316. package/dist/lsp/PathFilterer.spec.js.map +1 -0
  317. package/dist/lsp/Project.d.ts +168 -0
  318. package/dist/lsp/Project.js +437 -0
  319. package/dist/lsp/Project.js.map +1 -0
  320. package/dist/lsp/Project.spec.d.ts +1 -0
  321. package/dist/lsp/Project.spec.js +267 -0
  322. package/dist/lsp/Project.spec.js.map +1 -0
  323. package/dist/lsp/ProjectManager.d.ts +242 -0
  324. package/dist/lsp/ProjectManager.js +824 -0
  325. package/dist/lsp/ProjectManager.js.map +1 -0
  326. package/dist/lsp/ProjectManager.spec.d.ts +1 -0
  327. package/dist/lsp/ProjectManager.spec.js +913 -0
  328. package/dist/lsp/ProjectManager.spec.js.map +1 -0
  329. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  330. package/dist/lsp/ReaderWriterManager.js +60 -0
  331. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  332. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  333. package/dist/lsp/worker/MessageHandler.js +138 -0
  334. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  335. package/dist/lsp/worker/MessageHandler.spec.d.ts +1 -0
  336. package/dist/lsp/worker/MessageHandler.spec.js +64 -0
  337. package/dist/lsp/worker/MessageHandler.spec.js.map +1 -0
  338. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  339. package/dist/lsp/worker/WorkerPool.js +78 -0
  340. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  341. package/dist/lsp/worker/WorkerPool.spec.d.ts +1 -0
  342. package/dist/lsp/worker/WorkerPool.spec.js +59 -0
  343. package/dist/lsp/worker/WorkerPool.spec.js.map +1 -0
  344. package/dist/lsp/worker/WorkerThreadProject.d.ts +143 -0
  345. package/dist/lsp/worker/WorkerThreadProject.js +189 -0
  346. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  347. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +2 -0
  348. package/dist/lsp/worker/WorkerThreadProject.spec.js +71 -0
  349. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -0
  350. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  351. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  352. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  353. package/dist/lsp/worker/run.d.ts +1 -0
  354. package/dist/lsp/worker/run.js +14 -0
  355. package/dist/lsp/worker/run.js.map +1 -0
  356. package/dist/parser/AstNode.d.ts +203 -0
  357. package/dist/parser/AstNode.js +303 -0
  358. package/dist/parser/AstNode.js.map +1 -0
  359. package/dist/parser/AstNode.spec.d.ts +1 -0
  360. package/dist/parser/AstNode.spec.js +1455 -0
  361. package/dist/parser/AstNode.spec.js.map +1 -0
  362. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  363. package/dist/parser/BrightScriptDocParser.js +294 -0
  364. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  365. package/dist/parser/BrightScriptDocParser.spec.d.ts +1 -0
  366. package/dist/parser/BrightScriptDocParser.spec.js +310 -0
  367. package/dist/parser/BrightScriptDocParser.spec.js.map +1 -0
  368. package/dist/parser/BrsTranspileState.d.ts +22 -3
  369. package/dist/parser/BrsTranspileState.js +19 -0
  370. package/dist/parser/BrsTranspileState.js.map +1 -1
  371. package/dist/parser/Expression.d.ts +553 -221
  372. package/dist/parser/Expression.js +1414 -505
  373. package/dist/parser/Expression.js.map +1 -1
  374. package/dist/parser/Expression.spec.d.ts +1 -0
  375. package/dist/parser/Expression.spec.js +40 -0
  376. package/dist/parser/Expression.spec.js.map +1 -0
  377. package/dist/parser/Parser.Class.spec.js +255 -125
  378. package/dist/parser/Parser.Class.spec.js.map +1 -1
  379. package/dist/parser/Parser.d.ts +117 -124
  380. package/dist/parser/Parser.js +1669 -982
  381. package/dist/parser/Parser.js.map +1 -1
  382. package/dist/parser/Parser.spec.d.ts +3 -1
  383. package/dist/parser/Parser.spec.js +2111 -525
  384. package/dist/parser/Parser.spec.js.map +1 -1
  385. package/dist/parser/SGParser.d.ts +29 -13
  386. package/dist/parser/SGParser.js +85 -56
  387. package/dist/parser/SGParser.js.map +1 -1
  388. package/dist/parser/SGParser.spec.js +30 -45
  389. package/dist/parser/SGParser.spec.js.map +1 -1
  390. package/dist/parser/SGTypes.d.ts +134 -46
  391. package/dist/parser/SGTypes.js +206 -115
  392. package/dist/parser/SGTypes.js.map +1 -1
  393. package/dist/parser/Statement.d.ts +849 -267
  394. package/dist/parser/Statement.js +2412 -625
  395. package/dist/parser/Statement.js.map +1 -1
  396. package/dist/parser/Statement.spec.js +133 -36
  397. package/dist/parser/Statement.spec.js.map +1 -1
  398. package/dist/parser/TranspileState.d.ts +26 -12
  399. package/dist/parser/TranspileState.js +115 -24
  400. package/dist/parser/TranspileState.js.map +1 -1
  401. package/dist/parser/tests/Parser.spec.d.ts +3 -9
  402. package/dist/parser/tests/Parser.spec.js +7 -13
  403. package/dist/parser/tests/Parser.spec.js.map +1 -1
  404. package/dist/parser/tests/controlFlow/For.spec.js +83 -75
  405. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  406. package/dist/parser/tests/controlFlow/ForEach.spec.js +85 -51
  407. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  408. package/dist/parser/tests/controlFlow/If.spec.js +382 -239
  409. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  410. package/dist/parser/tests/controlFlow/While.spec.js +52 -45
  411. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  412. package/dist/parser/tests/expression/Additive.spec.js +51 -43
  413. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  414. package/dist/parser/tests/expression/ArrayLiterals.spec.js +192 -142
  415. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  416. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +236 -160
  417. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  418. package/dist/parser/tests/expression/Boolean.spec.js +41 -34
  419. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  420. package/dist/parser/tests/expression/Call.spec.js +173 -55
  421. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  422. package/dist/parser/tests/expression/Exponential.spec.js +20 -20
  423. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  424. package/dist/parser/tests/expression/Function.spec.js +291 -282
  425. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  426. package/dist/parser/tests/expression/Indexing.spec.js +193 -110
  427. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  428. package/dist/parser/tests/expression/Multiplicative.spec.js +42 -42
  429. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  430. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +260 -115
  431. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  432. package/dist/parser/tests/expression/PrefixUnary.spec.js +58 -52
  433. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  434. package/dist/parser/tests/expression/Primary.spec.js +76 -60
  435. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  436. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  437. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  438. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  439. package/dist/parser/tests/expression/Relational.spec.js +50 -50
  440. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  441. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +31 -31
  442. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  443. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +281 -94
  444. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  445. package/dist/parser/tests/expression/TernaryExpression.spec.js +747 -192
  446. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  447. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  448. package/dist/parser/tests/expression/TypeExpression.spec.js +126 -0
  449. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  450. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  451. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  452. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  453. package/dist/parser/tests/statement/AssignmentOperators.spec.js +44 -44
  454. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  455. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  456. package/dist/parser/tests/statement/ConstStatement.spec.js +500 -0
  457. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  458. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  459. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  460. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  461. package/dist/parser/tests/statement/Declaration.spec.js +61 -55
  462. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  463. package/dist/parser/tests/statement/Dim.spec.js +29 -22
  464. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  465. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  466. package/dist/parser/tests/statement/Enum.spec.js +744 -0
  467. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  468. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  469. package/dist/parser/tests/statement/For.spec.js +45 -0
  470. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  471. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  472. package/dist/parser/tests/statement/ForEach.spec.js +36 -0
  473. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  474. package/dist/parser/tests/statement/Function.spec.js +226 -215
  475. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  476. package/dist/parser/tests/statement/Goto.spec.js +16 -15
  477. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  478. package/dist/parser/tests/statement/Increment.spec.js +64 -61
  479. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  480. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  481. package/dist/parser/tests/statement/InterfaceStatement.spec.js +110 -0
  482. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  483. package/dist/parser/tests/statement/LibraryStatement.spec.js +22 -22
  484. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  485. package/dist/parser/tests/statement/Misc.spec.js +127 -168
  486. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  487. package/dist/parser/tests/statement/PrintStatement.spec.js +133 -114
  488. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  489. package/dist/parser/tests/statement/ReturnStatement.spec.js +57 -54
  490. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  491. package/dist/parser/tests/statement/Set.spec.js +131 -117
  492. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  493. package/dist/parser/tests/statement/Stop.spec.js +14 -13
  494. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  495. package/dist/parser/tests/statement/Throw.spec.js +11 -8
  496. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  497. package/dist/parser/tests/statement/TryCatch.spec.js +26 -15
  498. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  499. package/dist/preprocessor/Manifest.d.ts +6 -6
  500. package/dist/preprocessor/Manifest.js +17 -38
  501. package/dist/preprocessor/Manifest.js.map +1 -1
  502. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  503. package/dist/preprocessor/Manifest.spec.js +78 -103
  504. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  505. package/dist/roku-types/data.json +20347 -0
  506. package/dist/roku-types/index.d.ts +5726 -0
  507. package/dist/roku-types/index.js +11 -0
  508. package/dist/roku-types/index.js.map +1 -0
  509. package/dist/types/ArrayType.d.ts +12 -5
  510. package/dist/types/ArrayType.js +89 -24
  511. package/dist/types/ArrayType.js.map +1 -1
  512. package/dist/types/ArrayType.spec.js +39 -11
  513. package/dist/types/ArrayType.spec.js.map +1 -1
  514. package/dist/types/AssociativeArrayType.d.ts +15 -0
  515. package/dist/types/AssociativeArrayType.js +64 -0
  516. package/dist/types/AssociativeArrayType.js.map +1 -0
  517. package/dist/types/BaseFunctionType.d.ts +10 -0
  518. package/dist/types/BaseFunctionType.js +26 -0
  519. package/dist/types/BaseFunctionType.js.map +1 -0
  520. package/dist/types/BooleanType.d.ts +9 -5
  521. package/dist/types/BooleanType.js +19 -8
  522. package/dist/types/BooleanType.js.map +1 -1
  523. package/dist/types/BooleanType.spec.js +10 -4
  524. package/dist/types/BooleanType.spec.js.map +1 -1
  525. package/dist/types/BscType.d.ts +41 -3
  526. package/dist/types/BscType.js +152 -0
  527. package/dist/types/BscType.js.map +1 -1
  528. package/dist/types/BscTypeKind.d.ts +28 -0
  529. package/dist/types/BscTypeKind.js +33 -0
  530. package/dist/types/BscTypeKind.js.map +1 -0
  531. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  532. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  533. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  534. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  535. package/dist/types/BuiltInInterfaceAdder.spec.js +115 -0
  536. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  537. package/dist/types/CallFuncableType.d.ts +24 -0
  538. package/dist/types/CallFuncableType.js +91 -0
  539. package/dist/types/CallFuncableType.js.map +1 -0
  540. package/dist/types/ClassType.d.ts +17 -0
  541. package/dist/types/ClassType.js +60 -0
  542. package/dist/types/ClassType.js.map +1 -0
  543. package/dist/types/ClassType.spec.d.ts +1 -0
  544. package/dist/types/ClassType.spec.js +76 -0
  545. package/dist/types/ClassType.spec.js.map +1 -0
  546. package/dist/types/ComponentType.d.ts +22 -0
  547. package/dist/types/ComponentType.js +107 -0
  548. package/dist/types/ComponentType.js.map +1 -0
  549. package/dist/types/DoubleType.d.ts +10 -5
  550. package/dist/types/DoubleType.js +21 -17
  551. package/dist/types/DoubleType.js.map +1 -1
  552. package/dist/types/DoubleType.spec.js +12 -4
  553. package/dist/types/DoubleType.spec.js.map +1 -1
  554. package/dist/types/DynamicType.d.ts +13 -5
  555. package/dist/types/DynamicType.js +26 -5
  556. package/dist/types/DynamicType.js.map +1 -1
  557. package/dist/types/DynamicType.spec.js +16 -5
  558. package/dist/types/DynamicType.spec.js.map +1 -1
  559. package/dist/types/EnumType.d.ts +42 -0
  560. package/dist/types/EnumType.js +98 -0
  561. package/dist/types/EnumType.js.map +1 -0
  562. package/dist/types/EnumType.spec.d.ts +1 -0
  563. package/dist/types/EnumType.spec.js +33 -0
  564. package/dist/types/EnumType.spec.js.map +1 -0
  565. package/dist/types/FloatType.d.ts +10 -5
  566. package/dist/types/FloatType.js +21 -17
  567. package/dist/types/FloatType.js.map +1 -1
  568. package/dist/types/FloatType.spec.js +4 -4
  569. package/dist/types/FloatType.spec.js.map +1 -1
  570. package/dist/types/FunctionType.d.ts +8 -22
  571. package/dist/types/FunctionType.js +25 -63
  572. package/dist/types/FunctionType.js.map +1 -1
  573. package/dist/types/InheritableType.d.ts +29 -0
  574. package/dist/types/InheritableType.js +173 -0
  575. package/dist/types/InheritableType.js.map +1 -0
  576. package/dist/types/InlineInterfaceType.d.ts +5 -0
  577. package/dist/types/InlineInterfaceType.js +17 -0
  578. package/dist/types/InlineInterfaceType.js.map +1 -0
  579. package/dist/types/IntegerType.d.ts +10 -5
  580. package/dist/types/IntegerType.js +21 -17
  581. package/dist/types/IntegerType.js.map +1 -1
  582. package/dist/types/IntegerType.spec.js +8 -4
  583. package/dist/types/IntegerType.spec.js.map +1 -1
  584. package/dist/types/InterfaceType.d.ts +14 -6
  585. package/dist/types/InterfaceType.js +30 -15
  586. package/dist/types/InterfaceType.js.map +1 -1
  587. package/dist/types/InterfaceType.spec.d.ts +1 -0
  588. package/dist/types/InterfaceType.spec.js +227 -0
  589. package/dist/types/InterfaceType.spec.js.map +1 -0
  590. package/dist/types/IntersectionType.d.ts +29 -0
  591. package/dist/types/IntersectionType.js +253 -0
  592. package/dist/types/IntersectionType.js.map +1 -0
  593. package/dist/types/IntersectionType.spec.d.ts +1 -0
  594. package/dist/types/IntersectionType.spec.js +150 -0
  595. package/dist/types/IntersectionType.spec.js.map +1 -0
  596. package/dist/types/InvalidType.d.ts +10 -5
  597. package/dist/types/InvalidType.js +21 -9
  598. package/dist/types/InvalidType.js.map +1 -1
  599. package/dist/types/InvalidType.spec.js +8 -4
  600. package/dist/types/InvalidType.spec.js.map +1 -1
  601. package/dist/types/LongIntegerType.d.ts +10 -5
  602. package/dist/types/LongIntegerType.js +21 -17
  603. package/dist/types/LongIntegerType.js.map +1 -1
  604. package/dist/types/LongIntegerType.spec.js +10 -4
  605. package/dist/types/LongIntegerType.spec.js.map +1 -1
  606. package/dist/types/NamespaceType.d.ts +12 -0
  607. package/dist/types/NamespaceType.js +28 -0
  608. package/dist/types/NamespaceType.js.map +1 -0
  609. package/dist/types/ObjectType.d.ts +12 -5
  610. package/dist/types/ObjectType.js +25 -8
  611. package/dist/types/ObjectType.js.map +1 -1
  612. package/dist/types/ObjectType.spec.js +3 -3
  613. package/dist/types/ObjectType.spec.js.map +1 -1
  614. package/dist/types/ReferenceType.d.ts +123 -0
  615. package/dist/types/ReferenceType.js +720 -0
  616. package/dist/types/ReferenceType.js.map +1 -0
  617. package/dist/types/ReferenceType.spec.d.ts +1 -0
  618. package/dist/types/ReferenceType.spec.js +151 -0
  619. package/dist/types/ReferenceType.spec.js.map +1 -0
  620. package/dist/types/StringType.d.ts +12 -5
  621. package/dist/types/StringType.js +23 -8
  622. package/dist/types/StringType.js.map +1 -1
  623. package/dist/types/StringType.spec.js +3 -3
  624. package/dist/types/StringType.spec.js.map +1 -1
  625. package/dist/types/TypeStatementType.d.ts +18 -0
  626. package/dist/types/TypeStatementType.js +45 -0
  627. package/dist/types/TypeStatementType.js.map +1 -0
  628. package/dist/types/TypedFunctionType.d.ts +34 -0
  629. package/dist/types/TypedFunctionType.js +147 -0
  630. package/dist/types/TypedFunctionType.js.map +1 -0
  631. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  632. package/dist/types/TypedFunctionType.spec.js +122 -0
  633. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  634. package/dist/types/UninitializedType.d.ts +11 -6
  635. package/dist/types/UninitializedType.js +20 -11
  636. package/dist/types/UninitializedType.js.map +1 -1
  637. package/dist/types/UnionType.d.ts +27 -0
  638. package/dist/types/UnionType.js +193 -0
  639. package/dist/types/UnionType.js.map +1 -0
  640. package/dist/types/UnionType.spec.d.ts +1 -0
  641. package/dist/types/UnionType.spec.js +205 -0
  642. package/dist/types/UnionType.spec.js.map +1 -0
  643. package/dist/types/VoidType.d.ts +11 -5
  644. package/dist/types/VoidType.js +22 -8
  645. package/dist/types/VoidType.js.map +1 -1
  646. package/dist/types/VoidType.spec.js +3 -3
  647. package/dist/types/VoidType.spec.js.map +1 -1
  648. package/dist/types/helper.spec.d.ts +1 -0
  649. package/dist/types/helper.spec.js +174 -0
  650. package/dist/types/helper.spec.js.map +1 -0
  651. package/dist/types/helpers.d.ts +51 -0
  652. package/dist/types/helpers.js +323 -0
  653. package/dist/types/helpers.js.map +1 -0
  654. package/dist/types/index.d.ts +22 -0
  655. package/dist/types/index.js +39 -0
  656. package/dist/types/index.js.map +1 -0
  657. package/dist/types/roFunctionType.d.ts +11 -0
  658. package/dist/types/roFunctionType.js +37 -0
  659. package/dist/types/roFunctionType.js.map +1 -0
  660. package/dist/types/roFunctionType.spec.d.ts +1 -0
  661. package/dist/types/roFunctionType.spec.js +20 -0
  662. package/dist/types/roFunctionType.spec.js.map +1 -0
  663. package/dist/util.d.ts +288 -187
  664. package/dist/util.js +2018 -575
  665. package/dist/util.js.map +1 -1
  666. package/dist/validators/ClassValidator.d.ts +9 -15
  667. package/dist/validators/ClassValidator.js +93 -138
  668. package/dist/validators/ClassValidator.js.map +1 -1
  669. package/package.json +185 -138
  670. package/CHANGELOG.md +0 -1188
  671. package/dist/astUtils/index.d.ts +0 -7
  672. package/dist/astUtils/index.js +0 -26
  673. package/dist/astUtils/index.js.map +0 -1
  674. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  675. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  676. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  677. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  678. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  679. package/dist/lexer/index.d.ts +0 -3
  680. package/dist/lexer/index.js +0 -17
  681. package/dist/lexer/index.js.map +0 -1
  682. package/dist/parser/SGTypes.spec.js +0 -351
  683. package/dist/parser/SGTypes.spec.js.map +0 -1
  684. package/dist/parser/index.d.ts +0 -3
  685. package/dist/parser/index.js +0 -16
  686. package/dist/parser/index.js.map +0 -1
  687. package/dist/preprocessor/Chunk.d.ts +0 -82
  688. package/dist/preprocessor/Chunk.js +0 -77
  689. package/dist/preprocessor/Chunk.js.map +0 -1
  690. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  691. package/dist/preprocessor/Preprocessor.js +0 -156
  692. package/dist/preprocessor/Preprocessor.js.map +0 -1
  693. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  694. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  695. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  696. package/dist/preprocessor/PreprocessorParser.js +0 -194
  697. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  698. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  699. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  700. package/dist/preprocessor/index.d.ts +0 -3
  701. package/dist/preprocessor/index.js +0 -16
  702. package/dist/preprocessor/index.js.map +0 -1
  703. package/dist/types/CustomType.d.ts +0 -10
  704. package/dist/types/CustomType.js +0 -35
  705. package/dist/types/CustomType.js.map +0 -1
  706. package/dist/types/FunctionType.spec.js +0 -29
  707. package/dist/types/FunctionType.spec.js.map +0 -1
  708. package/dist/types/LazyType.d.ts +0 -15
  709. package/dist/types/LazyType.js +0 -32
  710. package/dist/types/LazyType.js.map +0 -1
  711. /package/dist/{bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts → astUtils/CachedLookups.spec.d.ts} +0 -0
  712. /package/dist/{parser/SGTypes.spec.d.ts → astUtils/Editor.spec.d.ts} +0 -0
  713. /package/dist/{preprocessor/Preprocessor.spec.d.ts → bscPlugin/completions/CompletionsProcessor.spec.d.ts} +0 -0
  714. /package/dist/{preprocessor/PreprocessorParser.spec.d.ts → bscPlugin/definition/DefinitionProvider.spec.d.ts} +0 -0
  715. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/hover/HoverProcessor.spec.d.ts} +0 -0
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  /* eslint-disable @typescript-eslint/no-for-in-array */
4
- const chai_1 = require("chai");
4
+ const chai_config_spec_1 = require("../../../chai-config.spec");
5
5
  const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
6
- const lexer_1 = require("../../../lexer");
6
+ const TokenKind_1 = require("../../../lexer/TokenKind");
7
7
  const Parser_1 = require("../../Parser");
8
8
  const Parser_spec_1 = require("../Parser.spec");
9
9
  const Statement_1 = require("../../Statement");
@@ -14,80 +14,80 @@ describe('ternary expressions', () => {
14
14
  it('throws exception when used in brightscript scope', () => {
15
15
  var _a;
16
16
  let { diagnostics } = Parser_1.Parser.parse(`a = true ? "human" : "Zombie"`, { mode: Parser_1.ParseMode.BrightScript });
17
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('ternary operator').message);
17
+ (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('ternary operator').message);
18
18
  });
19
19
  it('cannot be used as a statement', () => {
20
20
  let { diagnostics } = Parser_1.Parser.parse([
21
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
22
- Parser_spec_1.token(lexer_1.TokenKind.Question, '?'),
23
- Parser_spec_1.token(lexer_1.TokenKind.StringLiteral, 'Human'),
24
- Parser_spec_1.token(lexer_1.TokenKind.Colon, ':'),
25
- Parser_spec_1.token(lexer_1.TokenKind.StringLiteral, 'Zombie'),
21
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
22
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Question, '?'),
23
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.StringLiteral, 'Human'),
24
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Colon, ':'),
25
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.StringLiteral, 'Zombie'),
26
26
  Parser_spec_1.EOF
27
27
  ], { mode: Parser_1.ParseMode.BrighterScript });
28
- chai_1.expect(diagnostics).not.to.be.empty;
28
+ (0, chai_config_spec_1.expect)(diagnostics).not.to.be.empty;
29
29
  });
30
30
  it(`cannot be used as a statement`, () => {
31
- chai_1.expect(parseBs(`true ? true : "zombie"`).diagnostics).not.to.be.empty;
32
- chai_1.expect(parseBs(`false ? true : "zombie"`).diagnostics).not.to.be.empty;
33
- chai_1.expect(parseBs(`len("person") = 10 ? true : "zombie"`).diagnostics).not.to.be.empty;
34
- chai_1.expect(parseBs(`m.getResponse() ? true : "zombie"`).diagnostics).not.to.be.empty;
31
+ (0, chai_config_spec_1.expect)(parseBs(`true ? true : "zombie"`).diagnostics).not.to.be.empty;
32
+ (0, chai_config_spec_1.expect)(parseBs(`false ? true : "zombie"`).diagnostics).not.to.be.empty;
33
+ (0, chai_config_spec_1.expect)(parseBs(`len("person") = 10 ? true : "zombie"`).diagnostics).not.to.be.empty;
34
+ (0, chai_config_spec_1.expect)(parseBs(`m.getResponse() ? true : "zombie"`).diagnostics).not.to.be.empty;
35
35
  });
36
36
  it(`supports boolean expression condition`, () => {
37
- let { statements, diagnostics } = parseBs(`being = isZombie = false ? "human" : "zombie"`);
38
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.AssignmentStatement);
39
- chai_1.expect(statements[0].value).to.be.instanceof(Expression_1.TernaryExpression);
40
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
37
+ let { ast, diagnostics } = parseBs(`being = isZombie = false ? "human" : "zombie"`);
38
+ (0, chai_config_spec_1.expect)(ast.statements[0]).to.be.instanceof(Statement_1.AssignmentStatement);
39
+ (0, chai_config_spec_1.expect)(ast.statements[0].value).to.be.instanceof(Expression_1.TernaryExpression);
40
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
41
41
  });
42
42
  it(`supports function condition`, () => {
43
- let { statements, diagnostics } = parseBs(`a = user.getAccount() ? "logged in" : "not logged in"`);
44
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.AssignmentStatement);
45
- chai_1.expect(statements[0].value).to.be.instanceof(Expression_1.TernaryExpression);
46
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
43
+ let { ast, diagnostics } = parseBs(`a = user.getAccount() ? "logged in" : "not logged in"`);
44
+ (0, chai_config_spec_1.expect)(ast.statements[0]).to.be.instanceof(Statement_1.AssignmentStatement);
45
+ (0, chai_config_spec_1.expect)(ast.statements[0].value).to.be.instanceof(Expression_1.TernaryExpression);
46
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
47
47
  });
48
48
  it(`supports various tests with primitive values:`, () => {
49
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "human" : "zombie"`));
50
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = false ? "human" : "zombie"`));
51
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = len("person") = 10 ? "human" : "zombie"`));
52
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = m.getResponse() ? "human" : "zombie"`));
53
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = m.myZombies[3].hasEaten = true ? "human" : "zombie"`));
49
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "human" : "zombie"`));
50
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = false ? "human" : "zombie"`));
51
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = len("person") = 10 ? "human" : "zombie"`));
52
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = m.getResponse() ? "human" : "zombie"`));
53
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = m.myZombies[3].hasEaten = true ? "human" : "zombie"`));
54
54
  });
55
55
  it(`supports simple consequents`, () => {
56
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? true : "zombie"`));
57
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? false : "zombie"`));
58
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? len("person") = 10 : "zombie"`));
59
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? m.getResponse() : "zombie"`));
60
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? m.myZombies[3].hasEaten = true : "zombie"`));
61
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? getZombieName : "zombie"`));
56
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? true : "zombie"`));
57
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? false : "zombie"`));
58
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? len("person") = 10 : "zombie"`));
59
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? m.getResponse() : "zombie"`));
60
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? m.myZombies[3].hasEaten = true : "zombie"`));
61
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? getZombieName : "zombie"`));
62
62
  });
63
63
  it(`supports simple alternates`, () => {
64
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": true`));
65
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": false`));
66
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": len("person") = 10`));
67
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": m.getResponse()`));
68
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": m.myZombies[3].hasEaten = true`));
69
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": getZombieName`));
70
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": true`));
64
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": true`));
65
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": false`));
66
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": len("person") = 10`));
67
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": m.getResponse()`));
68
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": m.myZombies[3].hasEaten = true`));
69
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": getZombieName`));
70
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": true`));
71
71
  });
72
72
  it('supports multi-line and comments', () => {
73
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? \n"zombie"\n: \ntrue`));
74
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie"\n: \ntrue`));
75
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? \n"zombie": \ntrue`));
76
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? \n"zombie"\n: true`));
77
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie"\n: \ntrue`));
78
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? "zombie": \ntrue`));
79
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ? \n\n\n"zombie": \n\n\n\ntrue`));
73
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n"zombie"\n: \ntrue`));
74
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie"\n: \ntrue`));
75
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n"zombie": \ntrue`));
76
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n"zombie"\n: true`));
77
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie"\n: \ntrue`));
78
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? "zombie": \ntrue`));
79
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ? \n\n\n"zombie": \n\n\n\ntrue`));
80
80
  //with comments
81
- testHelpers_spec_1.expectZeroDiagnostics(parseBs(`result = true ?'comment\n"zombie"'comment\n:'comment\nntrue`));
81
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parseBs(`result = true ?'comment\n"zombie"'comment\n:'comment\nntrue`));
82
82
  });
83
83
  describe('in assignment', () => {
84
84
  it(`simple case`, () => {
85
- let { statements, diagnostics } = parseBs(`a = true ? "human" : "zombie"`);
86
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
87
- chai_1.expect(statements[0]).instanceof(Statement_1.AssignmentStatement);
85
+ let { ast, diagnostics } = parseBs(`a = true ? "human" : "zombie"`);
86
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
87
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.AssignmentStatement);
88
88
  });
89
89
  it(`multi line arrays case`, () => {
90
- let { statements, diagnostics } = parseBs(`
90
+ let { ast, diagnostics } = parseBs(`
91
91
  a = true ? [
92
92
  "one"
93
93
  "two"
@@ -98,24 +98,24 @@ describe('ternary expressions', () => {
98
98
  "three"
99
99
  ]
100
100
  `);
101
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
102
- chai_1.expect(statements[0]).instanceof(Statement_1.AssignmentStatement);
101
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
102
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.AssignmentStatement);
103
103
  });
104
104
  it(`single line assoc array`, () => {
105
- let { statements, diagnostics } = parseBs(`a = true ? {"a":"a"} : {}`);
106
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
107
- chai_1.expect(statements[0]).instanceof(Statement_1.AssignmentStatement);
105
+ let { ast, diagnostics } = parseBs(`a = true ? {"a":"a"} : {}`);
106
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
107
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.AssignmentStatement);
108
108
  });
109
109
  it(`multi line assoc array`, () => {
110
- let { statements, diagnostics } = parseBs(`
110
+ let { ast, diagnostics } = parseBs(`
111
111
  a = true ? {"a":"a"} : {
112
112
  "b": "test"
113
113
  }`);
114
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
115
- chai_1.expect(statements[0]).instanceof(Statement_1.AssignmentStatement);
114
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
115
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.AssignmentStatement);
116
116
  });
117
117
  it(`multi line assoc array - both sides`, () => {
118
- let { statements, diagnostics } = parseBs(`
118
+ let { ast, diagnostics } = parseBs(`
119
119
  a = true ? {
120
120
  "a":"a"
121
121
  "b":"b"
@@ -123,197 +123,752 @@ describe('ternary expressions', () => {
123
123
  "b": "test"
124
124
  }
125
125
  `);
126
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
127
- chai_1.expect(statements[0]).instanceof(Statement_1.AssignmentStatement);
126
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
127
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.AssignmentStatement);
128
128
  });
129
129
  it(`in func call with array args`, () => {
130
- let { statements, diagnostics } = parseBs(`m.eatBrains(a.count() > 10 ? ["a","B"] : ["c", "d"])`);
131
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
132
- chai_1.expect(statements[0]).instanceof(Statement_1.ExpressionStatement);
133
- chai_1.expect(statements[0].expression).instanceof(Expression_1.CallExpression);
134
- let callExpression = statements[0].expression;
135
- chai_1.expect(callExpression.args.length).to.equal(1);
136
- chai_1.expect(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
130
+ let { ast, diagnostics } = parseBs(`m.eatBrains(a.count() > 10 ? ["a","B"] : ["c", "d"])`);
131
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
132
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.ExpressionStatement);
133
+ (0, chai_config_spec_1.expect)(ast.statements[0].expression).instanceof(Expression_1.CallExpression);
134
+ let callExpression = ast.statements[0].expression;
135
+ (0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(1);
136
+ (0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
137
137
  });
138
138
  it(`in func call with aa args`, () => {
139
- let { statements, diagnostics } = parseBs(`m.eatBrains(a.count() > 10 ? {"a":1} : {"b": ["c", "d"]})`);
140
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
141
- chai_1.expect(statements[0]).instanceof(Statement_1.ExpressionStatement);
142
- chai_1.expect(statements[0].expression).instanceof(Expression_1.CallExpression);
143
- let callExpression = statements[0].expression;
144
- chai_1.expect(callExpression.args.length).to.equal(1);
145
- chai_1.expect(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
139
+ let { ast, diagnostics } = parseBs(`m.eatBrains(a.count() > 10 ? {"a":1} : {"b": ["c", "d"]})`);
140
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
141
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.ExpressionStatement);
142
+ (0, chai_config_spec_1.expect)(ast.statements[0].expression).instanceof(Expression_1.CallExpression);
143
+ let callExpression = ast.statements[0].expression;
144
+ (0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(1);
145
+ (0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
146
146
  });
147
147
  it(`in simple func call`, () => {
148
- let { statements, diagnostics } = parseBs(`m.eatBrains(a = true ? "a" : "b")`);
149
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
150
- chai_1.expect(statements[0]).instanceof(Statement_1.ExpressionStatement);
151
- chai_1.expect(statements[0].expression).instanceof(Expression_1.CallExpression);
152
- let callExpression = statements[0].expression;
153
- chai_1.expect(callExpression.args.length).to.equal(1);
154
- chai_1.expect(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
148
+ let { ast, diagnostics } = parseBs(`m.eatBrains(a = true ? "a" : "b")`);
149
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
150
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.ExpressionStatement);
151
+ (0, chai_config_spec_1.expect)(ast.statements[0].expression).instanceof(Expression_1.CallExpression);
152
+ let callExpression = ast.statements[0].expression;
153
+ (0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(1);
154
+ (0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
155
155
  });
156
156
  it(`in func call with more args`, () => {
157
- let { statements, diagnostics } = parseBs(`m.eatBrains(a = true ? "a" : "b", true, 12)`);
158
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
159
- chai_1.expect(statements[0]).instanceof(Statement_1.ExpressionStatement);
160
- chai_1.expect(statements[0].expression).instanceof(Expression_1.CallExpression);
161
- let callExpression = statements[0].expression;
162
- chai_1.expect(callExpression.args.length).to.equal(3);
163
- chai_1.expect(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
157
+ let { ast, diagnostics } = parseBs(`m.eatBrains(a = true ? "a" : "b", true, 12)`);
158
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
159
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.ExpressionStatement);
160
+ (0, chai_config_spec_1.expect)(ast.statements[0].expression).instanceof(Expression_1.CallExpression);
161
+ let callExpression = ast.statements[0].expression;
162
+ (0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(3);
163
+ (0, chai_config_spec_1.expect)(callExpression.args[0]).instanceof(Expression_1.TernaryExpression);
164
164
  });
165
165
  it(`in func call with more args, and comparing value`, () => {
166
- let { statements, diagnostics } = parseBs(`m.eatBrains((a = true ? "a" : "b").count() = 3, true, 12)`);
167
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
168
- chai_1.expect(statements[0]).instanceof(Statement_1.ExpressionStatement);
169
- chai_1.expect(statements[0].expression).instanceof(Expression_1.CallExpression);
170
- let callExpression = statements[0].expression;
171
- chai_1.expect(callExpression.args.length).to.equal(3);
166
+ let { ast, diagnostics } = parseBs(`m.eatBrains((a = true ? "a" : "b").count() = 3, true, 12)`);
167
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
168
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.ExpressionStatement);
169
+ (0, chai_config_spec_1.expect)(ast.statements[0].expression).instanceof(Expression_1.CallExpression);
170
+ let callExpression = ast.statements[0].expression;
171
+ (0, chai_config_spec_1.expect)(callExpression.args.length).to.equal(3);
172
172
  });
173
173
  it(`in array`, () => {
174
- let { statements, diagnostics } = parseBs(`a = [a = true ? {"a":"a"} : {"b":"b"}, "c"]`);
175
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
176
- chai_1.expect(statements[0]).instanceof(Statement_1.AssignmentStatement);
177
- chai_1.expect(statements[0].value).instanceof(Expression_1.ArrayLiteralExpression);
178
- let literalExpression = statements[0].value;
179
- chai_1.expect(literalExpression.elements[0]).instanceOf(Expression_1.TernaryExpression);
180
- chai_1.expect(literalExpression.elements[1]).instanceOf(Expression_1.LiteralExpression);
174
+ let { ast, diagnostics } = parseBs(`a = [a = true ? {"a":"a"} : {"b":"b"}, "c"]`);
175
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
176
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.AssignmentStatement);
177
+ (0, chai_config_spec_1.expect)(ast.statements[0].value).instanceof(Expression_1.ArrayLiteralExpression);
178
+ let literalExpression = ast.statements[0].value;
179
+ (0, chai_config_spec_1.expect)(literalExpression.elements[0]).instanceOf(Expression_1.TernaryExpression);
180
+ (0, chai_config_spec_1.expect)(literalExpression.elements[1]).instanceOf(Expression_1.LiteralExpression);
181
181
  });
182
182
  it(`in aa`, () => {
183
- let { statements, diagnostics } = parseBs(`a = {"v1": a = true ? {"a":"a"} : {"b":"b"}, "v2": "c"}`);
184
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
185
- chai_1.expect(statements[0]).instanceof(Statement_1.AssignmentStatement);
186
- chai_1.expect(statements[0].value).instanceof(Expression_1.AALiteralExpression);
187
- let literalExpression = statements[0].value;
188
- chai_1.expect(literalExpression.elements[0].keyToken.text).is.equal('"v1"');
189
- chai_1.expect(literalExpression.elements[0].value).instanceOf(Expression_1.TernaryExpression);
190
- chai_1.expect(literalExpression.elements[1].keyToken.text).is.equal('"v2"');
191
- chai_1.expect(literalExpression.elements[1].value).instanceOf(Expression_1.LiteralExpression);
183
+ let { ast, diagnostics } = parseBs(`a = {"v1": a = true ? {"a":"a"} : {"b":"b"}, "v2": "c"}`);
184
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
185
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.AssignmentStatement);
186
+ (0, chai_config_spec_1.expect)(ast.statements[0].value).instanceof(Expression_1.AALiteralExpression);
187
+ let literalExpression = ast.statements[0].value;
188
+ (0, chai_config_spec_1.expect)(literalExpression.elements[0].tokens.key.text).is.equal('"v1"');
189
+ (0, chai_config_spec_1.expect)(literalExpression.elements[0].value).instanceOf(Expression_1.TernaryExpression);
190
+ (0, chai_config_spec_1.expect)(literalExpression.elements[1].tokens.key.text).is.equal('"v2"');
191
+ (0, chai_config_spec_1.expect)(literalExpression.elements[1].value).instanceOf(Expression_1.LiteralExpression);
192
192
  });
193
193
  it(`in for each`, () => {
194
- let { statements, diagnostics } = parseBs(`for each person in isZombieMode ? zombies : humans
194
+ let { ast, diagnostics } = parseBs(`for each person in isZombieMode ? zombies : humans
195
195
  ? "person is " ; person
196
196
  end for
197
197
  `);
198
- testHelpers_spec_1.expectZeroDiagnostics(diagnostics);
199
- chai_1.expect(statements[0]).instanceof(Statement_1.ForEachStatement);
200
- chai_1.expect(statements[0].target).instanceof(Expression_1.TernaryExpression);
198
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
199
+ (0, chai_config_spec_1.expect)(ast.statements[0]).instanceof(Statement_1.ForEachStatement);
200
+ (0, chai_config_spec_1.expect)(ast.statements[0].target).instanceof(Expression_1.TernaryExpression);
201
201
  });
202
202
  it('creates TernaryExpression with missing alternate', () => {
203
- const { statements } = parseBs(`
203
+ const { ast } = parseBs(`
204
204
  print name = "bob" ? "human":
205
205
  `);
206
- const expr = statements[0].expressions[0];
207
- chai_1.expect(expr).to.be.instanceof(Expression_1.TernaryExpression);
208
- chai_1.expect(expr).property('alternate').to.be.undefined;
209
- chai_1.expect(expr).property('consequent').not.to.be.undefined;
206
+ const expr = ast.statements[0].expressions[0];
207
+ (0, chai_config_spec_1.expect)(expr).to.be.instanceof(Expression_1.TernaryExpression);
208
+ (0, chai_config_spec_1.expect)(expr).property('alternate').to.be.undefined;
209
+ (0, chai_config_spec_1.expect)(expr).property('consequent').not.to.be.undefined;
210
210
  });
211
211
  it('creates TernaryExpression with missing consequent', () => {
212
- const { statements } = parseBs(`
212
+ const { ast } = parseBs(`
213
213
  print name = "bob" ? : "human"
214
214
  `);
215
- const expr = statements[0].expressions[0];
216
- chai_1.expect(expr).to.be.instanceof(Expression_1.TernaryExpression);
217
- chai_1.expect(expr).property('consequent').to.be.undefined;
218
- chai_1.expect(expr).property('alternate').not.to.be.undefined;
215
+ const expr = ast.statements[0].expressions[0];
216
+ (0, chai_config_spec_1.expect)(expr).to.be.instanceof(Expression_1.TernaryExpression);
217
+ (0, chai_config_spec_1.expect)(expr).property('consequent').to.be.undefined;
218
+ (0, chai_config_spec_1.expect)(expr).property('alternate').not.to.be.undefined;
219
219
  });
220
220
  });
221
- describe('transpilation', () => {
221
+ describe('transpile', () => {
222
222
  let rootDir = process.cwd();
223
223
  let program;
224
- let testTranspile = testHelpers_spec_1.getTestTranspile(() => [program, rootDir]);
224
+ let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, rootDir]);
225
225
  beforeEach(() => {
226
226
  program = new Program_1.Program({ rootDir: rootDir });
227
227
  });
228
228
  afterEach(() => {
229
229
  program.dispose();
230
230
  });
231
- it('uses the proper prefix when aliased package is installed', () => {
231
+ it('transpiles top-level ternary expression', async () => {
232
+ await testTranspile(`
233
+ a += true ? 1 : 2
234
+ `, `
235
+ if true then
236
+ a += 1
237
+ else
238
+ a += 2
239
+ end if
240
+ `, undefined, undefined, false);
241
+ });
242
+ it('transpiles ternary in RHS of AssignmentStatement to IfStatement', async () => {
243
+ await testTranspile(`
244
+ sub main()
245
+ a = true ? 1 : 2
246
+ end sub
247
+ `, `
248
+ sub main()
249
+ if true then
250
+ a = 1
251
+ else
252
+ a = 2
253
+ end if
254
+ end sub
255
+ `);
256
+ });
257
+ it('transpiles ternary in RHS of incrementor AssignmentStatement to IfStatement', async () => {
258
+ await testTranspile(`
259
+ sub main()
260
+ a = 1
261
+ a += true ? 1 : 2
262
+ end sub
263
+ `, `
264
+ sub main()
265
+ a = 1
266
+ if true then
267
+ a += 1
268
+ else
269
+ a += 2
270
+ end if
271
+ end sub
272
+ `);
273
+ });
274
+ it('transpiles ternary in RHS of DottedSetStatement to IfStatement', async () => {
275
+ await testTranspile(`
276
+ sub main()
277
+ m.a = true ? 1 : 2
278
+ end sub
279
+ `, `
280
+ sub main()
281
+ if true then
282
+ m.a = 1
283
+ else
284
+ m.a = 2
285
+ end if
286
+ end sub
287
+ `);
288
+ });
289
+ it('transpiles ternary in RHS of incrementor DottedSetStatement to IfStatement', async () => {
290
+ await testTranspile(`
291
+ sub main()
292
+ m.a += true ? 1 : 2
293
+ end sub
294
+ `, `
295
+ sub main()
296
+ if true then
297
+ m.a += 1
298
+ else
299
+ m.a += 2
300
+ end if
301
+ end sub
302
+ `);
303
+ });
304
+ it('transpiles ternary in RHS of IndexedSetStatement to IfStatement', async () => {
305
+ await testTranspile(`
306
+ sub main()
307
+ m["a"] = true ? 1 : 2
308
+ end sub
309
+ `, `
310
+ sub main()
311
+ if true then
312
+ m["a"] = 1
313
+ else
314
+ m["a"] = 2
315
+ end if
316
+ end sub
317
+ `);
318
+ });
319
+ it('transpiles ternary in RHS of incrementor IndexedSetStatement to IfStatement', async () => {
320
+ await testTranspile(`
321
+ sub main()
322
+ m["a"] += true ? 1 : 2
323
+ end sub
324
+ `, `
325
+ sub main()
326
+ if true then
327
+ m["a"] += 1
328
+ else
329
+ m["a"] += 2
330
+ end if
331
+ end sub
332
+ `);
333
+ });
334
+ it('uses the proper prefix when aliased package is installed', async () => {
232
335
  program.setFile('source/roku_modules/rokucommunity_bslib/bslib.brs', '');
233
- testTranspile(`a = user = invalid ? "no user" : "logged in"`, `a = rokucommunity_bslib_ternary(user = invalid, "no user", "logged in")`);
234
- });
235
- it('simple consequents', () => {
236
- testTranspile(`a = user = invalid ? "no user" : "logged in"`, `a = bslib_ternary(user = invalid, "no user", "logged in")`);
237
- testTranspile(`a = user = invalid ? 1 : "logged in"`, `a = bslib_ternary(user = invalid, 1, "logged in")`);
238
- testTranspile(`a = user = invalid ? 1.2 : "logged in"`, `a = bslib_ternary(user = invalid, 1.2, "logged in")`);
239
- testTranspile(`a = user = invalid ? [] : "logged in"`, `a = bslib_ternary(user = invalid, [], "logged in")`);
240
- testTranspile(`a = user = invalid ? {} : "logged in"`, `a = bslib_ternary(user = invalid, {}, "logged in")`);
241
- });
242
- it('simple alternates', () => {
243
- testTranspile(`a = user = invalid ? "logged in" : "no user" `, `a = bslib_ternary(user = invalid, "logged in", "no user")`);
244
- testTranspile(`a = user = invalid ? "logged in" : 1 `, `a = bslib_ternary(user = invalid, "logged in", 1)`);
245
- testTranspile(`a = user = invalid ? "logged in" : 1.2 `, `a = bslib_ternary(user = invalid, "logged in", 1.2)`);
246
- testTranspile(`a = user = invalid ? "logged in" : [] `, `a = bslib_ternary(user = invalid, "logged in", [])`);
247
- testTranspile(`a = user = invalid ? "logged in" : {} `, `a = bslib_ternary(user = invalid, "logged in", {})`);
248
- });
249
- it('complex conditions do not cause scope capture', () => {
250
- testTranspile(`a = IsTrue() = true ? true : false `, `a = bslib_ternary(IsTrue() = true, true, false)`);
251
- testTranspile(`a = m.top.service.IsTrue() ? true : false `, `a = bslib_ternary(m.top.service.IsTrue(), true, false)`);
252
- testTranspile(`a = First(second(third(fourth(m.fifth()[123].truthy(1))))) ? true : false `, `a = bslib_ternary(First(second(third(fourth(m.fifth()[123].truthy(1))))), true, false)`);
253
- });
254
- it('captures scope for function call conseqent', () => {
255
- testTranspile(`name = zombie.getName() <> invalid ? zombie.GetName() : "zombie"`, `
256
- name = (function(__bsCondition, zombie)
336
+ await testTranspile(`
337
+ sub main()
338
+ user = {}
339
+ result = [
340
+ user = invalid ? "no user" : "logged in"
341
+ ]
342
+ end sub
343
+ `, `
344
+ sub main()
345
+ user = {}
346
+ result = [
347
+ rokucommunity_bslib_ternary(user = invalid, "no user", "logged in")
348
+ ]
349
+ end sub
350
+ `);
351
+ });
352
+ it('simple consequents', async () => {
353
+ await testTranspile(`
354
+ sub main()
355
+ user = {}
356
+ a = user = invalid ? "no user" : "logged in"
357
+ end sub
358
+ `, `
359
+ sub main()
360
+ user = {}
361
+ if user = invalid then
362
+ a = "no user"
363
+ else
364
+ a = "logged in"
365
+ end if
366
+ end sub
367
+ `);
368
+ await testTranspile(`
369
+ sub main()
370
+ user = {}
371
+ a = user = invalid ? 1 : "logged in"
372
+ end sub
373
+ `, `
374
+ sub main()
375
+ user = {}
376
+ if user = invalid then
377
+ a = 1
378
+ else
379
+ a = "logged in"
380
+ end if
381
+ end sub
382
+ `);
383
+ await testTranspile(`
384
+ sub main()
385
+ user = {}
386
+ a = user = invalid ? 1.2 : "logged in"
387
+ end sub
388
+ `, `
389
+ sub main()
390
+ user = {}
391
+ if user = invalid then
392
+ a = 1.2
393
+ else
394
+ a = "logged in"
395
+ end if
396
+ end sub
397
+ `);
398
+ await testTranspile(`
399
+ sub main()
400
+ user = {}
401
+ a = user = invalid ? {} : "logged in"
402
+ end sub
403
+ `, `
404
+ sub main()
405
+ user = {}
406
+ if user = invalid then
407
+ a = {}
408
+ else
409
+ a = "logged in"
410
+ end if
411
+ end sub
412
+ `);
413
+ await testTranspile(`
414
+ sub main()
415
+ user = {}
416
+ a = user = invalid ? [] : "logged in"
417
+ end sub
418
+ `, `
419
+ sub main()
420
+ user = {}
421
+ if user = invalid then
422
+ a = []
423
+ else
424
+ a = "logged in"
425
+ end if
426
+ end sub
427
+ `);
428
+ });
429
+ it('simple alternates', async () => {
430
+ await testTranspile(`
431
+ sub main()
432
+ user = {}
433
+ a = user = invalid ? "logged in" : "no user"
434
+ end sub
435
+ `, `
436
+ sub main()
437
+ user = {}
438
+ if user = invalid then
439
+ a = "logged in"
440
+ else
441
+ a = "no user"
442
+ end if
443
+ end sub
444
+ `);
445
+ await testTranspile(`
446
+ sub main()
447
+ user = {}
448
+ a = user = invalid ? "logged in" : 1
449
+ end sub
450
+ `, `
451
+ sub main()
452
+ user = {}
453
+ if user = invalid then
454
+ a = "logged in"
455
+ else
456
+ a = 1
457
+ end if
458
+ end sub
459
+ `);
460
+ await testTranspile(`
461
+ sub main()
462
+ user = {}
463
+ a = user = invalid ? "logged in" : 1.2
464
+ end sub
465
+ `, `
466
+ sub main()
467
+ user = {}
468
+ if user = invalid then
469
+ a = "logged in"
470
+ else
471
+ a = 1.2
472
+ end if
473
+ end sub
474
+ `);
475
+ await testTranspile(`
476
+ sub main()
477
+ user = {}
478
+ a = user = invalid ? "logged in" : []
479
+ end sub
480
+ `, `
481
+ sub main()
482
+ user = {}
483
+ if user = invalid then
484
+ a = "logged in"
485
+ else
486
+ a = []
487
+ end if
488
+ end sub
489
+ `);
490
+ await testTranspile(`
491
+ sub main()
492
+ user = {}
493
+ a = user = invalid ? "logged in" : {}
494
+ end sub
495
+ `, `
496
+ sub main()
497
+ user = {}
498
+ if user = invalid then
499
+ a = "logged in"
500
+ else
501
+ a = {}
502
+ end if
503
+ end sub
504
+ `);
505
+ });
506
+ it('does not capture restricted OS functions', async () => {
507
+ await testTranspile(`
508
+ sub main()
509
+ test(true ? invalid : [
510
+ createObject("roDeviceInfo")
511
+ type(true)
512
+ GetGlobalAA()
513
+ box(1)
514
+ run("file.brs", invalid)
515
+ eval("print 1")
516
+ GetLastRunCompileError()
517
+ GetLastRunRuntimeError()
518
+ Tab(1)
519
+ Pos(0)
520
+ ])
521
+ end sub
522
+ sub test(p1)
523
+ end sub
524
+ `, `
525
+ sub main()
526
+ test((function(__bsCondition)
257
527
  if __bsCondition then
258
- return zombie.GetName()
528
+ return invalid
259
529
  else
260
- return "zombie"
530
+ return [
531
+ createObject("roDeviceInfo")
532
+ type(true)
533
+ GetGlobalAA()
534
+ box(1)
535
+ run("file.brs", invalid)
536
+ eval("print 1")
537
+ GetLastRunCompileError()
538
+ GetLastRunRuntimeError()
539
+ Tab(1)
540
+ Pos(0)
541
+ ]
261
542
  end if
262
- end function)(zombie.getName() <> invalid, zombie)
543
+ end function)(true))
544
+ end sub
545
+
546
+ sub test(p1)
547
+ end sub
548
+ `);
549
+ });
550
+ it('complex conditions do not cause scope capture', async () => {
551
+ await testTranspile(`
552
+ sub main()
553
+ a = str(123) = "123" ? true : false
554
+ end sub
555
+ `, `
556
+ sub main()
557
+ if str(123) = "123" then
558
+ a = true
559
+ else
560
+ a = false
561
+ end if
562
+ end sub
563
+ `);
564
+ await testTranspile(`
565
+ sub main()
566
+ a = m.top.service.IsTrue() ? true : false
567
+ end sub
568
+ `, `
569
+ sub main()
570
+ if m.top.service.IsTrue() then
571
+ a = true
572
+ else
573
+ a = false
574
+ end if
575
+ end sub
576
+ `);
577
+ await testTranspile(`
578
+ sub test(param1)
579
+ end sub
580
+
581
+ sub main()
582
+ a = test(test(test(test(m.fifth()[123].truthy(1))))) ? true : false
583
+ end sub
584
+ `, `
585
+ sub test(param1)
586
+ end sub
587
+
588
+ sub main()
589
+ if test(test(test(test(m.fifth()[123].truthy(1))))) then
590
+ a = true
591
+ else
592
+ a = false
593
+ end if
594
+ end sub
595
+ `);
596
+ });
597
+ it('captures scope for function call conseqent', async () => {
598
+ await testTranspile(`
599
+ sub main()
600
+ zombie = {}
601
+ result = [
602
+ zombie.getName() <> invalid ? zombie.GetName() : "zombie"
603
+ ]
604
+ end sub
605
+ `, `
606
+ sub main()
607
+ zombie = {}
608
+ result = [
609
+ (function(__bsCondition, zombie)
610
+ if __bsCondition then
611
+ return zombie.GetName()
612
+ else
613
+ return "zombie"
614
+ end if
615
+ end function)(zombie.getName() <> invalid, zombie)
616
+ ]
617
+ end sub
618
+ `);
619
+ });
620
+ it('captures scope for function call alternate', async () => {
621
+ await testTranspile(`
622
+ sub main()
623
+ zombie = {}
624
+ result = [
625
+ zombie.getName() = invalid ? "zombie" : zombie.GetName()
626
+ ]
627
+ end sub
628
+ `, `
629
+ sub main()
630
+ zombie = {}
631
+ result = [
632
+ (function(__bsCondition, zombie)
633
+ if __bsCondition then
634
+ return "zombie"
635
+ else
636
+ return zombie.GetName()
637
+ end if
638
+ end function)(zombie.getName() = invalid, zombie)
639
+ ]
640
+ end sub
641
+ `);
642
+ });
643
+ it('captures scope for complex consequent', async () => {
644
+ await testTranspile(`
645
+ sub main()
646
+ settings = {}
647
+ result = [
648
+ {} ? m.defaults.getAccount(settings.name) : "no"
649
+ ]
650
+ end sub
651
+ `, `
652
+ sub main()
653
+ settings = {}
654
+ result = [
655
+ (function(__bsCondition, m, settings)
656
+ if __bsCondition then
657
+ return m.defaults.getAccount(settings.name)
658
+ else
659
+ return "no"
660
+ end if
661
+ end function)({}, m, settings)
662
+ ]
663
+ end sub
664
+ `);
665
+ });
666
+ it('ignores enum variable names for scope capturing', async () => {
667
+ await testTranspile(`
668
+ enum Direction
669
+ up = "up"
670
+ down = "down"
671
+ end enum
672
+ sub main()
673
+ d = Direction.up
674
+ result = [
675
+ d = Direction.up ? Direction.up : false
676
+ ]
677
+ end sub
678
+ `, `
679
+ sub main()
680
+ d = "up"
681
+ result = [
682
+ (function(__bsCondition)
683
+ if __bsCondition then
684
+ return "up"
685
+ else
686
+ return false
687
+ end if
688
+ end function)(d = "up")
689
+ ]
690
+ end sub
691
+ `);
692
+ });
693
+ it('ignores const variable names for scope capturing', async () => {
694
+ await testTranspile(`
695
+ enum Direction
696
+ up = "up"
697
+ down = "down"
698
+ end enum
699
+ const UP = "up"
700
+ sub main()
701
+ d = Direction.up
702
+ result = [
703
+ d = Direction.up ? UP : Direction.down
704
+ ]
705
+ end sub
706
+ `, `
707
+ sub main()
708
+ d = "up"
709
+ result = [
710
+ (function(__bsCondition)
711
+ if __bsCondition then
712
+ return "up"
713
+ else
714
+ return "down"
715
+ end if
716
+ end function)(d = "up")
717
+ ]
718
+ end sub
719
+ `);
720
+ });
721
+ it('supports scope-captured outer, and simple inner', async () => {
722
+ await testTranspile(`
723
+ sub main()
724
+ zombie = {}
725
+ human = {}
726
+ result = zombie <> invalid ? zombie.Attack(human <> invalid ? human: zombie) : "zombie"
727
+ end sub
728
+ `, `
729
+ sub main()
730
+ zombie = {}
731
+ human = {}
732
+ if zombie <> invalid then
733
+ result = zombie.Attack(bslib_ternary(human <> invalid, human, zombie))
734
+ else
735
+ result = "zombie"
736
+ end if
737
+ end sub
263
738
  `);
264
739
  });
265
- it('captures scope for function call alternate', () => {
266
- testTranspile(`name = zombie.getName() = invalid ? "zombie" : zombie.GetName()`, `
267
- name = (function(__bsCondition, zombie)
268
- if __bsCondition then
269
- return "zombie"
740
+ it('supports nested ternary in assignment', async () => {
741
+ await testTranspile(`
742
+ sub main()
743
+ result = true ? (false ? "one" : "two") : "three"
744
+ end sub
745
+ `, `
746
+ sub main()
747
+ if true then
748
+ if false then
749
+ result = "one"
270
750
  else
271
- return zombie.GetName()
751
+ result = "two"
272
752
  end if
273
- end function)(zombie.getName() = invalid, zombie)
753
+ else
754
+ result = "three"
755
+ end if
756
+ end sub
274
757
  `);
275
758
  });
276
- it('captures scope for complex consequent', () => {
277
- testTranspile(`name = isLoggedIn ? m.defaults.getAccount(settings.name) : "no"`, `
278
- name = (function(__bsCondition, m, settings)
279
- if __bsCondition then
280
- return m.defaults.getAccount(settings.name)
759
+ it('supports nested ternary in DottedSet', async () => {
760
+ await testTranspile(`
761
+ sub main()
762
+ m.result = true ? (false ? "one" : "two") : "three"
763
+ end sub
764
+ `, `
765
+ sub main()
766
+ if true then
767
+ if false then
768
+ m.result = "one"
281
769
  else
282
- return "no"
770
+ m.result = "two"
283
771
  end if
284
- end function)(isLoggedIn, m, settings)
772
+ else
773
+ m.result = "three"
774
+ end if
775
+ end sub
285
776
  `);
286
777
  });
287
- it('supports scope-captured outer, and simple inner', () => {
288
- testTranspile(`name = zombie <> invalid ? zombie.Attack(human <> invalid ? human: zombie) : "zombie"`, `
289
- name = (function(__bsCondition, human, zombie)
290
- if __bsCondition then
291
- return zombie.Attack(bslib_ternary(human <> invalid, human, zombie))
778
+ it('supports nested ternary in IndexedSet', async () => {
779
+ await testTranspile(`
780
+ sub main()
781
+ m["result"] = true ? (false ? "one" : "two") : "three"
782
+ end sub
783
+ `, `
784
+ sub main()
785
+ if true then
786
+ if false then
787
+ m["result"] = "one"
292
788
  else
293
- return "zombie"
789
+ m["result"] = "two"
294
790
  end if
295
- end function)(zombie <> invalid, human, zombie)
791
+ else
792
+ m["result"] = "three"
793
+ end if
794
+ end sub
296
795
  `);
297
796
  });
298
- it('uses scope capture for property access', () => {
299
- testTranspile(`name = person <> invalid ? person.name : "John Doe"`, `
300
- name = (function(__bsCondition, person)
301
- if __bsCondition then
302
- return person.name
303
- else
304
- return "John Doe"
305
- end if
306
- end function)(person <> invalid, person)
797
+ it('supports ternary in indexedSet key', async () => {
798
+ await testTranspile(`
799
+ sub main()
800
+ m[m.isShiftPressed ? "a" : "b"] = 0
801
+ m[m.useAltKey ? m.altKey : m.key] = 1
802
+ end sub
803
+ `, `
804
+ sub main()
805
+ m[bslib_ternary(m.isShiftPressed, "a", "b")] = 0
806
+ m[(function(__bsCondition, m)
807
+ if __bsCondition then
808
+ return m.altKey
809
+ else
810
+ return m.key
811
+ end if
812
+ end function)(m.useAltKey, m)] = 1
813
+ end sub
814
+ `);
815
+ });
816
+ it('supports scope-captured outer, and simple inner', async () => {
817
+ await testTranspile(`
818
+ sub main()
819
+ zombie = {}
820
+ human = {}
821
+ result = [
822
+ zombie <> invalid ? zombie.Attack(human <> invalid ? human: zombie) : "zombie"
823
+ ]
824
+ end sub
825
+ `, `
826
+ sub main()
827
+ zombie = {}
828
+ human = {}
829
+ result = [
830
+ (function(__bsCondition, human, zombie)
831
+ if __bsCondition then
832
+ return zombie.Attack(bslib_ternary(human <> invalid, human, zombie))
833
+ else
834
+ return "zombie"
835
+ end if
836
+ end function)(zombie <> invalid, human, zombie)
837
+ ]
838
+ end sub
839
+ `);
840
+ });
841
+ it('uses scope capture for property access', async () => {
842
+ await testTranspile(`
843
+ sub main()
844
+ person = {}
845
+ result = [
846
+ person <> invalid ? person.name : "John Doe"
847
+ ]
848
+ end sub
849
+ `, `
850
+ sub main()
851
+ person = {}
852
+ result = [
853
+ (function(__bsCondition, person)
854
+ if __bsCondition then
855
+ return person.name
856
+ else
857
+ return "John Doe"
858
+ end if
859
+ end function)(person <> invalid, person)
860
+ ]
861
+ end sub
307
862
  `);
308
863
  });
309
- it('uses `invalid` in place of missing consequent ', () => {
310
- testTranspile(`print name = "bob" ? :"zombie"`, `print bslib_ternary(name = "bob", invalid, "zombie")`, 'none', undefined, false);
864
+ it('uses `invalid` in place of missing consequent ', async () => {
865
+ await testTranspile(`print name = "bob" ? :"zombie"`, `print bslib_ternary(name = "bob", invalid, "zombie")`, 'none', undefined, false);
311
866
  });
312
- it('uses `invalid` in place of missing alternate ', () => {
313
- testTranspile(`print name = "bob" ? "human"`, `print bslib_ternary(name = "bob", "human", invalid)`, 'none', undefined, false);
867
+ it('uses `invalid` in place of missing alternate ', async () => {
868
+ await testTranspile(`print name = "bob" ? "human"`, `print bslib_ternary(name = "bob", "human", invalid)`, 'none', undefined, false);
314
869
  });
315
- it('uses `invalid` in place of missing alternate and consequent ', () => {
316
- testTranspile(`print name = "bob" ?:`, `print bslib_ternary(name = "bob", invalid, invalid)`, 'none', undefined, false);
870
+ it('uses `invalid` in place of missing alternate and consequent ', async () => {
871
+ await testTranspile(`print name = "bob" ?:`, `print bslib_ternary(name = "bob", invalid, invalid)`, 'none', undefined, false);
317
872
  });
318
873
  });
319
874
  });