brighterscript 0.72.0 → 0.72.2

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