brighterscript 1.0.0-alpha.3 → 1.0.0-alpha.30

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 (605) hide show
  1. package/CHANGELOG.md +1230 -285
  2. package/README.md +61 -131
  3. package/bsconfig.schema.json +68 -2
  4. package/dist/ActionPipeline.d.ts +10 -0
  5. package/dist/ActionPipeline.js +40 -0
  6. package/dist/ActionPipeline.js.map +1 -0
  7. package/dist/AstValidationSegmenter.d.ts +35 -0
  8. package/dist/AstValidationSegmenter.js +209 -0
  9. package/dist/AstValidationSegmenter.js.map +1 -0
  10. package/dist/BsConfig.d.ts +51 -6
  11. package/dist/BusyStatusTracker.d.ts +31 -0
  12. package/dist/BusyStatusTracker.js +83 -0
  13. package/dist/BusyStatusTracker.js.map +1 -0
  14. package/dist/Cache.d.ts +5 -6
  15. package/dist/Cache.js +12 -11
  16. package/dist/Cache.js.map +1 -1
  17. package/dist/CacheVerifier.d.ts +7 -0
  18. package/dist/CacheVerifier.js +20 -0
  19. package/dist/CacheVerifier.js.map +1 -0
  20. package/dist/CodeActionUtil.d.ts +11 -2
  21. package/dist/CodeActionUtil.js +17 -3
  22. package/dist/CodeActionUtil.js.map +1 -1
  23. package/dist/CommentFlagProcessor.d.ts +7 -6
  24. package/dist/CommentFlagProcessor.js +10 -7
  25. package/dist/CommentFlagProcessor.js.map +1 -1
  26. package/dist/DependencyGraph.d.ts +8 -3
  27. package/dist/DependencyGraph.js +49 -16
  28. package/dist/DependencyGraph.js.map +1 -1
  29. package/dist/DiagnosticCollection.d.ts +5 -3
  30. package/dist/DiagnosticCollection.js +18 -16
  31. package/dist/DiagnosticCollection.js.map +1 -1
  32. package/dist/DiagnosticFilterer.d.ts +8 -4
  33. package/dist/DiagnosticFilterer.js +77 -44
  34. package/dist/DiagnosticFilterer.js.map +1 -1
  35. package/dist/DiagnosticManager.d.ts +55 -0
  36. package/dist/DiagnosticManager.js +214 -0
  37. package/dist/DiagnosticManager.js.map +1 -0
  38. package/dist/DiagnosticMessages.d.ts +184 -17
  39. package/dist/DiagnosticMessages.js +242 -24
  40. package/dist/DiagnosticMessages.js.map +1 -1
  41. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  42. package/dist/DiagnosticSeverityAdjuster.js +41 -0
  43. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  44. package/dist/FunctionScope.d.ts +28 -0
  45. package/dist/FunctionScope.js +52 -0
  46. package/dist/FunctionScope.js.map +1 -0
  47. package/dist/KeyedThrottler.d.ts +3 -3
  48. package/dist/KeyedThrottler.js +3 -3
  49. package/dist/KeyedThrottler.js.map +1 -1
  50. package/dist/LanguageServer.d.ts +72 -47
  51. package/dist/LanguageServer.js +544 -312
  52. package/dist/LanguageServer.js.map +1 -1
  53. package/dist/Logger.d.ts +9 -10
  54. package/dist/Logger.js +36 -30
  55. package/dist/Logger.js.map +1 -1
  56. package/dist/PluginInterface.d.ts +29 -7
  57. package/dist/PluginInterface.js +90 -7
  58. package/dist/PluginInterface.js.map +1 -1
  59. package/dist/Program.d.ts +204 -99
  60. package/dist/Program.js +1060 -699
  61. package/dist/Program.js.map +1 -1
  62. package/dist/ProgramBuilder.d.ts +29 -18
  63. package/dist/ProgramBuilder.js +170 -132
  64. package/dist/ProgramBuilder.js.map +1 -1
  65. package/dist/Scope.d.ts +144 -109
  66. package/dist/Scope.js +538 -551
  67. package/dist/Scope.js.map +1 -1
  68. package/dist/SemanticTokenUtils.d.ts +14 -0
  69. package/dist/SemanticTokenUtils.js +81 -0
  70. package/dist/SemanticTokenUtils.js.map +1 -0
  71. package/dist/Stopwatch.d.ts +4 -0
  72. package/dist/Stopwatch.js +8 -1
  73. package/dist/Stopwatch.js.map +1 -1
  74. package/dist/SymbolTable.d.ts +91 -24
  75. package/dist/SymbolTable.js +286 -63
  76. package/dist/SymbolTable.js.map +1 -1
  77. package/dist/SymbolTypeFlag.d.ts +8 -0
  78. package/dist/SymbolTypeFlag.js +13 -0
  79. package/dist/SymbolTypeFlag.js.map +1 -0
  80. package/dist/Throttler.d.ts +12 -0
  81. package/dist/Throttler.js +39 -0
  82. package/dist/Throttler.js.map +1 -1
  83. package/dist/Watcher.d.ts +0 -3
  84. package/dist/Watcher.js +0 -3
  85. package/dist/Watcher.js.map +1 -1
  86. package/dist/XmlScope.d.ts +5 -15
  87. package/dist/XmlScope.js +35 -87
  88. package/dist/XmlScope.js.map +1 -1
  89. package/dist/astUtils/CachedLookups.d.ts +49 -0
  90. package/dist/astUtils/CachedLookups.js +324 -0
  91. package/dist/astUtils/CachedLookups.js.map +1 -0
  92. package/dist/astUtils/Editor.d.ts +69 -0
  93. package/dist/astUtils/Editor.js +245 -0
  94. package/dist/astUtils/Editor.js.map +1 -0
  95. package/dist/astUtils/Editor.spec.js +258 -0
  96. package/dist/astUtils/Editor.spec.js.map +1 -0
  97. package/dist/astUtils/creators.d.ts +33 -10
  98. package/dist/astUtils/creators.js +224 -30
  99. package/dist/astUtils/creators.js.map +1 -1
  100. package/dist/astUtils/creators.spec.js +5 -5
  101. package/dist/astUtils/creators.spec.js.map +1 -1
  102. package/dist/astUtils/reflection.d.ts +145 -82
  103. package/dist/astUtils/reflection.js +304 -132
  104. package/dist/astUtils/reflection.js.map +1 -1
  105. package/dist/astUtils/reflection.spec.js +267 -162
  106. package/dist/astUtils/reflection.spec.js.map +1 -1
  107. package/dist/astUtils/stackedVisitor.js.map +1 -1
  108. package/dist/astUtils/stackedVisitor.spec.js +14 -14
  109. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  110. package/dist/astUtils/visitors.d.ts +114 -53
  111. package/dist/astUtils/visitors.js +70 -13
  112. package/dist/astUtils/visitors.js.map +1 -1
  113. package/dist/astUtils/visitors.spec.js +465 -51
  114. package/dist/astUtils/visitors.spec.js.map +1 -1
  115. package/dist/astUtils/xml.d.ts +9 -8
  116. package/dist/astUtils/xml.js +10 -5
  117. package/dist/astUtils/xml.js.map +1 -1
  118. package/dist/bscPlugin/BscPlugin.d.ts +22 -1
  119. package/dist/bscPlugin/BscPlugin.js +88 -0
  120. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  121. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  122. package/dist/bscPlugin/CallExpressionInfo.js +131 -0
  123. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  124. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  125. package/dist/bscPlugin/FileWriter.js +24 -0
  126. package/dist/bscPlugin/FileWriter.js.map +1 -0
  127. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  128. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  129. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  130. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +1 -1
  131. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +26 -17
  132. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  133. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +94 -20
  134. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  135. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +60 -0
  136. package/dist/bscPlugin/completions/CompletionsProcessor.js +601 -0
  137. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  138. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +2139 -0
  139. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  140. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  141. package/dist/bscPlugin/definition/DefinitionProvider.js +210 -0
  142. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  143. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +88 -0
  144. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  145. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  146. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  147. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  148. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  149. package/dist/bscPlugin/hover/HoverProcessor.js +218 -0
  150. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  151. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +1 -0
  152. package/dist/bscPlugin/hover/HoverProcessor.spec.js +737 -0
  153. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  154. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  155. package/dist/bscPlugin/references/ReferencesProvider.js +56 -0
  156. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  157. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
  158. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  159. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  160. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  161. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +138 -0
  162. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  163. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  164. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +491 -0
  165. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  166. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  167. package/dist/bscPlugin/serialize/BslibInjector.spec.js +19 -0
  168. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  169. package/dist/bscPlugin/serialize/BslibManager.d.ts +9 -0
  170. package/dist/bscPlugin/serialize/BslibManager.js +40 -0
  171. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  172. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  173. package/dist/bscPlugin/serialize/FileSerializer.js +72 -0
  174. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  175. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  176. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  177. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  178. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +1 -0
  179. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +291 -0
  180. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  181. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  182. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  183. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  184. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +1 -0
  185. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  186. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  187. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  188. package/dist/bscPlugin/symbols/symbolUtils.js +140 -0
  189. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  190. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +21 -0
  191. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +202 -0
  192. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  193. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  194. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +41 -0
  195. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  196. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  197. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  198. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  199. package/dist/bscPlugin/validation/BrsFileAfterValidatior.d.ts +7 -0
  200. package/dist/bscPlugin/validation/BrsFileAfterValidatior.js +18 -0
  201. package/dist/bscPlugin/validation/BrsFileAfterValidatior.js.map +1 -0
  202. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +34 -0
  203. package/dist/bscPlugin/validation/BrsFileValidator.js +462 -0
  204. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  205. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  206. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +758 -0
  207. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  208. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  209. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  210. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  211. package/dist/bscPlugin/validation/ScopeValidator.d.ts +131 -0
  212. package/dist/bscPlugin/validation/ScopeValidator.js +1097 -0
  213. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  214. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  215. package/dist/bscPlugin/validation/ScopeValidator.spec.js +2796 -0
  216. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  217. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  218. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  219. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  220. package/dist/cli.js +117 -11
  221. package/dist/cli.js.map +1 -1
  222. package/dist/deferred.d.ts +3 -3
  223. package/dist/deferred.js.map +1 -1
  224. package/dist/diagnosticUtils.d.ts +10 -3
  225. package/dist/diagnosticUtils.js +58 -21
  226. package/dist/diagnosticUtils.js.map +1 -1
  227. package/dist/examples/plugins/removePrint.js +8 -12
  228. package/dist/examples/plugins/removePrint.js.map +1 -1
  229. package/dist/files/AssetFile.d.ts +24 -0
  230. package/dist/files/AssetFile.js +25 -0
  231. package/dist/files/AssetFile.js.map +1 -0
  232. package/dist/files/BrsFile.Class.spec.js +858 -153
  233. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  234. package/dist/files/BrsFile.d.ts +144 -82
  235. package/dist/files/BrsFile.js +847 -911
  236. package/dist/files/BrsFile.js.map +1 -1
  237. package/dist/files/BrsFile.spec.js +2928 -834
  238. package/dist/files/BrsFile.spec.js.map +1 -1
  239. package/dist/files/BscFile.d.ts +101 -0
  240. package/dist/files/BscFile.js +15 -0
  241. package/dist/files/BscFile.js.map +1 -0
  242. package/dist/files/Factory.d.ts +25 -0
  243. package/dist/files/Factory.js +22 -0
  244. package/dist/files/Factory.js.map +1 -0
  245. package/dist/files/LazyFileData.d.ts +20 -0
  246. package/dist/files/LazyFileData.js +54 -0
  247. package/dist/files/LazyFileData.js.map +1 -0
  248. package/dist/files/LazyFileData.spec.d.ts +1 -0
  249. package/dist/files/LazyFileData.spec.js +27 -0
  250. package/dist/files/LazyFileData.spec.js.map +1 -0
  251. package/dist/files/XmlFile.d.ts +73 -41
  252. package/dist/files/XmlFile.js +126 -138
  253. package/dist/files/XmlFile.js.map +1 -1
  254. package/dist/files/XmlFile.spec.js +450 -318
  255. package/dist/files/XmlFile.spec.js.map +1 -1
  256. package/dist/files/tests/imports.spec.js +62 -52
  257. package/dist/files/tests/imports.spec.js.map +1 -1
  258. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  259. package/dist/files/tests/optionalChaning.spec.js +152 -0
  260. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  261. package/dist/globalCallables.d.ts +3 -1
  262. package/dist/globalCallables.js +416 -162
  263. package/dist/globalCallables.js.map +1 -1
  264. package/dist/index.d.ts +25 -3
  265. package/dist/index.js +42 -5
  266. package/dist/index.js.map +1 -1
  267. package/dist/interfaces.d.ts +722 -119
  268. package/dist/interfaces.js +31 -0
  269. package/dist/interfaces.js.map +1 -1
  270. package/dist/lexer/Character.spec.js +5 -5
  271. package/dist/lexer/Character.spec.js.map +1 -1
  272. package/dist/lexer/Lexer.d.ts +40 -9
  273. package/dist/lexer/Lexer.js +191 -49
  274. package/dist/lexer/Lexer.js.map +1 -1
  275. package/dist/lexer/Lexer.spec.js +775 -563
  276. package/dist/lexer/Lexer.spec.js.map +1 -1
  277. package/dist/lexer/Token.d.ts +11 -3
  278. package/dist/lexer/Token.js +10 -2
  279. package/dist/lexer/Token.js.map +1 -1
  280. package/dist/lexer/TokenKind.d.ts +27 -1
  281. package/dist/lexer/TokenKind.js +112 -5
  282. package/dist/lexer/TokenKind.js.map +1 -1
  283. package/dist/logging.d.ts +9 -0
  284. package/dist/logging.js +16 -0
  285. package/dist/logging.js.map +1 -0
  286. package/dist/parser/AstNode.d.ts +180 -0
  287. package/dist/parser/AstNode.js +245 -0
  288. package/dist/parser/AstNode.js.map +1 -0
  289. package/dist/parser/AstNode.spec.d.ts +1 -0
  290. package/dist/parser/AstNode.spec.js +165 -0
  291. package/dist/parser/AstNode.spec.js.map +1 -0
  292. package/dist/parser/BrsTranspileState.d.ts +12 -2
  293. package/dist/parser/BrsTranspileState.js +6 -0
  294. package/dist/parser/BrsTranspileState.js.map +1 -1
  295. package/dist/parser/Expression.d.ts +454 -210
  296. package/dist/parser/Expression.js +953 -498
  297. package/dist/parser/Expression.js.map +1 -1
  298. package/dist/parser/Parser.Class.spec.js +200 -95
  299. package/dist/parser/Parser.Class.spec.js.map +1 -1
  300. package/dist/parser/Parser.d.ts +105 -120
  301. package/dist/parser/Parser.js +1406 -912
  302. package/dist/parser/Parser.js.map +1 -1
  303. package/dist/parser/Parser.spec.d.ts +3 -1
  304. package/dist/parser/Parser.spec.js +1383 -456
  305. package/dist/parser/Parser.spec.js.map +1 -1
  306. package/dist/parser/SGParser.d.ts +44 -6
  307. package/dist/parser/SGParser.js +212 -185
  308. package/dist/parser/SGParser.js.map +1 -1
  309. package/dist/parser/SGParser.spec.js +30 -28
  310. package/dist/parser/SGParser.spec.js.map +1 -1
  311. package/dist/parser/SGTypes.d.ts +293 -50
  312. package/dist/parser/SGTypes.js +540 -187
  313. package/dist/parser/SGTypes.js.map +1 -1
  314. package/dist/parser/Statement.d.ts +734 -244
  315. package/dist/parser/Statement.js +1758 -611
  316. package/dist/parser/Statement.js.map +1 -1
  317. package/dist/parser/Statement.spec.js +45 -34
  318. package/dist/parser/Statement.spec.js.map +1 -1
  319. package/dist/parser/TranspileState.d.ts +17 -8
  320. package/dist/parser/TranspileState.js +73 -11
  321. package/dist/parser/TranspileState.js.map +1 -1
  322. package/dist/parser/tests/Parser.spec.d.ts +10 -9
  323. package/dist/parser/tests/Parser.spec.js +18 -14
  324. package/dist/parser/tests/Parser.spec.js.map +1 -1
  325. package/dist/parser/tests/controlFlow/For.spec.js +79 -69
  326. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  327. package/dist/parser/tests/controlFlow/ForEach.spec.js +53 -47
  328. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  329. package/dist/parser/tests/controlFlow/If.spec.js +217 -196
  330. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  331. package/dist/parser/tests/controlFlow/While.spec.js +48 -42
  332. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  333. package/dist/parser/tests/expression/Additive.spec.js +31 -31
  334. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  335. package/dist/parser/tests/expression/ArrayLiterals.spec.js +157 -120
  336. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  337. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +202 -139
  338. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  339. package/dist/parser/tests/expression/Boolean.spec.js +25 -25
  340. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  341. package/dist/parser/tests/expression/Call.spec.js +150 -41
  342. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  343. package/dist/parser/tests/expression/Exponential.spec.js +18 -18
  344. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  345. package/dist/parser/tests/expression/Function.spec.js +257 -257
  346. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  347. package/dist/parser/tests/expression/Indexing.spec.js +160 -90
  348. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  349. package/dist/parser/tests/expression/Multiplicative.spec.js +38 -38
  350. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  351. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +196 -98
  352. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  353. package/dist/parser/tests/expression/PrefixUnary.spec.js +42 -42
  354. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  355. package/dist/parser/tests/expression/Primary.spec.js +42 -42
  356. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  357. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  358. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  359. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  360. package/dist/parser/tests/expression/Relational.spec.js +44 -44
  361. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  362. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +31 -31
  363. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  364. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +230 -90
  365. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  366. package/dist/parser/tests/expression/TernaryExpression.spec.js +377 -148
  367. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  368. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  369. package/dist/parser/tests/expression/TypeExpression.spec.js +126 -0
  370. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  371. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  372. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  373. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  374. package/dist/parser/tests/statement/AssignmentOperators.spec.js +37 -37
  375. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  376. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  377. package/dist/parser/tests/statement/ConstStatement.spec.js +262 -0
  378. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  379. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  380. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  381. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  382. package/dist/parser/tests/statement/Declaration.spec.js +45 -45
  383. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  384. package/dist/parser/tests/statement/Dim.spec.js +22 -22
  385. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  386. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  387. package/dist/parser/tests/statement/Enum.spec.js +684 -0
  388. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  389. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  390. package/dist/parser/tests/statement/For.spec.js +45 -0
  391. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  392. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  393. package/dist/parser/tests/statement/ForEach.spec.js +36 -0
  394. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  395. package/dist/parser/tests/statement/Function.spec.js +208 -198
  396. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  397. package/dist/parser/tests/statement/Goto.spec.js +16 -15
  398. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  399. package/dist/parser/tests/statement/Increment.spec.js +51 -51
  400. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  401. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  402. package/dist/parser/tests/statement/InterfaceStatement.spec.js +109 -0
  403. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  404. package/dist/parser/tests/statement/LibraryStatement.spec.js +18 -18
  405. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  406. package/dist/parser/tests/statement/Misc.spec.js +123 -163
  407. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  408. package/dist/parser/tests/statement/PrintStatement.spec.js +125 -108
  409. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  410. package/dist/parser/tests/statement/ReturnStatement.spec.js +51 -49
  411. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  412. package/dist/parser/tests/statement/Set.spec.js +110 -97
  413. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  414. package/dist/parser/tests/statement/Stop.spec.js +13 -12
  415. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  416. package/dist/parser/tests/statement/Throw.spec.js +6 -6
  417. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  418. package/dist/parser/tests/statement/TryCatch.spec.js +26 -15
  419. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  420. package/dist/preprocessor/Manifest.d.ts +6 -6
  421. package/dist/preprocessor/Manifest.js +17 -38
  422. package/dist/preprocessor/Manifest.js.map +1 -1
  423. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  424. package/dist/preprocessor/Manifest.spec.js +78 -103
  425. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  426. package/dist/roku-types/data.json +19351 -0
  427. package/dist/roku-types/index.d.ts +5483 -0
  428. package/dist/roku-types/index.js +11 -0
  429. package/dist/roku-types/index.js.map +1 -0
  430. package/dist/types/ArrayType.d.ts +9 -5
  431. package/dist/types/ArrayType.js +68 -24
  432. package/dist/types/ArrayType.js.map +1 -1
  433. package/dist/types/ArrayType.spec.js +39 -11
  434. package/dist/types/ArrayType.spec.js.map +1 -1
  435. package/dist/types/AssociativeArrayType.d.ts +14 -0
  436. package/dist/types/AssociativeArrayType.js +60 -0
  437. package/dist/types/AssociativeArrayType.js.map +1 -0
  438. package/dist/types/BaseFunctionType.d.ts +9 -0
  439. package/dist/types/BaseFunctionType.js +25 -0
  440. package/dist/types/BaseFunctionType.js.map +1 -0
  441. package/dist/types/BooleanType.d.ts +10 -5
  442. package/dist/types/BooleanType.js +21 -9
  443. package/dist/types/BooleanType.js.map +1 -1
  444. package/dist/types/BooleanType.spec.js +10 -4
  445. package/dist/types/BooleanType.spec.js.map +1 -1
  446. package/dist/types/BscType.d.ts +29 -3
  447. package/dist/types/BscType.js +121 -0
  448. package/dist/types/BscType.js.map +1 -1
  449. package/dist/types/BscTypeKind.d.ts +25 -0
  450. package/dist/types/BscTypeKind.js +30 -0
  451. package/dist/types/BscTypeKind.js.map +1 -0
  452. package/dist/types/BuiltInInterfaceAdder.d.ts +23 -0
  453. package/dist/types/BuiltInInterfaceAdder.js +174 -0
  454. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  455. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  456. package/dist/types/BuiltInInterfaceAdder.spec.js +115 -0
  457. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  458. package/dist/types/ClassType.d.ts +17 -0
  459. package/dist/types/ClassType.js +58 -0
  460. package/dist/types/ClassType.js.map +1 -0
  461. package/dist/types/ClassType.spec.d.ts +1 -0
  462. package/dist/types/ClassType.spec.js +76 -0
  463. package/dist/types/ClassType.spec.js.map +1 -0
  464. package/dist/types/ComponentType.d.ts +27 -0
  465. package/dist/types/ComponentType.js +83 -0
  466. package/dist/types/ComponentType.js.map +1 -0
  467. package/dist/types/DoubleType.d.ts +10 -5
  468. package/dist/types/DoubleType.js +25 -18
  469. package/dist/types/DoubleType.js.map +1 -1
  470. package/dist/types/DoubleType.spec.js +12 -4
  471. package/dist/types/DoubleType.spec.js.map +1 -1
  472. package/dist/types/DynamicType.d.ts +12 -5
  473. package/dist/types/DynamicType.js +22 -6
  474. package/dist/types/DynamicType.js.map +1 -1
  475. package/dist/types/DynamicType.spec.js +16 -5
  476. package/dist/types/DynamicType.spec.js.map +1 -1
  477. package/dist/types/EnumType.d.ts +40 -0
  478. package/dist/types/EnumType.js +80 -0
  479. package/dist/types/EnumType.js.map +1 -0
  480. package/dist/types/EnumType.spec.d.ts +1 -0
  481. package/dist/types/EnumType.spec.js +33 -0
  482. package/dist/types/EnumType.spec.js.map +1 -0
  483. package/dist/types/FloatType.d.ts +10 -5
  484. package/dist/types/FloatType.js +25 -18
  485. package/dist/types/FloatType.js.map +1 -1
  486. package/dist/types/FloatType.spec.js +4 -4
  487. package/dist/types/FloatType.spec.js.map +1 -1
  488. package/dist/types/FunctionType.d.ts +10 -22
  489. package/dist/types/FunctionType.js +26 -63
  490. package/dist/types/FunctionType.js.map +1 -1
  491. package/dist/types/InheritableType.d.ts +28 -0
  492. package/dist/types/InheritableType.js +157 -0
  493. package/dist/types/InheritableType.js.map +1 -0
  494. package/dist/types/IntegerType.d.ts +10 -5
  495. package/dist/types/IntegerType.js +25 -18
  496. package/dist/types/IntegerType.js.map +1 -1
  497. package/dist/types/IntegerType.spec.js +8 -4
  498. package/dist/types/IntegerType.spec.js.map +1 -1
  499. package/dist/types/InterfaceType.d.ts +14 -6
  500. package/dist/types/InterfaceType.js +26 -15
  501. package/dist/types/InterfaceType.js.map +1 -1
  502. package/dist/types/InterfaceType.spec.d.ts +1 -0
  503. package/dist/types/InterfaceType.spec.js +227 -0
  504. package/dist/types/InterfaceType.spec.js.map +1 -0
  505. package/dist/types/InvalidType.d.ts +9 -5
  506. package/dist/types/InvalidType.js +20 -9
  507. package/dist/types/InvalidType.js.map +1 -1
  508. package/dist/types/InvalidType.spec.js +8 -4
  509. package/dist/types/InvalidType.spec.js.map +1 -1
  510. package/dist/types/LongIntegerType.d.ts +10 -5
  511. package/dist/types/LongIntegerType.js +25 -18
  512. package/dist/types/LongIntegerType.js.map +1 -1
  513. package/dist/types/LongIntegerType.spec.js +10 -4
  514. package/dist/types/LongIntegerType.spec.js.map +1 -1
  515. package/dist/types/NamespaceType.d.ts +12 -0
  516. package/dist/types/NamespaceType.js +28 -0
  517. package/dist/types/NamespaceType.js.map +1 -0
  518. package/dist/types/ObjectType.d.ts +10 -5
  519. package/dist/types/ObjectType.js +23 -9
  520. package/dist/types/ObjectType.js.map +1 -1
  521. package/dist/types/ObjectType.spec.js +3 -3
  522. package/dist/types/ObjectType.spec.js.map +1 -1
  523. package/dist/types/ReferenceType.d.ts +71 -0
  524. package/dist/types/ReferenceType.js +467 -0
  525. package/dist/types/ReferenceType.js.map +1 -0
  526. package/dist/types/ReferenceType.spec.d.ts +1 -0
  527. package/dist/types/ReferenceType.spec.js +151 -0
  528. package/dist/types/ReferenceType.spec.js.map +1 -0
  529. package/dist/types/StringType.d.ts +13 -5
  530. package/dist/types/StringType.js +25 -9
  531. package/dist/types/StringType.js.map +1 -1
  532. package/dist/types/StringType.spec.js +3 -3
  533. package/dist/types/StringType.spec.js.map +1 -1
  534. package/dist/types/TypedFunctionType.d.ts +33 -0
  535. package/dist/types/TypedFunctionType.js +106 -0
  536. package/dist/types/TypedFunctionType.js.map +1 -0
  537. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  538. package/dist/types/TypedFunctionType.spec.js +122 -0
  539. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  540. package/dist/types/UninitializedType.d.ts +8 -6
  541. package/dist/types/UninitializedType.js +15 -9
  542. package/dist/types/UninitializedType.js.map +1 -1
  543. package/dist/types/UnionType.d.ts +20 -0
  544. package/dist/types/UnionType.js +127 -0
  545. package/dist/types/UnionType.js.map +1 -0
  546. package/dist/types/UnionType.spec.d.ts +1 -0
  547. package/dist/types/UnionType.spec.js +129 -0
  548. package/dist/types/UnionType.spec.js.map +1 -0
  549. package/dist/types/VoidType.d.ts +10 -5
  550. package/dist/types/VoidType.js +20 -9
  551. package/dist/types/VoidType.js.map +1 -1
  552. package/dist/types/VoidType.spec.js +3 -3
  553. package/dist/types/VoidType.spec.js.map +1 -1
  554. package/dist/types/helper.spec.d.ts +1 -0
  555. package/dist/types/helper.spec.js +144 -0
  556. package/dist/types/helper.spec.js.map +1 -0
  557. package/dist/types/helpers.d.ts +24 -0
  558. package/dist/types/helpers.js +178 -0
  559. package/dist/types/helpers.js.map +1 -0
  560. package/dist/types/index.d.ts +22 -0
  561. package/dist/types/index.js +39 -0
  562. package/dist/types/index.js.map +1 -0
  563. package/dist/util.d.ts +216 -106
  564. package/dist/util.js +1289 -319
  565. package/dist/util.js.map +1 -1
  566. package/dist/validators/ClassValidator.d.ts +9 -15
  567. package/dist/validators/ClassValidator.js +81 -134
  568. package/dist/validators/ClassValidator.js.map +1 -1
  569. package/package.json +169 -138
  570. package/dist/astUtils/index.d.ts +0 -7
  571. package/dist/astUtils/index.js +0 -26
  572. package/dist/astUtils/index.js.map +0 -1
  573. package/dist/lexer/index.d.ts +0 -3
  574. package/dist/lexer/index.js +0 -17
  575. package/dist/lexer/index.js.map +0 -1
  576. package/dist/parser/index.d.ts +0 -3
  577. package/dist/parser/index.js +0 -16
  578. package/dist/parser/index.js.map +0 -1
  579. package/dist/preprocessor/Chunk.d.ts +0 -82
  580. package/dist/preprocessor/Chunk.js +0 -77
  581. package/dist/preprocessor/Chunk.js.map +0 -1
  582. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  583. package/dist/preprocessor/Preprocessor.js +0 -156
  584. package/dist/preprocessor/Preprocessor.js.map +0 -1
  585. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  586. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  587. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  588. package/dist/preprocessor/PreprocessorParser.js +0 -194
  589. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  590. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  591. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  592. package/dist/preprocessor/index.d.ts +0 -3
  593. package/dist/preprocessor/index.js +0 -16
  594. package/dist/preprocessor/index.js.map +0 -1
  595. package/dist/types/CustomType.d.ts +0 -10
  596. package/dist/types/CustomType.js +0 -35
  597. package/dist/types/CustomType.js.map +0 -1
  598. package/dist/types/FunctionType.spec.js +0 -29
  599. package/dist/types/FunctionType.spec.js.map +0 -1
  600. package/dist/types/LazyType.d.ts +0 -15
  601. package/dist/types/LazyType.js +0 -32
  602. package/dist/types/LazyType.js.map +0 -1
  603. /package/dist/{preprocessor/Preprocessor.spec.d.ts → astUtils/Editor.spec.d.ts} +0 -0
  604. /package/dist/{preprocessor/PreprocessorParser.spec.d.ts → bscPlugin/completions/CompletionsProcessor.spec.d.ts} +0 -0
  605. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/definition/DefinitionProvider.spec.d.ts} +0 -0
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const chai_1 = require("chai");
3
+ const chai_config_spec_1 = require("../../../chai-config.spec");
4
4
  const assert = require("assert");
