brighterscript 1.0.0-alpha.50 → 1.0.0-alpha.52

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 (485) hide show
  1. package/README.md +10 -2
  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 +40 -2
  18. package/dist/LanguageServer.js +154 -5
  19. package/dist/LanguageServer.js.map +1 -1
  20. package/dist/Program.d.ts +66 -1
  21. package/dist/Program.js +205 -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 +5 -2
  43. package/dist/bscPlugin/BscPlugin.js +14 -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/inlayHints/InlayHintProcessor.d.ts +23 -0
  68. package/dist/bscPlugin/inlayHints/InlayHintProcessor.js +186 -0
  69. package/dist/bscPlugin/inlayHints/InlayHintProcessor.js.map +1 -0
  70. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  71. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
  72. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  73. package/dist/bscPlugin/serialize/FileSerializer.d.ts +1 -1
  74. package/dist/bscPlugin/serialize/FileSerializer.js +12 -7
  75. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -1
  76. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +7 -0
  77. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +87 -1
  78. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -1
  79. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +14 -0
  80. package/dist/bscPlugin/validation/BrsFileValidator.js +97 -21
  81. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  82. package/dist/bscPlugin/validation/ScopeValidator.d.ts +17 -0
  83. package/dist/bscPlugin/validation/ScopeValidator.js +162 -4
  84. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  85. package/dist/bscPlugin/validation/XmlFileValidator.js +14 -0
  86. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  87. package/dist/cli.js +13 -0
  88. package/dist/cli.js.map +1 -1
  89. package/dist/diagnosticUtils.d.ts +51 -1
  90. package/dist/diagnosticUtils.js +222 -1
  91. package/dist/diagnosticUtils.js.map +1 -1
  92. package/dist/files/BrsFile.d.ts +18 -2
  93. package/dist/files/BrsFile.js +87 -6
  94. package/dist/files/BrsFile.js.map +1 -1
  95. package/dist/files/XmlFile.js +2 -1
  96. package/dist/files/XmlFile.js.map +1 -1
  97. package/dist/interfaces.d.ts +101 -23
  98. package/dist/interfaces.js.map +1 -1
  99. package/dist/lexer/Lexer.js +4 -5
  100. package/dist/lexer/Lexer.js.map +1 -1
  101. package/dist/lexer/Token.d.ts +1 -1
  102. package/dist/lexer/TokenKind.d.ts +8 -0
  103. package/dist/lexer/TokenKind.js +21 -1
  104. package/dist/lexer/TokenKind.js.map +1 -1
  105. package/dist/lsp/LspProject.d.ts +56 -1
  106. package/dist/lsp/Project.d.ts +38 -2
  107. package/dist/lsp/Project.js +135 -4
  108. package/dist/lsp/Project.js.map +1 -1
  109. package/dist/lsp/ProjectManager.d.ts +52 -2
  110. package/dist/lsp/ProjectManager.js +164 -9
  111. package/dist/lsp/ProjectManager.js.map +1 -1
  112. package/dist/lsp/worker/WorkerThreadProject.d.ts +31 -2
  113. package/dist/lsp/worker/WorkerThreadProject.js +19 -0
  114. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
  115. package/dist/parser/AstNode.d.ts +3 -1
  116. package/dist/parser/AstNode.js +2 -0
  117. package/dist/parser/AstNode.js.map +1 -1
  118. package/dist/parser/Expression.d.ts +54 -5
  119. package/dist/parser/Expression.js +112 -7
  120. package/dist/parser/Expression.js.map +1 -1
  121. package/dist/parser/Parser.d.ts +24 -1
  122. package/dist/parser/Parser.js +180 -41
  123. package/dist/parser/Parser.js.map +1 -1
  124. package/dist/parser/SGParser.d.ts +1 -0
  125. package/dist/parser/SGParser.js +9 -0
  126. package/dist/parser/SGParser.js.map +1 -1
  127. package/dist/parser/Statement.d.ts +6 -1
  128. package/dist/parser/Statement.js +22 -14
  129. package/dist/parser/Statement.js.map +1 -1
  130. package/dist/parser/TranspileState.d.ts +4 -2
  131. package/dist/parser/TranspileState.js +13 -4
  132. package/dist/parser/TranspileState.js.map +1 -1
  133. package/dist/roku-types/data.json +210 -3
  134. package/dist/types/ArrayType.js +6 -1
  135. package/dist/types/ArrayType.js.map +1 -1
  136. package/dist/types/BooleanType.js +1 -1
  137. package/dist/types/BooleanType.js.map +1 -1
  138. package/dist/types/CallFuncableType.d.ts +1 -1
  139. package/dist/types/ClassType.js +3 -0
  140. package/dist/types/ClassType.js.map +1 -1
  141. package/dist/types/ComponentType.js +3 -0
  142. package/dist/types/ComponentType.js.map +1 -1
  143. package/dist/types/EnumType.js +3 -0
  144. package/dist/types/EnumType.js.map +1 -1
  145. package/dist/types/IntersectionType.js +3 -0
  146. package/dist/types/IntersectionType.js.map +1 -1
  147. package/dist/types/ReferenceType.js +6 -0
  148. package/dist/types/ReferenceType.js.map +1 -1
  149. package/dist/types/TypeStatementType.d.ts +1 -0
  150. package/dist/types/TypeStatementType.js +12 -1
  151. package/dist/types/TypeStatementType.js.map +1 -1
  152. package/dist/types/TypedFunctionType.js +20 -10
  153. package/dist/types/TypedFunctionType.js.map +1 -1
  154. package/dist/types/UnionType.js +3 -0
  155. package/dist/types/UnionType.js.map +1 -1
  156. package/dist/types/helpers.js +6 -0
  157. package/dist/types/helpers.js.map +1 -1
  158. package/dist/util.d.ts +42 -3
  159. package/dist/util.js +131 -7
  160. package/dist/util.js.map +1 -1
  161. package/package.json +25 -26
  162. package/dist/astUtils/CachedLookups.spec.d.ts +0 -1
  163. package/dist/astUtils/CachedLookups.spec.js +0 -39
  164. package/dist/astUtils/CachedLookups.spec.js.map +0 -1
  165. package/dist/astUtils/Editor.spec.d.ts +0 -1
  166. package/dist/astUtils/Editor.spec.js +0 -258
  167. package/dist/astUtils/Editor.spec.js.map +0 -1
  168. package/dist/astUtils/creators.spec.d.ts +0 -1
  169. package/dist/astUtils/creators.spec.js +0 -21
  170. package/dist/astUtils/creators.spec.js.map +0 -1
  171. package/dist/astUtils/reflection.spec.d.ts +0 -1
  172. package/dist/astUtils/reflection.spec.js +0 -392
  173. package/dist/astUtils/reflection.spec.js.map +0 -1
  174. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  175. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  176. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  177. package/dist/astUtils/visitors.spec.d.ts +0 -1
  178. package/dist/astUtils/visitors.spec.js +0 -1432
  179. package/dist/astUtils/visitors.spec.js.map +0 -1
  180. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  181. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -311
  182. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  183. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +0 -1
  184. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +0 -2512
  185. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +0 -1
  186. package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +0 -1
  187. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +0 -87
  188. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +0 -1
  189. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +0 -1
  190. package/dist/bscPlugin/hover/HoverProcessor.spec.js +0 -991
  191. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +0 -1
  192. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +0 -1
  193. package/dist/bscPlugin/references/ReferencesProvider.spec.js +0 -51
  194. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +0 -1
  195. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +0 -1
  196. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -564
  197. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +0 -1
  198. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +0 -1
  199. package/dist/bscPlugin/serialize/BslibInjector.spec.js +0 -33
  200. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +0 -1
  201. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +0 -1
  202. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +0 -291
  203. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +0 -1
  204. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +0 -1
  205. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +0 -245
  206. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +0 -1
  207. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +0 -1
  208. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +0 -75
  209. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +0 -1
  210. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +0 -1
  211. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +0 -1517
  212. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +0 -1
  213. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +0 -1
  214. package/dist/bscPlugin/validation/ScopeValidator.spec.js +0 -6135
  215. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +0 -1
  216. package/dist/common/Sequencer.spec.d.ts +0 -1
  217. package/dist/common/Sequencer.spec.js +0 -75
  218. package/dist/common/Sequencer.spec.js.map +0 -1
  219. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  220. package/dist/files/BrsFile.Class.spec.js +0 -2035
  221. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  222. package/dist/files/BrsFile.spec.d.ts +0 -1
  223. package/dist/files/BrsFile.spec.js +0 -5848
  224. package/dist/files/BrsFile.spec.js.map +0 -1
  225. package/dist/files/LazyFileData.spec.d.ts +0 -1
  226. package/dist/files/LazyFileData.spec.js +0 -27
  227. package/dist/files/LazyFileData.spec.js.map +0 -1
  228. package/dist/files/XmlFile.spec.d.ts +0 -1
  229. package/dist/files/XmlFile.spec.js +0 -1173
  230. package/dist/files/XmlFile.spec.js.map +0 -1
  231. package/dist/files/tests/imports.spec.d.ts +0 -1
  232. package/dist/files/tests/imports.spec.js +0 -251
  233. package/dist/files/tests/imports.spec.js.map +0 -1
  234. package/dist/files/tests/optionalChaning.spec.d.ts +0 -1
  235. package/dist/files/tests/optionalChaning.spec.js +0 -152
  236. package/dist/files/tests/optionalChaning.spec.js.map +0 -1
  237. package/dist/lexer/Character.spec.d.ts +0 -1
  238. package/dist/lexer/Character.spec.js +0 -27
  239. package/dist/lexer/Character.spec.js.map +0 -1
  240. package/dist/lexer/Lexer.spec.d.ts +0 -1
  241. package/dist/lexer/Lexer.spec.js +0 -1345
  242. package/dist/lexer/Lexer.spec.js.map +0 -1
  243. package/dist/lsp/ActionQueue.spec.d.ts +0 -1
  244. package/dist/lsp/ActionQueue.spec.js +0 -80
  245. package/dist/lsp/ActionQueue.spec.js.map +0 -1
  246. package/dist/lsp/DocumentManager.spec.d.ts +0 -1
  247. package/dist/lsp/DocumentManager.spec.js +0 -103
  248. package/dist/lsp/DocumentManager.spec.js.map +0 -1
  249. package/dist/lsp/PathFilterer.spec.d.ts +0 -1
  250. package/dist/lsp/PathFilterer.spec.js +0 -182
  251. package/dist/lsp/PathFilterer.spec.js.map +0 -1
  252. package/dist/lsp/Project.spec.d.ts +0 -1
  253. package/dist/lsp/Project.spec.js +0 -267
  254. package/dist/lsp/Project.spec.js.map +0 -1
  255. package/dist/lsp/ProjectManager.spec.d.ts +0 -1
  256. package/dist/lsp/ProjectManager.spec.js +0 -913
  257. package/dist/lsp/ProjectManager.spec.js.map +0 -1
  258. package/dist/lsp/worker/MessageHandler.spec.d.ts +0 -1
  259. package/dist/lsp/worker/MessageHandler.spec.js +0 -64
  260. package/dist/lsp/worker/MessageHandler.spec.js.map +0 -1
  261. package/dist/lsp/worker/WorkerPool.spec.d.ts +0 -1
  262. package/dist/lsp/worker/WorkerPool.spec.js +0 -59
  263. package/dist/lsp/worker/WorkerPool.spec.js.map +0 -1
  264. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +0 -2
  265. package/dist/lsp/worker/WorkerThreadProject.spec.js +0 -71
  266. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +0 -1
  267. package/dist/parser/AstNode.spec.d.ts +0 -1
  268. package/dist/parser/AstNode.spec.js +0 -1455
  269. package/dist/parser/AstNode.spec.js.map +0 -1
  270. package/dist/parser/BrightScriptDocParser.spec.d.ts +0 -1
  271. package/dist/parser/BrightScriptDocParser.spec.js +0 -310
  272. package/dist/parser/BrightScriptDocParser.spec.js.map +0 -1
  273. package/dist/parser/Expression.spec.d.ts +0 -1
  274. package/dist/parser/Expression.spec.js +0 -40
  275. package/dist/parser/Expression.spec.js.map +0 -1
  276. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  277. package/dist/parser/Parser.Class.spec.js +0 -520
  278. package/dist/parser/Parser.Class.spec.js.map +0 -1
  279. package/dist/parser/Parser.spec.d.ts +0 -6
  280. package/dist/parser/Parser.spec.js +0 -2802
  281. package/dist/parser/Parser.spec.js.map +0 -1
  282. package/dist/parser/SGParser.spec.d.ts +0 -1
  283. package/dist/parser/SGParser.spec.js +0 -130
  284. package/dist/parser/SGParser.spec.js.map +0 -1
  285. package/dist/parser/Statement.spec.d.ts +0 -1
  286. package/dist/parser/Statement.spec.js +0 -191
  287. package/dist/parser/Statement.spec.js.map +0 -1
  288. package/dist/parser/tests/Parser.spec.d.ts +0 -12
  289. package/dist/parser/tests/Parser.spec.js +0 -29
  290. package/dist/parser/tests/Parser.spec.js.map +0 -1
  291. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  292. package/dist/parser/tests/controlFlow/For.spec.js +0 -169
  293. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  294. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  295. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -140
  296. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  297. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  298. package/dist/parser/tests/controlFlow/If.spec.js +0 -694
  299. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  300. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  301. package/dist/parser/tests/controlFlow/While.spec.js +0 -114
  302. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  303. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  304. package/dist/parser/tests/expression/Additive.spec.js +0 -107
  305. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  306. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  307. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -304
  308. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  309. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  310. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -342
  311. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  312. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  313. package/dist/parser/tests/expression/Boolean.spec.js +0 -90
  314. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  315. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  316. package/dist/parser/tests/expression/Call.spec.js +0 -252
  317. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  318. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  319. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  320. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  321. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  322. package/dist/parser/tests/expression/Function.spec.js +0 -412
  323. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  324. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  325. package/dist/parser/tests/expression/Indexing.spec.js +0 -302
  326. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  327. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  328. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  329. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  330. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  331. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -346
  332. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  333. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  334. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -111
  335. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  336. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  337. package/dist/parser/tests/expression/Primary.spec.js +0 -165
  338. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  339. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +0 -1
  340. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +0 -171
  341. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +0 -1
  342. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  343. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  344. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  345. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  346. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  347. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  348. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  349. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -389
  350. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  351. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  352. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -878
  353. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  354. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +0 -1
  355. package/dist/parser/tests/expression/TypeExpression.spec.js +0 -126
  356. package/dist/parser/tests/expression/TypeExpression.spec.js.map +0 -1
  357. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +0 -1
  358. package/dist/parser/tests/expression/UnaryExpression.spec.js +0 -52
  359. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +0 -1
  360. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  361. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  362. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  363. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +0 -1
  364. package/dist/parser/tests/statement/ConstStatement.spec.js +0 -500
  365. package/dist/parser/tests/statement/ConstStatement.spec.js.map +0 -1
  366. package/dist/parser/tests/statement/Continue.spec.d.ts +0 -1
  367. package/dist/parser/tests/statement/Continue.spec.js +0 -119
  368. package/dist/parser/tests/statement/Continue.spec.js.map +0 -1
  369. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  370. package/dist/parser/tests/statement/Declaration.spec.js +0 -114
  371. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  372. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  373. package/dist/parser/tests/statement/Dim.spec.js +0 -80
  374. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  375. package/dist/parser/tests/statement/Enum.spec.d.ts +0 -1
  376. package/dist/parser/tests/statement/Enum.spec.js +0 -744
  377. package/dist/parser/tests/statement/Enum.spec.js.map +0 -1
  378. package/dist/parser/tests/statement/For.spec.d.ts +0 -1
  379. package/dist/parser/tests/statement/For.spec.js +0 -45
  380. package/dist/parser/tests/statement/For.spec.js.map +0 -1
  381. package/dist/parser/tests/statement/ForEach.spec.d.ts +0 -1
  382. package/dist/parser/tests/statement/ForEach.spec.js +0 -36
  383. package/dist/parser/tests/statement/ForEach.spec.js.map +0 -1
  384. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  385. package/dist/parser/tests/statement/Function.spec.js +0 -343
  386. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  387. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  388. package/dist/parser/tests/statement/Goto.spec.js +0 -51
  389. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  390. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  391. package/dist/parser/tests/statement/Increment.spec.js +0 -120
  392. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  393. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +0 -1
  394. package/dist/parser/tests/statement/InterfaceStatement.spec.js +0 -110
  395. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +0 -1
  396. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  397. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  398. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  399. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  400. package/dist/parser/tests/statement/Misc.spec.js +0 -292
  401. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  402. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  403. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -200
  404. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  405. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  406. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -97
  407. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  408. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  409. package/dist/parser/tests/statement/Set.spec.js +0 -232
  410. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  411. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  412. package/dist/parser/tests/statement/Stop.spec.js +0 -38
  413. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  414. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  415. package/dist/parser/tests/statement/Throw.spec.js +0 -38
  416. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  417. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  418. package/dist/parser/tests/statement/TryCatch.spec.js +0 -151
  419. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  420. package/dist/preprocessor/Manifest.spec.d.ts +0 -1
  421. package/dist/preprocessor/Manifest.spec.js +0 -80
  422. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  423. package/dist/types/ArrayType.spec.d.ts +0 -1
  424. package/dist/types/ArrayType.spec.js +0 -58
  425. package/dist/types/ArrayType.spec.js.map +0 -1
  426. package/dist/types/BooleanType.spec.d.ts +0 -1
  427. package/dist/types/BooleanType.spec.js +0 -18
  428. package/dist/types/BooleanType.spec.js.map +0 -1
  429. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +0 -1
  430. package/dist/types/BuiltInInterfaceAdder.spec.js +0 -115
  431. package/dist/types/BuiltInInterfaceAdder.spec.js.map +0 -1
  432. package/dist/types/ClassType.spec.d.ts +0 -1
  433. package/dist/types/ClassType.spec.js +0 -76
  434. package/dist/types/ClassType.spec.js.map +0 -1
  435. package/dist/types/DoubleType.spec.d.ts +0 -1
  436. package/dist/types/DoubleType.spec.js +0 -20
  437. package/dist/types/DoubleType.spec.js.map +0 -1
  438. package/dist/types/DynamicType.spec.d.ts +0 -1
  439. package/dist/types/DynamicType.spec.js +0 -23
  440. package/dist/types/DynamicType.spec.js.map +0 -1
  441. package/dist/types/EnumType.spec.d.ts +0 -1
  442. package/dist/types/EnumType.spec.js +0 -33
  443. package/dist/types/EnumType.spec.js.map +0 -1
  444. package/dist/types/FloatType.spec.d.ts +0 -1
  445. package/dist/types/FloatType.spec.js +0 -12
  446. package/dist/types/FloatType.spec.js.map +0 -1
  447. package/dist/types/IntegerType.spec.d.ts +0 -1
  448. package/dist/types/IntegerType.spec.js +0 -16
  449. package/dist/types/IntegerType.spec.js.map +0 -1
  450. package/dist/types/InterfaceType.spec.d.ts +0 -1
  451. package/dist/types/InterfaceType.spec.js +0 -227
  452. package/dist/types/InterfaceType.spec.js.map +0 -1
  453. package/dist/types/IntersectionType.spec.d.ts +0 -1
  454. package/dist/types/IntersectionType.spec.js +0 -150
  455. package/dist/types/IntersectionType.spec.js.map +0 -1
  456. package/dist/types/InvalidType.spec.d.ts +0 -1
  457. package/dist/types/InvalidType.spec.js +0 -16
  458. package/dist/types/InvalidType.spec.js.map +0 -1
  459. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  460. package/dist/types/LongIntegerType.spec.js +0 -18
  461. package/dist/types/LongIntegerType.spec.js.map +0 -1
  462. package/dist/types/ObjectType.spec.d.ts +0 -1
  463. package/dist/types/ObjectType.spec.js +0 -12
  464. package/dist/types/ObjectType.spec.js.map +0 -1
  465. package/dist/types/ReferenceType.spec.d.ts +0 -1
  466. package/dist/types/ReferenceType.spec.js +0 -151
  467. package/dist/types/ReferenceType.spec.js.map +0 -1
  468. package/dist/types/StringType.spec.d.ts +0 -1
  469. package/dist/types/StringType.spec.js +0 -12
  470. package/dist/types/StringType.spec.js.map +0 -1
  471. package/dist/types/TypedFunctionType.spec.d.ts +0 -1
  472. package/dist/types/TypedFunctionType.spec.js +0 -122
  473. package/dist/types/TypedFunctionType.spec.js.map +0 -1
  474. package/dist/types/UnionType.spec.d.ts +0 -1
  475. package/dist/types/UnionType.spec.js +0 -205
  476. package/dist/types/UnionType.spec.js.map +0 -1
  477. package/dist/types/VoidType.spec.d.ts +0 -1
  478. package/dist/types/VoidType.spec.js +0 -12
  479. package/dist/types/VoidType.spec.js.map +0 -1
  480. package/dist/types/helper.spec.d.ts +0 -1
  481. package/dist/types/helper.spec.js +0 -174
  482. package/dist/types/helper.spec.js.map +0 -1
  483. package/dist/types/roFunctionType.spec.d.ts +0 -1
  484. package/dist/types/roFunctionType.spec.js +0 -20
  485. 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