brighterscript 1.0.0-alpha.4 → 1.0.0-alpha.41

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 (620) hide show
  1. package/CHANGELOG.md +1393 -291
  2. package/README.md +72 -131
  3. package/bsconfig.schema.json +85 -1
  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 +42 -0
  8. package/dist/AstValidationSegmenter.js +237 -0
  9. package/dist/AstValidationSegmenter.js.map +1 -0
  10. package/dist/BsConfig.d.ts +56 -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 +6 -3
  21. package/dist/CodeActionUtil.js +19 -5
  22. package/dist/CodeActionUtil.js.map +1 -1
  23. package/dist/CommentFlagProcessor.d.ts +7 -6
  24. package/dist/CommentFlagProcessor.js +11 -8
  25. package/dist/CommentFlagProcessor.js.map +1 -1
  26. package/dist/CrossScopeValidator.d.ts +67 -0
  27. package/dist/CrossScopeValidator.js +617 -0
  28. package/dist/CrossScopeValidator.js.map +1 -0
  29. package/dist/DependencyGraph.d.ts +8 -3
  30. package/dist/DependencyGraph.js +49 -16
  31. package/dist/DependencyGraph.js.map +1 -1
  32. package/dist/DiagnosticCollection.d.ts +5 -3
  33. package/dist/DiagnosticCollection.js +21 -16
  34. package/dist/DiagnosticCollection.js.map +1 -1
  35. package/dist/DiagnosticFilterer.d.ts +8 -4
  36. package/dist/DiagnosticFilterer.js +90 -54
  37. package/dist/DiagnosticFilterer.js.map +1 -1
  38. package/dist/DiagnosticManager.d.ts +61 -0
  39. package/dist/DiagnosticManager.js +238 -0
  40. package/dist/DiagnosticManager.js.map +1 -0
  41. package/dist/DiagnosticMessages.d.ts +204 -24
  42. package/dist/DiagnosticMessages.js +266 -33
  43. package/dist/DiagnosticMessages.js.map +1 -1
  44. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  45. package/dist/DiagnosticSeverityAdjuster.js +41 -0
  46. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  47. package/dist/FunctionScope.d.ts +28 -0
  48. package/dist/FunctionScope.js +52 -0
  49. package/dist/FunctionScope.js.map +1 -0
  50. package/dist/KeyedThrottler.d.ts +3 -3
  51. package/dist/KeyedThrottler.js +3 -3
  52. package/dist/KeyedThrottler.js.map +1 -1
  53. package/dist/LanguageServer.d.ts +72 -47
  54. package/dist/LanguageServer.js +545 -314
  55. package/dist/LanguageServer.js.map +1 -1
  56. package/dist/Logger.d.ts +9 -10
  57. package/dist/Logger.js +36 -30
  58. package/dist/Logger.js.map +1 -1
  59. package/dist/PluginInterface.d.ts +29 -7
  60. package/dist/PluginInterface.js +90 -7
  61. package/dist/PluginInterface.js.map +1 -1
  62. package/dist/Program.d.ts +201 -100
  63. package/dist/Program.js +1079 -700
  64. package/dist/Program.js.map +1 -1
  65. package/dist/ProgramBuilder.d.ts +29 -18
  66. package/dist/ProgramBuilder.js +178 -141
  67. package/dist/ProgramBuilder.js.map +1 -1
  68. package/dist/Scope.d.ts +144 -109
  69. package/dist/Scope.js +533 -552
  70. package/dist/Scope.js.map +1 -1
  71. package/dist/SemanticTokenUtils.d.ts +14 -0
  72. package/dist/SemanticTokenUtils.js +85 -0
  73. package/dist/SemanticTokenUtils.js.map +1 -0
  74. package/dist/Stopwatch.d.ts +4 -0
  75. package/dist/Stopwatch.js +8 -1
  76. package/dist/Stopwatch.js.map +1 -1
  77. package/dist/SymbolTable.d.ts +91 -24
  78. package/dist/SymbolTable.js +291 -64
  79. package/dist/SymbolTable.js.map +1 -1
  80. package/dist/SymbolTypeFlag.d.ts +9 -0
  81. package/dist/SymbolTypeFlag.js +14 -0
  82. package/dist/SymbolTypeFlag.js.map +1 -0
  83. package/dist/Throttler.d.ts +12 -0
  84. package/dist/Throttler.js +39 -0
  85. package/dist/Throttler.js.map +1 -1
  86. package/dist/Watcher.d.ts +0 -3
  87. package/dist/Watcher.js +0 -3
  88. package/dist/Watcher.js.map +1 -1
  89. package/dist/XmlScope.d.ts +5 -15
  90. package/dist/XmlScope.js +35 -87
  91. package/dist/XmlScope.js.map +1 -1
  92. package/dist/astUtils/CachedLookups.d.ts +50 -0
  93. package/dist/astUtils/CachedLookups.js +335 -0
  94. package/dist/astUtils/CachedLookups.js.map +1 -0
  95. package/dist/astUtils/CachedLookups.spec.js +39 -0
  96. package/dist/astUtils/CachedLookups.spec.js.map +1 -0
  97. package/dist/astUtils/Editor.d.ts +69 -0
  98. package/dist/astUtils/Editor.js +245 -0
  99. package/dist/astUtils/Editor.js.map +1 -0
  100. package/dist/astUtils/Editor.spec.js +258 -0
  101. package/dist/astUtils/Editor.spec.js.map +1 -0
  102. package/dist/astUtils/creators.d.ts +36 -19
  103. package/dist/astUtils/creators.js +222 -43
  104. package/dist/astUtils/creators.js.map +1 -1
  105. package/dist/astUtils/creators.spec.js +5 -5
  106. package/dist/astUtils/creators.spec.js.map +1 -1
  107. package/dist/astUtils/reflection.d.ts +148 -82
  108. package/dist/astUtils/reflection.js +324 -137
  109. package/dist/astUtils/reflection.js.map +1 -1
  110. package/dist/astUtils/reflection.spec.js +267 -167
  111. package/dist/astUtils/reflection.spec.js.map +1 -1
  112. package/dist/astUtils/stackedVisitor.js.map +1 -1
  113. package/dist/astUtils/stackedVisitor.spec.js +14 -14
  114. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  115. package/dist/astUtils/visitors.d.ts +114 -53
  116. package/dist/astUtils/visitors.js +70 -13
  117. package/dist/astUtils/visitors.js.map +1 -1
  118. package/dist/astUtils/visitors.spec.js +463 -51
  119. package/dist/astUtils/visitors.spec.js.map +1 -1
  120. package/dist/astUtils/xml.d.ts +9 -8
  121. package/dist/astUtils/xml.js +10 -5
  122. package/dist/astUtils/xml.js.map +1 -1
  123. package/dist/bscPlugin/BscPlugin.d.ts +22 -1
  124. package/dist/bscPlugin/BscPlugin.js +88 -0
  125. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  126. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  127. package/dist/bscPlugin/CallExpressionInfo.js +135 -0
  128. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  129. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  130. package/dist/bscPlugin/FileWriter.js +24 -0
  131. package/dist/bscPlugin/FileWriter.js.map +1 -0
  132. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  133. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  134. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  135. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +1 -1
  136. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +30 -18
  137. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  138. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +94 -21
  139. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  140. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +64 -0
  141. package/dist/bscPlugin/completions/CompletionsProcessor.js +626 -0
  142. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  143. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +2188 -0
  144. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  145. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  146. package/dist/bscPlugin/definition/DefinitionProvider.js +212 -0
  147. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  148. package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +1 -0
  149. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  150. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  151. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  152. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  153. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  154. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  155. package/dist/bscPlugin/hover/HoverProcessor.js +218 -0
  156. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  157. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +1 -0
  158. package/dist/bscPlugin/hover/HoverProcessor.spec.js +786 -0
  159. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  160. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  161. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  162. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  163. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
  164. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  165. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  166. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  167. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +154 -0
  168. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  169. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  170. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +530 -0
  171. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  172. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  173. package/dist/bscPlugin/serialize/BslibInjector.spec.js +33 -0
  174. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  175. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  176. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  177. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  178. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  179. package/dist/bscPlugin/serialize/FileSerializer.js +75 -0
  180. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  181. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  182. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  183. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  184. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +1 -0
  185. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +291 -0
  186. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  187. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  188. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  189. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  190. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +1 -0
  191. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  192. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  193. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  194. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  195. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  196. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +21 -0
  197. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +201 -0
  198. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  199. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  200. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +75 -0
  201. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  202. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  203. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  204. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  205. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  206. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  207. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  208. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +36 -0
  209. package/dist/bscPlugin/validation/BrsFileValidator.js +534 -0
  210. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  211. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  212. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1118 -0
  213. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  214. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  215. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  216. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  217. package/dist/bscPlugin/validation/ScopeValidator.d.ts +128 -0
  218. package/dist/bscPlugin/validation/ScopeValidator.js +1045 -0
  219. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  220. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  221. package/dist/bscPlugin/validation/ScopeValidator.spec.js +3380 -0
  222. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  223. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  224. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  225. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  226. package/dist/cli.js +117 -11
  227. package/dist/cli.js.map +1 -1
  228. package/dist/deferred.d.ts +3 -3
  229. package/dist/deferred.js.map +1 -1
  230. package/dist/diagnosticUtils.d.ts +10 -3
  231. package/dist/diagnosticUtils.js +62 -24
  232. package/dist/diagnosticUtils.js.map +1 -1
  233. package/dist/examples/plugins/removePrint.js +8 -12
  234. package/dist/examples/plugins/removePrint.js.map +1 -1
  235. package/dist/files/AssetFile.d.ts +24 -0
  236. package/dist/files/AssetFile.js +25 -0
  237. package/dist/files/AssetFile.js.map +1 -0
  238. package/dist/files/BrsFile.Class.spec.js +912 -153
  239. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  240. package/dist/files/BrsFile.d.ts +142 -85
  241. package/dist/files/BrsFile.js +845 -935
  242. package/dist/files/BrsFile.js.map +1 -1
  243. package/dist/files/BrsFile.spec.js +3778 -862
  244. package/dist/files/BrsFile.spec.js.map +1 -1
  245. package/dist/files/BscFile.d.ts +101 -0
  246. package/dist/files/BscFile.js +15 -0
  247. package/dist/files/BscFile.js.map +1 -0
  248. package/dist/files/Factory.d.ts +25 -0
  249. package/dist/files/Factory.js +22 -0
  250. package/dist/files/Factory.js.map +1 -0
  251. package/dist/files/LazyFileData.d.ts +20 -0
  252. package/dist/files/LazyFileData.js +54 -0
  253. package/dist/files/LazyFileData.js.map +1 -0
  254. package/dist/files/LazyFileData.spec.d.ts +1 -0
  255. package/dist/files/LazyFileData.spec.js +27 -0
  256. package/dist/files/LazyFileData.spec.js.map +1 -0
  257. package/dist/files/XmlFile.d.ts +73 -41
  258. package/dist/files/XmlFile.js +128 -138
  259. package/dist/files/XmlFile.js.map +1 -1
  260. package/dist/files/XmlFile.spec.js +451 -324
  261. package/dist/files/XmlFile.spec.js.map +1 -1
  262. package/dist/files/tests/imports.spec.js +62 -52
  263. package/dist/files/tests/imports.spec.js.map +1 -1
  264. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  265. package/dist/files/tests/optionalChaning.spec.js +152 -0
  266. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  267. package/dist/globalCallables.d.ts +3 -1
  268. package/dist/globalCallables.js +417 -163
  269. package/dist/globalCallables.js.map +1 -1
  270. package/dist/index.d.ts +26 -3
  271. package/dist/index.js +44 -5
  272. package/dist/index.js.map +1 -1
  273. package/dist/interfaces.d.ts +783 -122
  274. package/dist/interfaces.js +21 -0
  275. package/dist/interfaces.js.map +1 -1
  276. package/dist/lexer/Character.spec.js +5 -5
  277. package/dist/lexer/Character.spec.js.map +1 -1
  278. package/dist/lexer/Lexer.d.ts +51 -12
  279. package/dist/lexer/Lexer.js +201 -57
  280. package/dist/lexer/Lexer.js.map +1 -1
  281. package/dist/lexer/Lexer.spec.js +781 -565
  282. package/dist/lexer/Lexer.spec.js.map +1 -1
  283. package/dist/lexer/Token.d.ts +27 -11
  284. package/dist/lexer/Token.js +10 -2
  285. package/dist/lexer/Token.js.map +1 -1
  286. package/dist/lexer/TokenKind.d.ts +31 -2
  287. package/dist/lexer/TokenKind.js +134 -10
  288. package/dist/lexer/TokenKind.js.map +1 -1
  289. package/dist/logging.d.ts +9 -0
  290. package/dist/logging.js +16 -0
  291. package/dist/logging.js.map +1 -0
  292. package/dist/parser/AstNode.d.ts +191 -0
  293. package/dist/parser/AstNode.js +269 -0
  294. package/dist/parser/AstNode.js.map +1 -0
  295. package/dist/parser/AstNode.spec.d.ts +1 -0
  296. package/dist/parser/AstNode.spec.js +1455 -0
  297. package/dist/parser/AstNode.spec.js.map +1 -0
  298. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  299. package/dist/parser/BrightScriptDocParser.js +294 -0
  300. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  301. package/dist/parser/BrightScriptDocParser.spec.d.ts +1 -0
  302. package/dist/parser/BrightScriptDocParser.spec.js +310 -0
  303. package/dist/parser/BrightScriptDocParser.spec.js.map +1 -0
  304. package/dist/parser/BrsTranspileState.d.ts +22 -3
  305. package/dist/parser/BrsTranspileState.js +19 -0
  306. package/dist/parser/BrsTranspileState.js.map +1 -1
  307. package/dist/parser/Expression.d.ts +489 -221
  308. package/dist/parser/Expression.js +1206 -506
  309. package/dist/parser/Expression.js.map +1 -1
  310. package/dist/parser/Expression.spec.d.ts +1 -0
  311. package/dist/parser/Expression.spec.js +40 -0
  312. package/dist/parser/Expression.spec.js.map +1 -0
  313. package/dist/parser/Parser.Class.spec.js +230 -125
  314. package/dist/parser/Parser.Class.spec.js.map +1 -1
  315. package/dist/parser/Parser.d.ts +113 -124
  316. package/dist/parser/Parser.js +1510 -983
  317. package/dist/parser/Parser.js.map +1 -1
  318. package/dist/parser/Parser.spec.d.ts +3 -1
  319. package/dist/parser/Parser.spec.js +1533 -517
  320. package/dist/parser/Parser.spec.js.map +1 -1
  321. package/dist/parser/SGParser.d.ts +60 -7
  322. package/dist/parser/SGParser.js +225 -185
  323. package/dist/parser/SGParser.js.map +1 -1
  324. package/dist/parser/SGParser.spec.js +29 -32
  325. package/dist/parser/SGParser.spec.js.map +1 -1
  326. package/dist/parser/SGTypes.d.ts +295 -52
  327. package/dist/parser/SGTypes.js +540 -187
  328. package/dist/parser/SGTypes.js.map +1 -1
  329. package/dist/parser/Statement.d.ts +808 -261
  330. package/dist/parser/Statement.js +2232 -588
  331. package/dist/parser/Statement.js.map +1 -1
  332. package/dist/parser/Statement.spec.js +133 -36
  333. package/dist/parser/Statement.spec.js.map +1 -1
  334. package/dist/parser/TranspileState.d.ts +26 -12
  335. package/dist/parser/TranspileState.js +114 -15
  336. package/dist/parser/TranspileState.js.map +1 -1
  337. package/dist/parser/tests/Parser.spec.d.ts +3 -9
  338. package/dist/parser/tests/Parser.spec.js +7 -13
  339. package/dist/parser/tests/Parser.spec.js.map +1 -1
  340. package/dist/parser/tests/controlFlow/For.spec.js +83 -75
  341. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  342. package/dist/parser/tests/controlFlow/ForEach.spec.js +58 -51
  343. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  344. package/dist/parser/tests/controlFlow/If.spec.js +382 -239
  345. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  346. package/dist/parser/tests/controlFlow/While.spec.js +52 -45
  347. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  348. package/dist/parser/tests/expression/Additive.spec.js +51 -43
  349. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  350. package/dist/parser/tests/expression/ArrayLiterals.spec.js +192 -142
  351. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  352. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +236 -160
  353. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  354. package/dist/parser/tests/expression/Boolean.spec.js +41 -34
  355. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  356. package/dist/parser/tests/expression/Call.spec.js +173 -55
  357. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  358. package/dist/parser/tests/expression/Exponential.spec.js +20 -20
  359. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  360. package/dist/parser/tests/expression/Function.spec.js +291 -282
  361. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  362. package/dist/parser/tests/expression/Indexing.spec.js +193 -110
  363. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  364. package/dist/parser/tests/expression/Multiplicative.spec.js +42 -42
  365. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  366. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +213 -115
  367. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  368. package/dist/parser/tests/expression/PrefixUnary.spec.js +58 -52
  369. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  370. package/dist/parser/tests/expression/Primary.spec.js +76 -60
  371. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  372. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  373. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  374. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  375. package/dist/parser/tests/expression/Relational.spec.js +50 -50
  376. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  377. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +31 -31
  378. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  379. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +235 -94
  380. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  381. package/dist/parser/tests/expression/TernaryExpression.spec.js +403 -174
  382. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  383. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  384. package/dist/parser/tests/expression/TypeExpression.spec.js +126 -0
  385. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  386. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  387. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  388. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  389. package/dist/parser/tests/statement/AssignmentOperators.spec.js +44 -44
  390. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  391. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  392. package/dist/parser/tests/statement/ConstStatement.spec.js +262 -0
  393. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  394. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  395. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  396. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  397. package/dist/parser/tests/statement/Declaration.spec.js +61 -55
  398. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  399. package/dist/parser/tests/statement/Dim.spec.js +22 -22
  400. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  401. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  402. package/dist/parser/tests/statement/Enum.spec.js +744 -0
  403. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  404. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  405. package/dist/parser/tests/statement/For.spec.js +45 -0
  406. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  407. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  408. package/dist/parser/tests/statement/ForEach.spec.js +36 -0
  409. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  410. package/dist/parser/tests/statement/Function.spec.js +226 -215
  411. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  412. package/dist/parser/tests/statement/Goto.spec.js +16 -15
  413. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  414. package/dist/parser/tests/statement/Increment.spec.js +64 -59
  415. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  416. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  417. package/dist/parser/tests/statement/InterfaceStatement.spec.js +110 -0
  418. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  419. package/dist/parser/tests/statement/LibraryStatement.spec.js +22 -22
  420. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  421. package/dist/parser/tests/statement/Misc.spec.js +127 -168
  422. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  423. package/dist/parser/tests/statement/PrintStatement.spec.js +133 -114
  424. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  425. package/dist/parser/tests/statement/ReturnStatement.spec.js +57 -54
  426. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  427. package/dist/parser/tests/statement/Set.spec.js +131 -117
  428. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  429. package/dist/parser/tests/statement/Stop.spec.js +14 -13
  430. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  431. package/dist/parser/tests/statement/Throw.spec.js +11 -8
  432. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  433. package/dist/parser/tests/statement/TryCatch.spec.js +26 -15
  434. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  435. package/dist/preprocessor/Manifest.d.ts +6 -6
  436. package/dist/preprocessor/Manifest.js +17 -38
  437. package/dist/preprocessor/Manifest.js.map +1 -1
  438. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  439. package/dist/preprocessor/Manifest.spec.js +78 -103
  440. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  441. package/dist/roku-types/data.json +19452 -0
  442. package/dist/roku-types/index.d.ts +5533 -0
  443. package/dist/roku-types/index.js +11 -0
  444. package/dist/roku-types/index.js.map +1 -0
  445. package/dist/types/ArrayType.d.ts +9 -5
  446. package/dist/types/ArrayType.js +73 -24
  447. package/dist/types/ArrayType.js.map +1 -1
  448. package/dist/types/ArrayType.spec.js +39 -11
  449. package/dist/types/ArrayType.spec.js.map +1 -1
  450. package/dist/types/AssociativeArrayType.d.ts +14 -0
  451. package/dist/types/AssociativeArrayType.js +60 -0
  452. package/dist/types/AssociativeArrayType.js.map +1 -0
  453. package/dist/types/BaseFunctionType.d.ts +9 -0
  454. package/dist/types/BaseFunctionType.js +25 -0
  455. package/dist/types/BaseFunctionType.js.map +1 -0
  456. package/dist/types/BooleanType.d.ts +10 -5
  457. package/dist/types/BooleanType.js +21 -9
  458. package/dist/types/BooleanType.js.map +1 -1
  459. package/dist/types/BooleanType.spec.js +10 -4
  460. package/dist/types/BooleanType.spec.js.map +1 -1
  461. package/dist/types/BscType.d.ts +29 -3
  462. package/dist/types/BscType.js +121 -0
  463. package/dist/types/BscType.js.map +1 -1
  464. package/dist/types/BscTypeKind.d.ts +25 -0
  465. package/dist/types/BscTypeKind.js +30 -0
  466. package/dist/types/BscTypeKind.js.map +1 -0
  467. package/dist/types/BuiltInInterfaceAdder.d.ts +25 -0
  468. package/dist/types/BuiltInInterfaceAdder.js +201 -0
  469. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  470. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  471. package/dist/types/BuiltInInterfaceAdder.spec.js +115 -0
  472. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  473. package/dist/types/ClassType.d.ts +16 -0
  474. package/dist/types/ClassType.js +57 -0
  475. package/dist/types/ClassType.js.map +1 -0
  476. package/dist/types/ClassType.spec.d.ts +1 -0
  477. package/dist/types/ClassType.spec.js +76 -0
  478. package/dist/types/ClassType.spec.js.map +1 -0
  479. package/dist/types/ComponentType.d.ts +27 -0
  480. package/dist/types/ComponentType.js +83 -0
  481. package/dist/types/ComponentType.js.map +1 -0
  482. package/dist/types/DoubleType.d.ts +10 -5
  483. package/dist/types/DoubleType.js +25 -18
  484. package/dist/types/DoubleType.js.map +1 -1
  485. package/dist/types/DoubleType.spec.js +12 -4
  486. package/dist/types/DoubleType.spec.js.map +1 -1
  487. package/dist/types/DynamicType.d.ts +12 -5
  488. package/dist/types/DynamicType.js +22 -6
  489. package/dist/types/DynamicType.js.map +1 -1
  490. package/dist/types/DynamicType.spec.js +16 -5
  491. package/dist/types/DynamicType.spec.js.map +1 -1
  492. package/dist/types/EnumType.d.ts +40 -0
  493. package/dist/types/EnumType.js +80 -0
  494. package/dist/types/EnumType.js.map +1 -0
  495. package/dist/types/EnumType.spec.d.ts +1 -0
  496. package/dist/types/EnumType.spec.js +33 -0
  497. package/dist/types/EnumType.spec.js.map +1 -0
  498. package/dist/types/FloatType.d.ts +10 -5
  499. package/dist/types/FloatType.js +25 -18
  500. package/dist/types/FloatType.js.map +1 -1
  501. package/dist/types/FloatType.spec.js +4 -4
  502. package/dist/types/FloatType.spec.js.map +1 -1
  503. package/dist/types/FunctionType.d.ts +10 -22
  504. package/dist/types/FunctionType.js +26 -63
  505. package/dist/types/FunctionType.js.map +1 -1
  506. package/dist/types/InheritableType.d.ts +29 -0
  507. package/dist/types/InheritableType.js +162 -0
  508. package/dist/types/InheritableType.js.map +1 -0
  509. package/dist/types/IntegerType.d.ts +10 -5
  510. package/dist/types/IntegerType.js +25 -18
  511. package/dist/types/IntegerType.js.map +1 -1
  512. package/dist/types/IntegerType.spec.js +8 -4
  513. package/dist/types/IntegerType.spec.js.map +1 -1
  514. package/dist/types/InterfaceType.d.ts +14 -6
  515. package/dist/types/InterfaceType.js +26 -15
  516. package/dist/types/InterfaceType.js.map +1 -1
  517. package/dist/types/InterfaceType.spec.d.ts +1 -0
  518. package/dist/types/InterfaceType.spec.js +227 -0
  519. package/dist/types/InterfaceType.spec.js.map +1 -0
  520. package/dist/types/InvalidType.d.ts +9 -5
  521. package/dist/types/InvalidType.js +20 -9
  522. package/dist/types/InvalidType.js.map +1 -1
  523. package/dist/types/InvalidType.spec.js +8 -4
  524. package/dist/types/InvalidType.spec.js.map +1 -1
  525. package/dist/types/LongIntegerType.d.ts +10 -5
  526. package/dist/types/LongIntegerType.js +25 -18
  527. package/dist/types/LongIntegerType.js.map +1 -1
  528. package/dist/types/LongIntegerType.spec.js +10 -4
  529. package/dist/types/LongIntegerType.spec.js.map +1 -1
  530. package/dist/types/NamespaceType.d.ts +12 -0
  531. package/dist/types/NamespaceType.js +28 -0
  532. package/dist/types/NamespaceType.js.map +1 -0
  533. package/dist/types/ObjectType.d.ts +10 -5
  534. package/dist/types/ObjectType.js +23 -9
  535. package/dist/types/ObjectType.js.map +1 -1
  536. package/dist/types/ObjectType.spec.js +3 -3
  537. package/dist/types/ObjectType.spec.js.map +1 -1
  538. package/dist/types/ReferenceType.d.ts +79 -0
  539. package/dist/types/ReferenceType.js +522 -0
  540. package/dist/types/ReferenceType.js.map +1 -0
  541. package/dist/types/ReferenceType.spec.d.ts +1 -0
  542. package/dist/types/ReferenceType.spec.js +151 -0
  543. package/dist/types/ReferenceType.spec.js.map +1 -0
  544. package/dist/types/StringType.d.ts +13 -5
  545. package/dist/types/StringType.js +25 -9
  546. package/dist/types/StringType.js.map +1 -1
  547. package/dist/types/StringType.spec.js +3 -3
  548. package/dist/types/StringType.spec.js.map +1 -1
  549. package/dist/types/TypedFunctionType.d.ts +33 -0
  550. package/dist/types/TypedFunctionType.js +106 -0
  551. package/dist/types/TypedFunctionType.js.map +1 -0
  552. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  553. package/dist/types/TypedFunctionType.spec.js +122 -0
  554. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  555. package/dist/types/UninitializedType.d.ts +8 -6
  556. package/dist/types/UninitializedType.js +15 -9
  557. package/dist/types/UninitializedType.js.map +1 -1
  558. package/dist/types/UnionType.d.ts +20 -0
  559. package/dist/types/UnionType.js +127 -0
  560. package/dist/types/UnionType.js.map +1 -0
  561. package/dist/types/UnionType.spec.d.ts +1 -0
  562. package/dist/types/UnionType.spec.js +129 -0
  563. package/dist/types/UnionType.spec.js.map +1 -0
  564. package/dist/types/VoidType.d.ts +10 -5
  565. package/dist/types/VoidType.js +20 -9
  566. package/dist/types/VoidType.js.map +1 -1
  567. package/dist/types/VoidType.spec.js +3 -3
  568. package/dist/types/VoidType.spec.js.map +1 -1
  569. package/dist/types/helper.spec.d.ts +1 -0
  570. package/dist/types/helper.spec.js +144 -0
  571. package/dist/types/helper.spec.js.map +1 -0
  572. package/dist/types/helpers.d.ts +26 -0
  573. package/dist/types/helpers.js +191 -0
  574. package/dist/types/helpers.js.map +1 -0
  575. package/dist/types/index.d.ts +22 -0
  576. package/dist/types/index.js +39 -0
  577. package/dist/types/index.js.map +1 -0
  578. package/dist/util.d.ts +272 -117
  579. package/dist/util.js +1583 -343
  580. package/dist/util.js.map +1 -1
  581. package/dist/validators/ClassValidator.d.ts +9 -15
  582. package/dist/validators/ClassValidator.js +85 -138
  583. package/dist/validators/ClassValidator.js.map +1 -1
  584. package/package.json +174 -138
  585. package/dist/astUtils/index.d.ts +0 -7
  586. package/dist/astUtils/index.js +0 -26
  587. package/dist/astUtils/index.js.map +0 -1
  588. package/dist/lexer/index.d.ts +0 -3
  589. package/dist/lexer/index.js +0 -17
  590. package/dist/lexer/index.js.map +0 -1
  591. package/dist/parser/index.d.ts +0 -3
  592. package/dist/parser/index.js +0 -16
  593. package/dist/parser/index.js.map +0 -1
  594. package/dist/preprocessor/Chunk.d.ts +0 -82
  595. package/dist/preprocessor/Chunk.js +0 -77
  596. package/dist/preprocessor/Chunk.js.map +0 -1
  597. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  598. package/dist/preprocessor/Preprocessor.js +0 -156
  599. package/dist/preprocessor/Preprocessor.js.map +0 -1
  600. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  601. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  602. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  603. package/dist/preprocessor/PreprocessorParser.js +0 -194
  604. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  605. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  606. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  607. package/dist/preprocessor/index.d.ts +0 -3
  608. package/dist/preprocessor/index.js +0 -16
  609. package/dist/preprocessor/index.js.map +0 -1
  610. package/dist/types/CustomType.d.ts +0 -10
  611. package/dist/types/CustomType.js +0 -35
  612. package/dist/types/CustomType.js.map +0 -1
  613. package/dist/types/FunctionType.spec.js +0 -29
  614. package/dist/types/FunctionType.spec.js.map +0 -1
  615. package/dist/types/LazyType.d.ts +0 -15
  616. package/dist/types/LazyType.js +0 -32
  617. package/dist/types/LazyType.js.map +0 -1
  618. /package/dist/{preprocessor/Preprocessor.spec.d.ts → astUtils/CachedLookups.spec.d.ts} +0 -0
  619. /package/dist/{preprocessor/PreprocessorParser.spec.d.ts → astUtils/Editor.spec.d.ts} +0 -0
  620. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/completions/CompletionsProcessor.spec.d.ts} +0 -0
