brighterscript 1.0.0-alpha.50 → 1.0.0-alpha.51

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 (482) hide show
  1. package/README.md +3 -0
  2. package/bsconfig.schema.json +75 -0
  3. package/dist/BsConfig.d.ts +90 -5
  4. package/dist/CodeActionUtil.d.ts +17 -0
  5. package/dist/CodeActionUtil.js.map +1 -1
  6. package/dist/CommentFlagProcessor.d.ts +16 -12
  7. package/dist/CommentFlagProcessor.js +141 -59
  8. package/dist/CommentFlagProcessor.js.map +1 -1
  9. package/dist/CrossScopeValidator.js +13 -5
  10. package/dist/CrossScopeValidator.js.map +1 -1
  11. package/dist/DiagnosticManager.d.ts +1 -0
  12. package/dist/DiagnosticManager.js +25 -9
  13. package/dist/DiagnosticManager.js.map +1 -1
  14. package/dist/DiagnosticMessages.d.ts +61 -17
  15. package/dist/DiagnosticMessages.js +78 -24
  16. package/dist/DiagnosticMessages.js.map +1 -1
  17. package/dist/LanguageServer.d.ts +39 -2
  18. package/dist/LanguageServer.js +142 -5
  19. package/dist/LanguageServer.js.map +1 -1
  20. package/dist/Program.d.ts +62 -1
  21. package/dist/Program.js +185 -13
  22. package/dist/Program.js.map +1 -1
  23. package/dist/ProgramBuilder.d.ts +1 -8
  24. package/dist/ProgramBuilder.js +31 -11
  25. package/dist/ProgramBuilder.js.map +1 -1
  26. package/dist/Scope.d.ts +87 -6
  27. package/dist/Scope.js +76 -31
  28. package/dist/Scope.js.map +1 -1
  29. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  30. package/dist/ScopeNamespaceLookup.js +242 -0
  31. package/dist/ScopeNamespaceLookup.js.map +1 -0
  32. package/dist/SymbolTable.d.ts +9 -2
  33. package/dist/SymbolTable.js +24 -14
  34. package/dist/SymbolTable.js.map +1 -1
  35. package/dist/astUtils/CachedLookups.js +3 -0
  36. package/dist/astUtils/CachedLookups.js.map +1 -1
  37. package/dist/astUtils/reflection.d.ts +4 -1
  38. package/dist/astUtils/reflection.js +24 -4
  39. package/dist/astUtils/reflection.js.map +1 -1
  40. package/dist/astUtils/visitors.d.ts +2 -1
  41. package/dist/astUtils/visitors.js.map +1 -1
  42. package/dist/bscPlugin/BscPlugin.d.ts +4 -2
  43. package/dist/bscPlugin/BscPlugin.js +10 -2
  44. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  45. package/dist/bscPlugin/CallExpressionInfo.d.ts +1 -1
  46. package/dist/bscPlugin/CallExpressionInfo.js +1 -2
  47. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  48. package/dist/bscPlugin/FileWriter.d.ts +13 -0
  49. package/dist/bscPlugin/FileWriter.js +56 -1
  50. package/dist/bscPlugin/FileWriter.js.map +1 -1
  51. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +106 -5
  52. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +630 -126
  53. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  54. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  55. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  56. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  57. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  58. package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
  59. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  60. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +1 -1
  61. package/dist/bscPlugin/completions/CompletionsProcessor.js +5 -5
  62. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  63. package/dist/bscPlugin/definition/DefinitionProvider.js +8 -0
  64. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -1
  65. package/dist/bscPlugin/hover/HoverProcessor.js +11 -3
  66. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  67. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  68. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
  69. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  70. package/dist/bscPlugin/serialize/FileSerializer.d.ts +1 -1
  71. package/dist/bscPlugin/serialize/FileSerializer.js +12 -7
  72. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -1
  73. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +7 -0
  74. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +87 -1
  75. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -1
  76. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +14 -0
  77. package/dist/bscPlugin/validation/BrsFileValidator.js +97 -21
  78. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  79. package/dist/bscPlugin/validation/ScopeValidator.d.ts +17 -0
  80. package/dist/bscPlugin/validation/ScopeValidator.js +162 -4
  81. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  82. package/dist/bscPlugin/validation/XmlFileValidator.js +14 -0
  83. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  84. package/dist/cli.js +13 -0
  85. package/dist/cli.js.map +1 -1
  86. package/dist/diagnosticUtils.d.ts +51 -1
  87. package/dist/diagnosticUtils.js +222 -1
  88. package/dist/diagnosticUtils.js.map +1 -1
  89. package/dist/files/BrsFile.d.ts +18 -2
  90. package/dist/files/BrsFile.js +87 -6
  91. package/dist/files/BrsFile.js.map +1 -1
  92. package/dist/files/XmlFile.js +2 -1
  93. package/dist/files/XmlFile.js.map +1 -1
  94. package/dist/interfaces.d.ts +68 -23
  95. package/dist/interfaces.js.map +1 -1
  96. package/dist/lexer/Lexer.js +4 -5
  97. package/dist/lexer/Lexer.js.map +1 -1
  98. package/dist/lexer/Token.d.ts +1 -1
  99. package/dist/lexer/TokenKind.d.ts +8 -0
  100. package/dist/lexer/TokenKind.js +21 -1
  101. package/dist/lexer/TokenKind.js.map +1 -1
  102. package/dist/lsp/LspProject.d.ts +49 -1
  103. package/dist/lsp/Project.d.ts +33 -1
  104. package/dist/lsp/Project.js +129 -4
  105. package/dist/lsp/Project.js.map +1 -1
  106. package/dist/lsp/ProjectManager.d.ts +48 -2
  107. package/dist/lsp/ProjectManager.js +152 -9
  108. package/dist/lsp/ProjectManager.js.map +1 -1
  109. package/dist/lsp/worker/WorkerThreadProject.d.ts +27 -2
  110. package/dist/lsp/worker/WorkerThreadProject.js +16 -0
  111. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
  112. package/dist/parser/AstNode.d.ts +3 -1
  113. package/dist/parser/AstNode.js +2 -0
  114. package/dist/parser/AstNode.js.map +1 -1
  115. package/dist/parser/Expression.d.ts +54 -5
  116. package/dist/parser/Expression.js +112 -7
  117. package/dist/parser/Expression.js.map +1 -1
  118. package/dist/parser/Parser.d.ts +24 -1
  119. package/dist/parser/Parser.js +180 -41
  120. package/dist/parser/Parser.js.map +1 -1
  121. package/dist/parser/SGParser.d.ts +1 -0
  122. package/dist/parser/SGParser.js +9 -0
  123. package/dist/parser/SGParser.js.map +1 -1
  124. package/dist/parser/Statement.d.ts +6 -1
  125. package/dist/parser/Statement.js +22 -14
  126. package/dist/parser/Statement.js.map +1 -1
  127. package/dist/parser/TranspileState.d.ts +4 -2
  128. package/dist/parser/TranspileState.js +10 -4
  129. package/dist/parser/TranspileState.js.map +1 -1
  130. package/dist/roku-types/data.json +210 -3
  131. package/dist/types/ArrayType.js +6 -1
  132. package/dist/types/ArrayType.js.map +1 -1
  133. package/dist/types/BooleanType.js +1 -1
  134. package/dist/types/BooleanType.js.map +1 -1
  135. package/dist/types/CallFuncableType.d.ts +1 -1
  136. package/dist/types/ClassType.js +3 -0
  137. package/dist/types/ClassType.js.map +1 -1
  138. package/dist/types/ComponentType.js +3 -0
  139. package/dist/types/ComponentType.js.map +1 -1
  140. package/dist/types/EnumType.js +3 -0
  141. package/dist/types/EnumType.js.map +1 -1
  142. package/dist/types/IntersectionType.js +3 -0
  143. package/dist/types/IntersectionType.js.map +1 -1
  144. package/dist/types/ReferenceType.js +6 -0
  145. package/dist/types/ReferenceType.js.map +1 -1
  146. package/dist/types/TypeStatementType.d.ts +1 -0
  147. package/dist/types/TypeStatementType.js +12 -1
  148. package/dist/types/TypeStatementType.js.map +1 -1
  149. package/dist/types/TypedFunctionType.js +20 -10
  150. package/dist/types/TypedFunctionType.js.map +1 -1
  151. package/dist/types/UnionType.js +3 -0
  152. package/dist/types/UnionType.js.map +1 -1
  153. package/dist/types/helpers.js +6 -0
  154. package/dist/types/helpers.js.map +1 -1
  155. package/dist/util.d.ts +42 -3
  156. package/dist/util.js +131 -7
  157. package/dist/util.js.map +1 -1
  158. package/package.json +24 -26
  159. package/dist/astUtils/CachedLookups.spec.d.ts +0 -1
  160. package/dist/astUtils/CachedLookups.spec.js +0 -39
  161. package/dist/astUtils/CachedLookups.spec.js.map +0 -1
  162. package/dist/astUtils/Editor.spec.d.ts +0 -1
  163. package/dist/astUtils/Editor.spec.js +0 -258
  164. package/dist/astUtils/Editor.spec.js.map +0 -1
  165. package/dist/astUtils/creators.spec.d.ts +0 -1
  166. package/dist/astUtils/creators.spec.js +0 -21
  167. package/dist/astUtils/creators.spec.js.map +0 -1
  168. package/dist/astUtils/reflection.spec.d.ts +0 -1
  169. package/dist/astUtils/reflection.spec.js +0 -392
  170. package/dist/astUtils/reflection.spec.js.map +0 -1
  171. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  172. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  173. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  174. package/dist/astUtils/visitors.spec.d.ts +0 -1
  175. package/dist/astUtils/visitors.spec.js +0 -1432
  176. package/dist/astUtils/visitors.spec.js.map +0 -1
  177. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  178. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -311
  179. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  180. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +0 -1
  181. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +0 -2512
  182. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +0 -1
  183. package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +0 -1
  184. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +0 -87
  185. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +0 -1
  186. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +0 -1
  187. package/dist/bscPlugin/hover/HoverProcessor.spec.js +0 -991
  188. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +0 -1
  189. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +0 -1
  190. package/dist/bscPlugin/references/ReferencesProvider.spec.js +0 -51
  191. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +0 -1
  192. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +0 -1
  193. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -564
  194. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +0 -1
  195. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +0 -1
  196. package/dist/bscPlugin/serialize/BslibInjector.spec.js +0 -33
  197. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +0 -1
  198. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +0 -1
  199. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +0 -291
  200. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +0 -1
  201. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +0 -1
  202. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +0 -245
  203. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +0 -1
  204. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +0 -1
  205. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +0 -75
  206. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +0 -1
  207. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +0 -1
  208. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +0 -1517
  209. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +0 -1
  210. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +0 -1
  211. package/dist/bscPlugin/validation/ScopeValidator.spec.js +0 -6135
  212. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +0 -1
  213. package/dist/common/Sequencer.spec.d.ts +0 -1
  214. package/dist/common/Sequencer.spec.js +0 -75
  215. package/dist/common/Sequencer.spec.js.map +0 -1
  216. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  217. package/dist/files/BrsFile.Class.spec.js +0 -2035
  218. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  219. package/dist/files/BrsFile.spec.d.ts +0 -1
  220. package/dist/files/BrsFile.spec.js +0 -5848
  221. package/dist/files/BrsFile.spec.js.map +0 -1
  222. package/dist/files/LazyFileData.spec.d.ts +0 -1
  223. package/dist/files/LazyFileData.spec.js +0 -27
  224. package/dist/files/LazyFileData.spec.js.map +0 -1
  225. package/dist/files/XmlFile.spec.d.ts +0 -1
  226. package/dist/files/XmlFile.spec.js +0 -1173
  227. package/dist/files/XmlFile.spec.js.map +0 -1
  228. package/dist/files/tests/imports.spec.d.ts +0 -1
  229. package/dist/files/tests/imports.spec.js +0 -251
  230. package/dist/files/tests/imports.spec.js.map +0 -1
  231. package/dist/files/tests/optionalChaning.spec.d.ts +0 -1
  232. package/dist/files/tests/optionalChaning.spec.js +0 -152
  233. package/dist/files/tests/optionalChaning.spec.js.map +0 -1
  234. package/dist/lexer/Character.spec.d.ts +0 -1
  235. package/dist/lexer/Character.spec.js +0 -27
  236. package/dist/lexer/Character.spec.js.map +0 -1
  237. package/dist/lexer/Lexer.spec.d.ts +0 -1
  238. package/dist/lexer/Lexer.spec.js +0 -1345
  239. package/dist/lexer/Lexer.spec.js.map +0 -1
  240. package/dist/lsp/ActionQueue.spec.d.ts +0 -1
  241. package/dist/lsp/ActionQueue.spec.js +0 -80
  242. package/dist/lsp/ActionQueue.spec.js.map +0 -1
  243. package/dist/lsp/DocumentManager.spec.d.ts +0 -1
  244. package/dist/lsp/DocumentManager.spec.js +0 -103
  245. package/dist/lsp/DocumentManager.spec.js.map +0 -1
  246. package/dist/lsp/PathFilterer.spec.d.ts +0 -1
  247. package/dist/lsp/PathFilterer.spec.js +0 -182
  248. package/dist/lsp/PathFilterer.spec.js.map +0 -1
  249. package/dist/lsp/Project.spec.d.ts +0 -1
  250. package/dist/lsp/Project.spec.js +0 -267
  251. package/dist/lsp/Project.spec.js.map +0 -1
  252. package/dist/lsp/ProjectManager.spec.d.ts +0 -1
  253. package/dist/lsp/ProjectManager.spec.js +0 -913
  254. package/dist/lsp/ProjectManager.spec.js.map +0 -1
  255. package/dist/lsp/worker/MessageHandler.spec.d.ts +0 -1
  256. package/dist/lsp/worker/MessageHandler.spec.js +0 -64
  257. package/dist/lsp/worker/MessageHandler.spec.js.map +0 -1
  258. package/dist/lsp/worker/WorkerPool.spec.d.ts +0 -1
  259. package/dist/lsp/worker/WorkerPool.spec.js +0 -59
  260. package/dist/lsp/worker/WorkerPool.spec.js.map +0 -1
  261. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +0 -2
  262. package/dist/lsp/worker/WorkerThreadProject.spec.js +0 -71
  263. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +0 -1
  264. package/dist/parser/AstNode.spec.d.ts +0 -1
  265. package/dist/parser/AstNode.spec.js +0 -1455
  266. package/dist/parser/AstNode.spec.js.map +0 -1
  267. package/dist/parser/BrightScriptDocParser.spec.d.ts +0 -1
  268. package/dist/parser/BrightScriptDocParser.spec.js +0 -310
  269. package/dist/parser/BrightScriptDocParser.spec.js.map +0 -1
  270. package/dist/parser/Expression.spec.d.ts +0 -1
  271. package/dist/parser/Expression.spec.js +0 -40
  272. package/dist/parser/Expression.spec.js.map +0 -1
  273. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  274. package/dist/parser/Parser.Class.spec.js +0 -520
  275. package/dist/parser/Parser.Class.spec.js.map +0 -1
  276. package/dist/parser/Parser.spec.d.ts +0 -6
  277. package/dist/parser/Parser.spec.js +0 -2802
  278. package/dist/parser/Parser.spec.js.map +0 -1
  279. package/dist/parser/SGParser.spec.d.ts +0 -1
  280. package/dist/parser/SGParser.spec.js +0 -130
  281. package/dist/parser/SGParser.spec.js.map +0 -1
  282. package/dist/parser/Statement.spec.d.ts +0 -1
  283. package/dist/parser/Statement.spec.js +0 -191
  284. package/dist/parser/Statement.spec.js.map +0 -1
  285. package/dist/parser/tests/Parser.spec.d.ts +0 -12
  286. package/dist/parser/tests/Parser.spec.js +0 -29
  287. package/dist/parser/tests/Parser.spec.js.map +0 -1
  288. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  289. package/dist/parser/tests/controlFlow/For.spec.js +0 -169
  290. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  291. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  292. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -140
  293. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  294. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  295. package/dist/parser/tests/controlFlow/If.spec.js +0 -694
  296. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  297. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  298. package/dist/parser/tests/controlFlow/While.spec.js +0 -114
  299. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  300. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  301. package/dist/parser/tests/expression/Additive.spec.js +0 -107
  302. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  303. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  304. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -304
  305. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  306. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  307. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -342
  308. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  309. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  310. package/dist/parser/tests/expression/Boolean.spec.js +0 -90
  311. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  312. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  313. package/dist/parser/tests/expression/Call.spec.js +0 -252
  314. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  315. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  316. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  317. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  318. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  319. package/dist/parser/tests/expression/Function.spec.js +0 -412
  320. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  321. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  322. package/dist/parser/tests/expression/Indexing.spec.js +0 -302
  323. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  324. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  325. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  326. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  327. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  328. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -346
  329. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  330. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  331. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -111
  332. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  333. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  334. package/dist/parser/tests/expression/Primary.spec.js +0 -165
  335. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  336. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +0 -1
  337. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +0 -171
  338. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +0 -1
  339. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  340. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  341. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  342. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  343. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  344. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  345. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  346. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -389
  347. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  348. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  349. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -878
  350. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  351. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +0 -1
  352. package/dist/parser/tests/expression/TypeExpression.spec.js +0 -126
  353. package/dist/parser/tests/expression/TypeExpression.spec.js.map +0 -1
  354. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +0 -1
  355. package/dist/parser/tests/expression/UnaryExpression.spec.js +0 -52
  356. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +0 -1
  357. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  358. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  359. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  360. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +0 -1
  361. package/dist/parser/tests/statement/ConstStatement.spec.js +0 -500
  362. package/dist/parser/tests/statement/ConstStatement.spec.js.map +0 -1
  363. package/dist/parser/tests/statement/Continue.spec.d.ts +0 -1
  364. package/dist/parser/tests/statement/Continue.spec.js +0 -119
  365. package/dist/parser/tests/statement/Continue.spec.js.map +0 -1
  366. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  367. package/dist/parser/tests/statement/Declaration.spec.js +0 -114
  368. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  369. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  370. package/dist/parser/tests/statement/Dim.spec.js +0 -80
  371. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  372. package/dist/parser/tests/statement/Enum.spec.d.ts +0 -1
  373. package/dist/parser/tests/statement/Enum.spec.js +0 -744
  374. package/dist/parser/tests/statement/Enum.spec.js.map +0 -1
  375. package/dist/parser/tests/statement/For.spec.d.ts +0 -1
  376. package/dist/parser/tests/statement/For.spec.js +0 -45
  377. package/dist/parser/tests/statement/For.spec.js.map +0 -1
  378. package/dist/parser/tests/statement/ForEach.spec.d.ts +0 -1
  379. package/dist/parser/tests/statement/ForEach.spec.js +0 -36
  380. package/dist/parser/tests/statement/ForEach.spec.js.map +0 -1
  381. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  382. package/dist/parser/tests/statement/Function.spec.js +0 -343
  383. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  384. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  385. package/dist/parser/tests/statement/Goto.spec.js +0 -51
  386. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  387. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  388. package/dist/parser/tests/statement/Increment.spec.js +0 -120
  389. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  390. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +0 -1
  391. package/dist/parser/tests/statement/InterfaceStatement.spec.js +0 -110
  392. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +0 -1
  393. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  394. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  395. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  396. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  397. package/dist/parser/tests/statement/Misc.spec.js +0 -292
  398. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  399. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  400. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -200
  401. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  402. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  403. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -97
  404. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  405. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  406. package/dist/parser/tests/statement/Set.spec.js +0 -232
  407. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  408. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  409. package/dist/parser/tests/statement/Stop.spec.js +0 -38
  410. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  411. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  412. package/dist/parser/tests/statement/Throw.spec.js +0 -38
  413. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  414. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  415. package/dist/parser/tests/statement/TryCatch.spec.js +0 -151
  416. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  417. package/dist/preprocessor/Manifest.spec.d.ts +0 -1
  418. package/dist/preprocessor/Manifest.spec.js +0 -80
  419. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  420. package/dist/types/ArrayType.spec.d.ts +0 -1
  421. package/dist/types/ArrayType.spec.js +0 -58
  422. package/dist/types/ArrayType.spec.js.map +0 -1
  423. package/dist/types/BooleanType.spec.d.ts +0 -1
  424. package/dist/types/BooleanType.spec.js +0 -18
  425. package/dist/types/BooleanType.spec.js.map +0 -1
  426. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +0 -1
  427. package/dist/types/BuiltInInterfaceAdder.spec.js +0 -115
  428. package/dist/types/BuiltInInterfaceAdder.spec.js.map +0 -1
  429. package/dist/types/ClassType.spec.d.ts +0 -1
  430. package/dist/types/ClassType.spec.js +0 -76
  431. package/dist/types/ClassType.spec.js.map +0 -1
  432. package/dist/types/DoubleType.spec.d.ts +0 -1
  433. package/dist/types/DoubleType.spec.js +0 -20
  434. package/dist/types/DoubleType.spec.js.map +0 -1
  435. package/dist/types/DynamicType.spec.d.ts +0 -1
  436. package/dist/types/DynamicType.spec.js +0 -23
  437. package/dist/types/DynamicType.spec.js.map +0 -1
  438. package/dist/types/EnumType.spec.d.ts +0 -1
  439. package/dist/types/EnumType.spec.js +0 -33
  440. package/dist/types/EnumType.spec.js.map +0 -1
  441. package/dist/types/FloatType.spec.d.ts +0 -1
  442. package/dist/types/FloatType.spec.js +0 -12
  443. package/dist/types/FloatType.spec.js.map +0 -1
  444. package/dist/types/IntegerType.spec.d.ts +0 -1
  445. package/dist/types/IntegerType.spec.js +0 -16
  446. package/dist/types/IntegerType.spec.js.map +0 -1
  447. package/dist/types/InterfaceType.spec.d.ts +0 -1
  448. package/dist/types/InterfaceType.spec.js +0 -227
  449. package/dist/types/InterfaceType.spec.js.map +0 -1
  450. package/dist/types/IntersectionType.spec.d.ts +0 -1
  451. package/dist/types/IntersectionType.spec.js +0 -150
  452. package/dist/types/IntersectionType.spec.js.map +0 -1
  453. package/dist/types/InvalidType.spec.d.ts +0 -1
  454. package/dist/types/InvalidType.spec.js +0 -16
  455. package/dist/types/InvalidType.spec.js.map +0 -1
  456. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  457. package/dist/types/LongIntegerType.spec.js +0 -18
  458. package/dist/types/LongIntegerType.spec.js.map +0 -1
  459. package/dist/types/ObjectType.spec.d.ts +0 -1
  460. package/dist/types/ObjectType.spec.js +0 -12
  461. package/dist/types/ObjectType.spec.js.map +0 -1
  462. package/dist/types/ReferenceType.spec.d.ts +0 -1
  463. package/dist/types/ReferenceType.spec.js +0 -151
  464. package/dist/types/ReferenceType.spec.js.map +0 -1
  465. package/dist/types/StringType.spec.d.ts +0 -1
  466. package/dist/types/StringType.spec.js +0 -12
  467. package/dist/types/StringType.spec.js.map +0 -1
  468. package/dist/types/TypedFunctionType.spec.d.ts +0 -1
  469. package/dist/types/TypedFunctionType.spec.js +0 -122
  470. package/dist/types/TypedFunctionType.spec.js.map +0 -1
  471. package/dist/types/UnionType.spec.d.ts +0 -1
  472. package/dist/types/UnionType.spec.js +0 -205
  473. package/dist/types/UnionType.spec.js.map +0 -1
  474. package/dist/types/VoidType.spec.d.ts +0 -1
  475. package/dist/types/VoidType.spec.js +0 -12
  476. package/dist/types/VoidType.spec.js.map +0 -1
  477. package/dist/types/helper.spec.d.ts +0 -1
  478. package/dist/types/helper.spec.js +0 -174
  479. package/dist/types/helper.spec.js.map +0 -1
  480. package/dist/types/roFunctionType.spec.d.ts +0 -1
  481. package/dist/types/roFunctionType.spec.js +0 -20
  482. package/dist/types/roFunctionType.spec.js.map +0 -1