5
5
  const Parser_1 = require("../../Parser");
6
- const lexer_1 = require("../../../lexer");
6
+ const Lexer_1 = require("../../../lexer/Lexer");
7
+ const TokenKind_1 = require("../../../lexer/TokenKind");
7
8
  const Parser_spec_1 = require("../Parser.spec");
8
- const astUtils_1 = require("../../../astUtils");
9
+ const reflection_1 = require("../../../astUtils/reflection");
9
10
  describe('parser if statements', () => {
10
11
  it('allows empty if blocks', () => {
11
12
  var _a;
12
- let { tokens } = lexer_1.Lexer.scan(`
13
+ let { tokens } = Lexer_1.Lexer.scan(`
13
14
  if true then
14
15
 
15
16
  else if true then
@@ -19,12 +20,12 @@ describe('parser if statements', () => {
19
20
  end if
20
21
  `);
21
22
  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);
23
+ (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
24
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
24
25
  });
25
26
  it('allows empty elseif blocks', () => {
26
27
  var _a;
27
- let { tokens } = lexer_1.Lexer.scan(`
28
+ let { tokens } = Lexer_1.Lexer.scan(`
28
29
  if true then
29
30
  stop
30
31
  else if true then
@@ -34,12 +35,12 @@ describe('parser if statements', () => {
34
35
  end if
35
36
  `);
36
37
  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);
38
+ (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
39
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
39
40
  });
40
41
  it('allows empty else blocks', () => {
41
42
  var _a;
42
- let { tokens } = lexer_1.Lexer.scan(`
43
+ let { tokens } = Lexer_1.Lexer.scan(`
43
44
  if true then
44
45
  stop
45
46
  else if true then
@@ -49,12 +50,12 @@ describe('parser if statements', () => {
49
50
  end if
50
51
  `);
51
52
  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);
53
+ (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
54
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
54
55
  });
55
56
  it('single-line if next to else or endif', () => {
56
57
  var _a;
57
- let { tokens } = lexer_1.Lexer.scan(`
58
+ let { tokens } = Lexer_1.Lexer.scan(`
58
59
  if type(component.TextAttrs.font) = "roString"
59
60
  font = m.fonts.Lookup(component.TextAttrs.font)
60
61
  if font = invalid then font = m.fonts.medium
@@ -65,20 +66,20 @@ describe('parser if statements', () => {
65
66
  end if
66
67
  `);
67
68
  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);
69
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
70
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
70
71
  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])) {
72
+ if (!(0, reflection_1.isIfStatement)(ifs) || !(0, reflection_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[1])) {
72
73
  assert.fail('Missing single-line if inside if-then');
73
74
  }
74
- if (!astUtils_1.isIfStatement(ifs.elseBranch)) {
75
+ if (!(0, reflection_1.isIfStatement)(ifs.elseBranch)) {
75
76
  assert.fail('Missing chained else-if statement');
76
77
  }
77
- chai_1.expect(ifs.elseBranch.elseBranch).to.exist;
78
+ (0, chai_config_spec_1.expect)(ifs.elseBranch.elseBranch).to.exist;
78
79
  });
79
80
  it('single-line if inside multi-line if', () => {
80
81
  var _a;
81
- let { tokens } = lexer_1.Lexer.scan(`
82
+ let { tokens } = Lexer_1.Lexer.scan(`
82
83
  if true
83
84
  if true then t = 1
84
85
  else
@@ -86,121 +87,121 @@ describe('parser if statements', () => {
86
87
  end if
87
88
  `);
88
89
  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);
90
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
91
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
91
92
  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])) {
93
+ if (!(0, reflection_1.isIfStatement)(ifs) || !(0, reflection_1.isIfStatement)((_a = ifs.thenBranch) === null || _a === void 0 ? void 0 : _a.statements[0])) {
93
94
  assert.fail('Missing single-line if inside if-then');
94
95
  }
95
- chai_1.expect(ifs.elseBranch).to.exist;
96
- if (!astUtils_1.isBlock(ifs.elseBranch) || !astUtils_1.isCommentStatement(ifs.elseBranch.statements[0])) {
96
+ (0, chai_config_spec_1.expect)(ifs.elseBranch).to.exist;
97
+ if (!(0, reflection_1.isBlock)(ifs.elseBranch)) {
97
98
  assert.fail('Missing comment inside else branch');
98
99
  }
99
100
  });
100
101
  it('dotted set in else block', () => {
101
- let { tokens } = lexer_1.Lexer.scan(`
102
+ let { tokens } = Lexer_1.Lexer.scan(`
102
103
  if true then m.top.visible = true else m.top.visible = false
103
104
  `);
104
105
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
105
106
  if (diagnostics.length > 0) {
106
107
  console.log(diagnostics);
107
108
  }
108
- chai_1.expect(diagnostics).to.be.lengthOf(0);
109
- chai_1.expect(statements).to.be.length.greaterThan(0);
109
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
110
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
110
111
  });
111
112
  describe('single-line if', () => {
112
113
  it('parses if only', () => {
113
114
  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'),
115
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
116
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
117
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
118
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
119
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
120
+ (0, Parser_spec_1.identifier)('foo'),
121
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
122
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
123
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
123
124
  Parser_spec_1.EOF
124
125
  ]);
125
- chai_1.expect(diagnostics).to.be.lengthOf(0);
126
- chai_1.expect(statements).to.be.length.greaterThan(0);
126
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
127
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
127
128
  });
128
129
  it('parses if-else', () => {
129
130
  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'),
131
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
132
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
133
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
134
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
135
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
136
+ (0, Parser_spec_1.identifier)('foo'),
137
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
138
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
139
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
140
+ (0, Parser_spec_1.identifier)('foo'),
141
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
142
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.False, 'true'),
143
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
143
144
  Parser_spec_1.EOF
144
145
  ]);
145
- chai_1.expect(diagnostics).to.be.lengthOf(0);
146
- chai_1.expect(statements).to.be.length.greaterThan(0);
146
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
147
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
147
148
  });
148
149
  it('parses if-elseif-else', () => {
149
150
  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'),
151
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
152
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
153
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
154
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
155
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
156
+ (0, Parser_spec_1.identifier)('foo'),
157
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
158
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
159
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
160
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
161
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
162
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
163
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
164
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Then, 'then'),
165
+ (0, Parser_spec_1.identifier)('same'),
166
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
167
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
168
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
169
+ (0, Parser_spec_1.identifier)('foo'),
170
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
171
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
172
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
172
173
  Parser_spec_1.EOF
173
174
  ]);
174
- chai_1.expect(diagnostics).to.be.lengthOf(0);
175
- chai_1.expect(statements).to.be.length.greaterThan(0);
175
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
176
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
176
177
  });
177
178
  it('allows \'then\' to be skipped', () => {
178
179
  // if 1 < 2 foo = true else if 1 = 2 same = true
179
180
  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'),
181
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
182
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
183
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Less, '<'),
184
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
185
+ (0, Parser_spec_1.identifier)('foo'),
186
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
187
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
188
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
189
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.If, 'if'),
190
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '1'),
191
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
192
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.IntegerLiteral, '2'),
193
+ (0, Parser_spec_1.identifier)('same'),
194
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
195
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.True, 'true'),
196
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Else, 'else'),
197
+ (0, Parser_spec_1.identifier)('foo'),
198
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Equal, '='),
199
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.False, 'false'),
200
+ (0, Parser_spec_1.token)(TokenKind_1.TokenKind.Newline, '\n'),
200
201
  Parser_spec_1.EOF