@@ -1,15 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const vscode_languageserver_1 = require("vscode-languageserver");
4
- const chai_1 = require("chai");
4
+ const chai_config_spec_1 = require("../chai-config.spec");
5
5
  const sinon = require("sinon");
6
6
  const Program_1 = require("../Program");
7
7
  const Statement_1 = require("../parser/Statement");
8
- const lexer_1 = require("../lexer");
8
+ const TokenKind_1 = require("../lexer/TokenKind");
9
9
  const visitors_1 = require("./visitors");
10
10
  const reflection_1 = require("./reflection");
11
11
  const creators_1 = require("./creators");
12
12
  const stackedVisitor_1 = require("./stackedVisitor");
13
+ const Editor_1 = require("./Editor");
14
+ const Parser_1 = require("../parser/Parser");
15
+ const testHelpers_spec_1 = require("../testHelpers.spec");
13
16
  describe('astUtils visitors', () => {
14
17
  const rootDir = process.cwd();
15
18
  let program;
@@ -74,27 +77,62 @@ describe('astUtils visitors', () => {
74
77
  });
75
78
  function functionsWalker(visitor, cancel) {
76
79
  return (file) => {
77
- file.parser.references.functionExpressions.some(functionExpression => {
80
+ const funcExpressions = file.ast.findChildren(reflection_1.isFunctionExpression, { walkMode: visitors_1.WalkMode.visitExpressionsRecursive });
81
+ funcExpressions.some(functionExpression => {
78
82
  visitor(functionExpression.body, undefined);
79
- visitors_1.walkStatements(functionExpression.body, (statement, parent) => visitor(statement, parent), cancel);
83
+ (0, visitors_1.walkStatements)(functionExpression.body, (statement, parent) => visitor(statement, parent), cancel);
80
84
  return cancel === null || cancel === void 0 ? void 0 : cancel.isCancellationRequested;
81
85
  });
82
86
  };
83
87
  }
88
+ describe('createVisitor', () => {
89
+ it(`calls the 'AstNode' event for every node`, () => {
90
+ const file = program.setFile('source/main.brs', `
91
+ sub Main()
92
+ print "Hello"
93
+ end sub
94
+ `);
95
+ const nodes = [];
96
+ function track(node) {
97
+ nodes.push(node);
98
+ }
99
+ const visitor = (0, visitors_1.createVisitor)({
100
+ AstNode: track,
101
+ FunctionStatement: track,
102
+ FunctionExpression: track,
103
+ PrintStatement: track,
104
+ Block: track,
105
+ LiteralExpression: track
106
+ });
107
+ file.ast.walk(visitor, { walkMode: visitors_1.WalkMode.visitAllRecursive });
108
+ (0, chai_config_spec_1.expect)(nodes.map(x => x.constructor.name)).to.eql([
109
+ 'FunctionStatement',
110
+ 'FunctionStatement',
111
+ 'FunctionExpression',
112
+ 'FunctionExpression',
113
+ 'Block',
114
+ 'Block',
115
+ 'PrintStatement',
116
+ 'PrintStatement',
117
+ 'LiteralExpression',
118
+ 'LiteralExpression'
119
+ ]);
120
+ });
121
+ });
84
122
  describe('Statements', () => {
85
123
  it('Walks through all the statements with depth', () => {
86
124
  const actual = [];
87
- const visitor = stackedVisitor_1.createStackedVisitor((s, stack) => {
125
+ const visitor = (0, stackedVisitor_1.createStackedVisitor)((s, stack) => {
88
126
  const d = stack.length;
89
127
  actual.push(`${s.constructor.name}:${d}`);
90
128
  });
91
129
  const walker = functionsWalker(visitor);
92
130
  program.plugins.add({
93
131
  name: 'walker',
94
- afterFileParse: (event) => walker(event.file)
132
+ afterProvideFile: event => walker(event.files[0])
95
133
  });
96
134
  program.setFile('source/main.brs', PRINTS_SRC);
97
- chai_1.expect(actual).to.deep.equal([
135
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
98
136
  'Block:0',
99
137
  'PrintStatement:1',
100
138
  'PrintStatement:1',
@@ -127,10 +165,10 @@ describe('astUtils visitors', () => {
127
165
  const walker = functionsWalker(s => actual.push(s.constructor.name), cancel.token);
128
166
  program.plugins.add({
129
167
  name: 'walker',
130
- afterFileParse: (event) => walker(event.file)
168
+ afterProvideFile: event => walker(event.files[0])
131
169
  });
132
- program.setFile('source/file.brs', PRINTS_SRC);
133
- chai_1.expect(actual).to.deep.equal([
170
+ program.setFile('source/main.brs', PRINTS_SRC);
171
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
134
172
  'Block',
135
173
  'PrintStatement',
136
174
  'PrintStatement',
@@ -163,7 +201,7 @@ describe('astUtils visitors', () => {
163
201
  let count = 0;
164
202
  const walker = functionsWalker(s => {
165
203
  actual.push(s.constructor.name);
166
- if (reflection_1.isPrintStatement(s)) {
204
+ if ((0, reflection_1.isPrintStatement)(s)) {
167
205
  if (++count === 4) {
168
206
  cancel.cancel();
169
207
  }
@@ -171,12 +209,10 @@ describe('astUtils visitors', () => {
171
209
  }, cancel.token);
172
210
  program.plugins.add({
173
211
  name: 'walker',
174
- afterFileParse: (event) => {
175
- walker(event.file);
176
- }
212
+ afterProvideFile: event => walker(event.files[0])
177
213
  });
178
- program.setFile('source/file.brs', PRINTS_SRC);
179
- chai_1.expect(actual).to.deep.equal([
214
+ program.setFile('source/main.brs', PRINTS_SRC);
215
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
180
216
  'Block',
181
217
  'PrintStatement',
182
218
  'PrintStatement',
@@ -195,46 +231,74 @@ describe('astUtils visitors', () => {
195
231
  it('Maps statements to individual handlers', () => {
196
232
  const printHandler = sinon.spy();
197
233
  const blockHandler = sinon.spy();
198
- const visitor = visitors_1.createVisitor({
234
+ const visitor = (0, visitors_1.createVisitor)({
199
235
  PrintStatement: printHandler,
200
236
  Block: blockHandler
201
237
  });
202
238
  const printStatement = new Statement_1.PrintStatement({
203
- print: creators_1.createToken(lexer_1.TokenKind.Print)
204
- }, []);
205
- const blockStatement = new Statement_1.Block([], vscode_languageserver_1.Range.create(0, 0, 0, 0));
239
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
240
+ expressions: []
241
+ });
242
+ const blockStatement = new Statement_1.Block({ statements: [] });
206
243
  visitor(printStatement, undefined);
207
244
  visitor(blockStatement, undefined);
208
- chai_1.expect(printHandler.callCount).to.equal(1);
209
- chai_1.expect(printHandler.calledWith(printStatement)).to.be.true;
210
- chai_1.expect(blockHandler.callCount).to.equal(1);
211
- chai_1.expect(blockHandler.calledWith(blockStatement)).to.be.true;
245
+ (0, chai_config_spec_1.expect)(printHandler.callCount).to.equal(1);
246
+ (0, chai_config_spec_1.expect)(printHandler.calledWith(printStatement)).to.be.true;
247
+ (0, chai_config_spec_1.expect)(blockHandler.callCount).to.equal(1);
248
+ (0, chai_config_spec_1.expect)(blockHandler.calledWith(blockStatement)).to.be.true;
212
249
  });
213
250
  });
214
251
  describe('Statement editor', () => {
215
252
  it('allows replacing statements', () => {
216
253
  const printStatement1 = new Statement_1.PrintStatement({
217
- print: creators_1.createToken(lexer_1.TokenKind.Print)
218
- }, []);
254
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
255
+ expressions: []
256
+ });
219
257
  const printStatement2 = new Statement_1.PrintStatement({
220
- print: creators_1.createToken(lexer_1.TokenKind.Print)
221
- }, []);
222
- const block = new Statement_1.Block([
223
- printStatement1,
224
- new Statement_1.ReturnStatement({ return: creators_1.createToken(lexer_1.TokenKind.Return) })
225
- ], vscode_languageserver_1.Range.create(0, 0, 0, 0));
226
- const visitor = visitors_1.createVisitor({
258
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
259
+ expressions: []
260
+ });
261
+ const block = new Statement_1.Block({
262
+ statements: [
263
+ printStatement1,
264
+ new Statement_1.ReturnStatement({ return: (0, creators_1.createToken)(TokenKind_1.TokenKind.Return) })
265
+ ]
266
+ });
267
+ const visitor = (0, visitors_1.createVisitor)({
227
268
  PrintStatement: () => printStatement2
228
269
  });
229
- visitors_1.walkStatements(block, visitor);
230
- chai_1.expect(block.statements[0]).to.equal(printStatement2);
270
+ (0, visitors_1.walkStatements)(block, visitor);
271
+ (0, chai_config_spec_1.expect)(block.statements[0]).to.equal(printStatement2);
272
+ });
273
+ it('uses the Editor for replacement when provided', () => {
274
+ const editor = new Editor_1.Editor();
275
+ const printStatement1 = new Statement_1.PrintStatement({
276
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
277
+ expressions: []
278
+ });
279
+ const printStatement2 = new Statement_1.PrintStatement({
280
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
281
+ expressions: []
282
+ });
283
+ const block = new Statement_1.Block({
284
+ statements: [printStatement1]
285
+ });
286
+ block.walk((0, visitors_1.createVisitor)({
287
+ PrintStatement: () => printStatement2
288
+ }), {
289
+ walkMode: visitors_1.WalkMode.visitAll,
290
+ editor: editor
291
+ });
292
+ (0, chai_config_spec_1.expect)(block.statements[0]).to.equal(printStatement2);
293
+ editor.undoAll();
294
+ (0, chai_config_spec_1.expect)(block.statements[0]).to.equal(printStatement1);
231
295
  });
232
296
  });
233
297
  describe('Expressions', () => {
234
298
  it('Walks through all expressions', () => {
235
299
  const actual = [];
236
300
  let curr;
237
- const statementVisitor = stackedVisitor_1.createStackedVisitor((statement, stack) => {
301
+ const statementVisitor = (0, stackedVisitor_1.createStackedVisitor)((statement, stack) => {
238
302
  curr = { statement: statement, depth: stack.length };
239
303
  });
240
304
  function expressionVisitor(expression, _) {
@@ -249,12 +313,10 @@ describe('astUtils visitors', () => {
249
313
  });
250
314
  program.plugins.add({
251
315
  name: 'walker',
252
- afterFileParse: (event) => walker(event.file)
316
+ afterProvideFile: (event) => walker(event.files[0])
253
317
  });
254
- program.setFile('source/file.brs', EXPRESSIONS_SRC);
255
- chai_1.expect(actual).to.deep.equal([
256
- //The comment statement is weird because it can't be both a statement and expression, but is treated that way. Just ignore it for now until we refactor comments.
257
- //'CommentStatement:1:CommentStatement', // '<comment>
318
+ program.setFile('source/main.brs', EXPRESSIONS_SRC);
319
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
258
320
  'PrintStatement:1:LiteralExpression',
259
321
  'PrintStatement:1:LiteralExpression',
260
322
  'PrintStatement:1:TemplateStringExpression',
@@ -308,8 +370,102 @@ describe('astUtils visitors', () => {
308
370
  walkMode: walkMode
309
371
  });
310
372
  index = 1;
311
- chai_1.expect(items.map(x => `${x.constructor.name}:${x._testId}`)).to.eql(expectedConstructors.map(x => `${x}:${index++}`));
373
+ (0, chai_config_spec_1.expect)(items.map(x => `${x.constructor.name}:${x._testId}`)).to.eql(expectedConstructors.map(x => `${x}:${index++}`));
312
374
  }
375
+ it('links every ast node to its parent when walked', () => {
376
+ const { ast } = program.setFile('source/main.bs', `
377
+ library "v30/bslCore.brs"
378
+ import "source/main.bs"
379
+ namespace alpha
380
+ namespace beta
381
+ sub charlie()
382
+ delta = 1
383
+ delta++
384
+ delta = sub()
385
+ 'do some printing
386
+ print "hello"
387
+ end sub
388
+ delta()
389
+ for i = 0 to 10 step 1
390
+ exit for
391
+ end for
392
+ while false
393
+ exit while
394
+ end while
395
+ if true or false then
396
+ print 1.2
397
+ else
398
+ print 123123123123
399
+ end if
400
+ dim arr[1, 2]
401
+ goto theLabel
402
+ theLabel:
403
+ return false
404
+ end
405
+ stop
406
+ for each item in [1, 2, 3]
407
+ continue for
408
+ end for
409
+ obj = { name: "bob"}
410
+ obj.name = obj.name
411
+ obj["name"] = obj["name"]
412
+ obj.name = obj@firstName
413
+ print (true or false)
414
+ print \`true\${false}\\n\`
415
+ print not true
416
+ print FUNCTION_NAME
417
+ print new Person()
418
+ print tag\`stuff\${1}\`
419
+ print true ? true : false
420
+ print true ?? false
421
+ print /search stuff/g
422
+ try
423
+ obj.bob = "carl"
424
+ throw "e"
425
+ catch e
426
+ obj["name"] = "dale"
427
+ print e
428
+ end try
429
+ obj@.doCallfunc(1, 2)
430
+ end sub
431
+ end namespace
432
+ end namespace
433
+ @SomeAnnotation(1, "two")
434
+ interface IPerson
435
+ name as string
436
+ function doSomething() as string
437
+ end interface
438
+ class Person
439
+ name as string = "bob"
440
+ function doSomething(value = true) as string
441
+ end function
442
+ end class
443
+ enum Direction
444
+ up = "up"
445
+ end enum
446
+ enum Logical
447
+ yes = 1
448
+ no = 0
449
+ end enum
450
+ const CONST_VALUE = 1.2
451
+ `);
452
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
453
+ const nodes = [];
454
+ //get every expression and statement in the file
455
+ ast.walk((node) => {
456
+ nodes.push(node);
457
+ }, { walkMode: visitors_1.WalkMode.visitAllRecursive });
458
+ for (let i = 0; i < nodes.length; i++) {
459
+ const node = nodes[i];
460
+ //find the top-most ast node
461
+ let top = node;
462
+ while (top.parent) {
463
+ top = top.parent;
464
+ }
465
+ //should be the same instance. If it doesn't then something is wrong with the .parent linking
466
+ (0, chai_config_spec_1.expect)(top === ast || node === ast, `Node ${node.constructor.name} (index ${i}) has broken parent link`).to.be.true;
467
+ }
468
+ });
313
469
  it('Walks through all expressions until cancelled', () => {
314
470
  const file = program.setFile('source/main.bs', `
315
471
  sub logger(message = "nil" as string)
@@ -331,7 +487,7 @@ describe('astUtils visitors', () => {
331
487
  walkMode: visitors_1.WalkMode.visitAllRecursive,
332
488
  cancel: cancel.token
333
489
  });
334
- chai_1.expect(count).to.equal(stopIndex);
490
+ (0, chai_config_spec_1.expect)(count).to.equal(stopIndex);
335
491
  });
336
492
  it('walks if statement', () => {
337
493
  testWalk(`
@@ -492,7 +648,6 @@ describe('astUtils visitors', () => {
492
648
  end namespace
493
649
  `, [
494
650
  'NamespaceStatement',
495
- 'NamespacedVariableNameExpression',
496
651
  'DottedGetExpression',
497
652
  'VariableExpression'
498
653
  ]);
@@ -646,7 +801,6 @@ describe('astUtils visitors', () => {
646
801
  'Block',
647
802
  'AssignmentStatement',
648
803
  'AALiteralExpression',
649
- 'CommentStatement',
650
804
  'AAMemberExpression',
651
805
  'LiteralExpression'
652
806
  ]);
@@ -718,8 +872,7 @@ describe('astUtils visitors', () => {
718
872
  'LiteralExpression',
719
873
  //else
720
874
  'Block',
721
- 'ReturnStatement',
722
- 'CommentStatement'
875
+ 'ReturnStatement'
723
876
  ]);
724
877
  });
725
878
  it('walks TaggedTemplateStringExpression', () => {
@@ -769,7 +922,6 @@ describe('astUtils visitors', () => {
769
922
  'AssignmentStatement',
770
923
  'NewExpression',
771
924
  'CallExpression',
772
- 'NamespacedVariableNameExpression',
773
925
  'VariableExpression'
774
926
  ]);
775
927
  });
@@ -799,10 +951,14 @@ describe('astUtils visitors', () => {
799
951
  end class
800
952
  `, [
801
953
  'ClassStatement',
802
- 'ClassFieldStatement',
803
- 'ClassFieldStatement',
954
+ 'FieldStatement',
955
+ 'TypeExpression',
956
+ 'VariableExpression',
957
+ 'FieldStatement',
958
+ 'TypeExpression',
959
+ 'VariableExpression',
804
960
  'LiteralExpression',
805
- 'ClassMethodStatement',
961
+ 'MethodStatement',
806
962
  'FunctionExpression',
807
963
  'Block',
808
964
  'ReturnStatement',
@@ -849,6 +1005,262 @@ describe('astUtils visitors', () => {
849
1005
  'LiteralExpression'
850
1006
  ], visitors_1.WalkMode.visitExpressionsRecursive);
851
1007
  });
1008
+ it('provides owner and key', () => {
1009
+ const items = [];
1010
+ const { ast } = Parser_1.Parser.parse(`
1011
+ sub main()
1012
+ log = sub(message)
1013
+ print "hello " + message
1014
+ end sub
1015
+ log("hello" + " world")
1016
+ end sub
1017
+ `);
1018
+ ast.walk((astNode, parent, owner, key) => {
1019
+ items.push(astNode);
1020
+ (0, chai_config_spec_1.expect)(owner[key]).to.equal(astNode);
1021
+ }, {
1022
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1023
+ });
1024
+ (0, chai_config_spec_1.expect)(items).to.be.length(17);
1025
+ });
1026
+ it('can be used to delete statements', () => {
1027
+ const { ast } = Parser_1.Parser.parse(`
1028
+ sub main()
1029
+ print 1
1030
+ print 2
1031
+ print 3
1032
+ end sub
1033
+ `);
1034
+ let callCount = 0;
1035
+ ast.walk((astNode, parent, owner, key) => {
1036
+ if ((0, reflection_1.isPrintStatement)(astNode)) {
1037
+ callCount++;
1038
+ //delete the print statement (we know owner is an array based on this specific test)
1039
+ owner.splice(key, 1);
1040
+ }
1041
+ }, {
1042
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1043
+ });
1044
+ //the visitor should have been called for every statement
1045
+ (0, chai_config_spec_1.expect)(callCount).to.eql(3);
1046
+ (0, chai_config_spec_1.expect)(ast.statements[0].func.body.statements).to.be.lengthOf(0);
1047
+ });
1048
+ it('can be used to insert statements', () => {
1049
+ const { ast } = Parser_1.Parser.parse(`
1050
+ sub main()
1051
+ print 1
1052
+ print 2
1053
+ print 3
1054
+ end sub
1055
+ `);
1056
+ let printStatementCount = 0;
1057
+ let callExpressionCount = 0;
1058
+ const calls = [];
1059
+ ast.walk((0, visitors_1.createVisitor)({
1060
+ PrintStatement: (astNode, parent, owner, key) => {
1061
+ printStatementCount++;
1062
+ //add another expression to the list every time. This should result in 1 the first time, 2 the second, 3 the third.
1063
+ calls.push(new Statement_1.ExpressionStatement({
1064
+ expression: (0, creators_1.createCall)((0, creators_1.createVariableExpression)('doSomethingBeforePrint'))
1065
+ }));
1066
+ owner.splice(key, 0, ...calls);
1067
+ },
1068
+ CallExpression: () => {
1069
+ callExpressionCount++;
1070
+ }
1071
+ }), {
1072
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1073
+ });
1074
+ //the visitor should have been called for every statement
1075
+ (0, chai_config_spec_1.expect)(printStatementCount).to.eql(3);
1076
+ (0, chai_config_spec_1.expect)(callExpressionCount).to.eql(0);
1077
+ (0, chai_config_spec_1.expect)(ast.statements[0].func.body.statements).to.be.lengthOf(9);
1078
+ });
1079
+ it('skips children when requested', () => {
1080
+ const file = program.setFile('source/main.bs', `
1081
+ sub test()
1082
+ print 1 + 1
1083
+ print "hello"
1084
+ end sub
1085
+
1086
+ sub test2()
1087
+ i = 2
1088
+ while i > 0
1089
+ print createObject("roDateTime").ToISOString()
1090
+ i--
1091
+ end while
1092
+ end sub
1093
+ `);
1094
+ const actual = new Array();
1095
+ program.validate();
1096
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
1097
+ // do not walk into print statements
1098
+ const skipper = new visitors_1.ChildrenSkipper();
1099
+ file.ast.walk((node) => {
1100
+ actual.push(node.kind);
1101
+ if ((0, reflection_1.isPrintStatement)(node)) {
1102
+ skipper.skip();
1103
+ }
1104
+ }, {
1105
+ walkMode: visitors_1.WalkMode.visitAllRecursive,
1106
+ skipChildren: skipper
1107
+ });
1108
+ // Does not walk into print statements
1109
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
1110
+ 'FunctionStatement',
1111
+ 'FunctionExpression',
1112
+ 'Block',
1113
+ 'PrintStatement',
1114
+ 'PrintStatement',
1115
+ 'FunctionStatement',
1116
+ 'FunctionExpression',
1117
+ 'Block',
1118
+ 'AssignmentStatement',
1119
+ 'LiteralExpression',
1120
+ 'WhileStatement',
1121
+ 'BinaryExpression',
1122
+ 'VariableExpression',
1123
+ 'LiteralExpression',
1124
+ 'Block',
1125
+ 'PrintStatement',
1126
+ 'IncrementStatement',
1127
+ 'VariableExpression'
1128
+ ]);
1129
+ });
1130
+ it('can get end trivia of any kind of block type node', () => {
1131
+ const file = program.setFile('source/main.bs', `
1132
+ sub test()
1133
+ x = {
1134
+ val: [123],
1135
+ count: 4
1136
+ ' end comment in literal AA 1
1137
+ }
1138
+ for each y in x.val
1139
+ print y
1140
+ ' end comment in for 2
1141
+ end for
1142
+
1143
+ if x.count > 2
1144
+ print "hi"
1145
+ ' end comment in if 3
1146
+ end if
1147
+
1148
+ while x.count > 3
1149
+ x.count--
1150
+ ' end comment in while 4
1151
+ end while
1152
+
1153
+ try
1154
+ print "in try"
1155
+ catch e
1156
+ ' end comment in try 5
1157
+ end try
1158
+
1159
+ array = [
1160
+ 1,
1161
+ 2,
1162
+ ' end comment in array 6
1163
+ ]
1164
+
1165
+ ' end comment in function 7
1166
+ end sub
1167
+ `);
1168
+ const comments = [];
1169
+ program.validate();
1170
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
1171
+ file.ast.walk((0, visitors_1.createVisitor)({
1172
+ AstNode: (node) => {
1173
+ const endNodeComments = node.endTrivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment);
1174
+ comments.push(...endNodeComments);
1175
+ }
1176
+ }), {
1177
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1178
+ });
1179
+ (0, chai_config_spec_1.expect)(comments.length).to.eql(7);
1180
+ });
1181
+ it('can set bsConst in walk', () => {
1182
+ const { ast } = program.setFile('source/main.brs', `
1183
+ #if DEBUG
1184
+ sub main()
1185
+ end sub
1186
+ #end if
1187
+ `);
1188
+ const bsConsts = new Map();
1189
+ let foundMainFunc = false;
1190
+ const visitor = (0, visitors_1.createVisitor)({
1191
+ FunctionStatement: (func) => {
1192
+ foundMainFunc || (foundMainFunc = func.getName(Parser_1.ParseMode.BrighterScript) === 'main');
1193
+ }
1194
+ });
1195
+ ast.walk(visitor, {
1196
+ walkMode: visitors_1.WalkMode.visitStatements,
1197
+ bsConsts: bsConsts
1198
+ });
1199
+ // did not walk false block
1200
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.false;
1201
+ bsConsts.set('debug', true);
1202
+ ast.walk(visitor, {
1203
+ walkMode: visitors_1.WalkMode.visitStatements,
1204
+ bsConsts: bsConsts
1205
+ });
1206
+ // debug is true, so it did walk block
1207
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.true;
1208
+ });
1209
+ it('can walk false cc blocks', () => {
1210
+ const { ast } = program.setFile('source/main.brs', `
1211
+ #if false
1212
+ sub main()
1213
+ end sub
1214
+ #end if
1215
+ `);
1216
+ const bsConsts = new Map();
1217
+ let foundMainFunc = false;
1218
+ const visitor = (0, visitors_1.createVisitor)({
1219
+ FunctionStatement: (func) => {
1220
+ foundMainFunc || (foundMainFunc = func.getName(Parser_1.ParseMode.BrighterScript) === 'main');
1221
+ }
1222
+ });
1223
+ ast.walk(visitor, {
1224
+ walkMode: visitors_1.WalkMode.visitStatements,
1225
+ bsConsts: bsConsts
1226
+ });
1227
+ // did not walk false block
1228
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.false;
1229
+ ast.walk(visitor, {
1230
+ // eslint-disable-next-line no-bitwise
1231
+ walkMode: visitors_1.WalkMode.visitStatements | visitors_1.InternalWalkMode.visitFalseConditionalCompilationBlocks,
1232
+ bsConsts: bsConsts
1233
+ });
1234
+ // did walk false block
1235
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.true;
1236
+ });
1237
+ it('will correct walk `not condition` cc blocks', () => {
1238
+ const { ast } = program.setFile('source/main.brs', `
1239
+ #const DEBUG = false
1240
+ #if not DEBUG
1241
+ sub notDebug()
1242
+ end sub
1243
+ #end if
1244
+ #if not false
1245
+ sub notFalse()
1246
+ end sub
1247
+ #end if
1248
+ `);
1249
+ const bsConsts = new Map();
1250
+ let functionsFound = new Set();
1251
+ const visitor = (0, visitors_1.createVisitor)({
1252
+ FunctionStatement: (func) => {
1253
+ functionsFound.add(func.getName(Parser_1.ParseMode.BrighterScript));
1254
+ }
1255
+ });
1256
+ ast.walk(visitor, {
1257
+ walkMode: visitors_1.WalkMode.visitStatements,
1258
+ bsConsts: bsConsts
1259
+ });
1260
+ // did walk 'not' block
1261
+ (0, chai_config_spec_1.expect)(functionsFound.has('notDebug')).to.be.true;
1262
+ (0, chai_config_spec_1.expect)(functionsFound.has('notFalse')).to.be.true;
1263
+ });
852
1264
  });
853
1265
  });
854
1266
  //# sourceMappingURL=visitors.spec.js.map