brighterscript 1.0.0-alpha.1 → 1.0.0-alpha.13

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 (316) hide show
  1. package/CHANGELOG.md +362 -248
  2. package/README.md +2 -2
  3. package/bsconfig.schema.json +1 -1
  4. package/dist/CodeActionUtil.d.ts +11 -2
  5. package/dist/CodeActionUtil.js +17 -3
  6. package/dist/CodeActionUtil.js.map +1 -1
  7. package/dist/CommentFlagProcessor.d.ts +4 -4
  8. package/dist/CommentFlagProcessor.js +5 -3
  9. package/dist/CommentFlagProcessor.js.map +1 -1
  10. package/dist/DependencyGraph.js.map +1 -1
  11. package/dist/DiagnosticCollection.js +2 -2
  12. package/dist/DiagnosticCollection.js.map +1 -1
  13. package/dist/DiagnosticFilterer.js +3 -3
  14. package/dist/DiagnosticFilterer.js.map +1 -1
  15. package/dist/DiagnosticMessages.d.ts +15 -5
  16. package/dist/DiagnosticMessages.js +19 -9
  17. package/dist/DiagnosticMessages.js.map +1 -1
  18. package/dist/LanguageServer.d.ts +11 -10
  19. package/dist/LanguageServer.js +87 -58
  20. package/dist/LanguageServer.js.map +1 -1
  21. package/dist/Logger.d.ts +2 -0
  22. package/dist/Logger.js +5 -3
  23. package/dist/Logger.js.map +1 -1
  24. package/dist/Program.d.ts +76 -46
  25. package/dist/Program.js +254 -180
  26. package/dist/Program.js.map +1 -1
  27. package/dist/ProgramBuilder.d.ts +7 -7
  28. package/dist/ProgramBuilder.js +37 -43
  29. package/dist/ProgramBuilder.js.map +1 -1
  30. package/dist/Scope.d.ts +33 -23
  31. package/dist/Scope.js +222 -147
  32. package/dist/Scope.js.map +1 -1
  33. package/dist/SemanticTokenUtils.d.ts +14 -0
  34. package/dist/SemanticTokenUtils.js +81 -0
  35. package/dist/SemanticTokenUtils.js.map +1 -0
  36. package/dist/SymbolTable.d.ts +9 -3
  37. package/dist/SymbolTable.js +40 -13
  38. package/dist/SymbolTable.js.map +1 -1
  39. package/dist/XmlScope.d.ts +7 -2
  40. package/dist/XmlScope.js +67 -29
  41. package/dist/XmlScope.js.map +1 -1
  42. package/dist/astUtils/AstEditor.d.ts +27 -0
  43. package/dist/astUtils/AstEditor.js +97 -0
  44. package/dist/astUtils/AstEditor.js.map +1 -0
  45. package/dist/astUtils/AstEditor.spec.d.ts +1 -0
  46. package/dist/astUtils/AstEditor.spec.js +133 -0
  47. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  48. package/dist/astUtils/creators.d.ts +15 -1
  49. package/dist/astUtils/creators.js +39 -9
  50. package/dist/astUtils/creators.js.map +1 -1
  51. package/dist/astUtils/creators.spec.js +4 -4
  52. package/dist/astUtils/creators.spec.js.map +1 -1
  53. package/dist/astUtils/index.js +1 -1
  54. package/dist/astUtils/reflection.d.ts +20 -8
  55. package/dist/astUtils/reflection.js +42 -1
  56. package/dist/astUtils/reflection.js.map +1 -1
  57. package/dist/astUtils/reflection.spec.js +115 -115
  58. package/dist/astUtils/reflection.spec.js.map +1 -1
  59. package/dist/astUtils/stackedVisitor.js.map +1 -1
  60. package/dist/astUtils/stackedVisitor.spec.js +13 -13
  61. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  62. package/dist/astUtils/visitors.js +1 -1
  63. package/dist/astUtils/visitors.js.map +1 -1
  64. package/dist/astUtils/visitors.spec.js +28 -28
  65. package/dist/astUtils/visitors.spec.js.map +1 -1
  66. package/dist/astUtils/xml.d.ts +4 -3
  67. package/dist/astUtils/xml.js +8 -3
  68. package/dist/astUtils/xml.js.map +1 -1
  69. package/dist/bscPlugin/BscPlugin.d.ts +2 -1
  70. package/dist/bscPlugin/BscPlugin.js +4 -0
  71. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  72. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +5 -6
  73. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  74. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +30 -30
  75. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  76. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +7 -0
  77. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +63 -0
  78. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +1 -0
  79. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +1 -0
  80. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +45 -0
  81. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +1 -0
  82. package/dist/diagnosticUtils.d.ts +1 -0
  83. package/dist/diagnosticUtils.js +14 -7
  84. package/dist/diagnosticUtils.js.map +1 -1
  85. package/dist/examples/plugins/removePrint.js +2 -2
  86. package/dist/examples/plugins/removePrint.js.map +1 -1
  87. package/dist/files/BrsFile.Class.spec.js +486 -71
  88. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  89. package/dist/files/BrsFile.d.ts +48 -23
  90. package/dist/files/BrsFile.js +403 -233
  91. package/dist/files/BrsFile.js.map +1 -1
  92. package/dist/files/BrsFile.spec.js +367 -316
  93. package/dist/files/BrsFile.spec.js.map +1 -1
  94. package/dist/files/XmlFile.d.ts +13 -6
  95. package/dist/files/XmlFile.js +27 -21
  96. package/dist/files/XmlFile.js.map +1 -1
  97. package/dist/files/XmlFile.spec.js +274 -228
  98. package/dist/files/XmlFile.spec.js.map +1 -1
  99. package/dist/files/tests/imports.spec.js +49 -49
  100. package/dist/files/tests/imports.spec.js.map +1 -1
  101. package/dist/globalCallables.d.ts +3 -1
  102. package/dist/globalCallables.js +359 -87
  103. package/dist/globalCallables.js.map +1 -1
  104. package/dist/index.js +2 -1
  105. package/dist/index.js.map +1 -1
  106. package/dist/interfaces.d.ts +51 -14
  107. package/dist/lexer/Lexer.d.ts +14 -1
  108. package/dist/lexer/Lexer.js +91 -21
  109. package/dist/lexer/Lexer.js.map +1 -1
  110. package/dist/lexer/Lexer.spec.js +187 -132
  111. package/dist/lexer/Lexer.spec.js.map +1 -1
  112. package/dist/lexer/Token.d.ts +2 -2
  113. package/dist/lexer/TokenKind.d.ts +7 -1
  114. package/dist/lexer/TokenKind.js +51 -3
  115. package/dist/lexer/TokenKind.js.map +1 -1
  116. package/dist/lexer/index.js +2 -1
  117. package/dist/lexer/index.js.map +1 -1
  118. package/dist/parser/BrsTranspileState.d.ts +7 -0
  119. package/dist/parser/BrsTranspileState.js +10 -1
  120. package/dist/parser/BrsTranspileState.js.map +1 -1
  121. package/dist/parser/Expression.d.ts +23 -5
  122. package/dist/parser/Expression.js +124 -75
  123. package/dist/parser/Expression.js.map +1 -1
  124. package/dist/parser/Parser.Class.spec.js +159 -60
  125. package/dist/parser/Parser.Class.spec.js.map +1 -1
  126. package/dist/parser/Parser.d.ts +114 -26
  127. package/dist/parser/Parser.js +471 -126
  128. package/dist/parser/Parser.js.map +1 -1
  129. package/dist/parser/Parser.spec.js +396 -235
  130. package/dist/parser/Parser.spec.js.map +1 -1
  131. package/dist/parser/SGParser.d.ts +41 -4
  132. package/dist/parser/SGParser.js +186 -175
  133. package/dist/parser/SGParser.js.map +1 -1
  134. package/dist/parser/SGParser.spec.js +35 -22
  135. package/dist/parser/SGParser.spec.js.map +1 -1
  136. package/dist/parser/SGTypes.d.ts +206 -38
  137. package/dist/parser/SGTypes.js +470 -161
  138. package/dist/parser/SGTypes.js.map +1 -1
  139. package/dist/parser/SGTypes.spec.d.ts +1 -0
  140. package/dist/parser/SGTypes.spec.js +351 -0
  141. package/dist/parser/SGTypes.spec.js.map +1 -0
  142. package/dist/parser/Statement.d.ts +92 -18
  143. package/dist/parser/Statement.js +287 -58
  144. package/dist/parser/Statement.js.map +1 -1
  145. package/dist/parser/Statement.spec.js +11 -11
  146. package/dist/parser/Statement.spec.js.map +1 -1
  147. package/dist/parser/TranspileState.d.ts +1 -1
  148. package/dist/parser/TranspileState.js +15 -7
  149. package/dist/parser/TranspileState.js.map +1 -1
  150. package/dist/parser/index.js +1 -1
  151. package/dist/parser/tests/Parser.spec.d.ts +8 -7
  152. package/dist/parser/tests/Parser.spec.js +12 -8
  153. package/dist/parser/tests/Parser.spec.js.map +1 -1
  154. package/dist/parser/tests/controlFlow/For.spec.js +50 -50
  155. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  156. package/dist/parser/tests/controlFlow/ForEach.spec.js +31 -31
  157. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  158. package/dist/parser/tests/controlFlow/If.spec.js +174 -156
  159. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  160. package/dist/parser/tests/controlFlow/While.spec.js +32 -32
  161. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  162. package/dist/parser/tests/expression/Additive.spec.js +21 -21
  163. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  164. package/dist/parser/tests/expression/ArrayLiterals.spec.js +105 -105
  165. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  166. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +148 -124
  167. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  168. package/dist/parser/tests/expression/Boolean.spec.js +17 -17
  169. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  170. package/dist/parser/tests/expression/Call.spec.js +30 -30
  171. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  172. package/dist/parser/tests/expression/Exponential.spec.js +16 -16
  173. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  174. package/dist/parser/tests/expression/Function.spec.js +247 -247
  175. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  176. package/dist/parser/tests/expression/Indexing.spec.js +73 -73
  177. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  178. package/dist/parser/tests/expression/Multiplicative.spec.js +36 -36
  179. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  180. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -47
  181. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  182. package/dist/parser/tests/expression/PrefixUnary.spec.js +35 -35
  183. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  184. package/dist/parser/tests/expression/Primary.spec.js +26 -26
  185. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  186. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  187. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +170 -0
  188. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  189. package/dist/parser/tests/expression/Relational.spec.js +42 -42
  190. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  191. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +8 -8
  192. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  193. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +12 -12
  194. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  195. package/dist/parser/tests/expression/TernaryExpression.spec.js +100 -100
  196. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  197. package/dist/parser/tests/statement/AssignmentOperators.spec.js +35 -35
  198. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  199. package/dist/parser/tests/statement/Declaration.spec.js +39 -39
  200. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  201. package/dist/parser/tests/statement/Dim.spec.js +21 -21
  202. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  203. package/dist/parser/tests/statement/Function.spec.js +192 -192
  204. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  205. package/dist/parser/tests/statement/Goto.spec.js +11 -11
  206. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  207. package/dist/parser/tests/statement/Increment.spec.js +46 -46
  208. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  209. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  210. package/dist/parser/tests/statement/InterfaceStatement.spec.js +61 -0
  211. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  212. package/dist/parser/tests/statement/LibraryStatement.spec.js +10 -10
  213. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  214. package/dist/parser/tests/statement/Misc.spec.js +37 -36
  215. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  216. package/dist/parser/tests/statement/PrintStatement.spec.js +30 -30
  217. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  218. package/dist/parser/tests/statement/ReturnStatement.spec.js +43 -43
  219. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  220. package/dist/parser/tests/statement/Set.spec.js +69 -69
  221. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  222. package/dist/parser/tests/statement/Stop.spec.js +9 -9
  223. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  224. package/dist/parser/tests/statement/Throw.spec.js +5 -5
  225. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  226. package/dist/parser/tests/statement/TryCatch.spec.js +13 -13
  227. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  228. package/dist/preprocessor/Chunk.js.map +1 -1
  229. package/dist/preprocessor/Manifest.d.ts +1 -1
  230. package/dist/preprocessor/Preprocessor.js +1 -1
  231. package/dist/preprocessor/Preprocessor.js.map +1 -1
  232. package/dist/preprocessor/Preprocessor.spec.js +49 -49
  233. package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
  234. package/dist/preprocessor/PreprocessorParser.spec.js +72 -72
  235. package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
  236. package/dist/preprocessor/index.js +1 -1
  237. package/dist/types/ArrayType.js +5 -4
  238. package/dist/types/ArrayType.js.map +1 -1
  239. package/dist/types/ArrayType.spec.js +8 -8
  240. package/dist/types/ArrayType.spec.js.map +1 -1
  241. package/dist/types/BooleanType.js +3 -3
  242. package/dist/types/BooleanType.js.map +1 -1
  243. package/dist/types/BooleanType.spec.js +2 -2
  244. package/dist/types/BooleanType.spec.js.map +1 -1
  245. package/dist/types/BscType.d.ts +19 -5
  246. package/dist/types/BscType.js +9 -0
  247. package/dist/types/BscType.js.map +1 -1
  248. package/dist/types/CustomType.d.ts +8 -5
  249. package/dist/types/CustomType.js +17 -6
  250. package/dist/types/CustomType.js.map +1 -1
  251. package/dist/types/DoubleType.js +8 -8
  252. package/dist/types/DoubleType.js.map +1 -1
  253. package/dist/types/DoubleType.spec.js +2 -2
  254. package/dist/types/DoubleType.spec.js.map +1 -1
  255. package/dist/types/DynamicType.js +1 -1
  256. package/dist/types/DynamicType.js.map +1 -1
  257. package/dist/types/DynamicType.spec.js +2 -2
  258. package/dist/types/DynamicType.spec.js.map +1 -1
  259. package/dist/types/FloatType.d.ts +1 -1
  260. package/dist/types/FloatType.js +8 -8
  261. package/dist/types/FloatType.js.map +1 -1
  262. package/dist/types/FloatType.spec.js +2 -2
  263. package/dist/types/FloatType.spec.js.map +1 -1
  264. package/dist/types/FunctionType.d.ts +5 -11
  265. package/dist/types/FunctionType.js +24 -13
  266. package/dist/types/FunctionType.js.map +1 -1
  267. package/dist/types/FunctionType.spec.js +11 -5
  268. package/dist/types/FunctionType.spec.js.map +1 -1
  269. package/dist/types/IntegerType.d.ts +1 -1
  270. package/dist/types/IntegerType.js +8 -8
  271. package/dist/types/IntegerType.js.map +1 -1
  272. package/dist/types/IntegerType.spec.js +2 -2
  273. package/dist/types/IntegerType.spec.js.map +1 -1
  274. package/dist/types/InterfaceType.d.ts +8 -2
  275. package/dist/types/InterfaceType.js +42 -6
  276. package/dist/types/InterfaceType.js.map +1 -1
  277. package/dist/types/InterfaceType.spec.d.ts +1 -0
  278. package/dist/types/InterfaceType.spec.js +174 -0
  279. package/dist/types/InterfaceType.spec.js.map +1 -0
  280. package/dist/types/InvalidType.js +4 -4
  281. package/dist/types/InvalidType.js.map +1 -1
  282. package/dist/types/InvalidType.spec.js +2 -2
  283. package/dist/types/InvalidType.spec.js.map +1 -1
  284. package/dist/types/LazyType.d.ts +9 -7
  285. package/dist/types/LazyType.js +22 -10
  286. package/dist/types/LazyType.js.map +1 -1
  287. package/dist/types/LongIntegerType.d.ts +1 -1
  288. package/dist/types/LongIntegerType.js +8 -8
  289. package/dist/types/LongIntegerType.js.map +1 -1
  290. package/dist/types/LongIntegerType.spec.js +2 -2
  291. package/dist/types/LongIntegerType.spec.js.map +1 -1
  292. package/dist/types/ObjectType.d.ts +7 -4
  293. package/dist/types/ObjectType.js +6 -3
  294. package/dist/types/ObjectType.js.map +1 -1
  295. package/dist/types/ObjectType.spec.js +2 -2
  296. package/dist/types/ObjectType.spec.js.map +1 -1
  297. package/dist/types/StringType.js +3 -3
  298. package/dist/types/StringType.js.map +1 -1
  299. package/dist/types/StringType.spec.js +2 -2
  300. package/dist/types/StringType.spec.js.map +1 -1
  301. package/dist/types/UninitializedType.js +3 -3
  302. package/dist/types/UninitializedType.js.map +1 -1
  303. package/dist/types/VoidType.js +3 -3
  304. package/dist/types/VoidType.js.map +1 -1
  305. package/dist/types/VoidType.spec.js +2 -2
  306. package/dist/types/VoidType.spec.js.map +1 -1
  307. package/dist/types/helpers.d.ts +42 -0
  308. package/dist/types/helpers.js +113 -0
  309. package/dist/types/helpers.js.map +1 -0
  310. package/dist/util.d.ts +77 -17
  311. package/dist/util.js +247 -59
  312. package/dist/util.js.map +1 -1
  313. package/dist/validators/ClassValidator.d.ts +5 -1
  314. package/dist/validators/ClassValidator.js +59 -24
  315. package/dist/validators/ClassValidator.js.map +1 -1
  316. package/package.json +13 -13