@@ -1,694 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const chai_config_spec_1 = require("../../../chai-config.spec");
4
- const assert = require("assert");
5
- const Parser_1 = require("../../Parser");
6
- const Lexer_1 = require("../../../lexer/Lexer");
7
- const TokenKind_1 = require("../../../lexer/TokenKind");
8
- const Parser_spec_1 = require("../Parser.spec");
9
- const reflection_1 = require("../../../astUtils/reflection");
10
- const testHelpers_spec_1 = require("../../../testHelpers.spec");
11
- const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
12
- const util_1 = require("../../../util");
13
- describe('parser if statements', () => {
14
- it('allows empty if blocks', () => {
15
- var _a;
16
- let { tokens } = Lexer_1.Lexer.scan(`
17
- if true then
18
-
19
- else if true then
20
- stop
21
- else
22
- stop
23
- end if
24
- `);
25
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
26
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
27
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
28
- });
29
- it('allows empty elseif blocks', () => {
30
- var _a;
31
- let { tokens } = Lexer_1.Lexer.scan(`
32
- if true then
33
- stop
34
- else if true then
35
-
36
- else
37
- stop
38
- end if
39
- `);
40
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
41
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
42
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
43
- });
44
- it('allows empty else blocks', () => {
45
- var _a;
46
- let { tokens } = Lexer_1.Lexer.scan(`
47
- if true then
48
- stop
49
- else if true then
50
- stop
51
- else
52
-
53
- end if
54
- `);
55
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
56
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
57
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
58
- });
59
- it('single-line if next to else or endif', () => {
60
- var _a;
61
- let { tokens } = Lexer_1.Lexer.scan(`
62
- if type(component.TextAttrs.font) = "roString"
63
- font = m.fonts.Lookup(component.TextAttrs.font)
64
- if font = invalid then font = m.fonts.medium
65
- else if type(component.TextAttrs.font) = "roFont"
66
- font = component.TextAttrs.font
67
- else
68
- font = m.fonts.reg.GetDefaultFont()
69
- end if
70
- `);
71
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
72
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
73
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
74
- let ifs = ast.statements[0];
75
- if (!(0, reflection_1.isIfStatement)(ifs) || !(0, reflection_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[1])) {
76
- assert.fail('Missing single-line if inside if-then');
77
- }
78
- if (!(0, reflection_1.isIfStatement)(ifs.elseBranch)) {
79
- assert.fail('Missing chained else-if statement');
80
- }
81
- (0, chai_config_spec_1.expect)(ifs.elseBranch.elseBranch).to.exist;
82
- });
83
- it('single-line if inside multi-line if', () => {
84
- var _a;
85
- let { tokens } = Lexer_1.Lexer.scan(`
86
- if true
87
- if true then t = 1
88
- else
89
- ' empty line or line with just a comment causes crash
90
- end if
91
- `);
92
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
93
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
94
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
95
- let ifs = ast.statements[0];
96
- if (!(0, reflection_1.isIfStatement)(ifs) || !(0, reflection_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[0])) {
97
- assert.fail('Missing single-line if inside if-then');
98
- }
99
- (0, chai_config_spec_1.expect)(ifs.elseBranch).to.exist;
100
- if (!(0, reflection_1.isBlock)(ifs.elseBranch)) {
101
- assert.fail('Missing comment inside else branch');
102
- }
103
- });
104
- it('dotted set in else block', () => {
105
- let { tokens } = Lexer_1.Lexer.scan(`
106
- if true then m.top.visible = true else m.top.visible = false
107
- `);
108
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
109
- if (diagnostics.length > 0) {
110
- console.log(diagnostics);
111
- }
112
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
113
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
114
- });
115
- describe('single-line if', () => {
116
- it('parses if only', () => {
117
- let { ast, diagnostics } = Parser_1.Parser.parse([
118
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
119
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
120
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
121
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
122
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
123
- (0, Parser_spec_1.identifier)('foo'),
124
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
125
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
126
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
127
- Parser_spec_1.EOF
128
- ]);
129
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
130
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
131
- });
132
- it('parses if-else', () => {
133
- let { ast, diagnostics } = Parser_1.Parser.parse([
134
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
135
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
136
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
137
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
138
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
139
- (0, Parser_spec_1.identifier)('foo'),
140
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
141
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
142
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
143
- (0, Parser_spec_1.identifier)('foo'),
144
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
145
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.False, 'true'),
146
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
147
- Parser_spec_1.EOF
148
- ]);
149
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
150
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
151
- });
152
- it('parses if-elseif-else', () => {
153
- let { ast, diagnostics } = Parser_1.Parser.parse([
154
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
155
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
156
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
157
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
158
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
159
- (0, Parser_spec_1.identifier)('foo'),
160
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
161
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
162
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
163
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
164
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
165
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
166
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
167
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
168
- (0, Parser_spec_1.identifier)('same'),
169
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
170
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
171
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
172
- (0, Parser_spec_1.identifier)('foo'),
173
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
174
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
175
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
176
- Parser_spec_1.EOF
177
- ]);
178
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
179
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
180
- });
181
- it('allows \'then\' to be skipped', () => {
182
- // if 1 < 2 foo = true else if 1 = 2 same = true
183
- let { ast, diagnostics } = Parser_1.Parser.parse([
184
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
185
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
186
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
187
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
188
- (0, Parser_spec_1.identifier)('foo'),
189
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
190
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
191
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
192
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
193
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
194
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
195
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
196
- (0, Parser_spec_1.identifier)('same'),
197
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
198
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
199
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
200
- (0, Parser_spec_1.identifier)('foo'),
201
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
202
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.False, 'false'),
203
- (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
204
- Parser_spec_1.EOF
205
- ]);
206
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
207
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
208
- });
209
- it('parses special statements in inline block', () => {
210
- const { ast, diagnostics } = Parser_1.Parser.parse(`
211
- if true print 1 else print 1
212
- if true then print 1 else print 1
213
- if true print "x=" ; 1 else print 1
214
- if true then print "x=", 1 else print 1
215
- if true print "x=" 1 else print 1
216
- if true return else print 1
217
- if true then return else print 1
218
- `);
219
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
220
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
221
- });
222
- it('colon used between inline else statements', () => {
223
- const { ast, diagnostics } = Parser_1.Parser.parse(`
224
- if x print 1 else print 2 : print 3
225
- `);
226
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
227
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(1);
228
- const ifStatement = ast.statements[0];
229
- (0, chai_config_spec_1.expect)(ifStatement.thenBranch.statements).to.be.lengthOf(1);
230
- (0, chai_config_spec_1.expect)(ifStatement.elseBranch.statements).to.be.lengthOf(2);
231
- });
232
- it('colon used between inline else if statements', () => {
233
- const { ast, diagnostics } = Parser_1.Parser.parse(`
234
- if x print 1 else if y print 2 : print 3
235
- `);
236
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
237
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(1);
238
- const ifStatement = ast.statements[0];
239
- (0, chai_config_spec_1.expect)(ifStatement.thenBranch.statements).to.be.lengthOf(1);
240
- (0, chai_config_spec_1.expect)(ifStatement.elseBranch.thenBranch.statements).to.be.lengthOf(2);
241
- });
242
- it('colon used between all kinds of statements', () => {
243
- const { ast, diagnostics } = Parser_1.Parser.parse(`
244
- if x print 1 : print 1 else if y print 2 : print 2 : print 2 else print 3 : print 3: print 3: print 3
245
- `);
246
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
247
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(1);
248
- const ifStatement = ast.statements[0];
249
- (0, chai_config_spec_1.expect)(ifStatement.thenBranch.statements).to.be.lengthOf(2);
250
- const elseIf = ifStatement.elseBranch;
251
- (0, chai_config_spec_1.expect)(elseIf.thenBranch.statements).to.be.lengthOf(3);
252
- (0, chai_config_spec_1.expect)(elseIf.elseBranch.statements).to.be.lengthOf(4);
253
- });
254
- it('has diagnostic with extra else', () => {
255
- const { diagnostics } = Parser_1.Parser.parse(`
256
- if x=1 print 1 else print 2 else print 3
257
- `);
258
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
259
- DiagnosticMessages_1.DiagnosticMessages.expectedNewlineOrColon().message
260
- ]);
261
- });
262
- it('nested inline if statements', () => {
263
- const { ast, diagnostics } = Parser_1.Parser.parse(`
264
- if x=1 print 1 else if x=2 print 2 : if y=1 print "y is 1" else print "y is not 1" else print 3: print 3: print 3
265
- `);
266
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
267
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(1);
268
- const ifStatement = ast.statements[0];
269
- (0, chai_config_spec_1.expect)(ifStatement.thenBranch.statements).to.be.lengthOf(1);
270
- const elseIf = ifStatement.elseBranch;
271
- (0, chai_config_spec_1.expect)(elseIf.thenBranch.statements).to.be.lengthOf(2);
272
- (0, chai_config_spec_1.expect)((0, reflection_1.isIfStatement)(elseIf.thenBranch.statements[1])).to.be.true;
273
- const nestedInlineIf = elseIf.thenBranch.statements[1];
274
- (0, chai_config_spec_1.expect)(nestedInlineIf.thenBranch.statements).to.be.lengthOf(1);
275
- (0, chai_config_spec_1.expect)(nestedInlineIf.elseBranch.statements).to.be.lengthOf(1);
276
- (0, chai_config_spec_1.expect)(elseIf.elseBranch.statements).to.be.lengthOf(3);
277
- });
278
- describe('expected inline if', () => {
279
- it('non-inline statement used in inline if', () => {
280
- const { ast, diagnostics } = Parser_1.Parser.parse(`
281
- if true print 1 else
282
- print 1
283
- end if
284
- `);
285
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
286
- DiagnosticMessages_1.DiagnosticMessages.expectedInlineIfStatement().message
287
- ]);
288
- (0, chai_config_spec_1.expect)(ast.statements.length).to.be.greaterThan(0);
289
- });
290
- it('non inline statement used in inline else if', () => {
291
- const { ast, diagnostics } = Parser_1.Parser.parse(`
292
- if x print 1 else if y
293
- print 2
294
- end if
295
- `);
296
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
297
- DiagnosticMessages_1.DiagnosticMessages.expectedInlineIfStatement().message
298
- ]);
299
- (0, chai_config_spec_1.expect)(ast.statements.length).to.be.greaterThan(0);
300
- });
301
- it('colon used after inline else', () => {
302
- const { ast, diagnostics } = Parser_1.Parser.parse(`
303
- if x print 1 else : print 2 : print 3: end if
304
- `);
305
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
306
- DiagnosticMessages_1.DiagnosticMessages.expectedInlineIfStatement().message
307
- ]);
308
- (0, chai_config_spec_1.expect)(ast.statements.length).to.be.greaterThan(0);
309
- });
310
- it('new line used in inline else', () => {
311
- const { ast, diagnostics } = Parser_1.Parser.parse(`
312
- if x print 1 else
313
- print 2
314
- print 3
315
- end if
316
- `);
317
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
318
- DiagnosticMessages_1.DiagnosticMessages.expectedInlineIfStatement().message
319
- ]);
320
- (0, chai_config_spec_1.expect)(ast.statements.length).to.be.greaterThan(0);
321
- });
322
- it('colon used after inline else if', () => {
323
- const { diagnostics } = Parser_1.Parser.parse(`
324
- if x print 1 else if y : print 2
325
- `);
326
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
327
- DiagnosticMessages_1.DiagnosticMessages.expectedTerminator(['end if', 'else if', 'else'], 'then', 'block').message
328
- ]);
329
- });
330
- it('new line used in inline else if', () => {
331
- const { ast, diagnostics } = Parser_1.Parser.parse(`
332
- if x print 1 else if y
333
- print 2
334
- end if
335
- `);
336
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
337
- DiagnosticMessages_1.DiagnosticMessages.expectedInlineIfStatement().message
338
- ]);
339
- (0, chai_config_spec_1.expect)(ast.statements.length).to.be.greaterThan(0);
340
- });
341
- });
342
- });
343
- describe('block if', () => {
344
- it('parses if only', () => {
345
- //because the parser depends on line numbers for certain if statements, this needs to be location-aware
346
- let { tokens } = Lexer_1.Lexer.scan(`
347
- if 1 < 2 THEN
348
- foo = true
349
- bar = true
350
- end if
351
- `);
352
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
353
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
354
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
355
- });
356
- it('parses if-else', () => {
357
- //this test requires token locations, so use the lexer
358
- let { tokens } = Lexer_1.Lexer.scan(`
359
- if 1 < 2 then
360
- foo = true
361
- else
362
- foo = false
363
- bar = false
364
- end if
365
- `);
366
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
367
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
368
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
369
- });
370
- it('parses if-elseif-else', () => {
371
- //this test requires token locations, so use the lexer
372
- let { tokens } = Lexer_1.Lexer.scan(`
373
- if 1 < 2 then
374
- foo = true
375
- else if 1 > 2 then
376
- foo = 3
377
- bar = true
378
- else
379
- foo = false
380
- end if
381
- `);
382
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
383
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
384
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
385
- });
386
- it('allows \'then\' to be skipped', () => {
387
- //this test requires token locations, so use the lexer
388
- let { tokens } = Lexer_1.Lexer.scan(`
389
- if 1 < 2
390
- foo = true
391
- else if 1 > 2
392
- foo = 3
393
- bar = true
394
- else
395
- foo = false
396
- end if
397
- `);
398
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
399
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
400
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
401
- });
402
- it('sets endif token properly', () => {
403
- //this test requires token locations, so use the lexer
404
- let { tokens } = Lexer_1.Lexer.scan(`
405
- sub a()
406
- if true then
407
- print false
408
- else if true then
409
- print "true"
410
- else
411
- print "else"
412
- end if 'comment
413
- end sub
414
- `);
415
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
416
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
417
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
418
- //the endif token should be set
419
- let ifs = ast.statements[0].func.body.statements[0];
420
- if (!(0, reflection_1.isIfStatement)(ifs) || !(0, reflection_1.isIfStatement)(ifs.elseBranch)) {
421
- assert.fail('Unexpected statement found');
422
- }
423
- (0, chai_config_spec_1.expect)(ifs.tokens.endIf).to.not.exist;
424
- (0, chai_config_spec_1.expect)(ifs.elseBranch.tokens.endIf).to.exist;
425
- });
426
- });
427
- it('supports trailing colons after conditional statements', () => {
428
- let { tokens } = Lexer_1.Lexer.scan(`
429
- sub main()
430
- if 1 > 0:
431
- print "positive!"
432
- else if 1 < 0:
433
- print "negative!"
434
- else:
435
- print "tHaT NuMbEr iS ZeRo"
436
- end if
437
- end sub
438
- `);
439
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
440
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
441
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
442
- });
443
- it('supports trailing colons for one-line if statements', () => {
444
- let { tokens } = Lexer_1.Lexer.scan(`
445
- if 1 < 2: return true: end if
446
- `);
447
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
448
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
449
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
450
- });
451
- it('catches one-line if statement missing first colon', () => {
452
- //missing colon after 2
453
- let { tokens } = Lexer_1.Lexer.scan(`
454
- if 1 < 2 return true : end if
455
- `);
456
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
457
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
458
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
459
- });
460
- it('catches one-line if statement with multiple statements missing first colon', () => {
461
- //missing colon after 2
462
- let { tokens } = Lexer_1.Lexer.scan(`
463
- if 1 < 2 print "ok" : return true : end if
464
- `);
465
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
466
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
467
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
468
- });
469
- it('catches one-line if statement missing second colon', () => {
470
- //missing colon after `2`
471
- let { tokens } = Lexer_1.Lexer.scan(`
472
- if 1 < 2 : return true end if
473
- `);
474
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
475
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
476
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
477
- });
478
- it('catches one-line if statement with else missing colons', () => {
479
- //missing colon after `2`
480
- let { tokens } = Lexer_1.Lexer.scan(`
481
- if 1 < 2 : return true: else return false end if
482
- `);
483
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
484
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
485
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
486
- });
487
- it('catches one-line if statement with colon and missing end if', () => {
488
- //missing colon after `2`
489
- let { tokens } = Lexer_1.Lexer.scan(`
490
- if 1 < 2: return true
491
- `);
492
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
493
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
494
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(0);
495
- });
496
- it('catches one-line if multi-statement with colon and missing end if', () => {
497
- //missing colon after `2`
498
- let { tokens } = Lexer_1.Lexer.scan(`
499
- if 1 < 2: print "ok": return true
500
- `);
501
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
502
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
503
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(0);
504
- });
505
- it('catches one-line if statement with colon and missing endif inside a function', () => {
506
- //missing 'end if'
507
- let { tokens } = Lexer_1.Lexer.scan(`
508
- function missingendif()
509
- if true : return true
510
- end function
511
- `);
512
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
513
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(2);
514
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
515
- });
516
- it('catches extraneous colon at the end of one-line if-else', () => {
517
- //colon at the end not allowed
518
- let { tokens } = Lexer_1.Lexer.scan(`
519
- if 1 < 2 then return true else return false:
520
- `);
521
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
522
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
523
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
524
- });
525
- it('catches colon before if, unless there is `then` before', () => {
526
- //colon before if isn't allowed
527
- let { tokens } = Lexer_1.Lexer.scan(`
528
- if 1 < 2 then: if 2<3: return false: end if
529
- : if 1 < 2: return true: end if
530
- end if
531
- `);
532
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
533
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
534
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
535
- });
536
- it('catches extraneous colon+end if at the end of one-line if-else', () => {
537
- //expected newline + unexpected endif
538
- let { tokens } = Lexer_1.Lexer.scan(`
539
- if 1 < 2 then return true else return false: end if
540
- `);
541
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
542
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(2);
543
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
544
- });
545
- it('recovers from extraneous endif at the end of one-line if-else', () => {
546
- //unexpected endif
547
- let { tokens } = Lexer_1.Lexer.scan(`
548
- function test1()
549
- if 1 < 2: return true: else return false end if
550
- end function
551
- `);
552
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
553
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(2);
554
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
555
- });
556
- it('recovers from missing end-if', () => {
557
- //unexpected endif
558
- let { tokens } = Lexer_1.Lexer.scan(`
559
- function test1()
560
- if 1 < 2 then if 1 < 3
561
- return true
562
- end function
563
- function test2()
564
- end function
565
- `);
566
- const { ast, diagnostics } = Parser_1.Parser.parse(tokens);
567
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
568
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(2);
569
- const functionStatements = ast.findChildren(reflection_1.isFunctionStatement);
570
- (0, chai_config_spec_1.expect)(functionStatements).to.be.lengthOf(2);
571
- });
572
- it('catches extraneous colon at the end of one-line if', () => {
573
- //colon at the end not allowed
574
- let { tokens } = Lexer_1.Lexer.scan(`
575
- if 1 < 2 then return true:
576
- `);
577
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
578
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
579
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
580
- });
581
- it('catches multi-line if inside a one-line if branch', () => {
582
- //second if should be inline
583
- let { tokens } = Lexer_1.Lexer.scan(`
584
- if 1 < 2 then if 1 < 3
585
- return true
586
- end if
587
- `);
588
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
589
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
590
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
591
- });
592
- it('supports multiple statements in one-line if statements', () => {
593
- //second if should be inline
594
- let { tokens } = Lexer_1.Lexer.scan(`
595
- if 1 < 2 then ok = true : m.ok = true : print "ok" : ook() else if 1 < 3
596
- return true
597
- end if
598
- `);
599
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
600
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
601
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
602
- });
603
- it('catches multi-line if inside a one-line if else branch', () => {
604
- //second if should be inline
605
- let { tokens } = Lexer_1.Lexer.scan(`
606
- if 1 < 2 then return false else if 1 < 3
607
- return true
608
- end if
609
- `);
610
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
611
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
612
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
613
- });
614
- it('catches else statement missing colon', () => {
615
- //missing colon before `end if`
616
- let { tokens } = Lexer_1.Lexer.scan(`
617
- if 1 < 2
618
- return true
619
- else return false end if
620
- `);
621
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
622
- (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
623
- (0, chai_config_spec_1.expect)(ast.statements).to.be.lengthOf(1);
624
- });
625
- it('supports if statement with condition and action on one line, but end if on separate line', () => {
626
- let { tokens } = Lexer_1.Lexer.scan(`
627
- if 1 < 2: return true
628
- end if
629
- `);
630
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
631
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
632
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
633
- });
634
- it('supports colon after return in single-line if statement', () => {
635
- let { tokens } = Lexer_1.Lexer.scan(`
636
- if false : print "true" : end if
637
- `);
638
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
639
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
640
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
641
- });
642
- it('supports if elseif endif single line', () => {
643
- let { tokens } = Lexer_1.Lexer.scan(`
644
- if true: print "8 worked": else if true: print "not run": else: print "not run": end if
645
- `);
646
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
647
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
648
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
649
- });
650
- it('supports comment at the end of one-line if', () => {
651
- let { tokens } = Lexer_1.Lexer.scan(`
652
- if 1 > 2 then return true 'OK
653
- `);
654
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
655
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
656
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
657
- });
658
- it('supports colon at the beginning of a line', () => {
659
- let { tokens } = Lexer_1.Lexer.scan(`
660
- if 1 < 2 then: if 1 < 4 then return false
661
- : end if
662
- `);
663
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
664
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
665
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
666
- });
667
- it('supports one-line functions inside of one-line if statement', () => {
668
- let { tokens } = Lexer_1.Lexer.scan(`
669
- if true then : test = sub() : print "yes" : end sub : end if
670
- `);
671
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
672
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
673
- (0, chai_config_spec_1.expect)(ast.statements).to.be.length.greaterThan(0);
674
- });
675
- it('single-line if block statements have correct range', () => {
676
- let { tokens } = Lexer_1.Lexer.scan(`
677
- if false then print "true"
678
- if false then print "true": a = 10
679
- if false then print "true" else print "false"
680
- if false then print "true" else print "false": a = 20
681
- `);
682
- let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
683
- (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
684
- const then1 = ast.statements[0].thenBranch;
685
- (0, chai_config_spec_1.expect)(then1.location).to.eql(util_1.util.createBoundingLocation(...then1.statements));
686
- const then2 = ast.statements[1].thenBranch;
687
- (0, chai_config_spec_1.expect)(then2.location).to.eql(util_1.util.createBoundingLocation(...then2.statements));
688
- const else1 = ast.statements[2].elseBranch;
689
- (0, chai_config_spec_1.expect)(else1.location).to.eql(util_1.util.createBoundingLocation(...else1.statements));
690
- const else2 = ast.statements[3].elseBranch;
691
- (0, chai_config_spec_1.expect)(else2.location).to.eql(util_1.util.createBoundingLocation(...else2.statements));
692
- });
693
- });
694
- //# sourceMappingURL=If.spec.js.map