201
202
  ]);
202
- chai_1.expect(diagnostics).to.be.lengthOf(0);
203
- chai_1.expect(statements).to.be.length.greaterThan(0);
203
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
204
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
204
205
  });
205
206
  it('parses special statements in inline block', () => {
206
207
  const { statements, diagnostics } = Parser_1.Parser.parse(`
@@ -212,26 +213,26 @@ describe('parser if statements', () => {
212
213
  if true return else print 1
213
214
  if true then return else print 1
214
215
  `);
215
- chai_1.expect(diagnostics).to.be.lengthOf(0);
216
- chai_1.expect(statements).to.be.length.greaterThan(0);
216
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
217
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
217
218
  });
218
219
  });
219
220
  describe('block if', () => {
220
221
  it('parses if only', () => {
221
222
  //because the parser depends on line numbers for certain if statements, this needs to be location-aware
222
- let { tokens } = lexer_1.Lexer.scan(`
223
+ let { tokens } = Lexer_1.Lexer.scan(`
223
224
  if 1 < 2 THEN
224
225
  foo = true
225
226
  bar = true
226
227
  end if
227
228
  `);
228
229
  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);
230
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
231
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
231
232
  });
232
233
  it('parses if-else', () => {
233
234
  //this test requires token locations, so use the lexer
234
- let { tokens } = lexer_1.Lexer.scan(`
235
+ let { tokens } = Lexer_1.Lexer.scan(`
235
236
  if 1 < 2 then
236
237
  foo = true
237
238
  else
@@ -240,12 +241,12 @@ describe('parser if statements', () => {
240
241
  end if
241
242
  `);
242
243
  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);
244
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
245
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
245
246
  });
246
247
  it('parses if-elseif-else', () => {
247
248
  //this test requires token locations, so use the lexer
248
- let { tokens } = lexer_1.Lexer.scan(`
249
+ let { tokens } = Lexer_1.Lexer.scan(`
249
250
  if 1 < 2 then
250
251
  foo = true
251
252
  else if 1 > 2 then
@@ -256,12 +257,12 @@ describe('parser if statements', () => {
256
257
  end if
257
258
  `);
258
259
  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);
260
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
261
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
261
262
  });
262
263
  it('allows \'then\' to be skipped', () => {
263
264
  //this test requires token locations, so use the lexer
264
- let { tokens } = lexer_1.Lexer.scan(`
265
+ let { tokens } = Lexer_1.Lexer.scan(`
265
266
  if 1 < 2
266
267
  foo = true
267
268
  else if 1 > 2
@@ -272,12 +273,12 @@ describe('parser if statements', () => {
272
273
  end if
273
274
  `);
274
275
  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);
276
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
277
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
277
278
  });
278
279
  it('sets endif token properly', () => {
279
280
  //this test requires token locations, so use the lexer
280
- let { tokens } = lexer_1.Lexer.scan(`
281
+ let { tokens } = Lexer_1.Lexer.scan(`
281
282
  sub a()
282
283
  if true then
283
284
  print false
@@ -289,19 +290,19 @@ describe('parser if statements', () => {
289
290
  end sub
290
291
  `);
291
292
  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);
293
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
294
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
294
295
  //the endif token should be set
295
296
  let ifs = statements[0].func.body.statements[0];
296
- if (!astUtils_1.isIfStatement(ifs) || !astUtils_1.isIfStatement(ifs.elseBranch)) {
297
+ if (!(0, reflection_1.isIfStatement)(ifs) || !(0, reflection_1.isIfStatement)(ifs.elseBranch)) {
297
298
  assert.fail('Unexpected statement found');
298
299
  }
299
- chai_1.expect(ifs.tokens.endIf).to.not.exist;
300
- chai_1.expect(ifs.elseBranch.tokens.endIf).to.exist;
300
+ (0, chai_config_spec_1.expect)(ifs.tokens.endIf).to.not.exist;
301
+ (0, chai_config_spec_1.expect)(ifs.elseBranch.tokens.endIf).to.exist;
301
302
  });
302
303
  });
303
304
  it('supports trailing colons after conditional statements', () => {
304
- let { tokens } = lexer_1.Lexer.scan(`
305
+ let { tokens } = Lexer_1.Lexer.scan(`
305
306
  sub main()
306
307
  if 1 > 0:
307
308
  print "positive!"
@@ -313,125 +314,125 @@ describe('parser if statements', () => {
313
314
  end sub
314
315
  `);
315
316
  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);
317
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
318
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
318
319
  });
319
320
  it('supports trailing colons for one-line if statements', () => {
320
- let { tokens } = lexer_1.Lexer.scan(`
321
+ let { tokens } = Lexer_1.Lexer.scan(`
321
322
  if 1 < 2: return true: end if
322
323
  `);
323
324
  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);
325
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
326
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
326
327
  });
327
328
  it('catches one-line if statement missing first colon', () => {
328
329
  //missing colon after 2
329
- let { tokens } = lexer_1.Lexer.scan(`
330
+ let { tokens } = Lexer_1.Lexer.scan(`
330
331
  if 1 < 2 return true : end if
331
332
  `);
332
333
  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);
334
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
335
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
335
336
  });
336
337
  it('catches one-line if statement with multiple statements missing first colon', () => {
337
338
  //missing colon after 2
338
- let { tokens } = lexer_1.Lexer.scan(`
339
+ let { tokens } = Lexer_1.Lexer.scan(`
339
340
  if 1 < 2 print "ok" : return true : end if
340
341
  `);
341
342
  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);
343
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
344
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
344
345
  });
345
346
  it('catches one-line if statement missing second colon', () => {
346
347
  //missing colon after `2`
347
- let { tokens } = lexer_1.Lexer.scan(`
348
+ let { tokens } = Lexer_1.Lexer.scan(`
348
349
  if 1 < 2 : return true end if
349
350
  `);
350
351
  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);
352
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
353
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
353
354
  });
354
355
  it('catches one-line if statement with else missing colons', () => {
355
356
  //missing colon after `2`
356
- let { tokens } = lexer_1.Lexer.scan(`
357
+ let { tokens } = Lexer_1.Lexer.scan(`
357
358
  if 1 < 2 : return true: else return false end if
358
359
  `);
359
360
  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);
361
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
362
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
362
363
  });
363
364
  it('catches one-line if statement with colon and missing end if', () => {
364
365
  //missing colon after `2`
365
- let { tokens } = lexer_1.Lexer.scan(`
366
+ let { tokens } = Lexer_1.Lexer.scan(`
366
367
  if 1 < 2: return true
367
368
  `);
368
369
  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);
370
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
371
+ (0, chai_config_spec_1.expect)(statements).to.be.lengthOf(0);
371
372
  });
372
373
  it('catches one-line if multi-statement with colon and missing end if', () => {
373
374
  //missing colon after `2`
374
- let { tokens } = lexer_1.Lexer.scan(`
375
+ let { tokens } = Lexer_1.Lexer.scan(`
375
376
  if 1 < 2: print "ok": return true
376
377
  `);
377
378
  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);
379
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
380
+ (0, chai_config_spec_1.expect)(statements).to.be.lengthOf(0);
380
381
  });
381
382
  it('catches one-line if statement with colon and missing endif inside a function', () => {
382
383
  //missing 'end if'
383
- let { tokens } = lexer_1.Lexer.scan(`
384
+ let { tokens } = Lexer_1.Lexer.scan(`
384
385
  function missingendif()
385
386
  if true : return true
386
387
  end function
387
388
  `);
388
389
  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);
390
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(2);
391
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
391
392
  });
392
393
  it('catches extraneous colon at the end of one-line if-else', () => {
393
394
  //colon at the end not allowed
394
- let { tokens } = lexer_1.Lexer.scan(`
395
+ let { tokens } = Lexer_1.Lexer.scan(`
395
396
  if 1 < 2 then return true else return false:
396
397
  `);
397
398
  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);
399
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
400
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
400
401
  });
401
402
  it('catches colon before if, unless there is `then` before', () => {
402
403
  //colon before if isn't allowed
403
- let { tokens } = lexer_1.Lexer.scan(`
404
+ let { tokens } = Lexer_1.Lexer.scan(`
404
405
  if 1 < 2 then: if 2<3: return false: end if
405
406
  : if 1 < 2: return true: end if
406
407
  end if
407
408
  `);
408
409
  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);
410
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
411
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
411
412
  });
412
413
  it('catches extraneous colon+end if at the end of one-line if-else', () => {
413
414
  //expected newline + unexpected endif
414
- let { tokens } = lexer_1.Lexer.scan(`
415
+ let { tokens } = Lexer_1.Lexer.scan(`
415
416
  if 1 < 2 then return true else return false: end if
416
417
  `);
417
418
  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);
419
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(2);
420
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
420
421
  });
421
422
  it('recovers from extraneous endif at the end of one-line if-else', () => {
422
423
  //unexpected endif
423
- let { tokens } = lexer_1.Lexer.scan(`
424
+ let { tokens } = Lexer_1.Lexer.scan(`
424
425
  function test1()
425
426
  if 1 < 2: return true: else return false end if
426
427
  end function
427
428
  `);
428
429
  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);
430
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(2);
431
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
431
432
  });
432
433
  it('recovers from missing end-if', () => {
433
434
  //unexpected endif
434
- let { tokens } = lexer_1.Lexer.scan(`
435
+ let { tokens } = Lexer_1.Lexer.scan(`
435
436
  function test1()
436
437
  if 1 < 2 then if 1 < 3
437
438
  return true
@@ -439,113 +440,133 @@ describe('parser if statements', () => {
439
440
  function test2()
440
441
  end function
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
+ let parser = Parser_1.Parser.parse(tokens);
444
+ let { statements, diagnostics } = parser;
445
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
446
+ (0, chai_config_spec_1.expect)(statements).to.be.lengthOf(2);
447
+ const functionStatements = parser.ast.findChildren(reflection_1.isFunctionStatement);
448
+ (0, chai_config_spec_1.expect)(functionStatements).to.be.lengthOf(2);
446
449
  });
447
450
  it('catches extraneous colon at the end of one-line if', () => {
448
451
  //colon at the end not allowed
449
- let { tokens } = lexer_1.Lexer.scan(`
452
+ let { tokens } = Lexer_1.Lexer.scan(`
450
453
  if 1 < 2 then return true:
451
454
  `);
452
455
  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);
456
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
457
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
455
458
  });
456
459
  it('catches multi-line if inside a one-line if branch', () => {
457
460
  //second if should be inline
458
- let { tokens } = lexer_1.Lexer.scan(`
461
+ let { tokens } = Lexer_1.Lexer.scan(`
459
462
  if 1 < 2 then if 1 < 3
460
463
  return true
461
464
  end if
462
465
  `);
463
466
  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);
467
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
468
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
466
469
  });
467
470
  it('supports multiple statements in one-line if statements', () => {
468
471
  //second if should be inline
469
- let { tokens } = lexer_1.Lexer.scan(`
472
+ let { tokens } = Lexer_1.Lexer.scan(`
470
473
  if 1 < 2 then ok = true : m.ok = true : print "ok" : ook() else if 1 < 3
471
474
  return true
472
475
  end if
473
476
  `);
474
477
  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);
478
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
479
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
477
480
  });
478
481
  it('catches multi-line if inside a one-line if else branch', () => {
479
482
  //second if should be inline
480
- let { tokens } = lexer_1.Lexer.scan(`
483
+ let { tokens } = Lexer_1.Lexer.scan(`
481
484
  if 1 < 2 then return false else if 1 < 3
482
485
  return true
483
486
  end if
484
487
  `);
485
488
  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);
489
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1);
490
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
488
491
  });
489
492
  it('catches else statement missing colon', () => {
490
493
  //missing colon before `end if`
491
- let { tokens } = lexer_1.Lexer.scan(`
494
+ let { tokens } = Lexer_1.Lexer.scan(`
492
495
  if 1 < 2
493
496
  return true
494
497
  else return false end if
495
498
  `);
496
499
  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);
500
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.length.greaterThan(0);
501
+ (0, chai_config_spec_1.expect)(statements).to.be.lengthOf(1);
499
502
  });
500
503
  it('supports if statement with condition and action on one line, but end if on separate line', () => {
501
- let { tokens } = lexer_1.Lexer.scan(`
504
+ let { tokens } = Lexer_1.Lexer.scan(`
502
505
  if 1 < 2: return true
503
506
  end if
504
507
  `);
505
508
  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);
509
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
510
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
508
511
  });
509
512
  it('supports colon after return in single-line if statement', () => {
510
- let { tokens } = lexer_1.Lexer.scan(`
513
+ let { tokens } = Lexer_1.Lexer.scan(`
511
514
  if false : print "true" : end if
512
515
  `);
513
516
  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);
517
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
518
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
516
519
  });
517
520
  it('supports if elseif endif single line', () => {
518
- let { tokens } = lexer_1.Lexer.scan(`
521
+ let { tokens } = Lexer_1.Lexer.scan(`
519
522
  if true: print "8 worked": else if true: print "not run": else: print "not run": end if
520
523
  `);
521
524
  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);
525
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
526
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
524
527
  });
525
528
  it('supports comment at the end of one-line if', () => {
526
- let { tokens } = lexer_1.Lexer.scan(`
529
+ let { tokens } = Lexer_1.Lexer.scan(`
527
530
  if 1 > 2 then return true 'OK
528
531
  `);
529
532
  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);
533
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
534
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
532
535
  });
533
536
  it('supports colon at the beginning of a line', () => {
534
- let { tokens } = lexer_1.Lexer.scan(`
537
+ let { tokens } = Lexer_1.Lexer.scan(`
535
538
  if 1 < 2 then: if 1 < 4 then return false
536
539
  : end if
537
540
  `);
538
541
  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);
542
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
543
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
541
544
  });
542
545
  it('supports one-line functions inside of one-line if statement', () => {
543
- let { tokens } = lexer_1.Lexer.scan(`
546
+ let { tokens } = Lexer_1.Lexer.scan(`
544
547
  if true then : test = sub() : print "yes" : end sub : end if
545
548
  `);
546
549
  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);
550
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
551
+ (0, chai_config_spec_1.expect)(statements).to.be.length.greaterThan(0);
552
+ });
553
+ it('single-line if block statements have correct range', () => {
554
+ let { tokens } = Lexer_1.Lexer.scan(`
555
+ if false then print "true"
556
+ if false then print "true": a = 10
557
+ if false then print "true" else print "false"
558
+ if false then print "true" else print "false": a = 20
559
+ `);
560
+ let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
561
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(0);
562
+ const then1 = statements[0].thenBranch;
563
+ (0, chai_config_spec_1.expect)((0, Parser_spec_1.rangeMatch)(then1.range, then1.statements)).to.be.true;
564
+ const then2 = statements[1].thenBranch;
565
+ (0, chai_config_spec_1.expect)((0, Parser_spec_1.rangeMatch)(then2.range, then2.statements)).to.be.true;
566
+ const else1 = statements[2].elseBranch;
567
+ (0, chai_config_spec_1.expect)((0, Parser_spec_1.rangeMatch)(else1.range, else1.statements)).to.be.true;
568
+ const else2 = statements[3].elseBranch;
569
+ (0, chai_config_spec_1.expect)((0, Parser_spec_1.rangeMatch)(else2.range, else2.statements)).to.be.true;
549
570
  });
550
571
  });
551
572
  //# sourceMappingURL=If.spec.js.map