@@ -19,8 +19,8 @@ describe('parser if statements', () => {
19
19
  end if
20
20
  `);
21
21
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
22
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
23
- chai_1.expect(statements).to.be.length.greaterThan(0);
22
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
23
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
24
24
  });
25
25
  it('allows empty elseif blocks', () => {
26
26
  var _a;
@@ -34,8 +34,8 @@ describe('parser if statements', () => {
34
34
  end if
35
35
  `);
36
36
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
37
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
38
- chai_1.expect(statements).to.be.length.greaterThan(0);
37
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
38
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
39
39
  });
40
40
  it('allows empty else blocks', () => {
41
41
  var _a;
@@ -49,8 +49,8 @@ describe('parser if statements', () => {
49
49
  end if
50
50
  `);
51
51
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
52
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
53
- chai_1.expect(statements).to.be.length.greaterThan(0);
52
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
53
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
54
54
  });
55
55
  it('single-line if next to else or endif', () => {
56
56
  var _a;
@@ -65,16 +65,16 @@ describe('parser if statements', () => {
65
65
  end if
66
66
  `);
67
67
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
68
- chai_1.expect(diagnostics).to.be.lengthOf(0);
69
- chai_1.expect(statements).to.be.length.greaterThan(0);
68
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
69
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
70
70
  let ifs = statements[0];
71
- if (!astUtils_1.isIfStatement(ifs) || !astUtils_1.isIfStatement((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[1])) {
71
+ if (!(0, astUtils_1.isIfStatement)(ifs) || !(0, astUtils_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[1])) {
72
72
  assert.fail('Missing single-line if inside if-then');
73
73
  }
74
- if (!astUtils_1.isIfStatement(ifs.elseBranch)) {
74
+ if (!(0, astUtils_1.isIfStatement)(ifs.elseBranch)) {
75
75
  assert.fail('Missing chained else-if statement');
76
76
  }
77
- chai_1.expect(ifs.elseBranch.elseBranch).to.exist;
77
+ (0, chai_1.expect)(ifs.elseBranch.elseBranch).to.exist;
78
78
  });
79
79
  it('single-line if inside multi-line if', () => {
80
80
  var _a;
@@ -86,14 +86,14 @@ describe('parser if statements', () => {
86
86
  end if
87
87
  `);
88
88
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
89
- chai_1.expect(diagnostics).to.be.lengthOf(0);
90
- chai_1.expect(statements).to.be.length.greaterThan(0);
89
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
90
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
91
91
  let ifs = statements[0];
92
- if (!astUtils_1.isIfStatement(ifs) || !astUtils_1.isIfStatement((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[0])) {
92
+ if (!(0, astUtils_1.isIfStatement)(ifs) || !(0, astUtils_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[0])) {
93
93
  assert.fail('Missing single-line if inside if-then');
94
94
  }
95
- chai_1.expect(ifs.elseBranch).to.exist;
96
- if (!astUtils_1.isBlock(ifs.elseBranch) || !astUtils_1.isCommentStatement(ifs.elseBranch.statements[0])) {
95
+ (0, chai_1.expect)(ifs.elseBranch).to.exist;
96
+ if (!(0, astUtils_1.isBlock)(ifs.elseBranch) || !(0, astUtils_1.isCommentStatement)(ifs.elseBranch.statements[0])) {
97
97
  assert.fail('Missing comment inside else branch');
98
98
  }
99
99
  });
@@ -105,102 +105,102 @@ describe('parser if statements', () => {
105
105
  if (diagnostics.length > 0) {
106
106
  console.log(diagnostics);
107
107
  }
108
- chai_1.expect(diagnostics).to.be.lengthOf(0);
109
- chai_1.expect(statements).to.be.length.greaterThan(0);
108
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
109
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
110
110
  });
111
111
  describe('single-line if', () => {
112
112
  it('parses if only', () => {
113
113
  let { statements, diagnostics } = Parser_1.Parser.parse([
114
- Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
115
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
116
- Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
117
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
118
- Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
119
- Parser_spec_1.identifier('foo'),
120
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
121
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
122
- Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
114
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
115
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
116
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
117
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
118
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
119
+ (0, Parser_spec_1.identifier)('foo'),
120
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
121
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
122
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
123
123
  Parser_spec_1.EOF
124
124
  ]);
125
- chai_1.expect(diagnostics).to.be.lengthOf(0);
126
- chai_1.expect(statements).to.be.length.greaterThan(0);
125
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
126
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
127
127
  });
128
128
  it('parses if-else', () => {
129
129
  let { statements, diagnostics } = Parser_1.Parser.parse([
130
- Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
131
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
132
- Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
133
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
134
- Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
135
- Parser_spec_1.identifier('foo'),
136
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
137
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
138
- Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
139
- Parser_spec_1.identifier('foo'),
140
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
141
- Parser_spec_1.token(lexer_1.TokenKind.False, 'true'),
142
- Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
130
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
131
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
132
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
133
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
134
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
135
+ (0, Parser_spec_1.identifier)('foo'),
136
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
137
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
138
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
139
+ (0, Parser_spec_1.identifier)('foo'),
140
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
141
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.False, 'true'),
142
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
143
143
  Parser_spec_1.EOF
144
144
  ]);
145
- chai_1.expect(diagnostics).to.be.lengthOf(0);
146
- chai_1.expect(statements).to.be.length.greaterThan(0);
145
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
146
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
147
147
  });
148
148
  it('parses if-elseif-else', () => {
149
149
  let { statements, diagnostics } = Parser_1.Parser.parse([
150
- Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
151
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
152
- Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
153
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
154
- Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
155
- Parser_spec_1.identifier('foo'),
156
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
157
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
158
- Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
159
- Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
160
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
161
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
162
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
163
- Parser_spec_1.token(lexer_1.TokenKind.Then, 'then'),
164
- Parser_spec_1.identifier('same'),
165
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
166
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
167
- Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
168
- Parser_spec_1.identifier('foo'),
169
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
170
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
171
- Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
150
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
151
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
152
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
153
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
154
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
155
+ (0, Parser_spec_1.identifier)('foo'),
156
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
157
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
158
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
159
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
160
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
161
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
162
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
163
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Then, 'then'),
164
+ (0, Parser_spec_1.identifier)('same'),
165
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
166
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
167
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
168
+ (0, Parser_spec_1.identifier)('foo'),
169
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
170
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
171
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
172
172
  Parser_spec_1.EOF
173
173
  ]);
174
- chai_1.expect(diagnostics).to.be.lengthOf(0);
175
- chai_1.expect(statements).to.be.length.greaterThan(0);
174
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
175
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
176
176
  });
177
177
  it('allows \'then\' to be skipped', () => {
178
178
  // if 1 < 2 foo = true else if 1 = 2 same = true
179
179
  let { statements, diagnostics } = Parser_1.Parser.parse([
180
- Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
181
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
182
- Parser_spec_1.token(lexer_1.TokenKind.Less, '<'),
183
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
184
- Parser_spec_1.identifier('foo'),
185
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
186
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
187
- Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
188
- Parser_spec_1.token(lexer_1.TokenKind.If, 'if'),
189
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '1'),
190
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
191
- Parser_spec_1.token(lexer_1.TokenKind.IntegerLiteral, '2'),
192
- Parser_spec_1.identifier('same'),
193
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
194
- Parser_spec_1.token(lexer_1.TokenKind.True, 'true'),
195
- Parser_spec_1.token(lexer_1.TokenKind.Else, 'else'),
196
- Parser_spec_1.identifier('foo'),
197
- Parser_spec_1.token(lexer_1.TokenKind.Equal, '='),
198
- Parser_spec_1.token(lexer_1.TokenKind.False, 'false'),
199
- Parser_spec_1.token(lexer_1.TokenKind.Newline, '\n'),
180
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
181
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
182
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Less, '<'),
183
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
184
+ (0, Parser_spec_1.identifier)('foo'),
185
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
186
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
187
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
188
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.If, 'if'),
189
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '1'),
190
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
191
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.IntegerLiteral, '2'),
192
+ (0, Parser_spec_1.identifier)('same'),
193
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
194
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.True, 'true'),
195
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Else, 'else'),
196
+ (0, Parser_spec_1.identifier)('foo'),
197
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Equal, '='),
198
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.False, 'false'),
199
+ (0, Parser_spec_1.token)(lexer_1.TokenKind.Newline, '\n'),
200
200
  Parser_spec_1.EOF
201
201
  ]);
202
- chai_1.expect(diagnostics).to.be.lengthOf(0);
203
- chai_1.expect(statements).to.be.length.greaterThan(0);
202
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
203
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
204
204
  });
205
205
  it('parses special statements in inline block', () => {
206
206
  const { statements, diagnostics } = Parser_1.Parser.parse(`
@@ -212,8 +212,8 @@ describe('parser if statements', () => {
212
212
  if true return else print 1
213
213
  if true then return else print 1
214
214
  `);
215
- chai_1.expect(diagnostics).to.be.lengthOf(0);
216
- chai_1.expect(statements).to.be.length.greaterThan(0);
215
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
216
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
217
217
  });
218
218
  });
219
219
  describe('block if', () => {
@@ -226,8 +226,8 @@ describe('parser if statements', () => {
226
226
  end if
227
227
  `);
228
228
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
229
- chai_1.expect(diagnostics).to.be.lengthOf(0);
230
- chai_1.expect(statements).to.be.length.greaterThan(0);
229
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
230
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
231
231
  });
232
232
  it('parses if-else', () => {
233
233
  //this test requires token locations, so use the lexer
@@ -240,8 +240,8 @@ describe('parser if statements', () => {
240
240
  end if
241
241
  `);
242
242
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
243
- chai_1.expect(diagnostics).to.be.lengthOf(0);
244
- chai_1.expect(statements).to.be.length.greaterThan(0);
243
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
244
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
245
245
  });
246
246
  it('parses if-elseif-else', () => {
247
247
  //this test requires token locations, so use the lexer
@@ -256,8 +256,8 @@ describe('parser if statements', () => {
256
256
  end if
257
257
  `);
258
258
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
259
- chai_1.expect(diagnostics).to.be.lengthOf(0);
260
- chai_1.expect(statements).to.be.length.greaterThan(0);
259
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
260
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
261
261
  });
262
262
  it('allows \'then\' to be skipped', () => {
263
263
  //this test requires token locations, so use the lexer
@@ -272,8 +272,8 @@ describe('parser if statements', () => {
272
272
  end if
273
273
  `);
274
274
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
275
- chai_1.expect(diagnostics).to.be.lengthOf(0);
276
- chai_1.expect(statements).to.be.length.greaterThan(0);
275
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
276
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
277
277
  });
278
278
  it('sets endif token properly', () => {
279
279
  //this test requires token locations, so use the lexer
@@ -289,15 +289,15 @@ describe('parser if statements', () => {
289
289
  end sub
290
290
  `);
291
291
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
292
- chai_1.expect(diagnostics).to.be.lengthOf(0);
293
- chai_1.expect(statements).to.be.length.greaterThan(0);
292
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
293
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
294
294
  //the endif token should be set
295
295
  let ifs = statements[0].func.body.statements[0];
296
- if (!astUtils_1.isIfStatement(ifs) || !astUtils_1.isIfStatement(ifs.elseBranch)) {
296
+ if (!(0, astUtils_1.isIfStatement)(ifs) || !(0, astUtils_1.isIfStatement)(ifs.elseBranch)) {
297
297
  assert.fail('Unexpected statement found');
298
298
  }
299
- chai_1.expect(ifs.tokens.endIf).to.not.exist;
300
- chai_1.expect(ifs.elseBranch.tokens.endIf).to.exist;
299
+ (0, chai_1.expect)(ifs.tokens.endIf).to.not.exist;
300
+ (0, chai_1.expect)(ifs.elseBranch.tokens.endIf).to.exist;
301
301
  });
302
302
  });
303
303
  it('supports trailing colons after conditional statements', () => {
@@ -313,16 +313,16 @@ describe('parser if statements', () => {
313
313
  end sub
314
314
  `);
315
315
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
316
- chai_1.expect(diagnostics).to.be.lengthOf(0);
317
- chai_1.expect(statements).to.be.length.greaterThan(0);
316
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
317
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
318
318
  });
319
319
  it('supports trailing colons for one-line if statements', () => {
320
320
  let { tokens } = lexer_1.Lexer.scan(`
321
321
  if 1 < 2: return true: end if
322
322
  `);
323
323
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
324
- chai_1.expect(diagnostics).to.be.lengthOf(0);
325
- chai_1.expect(statements).to.be.length.greaterThan(0);
324
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
325
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
326
326
  });
327
327
  it('catches one-line if statement missing first colon', () => {
328
328
  //missing colon after 2
@@ -330,8 +330,8 @@ describe('parser if statements', () => {
330
330
  if 1 < 2 return true : end if
331
331
  `);
332
332
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
333
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
334
- chai_1.expect(statements).to.be.length.greaterThan(0);
333
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
334
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
335
335
  });
336
336
  it('catches one-line if statement with multiple statements missing first colon', () => {
337
337
  //missing colon after 2
@@ -339,8 +339,8 @@ describe('parser if statements', () => {
339
339
  if 1 < 2 print "ok" : return true : end if
340
340
  `);
341
341
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
342
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
343
- chai_1.expect(statements).to.be.length.greaterThan(0);
342
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
343
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
344
344
  });
345
345
  it('catches one-line if statement missing second colon', () => {
346
346
  //missing colon after `2`
@@ -348,8 +348,8 @@ describe('parser if statements', () => {
348
348
  if 1 < 2 : return true end if
349
349
  `);
350
350
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
351
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
352
- chai_1.expect(statements).to.be.length.greaterThan(0);
351
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
352
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
353
353
  });
354
354
  it('catches one-line if statement with else missing colons', () => {
355
355
  //missing colon after `2`
@@ -357,8 +357,8 @@ describe('parser if statements', () => {
357
357
  if 1 < 2 : return true: else return false end if
358
358
  `);
359
359
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
360
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
361
- chai_1.expect(statements).to.be.length.greaterThan(0);
360
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
361
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
362
362
  });
363
363
  it('catches one-line if statement with colon and missing end if', () => {
364
364
  //missing colon after `2`
@@ -366,8 +366,8 @@ describe('parser if statements', () => {
366
366
  if 1 < 2: return true
367
367
  `);
368
368
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
369
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
370
- chai_1.expect(statements).to.be.lengthOf(0);
369
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
370
+ (0, chai_1.expect)(statements).to.be.lengthOf(0);
371
371
  });
372
372
  it('catches one-line if multi-statement with colon and missing end if', () => {
373
373
  //missing colon after `2`
@@ -375,8 +375,8 @@ describe('parser if statements', () => {
375
375
  if 1 < 2: print "ok": return true
376
376
  `);
377
377
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
378
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
379
- chai_1.expect(statements).to.be.lengthOf(0);
378
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
379
+ (0, chai_1.expect)(statements).to.be.lengthOf(0);
380
380
  });
381
381
  it('catches one-line if statement with colon and missing endif inside a function', () => {
382
382
  //missing 'end if'
@@ -386,8 +386,8 @@ describe('parser if statements', () => {
386
386
  end function
387
387
  `);
388
388
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
389
- chai_1.expect(diagnostics).to.be.lengthOf(2);
390
- chai_1.expect(statements).to.be.length.greaterThan(0);
389
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(2);
390
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
391
391
  });
392
392
  it('catches extraneous colon at the end of one-line if-else', () => {
393
393
  //colon at the end not allowed
@@ -395,8 +395,8 @@ describe('parser if statements', () => {
395
395
  if 1 < 2 then return true else return false:
396
396
  `);
397
397
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
398
- chai_1.expect(diagnostics).to.be.lengthOf(1);
399
- chai_1.expect(statements).to.be.length.greaterThan(0);
398
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
399
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
400
400
  });
401
401
  it('catches colon before if, unless there is `then` before', () => {
402
402
  //colon before if isn't allowed
@@ -406,8 +406,8 @@ describe('parser if statements', () => {
406
406
  end if
407
407
  `);
408
408
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
409
- chai_1.expect(diagnostics).to.be.lengthOf(1);
410
- chai_1.expect(statements).to.be.length.greaterThan(0);
409
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
410
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
411
411
  });
412
412
  it('catches extraneous colon+end if at the end of one-line if-else', () => {
413
413
  //expected newline + unexpected endif
@@ -415,8 +415,8 @@ describe('parser if statements', () => {
415
415
  if 1 < 2 then return true else return false: end if
416
416
  `);
417
417
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
418
- chai_1.expect(diagnostics).to.be.lengthOf(2);
419
- chai_1.expect(statements).to.be.length.greaterThan(0);
418
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(2);
419
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
420
420
  });
421
421
  it('recovers from extraneous endif at the end of one-line if-else', () => {
422
422
  //unexpected endif
@@ -426,8 +426,8 @@ describe('parser if statements', () => {
426
426
  end function
427
427
  `);
428
428
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
429
- chai_1.expect(diagnostics).to.be.lengthOf(2);
430
- chai_1.expect(statements).to.be.length.greaterThan(0);
429
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(2);
430
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
431
431
  });
432
432
  it('recovers from missing end-if', () => {
433
433
  //unexpected endif
@@ -440,9 +440,9 @@ describe('parser if statements', () => {
440
440
  end function
441
441
  `);
442
442
  let { statements, diagnostics, references } = Parser_1.Parser.parse(tokens);
443
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
444
- chai_1.expect(statements).to.be.lengthOf(2);
445
- chai_1.expect(references.functionStatements).to.be.lengthOf(2);
443
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
444
+ (0, chai_1.expect)(statements).to.be.lengthOf(2);
445
+ (0, chai_1.expect)(references.functionStatements).to.be.lengthOf(2);
446
446
  });
447
447
  it('catches extraneous colon at the end of one-line if', () => {
448
448
  //colon at the end not allowed
@@ -450,8 +450,8 @@ describe('parser if statements', () => {
450
450
  if 1 < 2 then return true:
451
451
  `);
452
452
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
453
- chai_1.expect(diagnostics).to.be.lengthOf(1);
454
- chai_1.expect(statements).to.be.length.greaterThan(0);
453
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
454
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
455
455
  });
456
456
  it('catches multi-line if inside a one-line if branch', () => {
457
457
  //second if should be inline
@@ -461,8 +461,8 @@ describe('parser if statements', () => {
461
461
  end if
462
462
  `);
463
463
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
464
- chai_1.expect(diagnostics).to.be.lengthOf(1);
465
- chai_1.expect(statements).to.be.length.greaterThan(0);
464
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
465
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
466
466
  });
467
467
  it('supports multiple statements in one-line if statements', () => {
468
468
  //second if should be inline
@@ -472,8 +472,8 @@ describe('parser if statements', () => {
472
472
  end if
473
473
  `);
474
474
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
475
- chai_1.expect(diagnostics).to.be.lengthOf(1);
476
- chai_1.expect(statements).to.be.length.greaterThan(0);
475
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
476
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
477
477
  });
478
478
  it('catches multi-line if inside a one-line if else branch', () => {
479
479
  //second if should be inline
@@ -483,8 +483,8 @@ describe('parser if statements', () => {
483
483
  end if
484
484
  `);
485
485
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
486
- chai_1.expect(diagnostics).to.be.lengthOf(1);
487
- chai_1.expect(statements).to.be.length.greaterThan(0);
486
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
487
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
488
488
  });
489
489
  it('catches else statement missing colon', () => {
490
490
  //missing colon before `end if`
@@ -494,8 +494,8 @@ describe('parser if statements', () => {
494
494
  else return false end if
495
495
  `);
496
496
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
497
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
498
- chai_1.expect(statements).to.be.lengthOf(1);
497
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
498
+ (0, chai_1.expect)(statements).to.be.lengthOf(1);
499
499
  });
500
500
  it('supports if statement with condition and action on one line, but end if on separate line', () => {
501
501
  let { tokens } = lexer_1.Lexer.scan(`
@@ -503,32 +503,32 @@ describe('parser if statements', () => {
503
503
  end if
504
504
  `);
505
505
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
506
- chai_1.expect(diagnostics).to.be.lengthOf(0);
507
- chai_1.expect(statements).to.be.length.greaterThan(0);
506
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
507
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
508
508
  });
509
509
  it('supports colon after return in single-line if statement', () => {
510
510
  let { tokens } = lexer_1.Lexer.scan(`
511
511
  if false : print "true" : end if
512
512
  `);
513
513
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
514
- chai_1.expect(diagnostics).to.be.lengthOf(0);
515
- chai_1.expect(statements).to.be.length.greaterThan(0);
514
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
515
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
516
516
  });
517
517
  it('supports if elseif endif single line', () => {
518
518
  let { tokens } = lexer_1.Lexer.scan(`
519
519
  if true: print "8 worked": else if true: print "not run": else: print "not run": end if
520
520
  `);
521
521
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
522
- chai_1.expect(diagnostics).to.be.lengthOf(0);
523
- chai_1.expect(statements).to.be.length.greaterThan(0);
522
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
523
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
524
524
  });
525
525
  it('supports comment at the end of one-line if', () => {
526
526
  let { tokens } = lexer_1.Lexer.scan(`
527
527
  if 1 > 2 then return true 'OK
528
528
  `);
529
529
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
530
- chai_1.expect(diagnostics).to.be.lengthOf(0);
531
- chai_1.expect(statements).to.be.length.greaterThan(0);
530
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
531
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
532
532
  });
533
533
  it('supports colon at the beginning of a line', () => {
534
534
  let { tokens } = lexer_1.Lexer.scan(`
@@ -536,16 +536,34 @@ describe('parser if statements', () => {
536
536
  : end if
537
537
  `);
538
538
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
539
- chai_1.expect(diagnostics).to.be.lengthOf(0);
540
- chai_1.expect(statements).to.be.length.greaterThan(0);
539
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
540
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
541
541
  });
542
542
  it('supports one-line functions inside of one-line if statement', () => {
543
543
  let { tokens } = lexer_1.Lexer.scan(`
544
544
  if true then : test = sub() : print "yes" : end sub : end if
545
545
  `);
546
546
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
547
- chai_1.expect(diagnostics).to.be.lengthOf(0);
548
- chai_1.expect(statements).to.be.length.greaterThan(0);
547
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
548
+ (0, chai_1.expect)(statements).to.be.length.greaterThan(0);
549
+ });
550
+ it('single-line if block statements have correct range', () => {
551
+ let { tokens } = lexer_1.Lexer.scan(`
552
+ if false then print "true"
553
+ if false then print "true": a = 10
554
+ if false then print "true" else print "false"
555
+ if false then print "true" else print "false": a = 20
556
+ `);
557
+ let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
558
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0);
559
+ const then1 = statements[0].thenBranch;
560
+ (0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(then1.range, then1.statements)).to.be.true;
561
+ const then2 = statements[1].thenBranch;
562
+ (0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(then2.range, then2.statements)).to.be.true;
563
+ const else1 = statements[2].elseBranch;
564
+ (0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(else1.range, else1.statements)).to.be.true;
565
+ const else2 = statements[3].elseBranch;
566
+ (0, chai_1.expect)((0, Parser_spec_1.rangeMatch)(else2.range, else2.statements)).to.be.true;
549
567
  });
550
568
  });
551
569
  //# sourceMappingURL=If.spec.js.map