brighterscript 1.0.0-alpha.5 → 1.0.0-alpha.50

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 (715) hide show
  1. package/README.md +76 -138
  2. package/bsconfig.schema.json +121 -5
  3. package/dist/ActionPipeline.d.ts +10 -0
  4. package/dist/ActionPipeline.js +40 -0
  5. package/dist/ActionPipeline.js.map +1 -0
  6. package/dist/AstValidationSegmenter.d.ts +45 -0
  7. package/dist/AstValidationSegmenter.js +322 -0
  8. package/dist/AstValidationSegmenter.js.map +1 -0
  9. package/dist/BsConfig.d.ts +72 -39
  10. package/dist/BusyStatusTracker.d.ts +61 -0
  11. package/dist/BusyStatusTracker.js +148 -0
  12. package/dist/BusyStatusTracker.js.map +1 -0
  13. package/dist/Cache.d.ts +3 -8
  14. package/dist/Cache.js +9 -14
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +12 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +7 -6
  23. package/dist/CommentFlagProcessor.js +11 -8
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +642 -0
  27. package/dist/CrossScopeValidator.js.map +1 -0
  28. package/dist/DependencyGraph.d.ts +8 -3
  29. package/dist/DependencyGraph.js +49 -16
  30. package/dist/DependencyGraph.js.map +1 -1
  31. package/dist/DiagnosticCollection.d.ts +21 -5
  32. package/dist/DiagnosticCollection.js +77 -24
  33. package/dist/DiagnosticCollection.js.map +1 -1
  34. package/dist/DiagnosticFilterer.d.ts +27 -6
  35. package/dist/DiagnosticFilterer.js +273 -60
  36. package/dist/DiagnosticFilterer.js.map +1 -1
  37. package/dist/DiagnosticManager.d.ts +82 -0
  38. package/dist/DiagnosticManager.js +406 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +558 -196
  41. package/dist/DiagnosticMessages.js +870 -340
  42. package/dist/DiagnosticMessages.js.map +1 -1
  43. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  44. package/dist/DiagnosticSeverityAdjuster.js +45 -0
  45. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  46. package/dist/FunctionScope.d.ts +28 -0
  47. package/dist/FunctionScope.js +52 -0
  48. package/dist/FunctionScope.js.map +1 -0
  49. package/dist/KeyedThrottler.d.ts +3 -3
  50. package/dist/KeyedThrottler.js +3 -3
  51. package/dist/KeyedThrottler.js.map +1 -1
  52. package/dist/LanguageServer.d.ts +100 -105
  53. package/dist/LanguageServer.js +444 -745
  54. package/dist/LanguageServer.js.map +1 -1
  55. package/dist/Logger.d.ts +17 -13
  56. package/dist/Logger.js +64 -34
  57. package/dist/Logger.js.map +1 -1
  58. package/dist/PluginInterface.d.ts +32 -10
  59. package/dist/PluginInterface.js +117 -7
  60. package/dist/PluginInterface.js.map +1 -1
  61. package/dist/Program.d.ts +241 -98
  62. package/dist/Program.js +1432 -717
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +47 -23
  65. package/dist/ProgramBuilder.js +224 -178
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +149 -109
  68. package/dist/Scope.js +557 -550
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/SemanticTokenUtils.js +5 -1
  71. package/dist/SemanticTokenUtils.js.map +1 -1
  72. package/dist/Stopwatch.d.ts +4 -0
  73. package/dist/Stopwatch.js +8 -1
  74. package/dist/Stopwatch.js.map +1 -1
  75. package/dist/SymbolTable.d.ts +136 -24
  76. package/dist/SymbolTable.js +565 -64
  77. package/dist/SymbolTable.js.map +1 -1
  78. package/dist/SymbolTypeFlag.d.ts +9 -0
  79. package/dist/SymbolTypeFlag.js +14 -0
  80. package/dist/SymbolTypeFlag.js.map +1 -0
  81. package/dist/Throttler.d.ts +12 -0
  82. package/dist/Throttler.js +39 -0
  83. package/dist/Throttler.js.map +1 -1
  84. package/dist/Watcher.d.ts +0 -3
  85. package/dist/Watcher.js +0 -3
  86. package/dist/Watcher.js.map +1 -1
  87. package/dist/XmlScope.d.ts +5 -15
  88. package/dist/XmlScope.js +34 -90
  89. package/dist/XmlScope.js.map +1 -1
  90. package/dist/astUtils/CachedLookups.d.ts +50 -0
  91. package/dist/astUtils/CachedLookups.js +334 -0
  92. package/dist/astUtils/CachedLookups.js.map +1 -0
  93. package/dist/astUtils/CachedLookups.spec.js +39 -0
  94. package/dist/astUtils/CachedLookups.spec.js.map +1 -0
  95. package/dist/astUtils/Editor.d.ts +69 -0
  96. package/dist/astUtils/Editor.js +245 -0
  97. package/dist/astUtils/Editor.js.map +1 -0
  98. package/dist/astUtils/Editor.spec.js +258 -0
  99. package/dist/astUtils/Editor.spec.js.map +1 -0
  100. package/dist/astUtils/creators.d.ts +54 -19
  101. package/dist/astUtils/creators.js +242 -42
  102. package/dist/astUtils/creators.js.map +1 -1
  103. package/dist/astUtils/creators.spec.js +5 -5
  104. package/dist/astUtils/creators.spec.js.map +1 -1
  105. package/dist/astUtils/reflection.d.ts +196 -85
  106. package/dist/astUtils/reflection.js +497 -144
  107. package/dist/astUtils/reflection.js.map +1 -1
  108. package/dist/astUtils/reflection.spec.js +267 -167
  109. package/dist/astUtils/reflection.spec.js.map +1 -1
  110. package/dist/astUtils/stackedVisitor.js.map +1 -1
  111. package/dist/astUtils/stackedVisitor.spec.js +14 -14
  112. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  113. package/dist/astUtils/visitors.d.ts +116 -53
  114. package/dist/astUtils/visitors.js +95 -15
  115. package/dist/astUtils/visitors.js.map +1 -1
  116. package/dist/astUtils/visitors.spec.js +629 -51
  117. package/dist/astUtils/visitors.spec.js.map +1 -1
  118. package/dist/astUtils/xml.d.ts +9 -8
  119. package/dist/astUtils/xml.js +12 -7
  120. package/dist/astUtils/xml.js.map +1 -1
  121. package/dist/bscPlugin/BscPlugin.d.ts +24 -4
  122. package/dist/bscPlugin/BscPlugin.js +88 -4
  123. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  124. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  125. package/dist/bscPlugin/CallExpressionInfo.js +143 -0
  126. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  127. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  128. package/dist/bscPlugin/FileWriter.js +24 -0
  129. package/dist/bscPlugin/FileWriter.js.map +1 -0
  130. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  131. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  132. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  133. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +6 -5
  134. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +173 -27
  135. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  136. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +138 -21
  137. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  138. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  139. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  140. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  141. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +2512 -0
  142. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  143. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  144. package/dist/bscPlugin/definition/DefinitionProvider.js +212 -0
  145. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  146. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  147. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  148. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  149. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  150. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  151. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  152. package/dist/bscPlugin/hover/HoverProcessor.js +230 -0
  153. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  154. package/dist/bscPlugin/hover/HoverProcessor.spec.js +991 -0
  155. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  156. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  157. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  158. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  159. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
  160. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  161. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  162. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  163. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  164. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  165. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  166. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +564 -0
  167. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  168. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  169. package/dist/bscPlugin/serialize/BslibInjector.spec.js +33 -0
  170. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  171. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  172. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  173. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  174. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  175. package/dist/bscPlugin/serialize/FileSerializer.js +75 -0
  176. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  177. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  178. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  179. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  180. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +1 -0
  181. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +291 -0
  182. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  183. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  184. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  185. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  186. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +1 -0
  187. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  188. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  189. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  190. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  191. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  192. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +27 -0
  193. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +418 -0
  194. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  195. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  196. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +75 -0
  197. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  198. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  199. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  200. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  201. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  202. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  203. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  204. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +37 -0
  205. package/dist/bscPlugin/validation/BrsFileValidator.js +638 -0
  206. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  207. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  208. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1517 -0
  209. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  210. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  211. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  212. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  213. package/dist/bscPlugin/validation/ScopeValidator.d.ts +141 -0
  214. package/dist/bscPlugin/validation/ScopeValidator.js +1323 -0
  215. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  216. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  217. package/dist/bscPlugin/validation/ScopeValidator.spec.js +6135 -0
  218. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  219. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  220. package/dist/bscPlugin/validation/XmlFileValidator.js +36 -0
  221. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  222. package/dist/cli.js +126 -27
  223. package/dist/cli.js.map +1 -1
  224. package/dist/common/Sequencer.d.ts +53 -0
  225. package/dist/common/Sequencer.js +233 -0
  226. package/dist/common/Sequencer.js.map +1 -0
  227. package/dist/common/Sequencer.spec.d.ts +1 -0
  228. package/dist/common/Sequencer.spec.js +75 -0
  229. package/dist/common/Sequencer.spec.js.map +1 -0
  230. package/dist/deferred.d.ts +5 -3
  231. package/dist/deferred.js +10 -0
  232. package/dist/deferred.js.map +1 -1
  233. package/dist/diagnosticUtils.d.ts +10 -3
  234. package/dist/diagnosticUtils.js +64 -25
  235. package/dist/diagnosticUtils.js.map +1 -1
  236. package/dist/examples/plugins/removePrint.d.ts +2 -2
  237. package/dist/examples/plugins/removePrint.js +8 -12
  238. package/dist/examples/plugins/removePrint.js.map +1 -1
  239. package/dist/files/AssetFile.d.ts +24 -0
  240. package/dist/files/AssetFile.js +25 -0
  241. package/dist/files/AssetFile.js.map +1 -0
  242. package/dist/files/BrsFile.Class.spec.js +1213 -259
  243. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  244. package/dist/files/BrsFile.d.ts +145 -87
  245. package/dist/files/BrsFile.js +836 -934
  246. package/dist/files/BrsFile.js.map +1 -1
  247. package/dist/files/BrsFile.spec.js +4226 -902
  248. package/dist/files/BrsFile.spec.js.map +1 -1
  249. package/dist/files/BscFile.d.ts +102 -0
  250. package/dist/files/BscFile.js +15 -0
  251. package/dist/files/BscFile.js.map +1 -0
  252. package/dist/files/Factory.d.ts +25 -0
  253. package/dist/files/Factory.js +22 -0
  254. package/dist/files/Factory.js.map +1 -0
  255. package/dist/files/LazyFileData.d.ts +21 -0
  256. package/dist/files/LazyFileData.js +54 -0
  257. package/dist/files/LazyFileData.js.map +1 -0
  258. package/dist/files/LazyFileData.spec.d.ts +1 -0
  259. package/dist/files/LazyFileData.spec.js +27 -0
  260. package/dist/files/LazyFileData.spec.js.map +1 -0
  261. package/dist/files/XmlFile.d.ts +80 -41
  262. package/dist/files/XmlFile.js +161 -137
  263. package/dist/files/XmlFile.js.map +1 -1
  264. package/dist/files/XmlFile.spec.js +444 -336
  265. package/dist/files/XmlFile.spec.js.map +1 -1
  266. package/dist/files/tests/imports.spec.js +62 -52
  267. package/dist/files/tests/imports.spec.js.map +1 -1
  268. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  269. package/dist/files/tests/optionalChaning.spec.js +152 -0
  270. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  271. package/dist/globalCallables.d.ts +3 -1
  272. package/dist/globalCallables.js +424 -184
  273. package/dist/globalCallables.js.map +1 -1
  274. package/dist/index.d.ts +32 -4
  275. package/dist/index.js +54 -7
  276. package/dist/index.js.map +1 -1
  277. package/dist/interfaces.d.ts +942 -125
  278. package/dist/interfaces.js +21 -0
  279. package/dist/interfaces.js.map +1 -1
  280. package/dist/lexer/Character.spec.js +5 -5
  281. package/dist/lexer/Character.spec.js.map +1 -1
  282. package/dist/lexer/Lexer.d.ts +51 -12
  283. package/dist/lexer/Lexer.js +215 -65
  284. package/dist/lexer/Lexer.js.map +1 -1
  285. package/dist/lexer/Lexer.spec.js +812 -568
  286. package/dist/lexer/Lexer.spec.js.map +1 -1
  287. package/dist/lexer/Token.d.ts +27 -11
  288. package/dist/lexer/Token.js +10 -2
  289. package/dist/lexer/Token.js.map +1 -1
  290. package/dist/lexer/TokenKind.d.ts +40 -2
  291. package/dist/lexer/TokenKind.js +147 -10
  292. package/dist/lexer/TokenKind.js.map +1 -1
  293. package/dist/logging.d.ts +14 -0
  294. package/dist/logging.js +29 -0
  295. package/dist/logging.js.map +1 -0
  296. package/dist/lsp/ActionQueue.d.ts +35 -0
  297. package/dist/lsp/ActionQueue.js +115 -0
  298. package/dist/lsp/ActionQueue.js.map +1 -0
  299. package/dist/lsp/ActionQueue.spec.d.ts +1 -0
  300. package/dist/lsp/ActionQueue.spec.js +80 -0
  301. package/dist/lsp/ActionQueue.spec.js.map +1 -0
  302. package/dist/lsp/DocumentManager.d.ts +63 -0
  303. package/dist/lsp/DocumentManager.js +122 -0
  304. package/dist/lsp/DocumentManager.js.map +1 -0
  305. package/dist/lsp/DocumentManager.spec.d.ts +1 -0
  306. package/dist/lsp/DocumentManager.spec.js +103 -0
  307. package/dist/lsp/DocumentManager.spec.js.map +1 -0
  308. package/dist/lsp/LspProject.d.ts +239 -0
  309. package/dist/lsp/LspProject.js +3 -0
  310. package/dist/lsp/LspProject.js.map +1 -0
  311. package/dist/lsp/PathFilterer.d.ts +75 -0
  312. package/dist/lsp/PathFilterer.js +196 -0
  313. package/dist/lsp/PathFilterer.js.map +1 -0
  314. package/dist/lsp/PathFilterer.spec.d.ts +1 -0
  315. package/dist/lsp/PathFilterer.spec.js +182 -0
  316. package/dist/lsp/PathFilterer.spec.js.map +1 -0
  317. package/dist/lsp/Project.d.ts +168 -0
  318. package/dist/lsp/Project.js +437 -0
  319. package/dist/lsp/Project.js.map +1 -0
  320. package/dist/lsp/Project.spec.d.ts +1 -0
  321. package/dist/lsp/Project.spec.js +267 -0
  322. package/dist/lsp/Project.spec.js.map +1 -0
  323. package/dist/lsp/ProjectManager.d.ts +242 -0
  324. package/dist/lsp/ProjectManager.js +824 -0
  325. package/dist/lsp/ProjectManager.js.map +1 -0
  326. package/dist/lsp/ProjectManager.spec.d.ts +1 -0
  327. package/dist/lsp/ProjectManager.spec.js +913 -0
  328. package/dist/lsp/ProjectManager.spec.js.map +1 -0
  329. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  330. package/dist/lsp/ReaderWriterManager.js +60 -0
  331. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  332. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  333. package/dist/lsp/worker/MessageHandler.js +138 -0
  334. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  335. package/dist/lsp/worker/MessageHandler.spec.d.ts +1 -0
  336. package/dist/lsp/worker/MessageHandler.spec.js +64 -0
  337. package/dist/lsp/worker/MessageHandler.spec.js.map +1 -0
  338. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  339. package/dist/lsp/worker/WorkerPool.js +78 -0
  340. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  341. package/dist/lsp/worker/WorkerPool.spec.d.ts +1 -0
  342. package/dist/lsp/worker/WorkerPool.spec.js +59 -0
  343. package/dist/lsp/worker/WorkerPool.spec.js.map +1 -0
  344. package/dist/lsp/worker/WorkerThreadProject.d.ts +143 -0
  345. package/dist/lsp/worker/WorkerThreadProject.js +189 -0
  346. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  347. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +2 -0
  348. package/dist/lsp/worker/WorkerThreadProject.spec.js +71 -0
  349. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -0
  350. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  351. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  352. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  353. package/dist/lsp/worker/run.d.ts +1 -0
  354. package/dist/lsp/worker/run.js +14 -0
  355. package/dist/lsp/worker/run.js.map +1 -0
  356. package/dist/parser/AstNode.d.ts +203 -0
  357. package/dist/parser/AstNode.js +303 -0
  358. package/dist/parser/AstNode.js.map +1 -0
  359. package/dist/parser/AstNode.spec.d.ts +1 -0
  360. package/dist/parser/AstNode.spec.js +1455 -0
  361. package/dist/parser/AstNode.spec.js.map +1 -0
  362. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  363. package/dist/parser/BrightScriptDocParser.js +294 -0
  364. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  365. package/dist/parser/BrightScriptDocParser.spec.d.ts +1 -0
  366. package/dist/parser/BrightScriptDocParser.spec.js +310 -0
  367. package/dist/parser/BrightScriptDocParser.spec.js.map +1 -0
  368. package/dist/parser/BrsTranspileState.d.ts +22 -3
  369. package/dist/parser/BrsTranspileState.js +19 -0
  370. package/dist/parser/BrsTranspileState.js.map +1 -1
  371. package/dist/parser/Expression.d.ts +553 -221
  372. package/dist/parser/Expression.js +1414 -505
  373. package/dist/parser/Expression.js.map +1 -1
  374. package/dist/parser/Expression.spec.d.ts +1 -0
  375. package/dist/parser/Expression.spec.js +40 -0
  376. package/dist/parser/Expression.spec.js.map +1 -0
  377. package/dist/parser/Parser.Class.spec.js +255 -125
  378. package/dist/parser/Parser.Class.spec.js.map +1 -1
  379. package/dist/parser/Parser.d.ts +117 -124
  380. package/dist/parser/Parser.js +1669 -982
  381. package/dist/parser/Parser.js.map +1 -1
  382. package/dist/parser/Parser.spec.d.ts +3 -1
  383. package/dist/parser/Parser.spec.js +2111 -525
  384. package/dist/parser/Parser.spec.js.map +1 -1
  385. package/dist/parser/SGParser.d.ts +29 -13
  386. package/dist/parser/SGParser.js +85 -56
  387. package/dist/parser/SGParser.js.map +1 -1
  388. package/dist/parser/SGParser.spec.js +30 -45
  389. package/dist/parser/SGParser.spec.js.map +1 -1
  390. package/dist/parser/SGTypes.d.ts +134 -46
  391. package/dist/parser/SGTypes.js +206 -115
  392. package/dist/parser/SGTypes.js.map +1 -1
  393. package/dist/parser/Statement.d.ts +849 -267
  394. package/dist/parser/Statement.js +2412 -625
  395. package/dist/parser/Statement.js.map +1 -1
  396. package/dist/parser/Statement.spec.js +133 -36
  397. package/dist/parser/Statement.spec.js.map +1 -1
  398. package/dist/parser/TranspileState.d.ts +26 -12
  399. package/dist/parser/TranspileState.js +115 -24
  400. package/dist/parser/TranspileState.js.map +1 -1
  401. package/dist/parser/tests/Parser.spec.d.ts +3 -9
  402. package/dist/parser/tests/Parser.spec.js +7 -13
  403. package/dist/parser/tests/Parser.spec.js.map +1 -1
  404. package/dist/parser/tests/controlFlow/For.spec.js +83 -75
  405. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  406. package/dist/parser/tests/controlFlow/ForEach.spec.js +85 -51
  407. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  408. package/dist/parser/tests/controlFlow/If.spec.js +382 -239
  409. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  410. package/dist/parser/tests/controlFlow/While.spec.js +52 -45
  411. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  412. package/dist/parser/tests/expression/Additive.spec.js +51 -43
  413. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  414. package/dist/parser/tests/expression/ArrayLiterals.spec.js +192 -142
  415. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  416. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +236 -160
  417. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  418. package/dist/parser/tests/expression/Boolean.spec.js +41 -34
  419. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  420. package/dist/parser/tests/expression/Call.spec.js +173 -55
  421. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  422. package/dist/parser/tests/expression/Exponential.spec.js +20 -20
  423. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  424. package/dist/parser/tests/expression/Function.spec.js +291 -282
  425. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  426. package/dist/parser/tests/expression/Indexing.spec.js +193 -110
  427. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  428. package/dist/parser/tests/expression/Multiplicative.spec.js +42 -42
  429. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  430. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +260 -115
  431. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  432. package/dist/parser/tests/expression/PrefixUnary.spec.js +58 -52
  433. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  434. package/dist/parser/tests/expression/Primary.spec.js +76 -60
  435. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  436. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  437. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  438. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  439. package/dist/parser/tests/expression/Relational.spec.js +50 -50
  440. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  441. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +31 -31
  442. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  443. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +281 -94
  444. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  445. package/dist/parser/tests/expression/TernaryExpression.spec.js +747 -192
  446. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  447. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  448. package/dist/parser/tests/expression/TypeExpression.spec.js +126 -0
  449. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  450. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  451. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  452. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  453. package/dist/parser/tests/statement/AssignmentOperators.spec.js +44 -44
  454. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  455. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  456. package/dist/parser/tests/statement/ConstStatement.spec.js +500 -0
  457. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  458. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  459. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  460. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  461. package/dist/parser/tests/statement/Declaration.spec.js +61 -55
  462. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  463. package/dist/parser/tests/statement/Dim.spec.js +29 -22
  464. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  465. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  466. package/dist/parser/tests/statement/Enum.spec.js +744 -0
  467. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  468. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  469. package/dist/parser/tests/statement/For.spec.js +45 -0
  470. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  471. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  472. package/dist/parser/tests/statement/ForEach.spec.js +36 -0
  473. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  474. package/dist/parser/tests/statement/Function.spec.js +226 -215
  475. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  476. package/dist/parser/tests/statement/Goto.spec.js +16 -15
  477. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  478. package/dist/parser/tests/statement/Increment.spec.js +64 -61
  479. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  480. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  481. package/dist/parser/tests/statement/InterfaceStatement.spec.js +110 -0
  482. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  483. package/dist/parser/tests/statement/LibraryStatement.spec.js +22 -22
  484. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  485. package/dist/parser/tests/statement/Misc.spec.js +127 -168
  486. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  487. package/dist/parser/tests/statement/PrintStatement.spec.js +133 -114
  488. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  489. package/dist/parser/tests/statement/ReturnStatement.spec.js +57 -54
  490. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  491. package/dist/parser/tests/statement/Set.spec.js +131 -117
  492. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  493. package/dist/parser/tests/statement/Stop.spec.js +14 -13
  494. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  495. package/dist/parser/tests/statement/Throw.spec.js +11 -8
  496. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  497. package/dist/parser/tests/statement/TryCatch.spec.js +26 -15
  498. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  499. package/dist/preprocessor/Manifest.d.ts +6 -6
  500. package/dist/preprocessor/Manifest.js +17 -38
  501. package/dist/preprocessor/Manifest.js.map +1 -1
  502. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  503. package/dist/preprocessor/Manifest.spec.js +78 -103
  504. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  505. package/dist/roku-types/data.json +20347 -0
  506. package/dist/roku-types/index.d.ts +5726 -0
  507. package/dist/roku-types/index.js +11 -0
  508. package/dist/roku-types/index.js.map +1 -0
  509. package/dist/types/ArrayType.d.ts +12 -5
  510. package/dist/types/ArrayType.js +89 -24
  511. package/dist/types/ArrayType.js.map +1 -1
  512. package/dist/types/ArrayType.spec.js +39 -11
  513. package/dist/types/ArrayType.spec.js.map +1 -1
  514. package/dist/types/AssociativeArrayType.d.ts +15 -0
  515. package/dist/types/AssociativeArrayType.js +64 -0
  516. package/dist/types/AssociativeArrayType.js.map +1 -0
  517. package/dist/types/BaseFunctionType.d.ts +10 -0
  518. package/dist/types/BaseFunctionType.js +26 -0
  519. package/dist/types/BaseFunctionType.js.map +1 -0
  520. package/dist/types/BooleanType.d.ts +9 -5
  521. package/dist/types/BooleanType.js +19 -8
  522. package/dist/types/BooleanType.js.map +1 -1
  523. package/dist/types/BooleanType.spec.js +10 -4
  524. package/dist/types/BooleanType.spec.js.map +1 -1
  525. package/dist/types/BscType.d.ts +41 -3
  526. package/dist/types/BscType.js +152 -0
  527. package/dist/types/BscType.js.map +1 -1
  528. package/dist/types/BscTypeKind.d.ts +28 -0
  529. package/dist/types/BscTypeKind.js +33 -0
  530. package/dist/types/BscTypeKind.js.map +1 -0
  531. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  532. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  533. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  534. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  535. package/dist/types/BuiltInInterfaceAdder.spec.js +115 -0
  536. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  537. package/dist/types/CallFuncableType.d.ts +24 -0
  538. package/dist/types/CallFuncableType.js +91 -0
  539. package/dist/types/CallFuncableType.js.map +1 -0
  540. package/dist/types/ClassType.d.ts +17 -0
  541. package/dist/types/ClassType.js +60 -0
  542. package/dist/types/ClassType.js.map +1 -0
  543. package/dist/types/ClassType.spec.d.ts +1 -0
  544. package/dist/types/ClassType.spec.js +76 -0
  545. package/dist/types/ClassType.spec.js.map +1 -0
  546. package/dist/types/ComponentType.d.ts +22 -0
  547. package/dist/types/ComponentType.js +107 -0
  548. package/dist/types/ComponentType.js.map +1 -0
  549. package/dist/types/DoubleType.d.ts +10 -5
  550. package/dist/types/DoubleType.js +21 -17
  551. package/dist/types/DoubleType.js.map +1 -1
  552. package/dist/types/DoubleType.spec.js +12 -4
  553. package/dist/types/DoubleType.spec.js.map +1 -1
  554. package/dist/types/DynamicType.d.ts +13 -5
  555. package/dist/types/DynamicType.js +26 -5
  556. package/dist/types/DynamicType.js.map +1 -1
  557. package/dist/types/DynamicType.spec.js +16 -5
  558. package/dist/types/DynamicType.spec.js.map +1 -1
  559. package/dist/types/EnumType.d.ts +42 -0
  560. package/dist/types/EnumType.js +98 -0
  561. package/dist/types/EnumType.js.map +1 -0
  562. package/dist/types/EnumType.spec.d.ts +1 -0
  563. package/dist/types/EnumType.spec.js +33 -0
  564. package/dist/types/EnumType.spec.js.map +1 -0
  565. package/dist/types/FloatType.d.ts +10 -5
  566. package/dist/types/FloatType.js +21 -17
  567. package/dist/types/FloatType.js.map +1 -1
  568. package/dist/types/FloatType.spec.js +4 -4
  569. package/dist/types/FloatType.spec.js.map +1 -1
  570. package/dist/types/FunctionType.d.ts +8 -22
  571. package/dist/types/FunctionType.js +25 -63
  572. package/dist/types/FunctionType.js.map +1 -1
  573. package/dist/types/InheritableType.d.ts +29 -0
  574. package/dist/types/InheritableType.js +173 -0
  575. package/dist/types/InheritableType.js.map +1 -0
  576. package/dist/types/InlineInterfaceType.d.ts +5 -0
  577. package/dist/types/InlineInterfaceType.js +17 -0
  578. package/dist/types/InlineInterfaceType.js.map +1 -0
  579. package/dist/types/IntegerType.d.ts +10 -5
  580. package/dist/types/IntegerType.js +21 -17
  581. package/dist/types/IntegerType.js.map +1 -1
  582. package/dist/types/IntegerType.spec.js +8 -4
  583. package/dist/types/IntegerType.spec.js.map +1 -1
  584. package/dist/types/InterfaceType.d.ts +14 -6
  585. package/dist/types/InterfaceType.js +30 -15
  586. package/dist/types/InterfaceType.js.map +1 -1
  587. package/dist/types/InterfaceType.spec.d.ts +1 -0
  588. package/dist/types/InterfaceType.spec.js +227 -0
  589. package/dist/types/InterfaceType.spec.js.map +1 -0
  590. package/dist/types/IntersectionType.d.ts +29 -0
  591. package/dist/types/IntersectionType.js +253 -0
  592. package/dist/types/IntersectionType.js.map +1 -0
  593. package/dist/types/IntersectionType.spec.d.ts +1 -0
  594. package/dist/types/IntersectionType.spec.js +150 -0
  595. package/dist/types/IntersectionType.spec.js.map +1 -0
  596. package/dist/types/InvalidType.d.ts +10 -5
  597. package/dist/types/InvalidType.js +21 -9
  598. package/dist/types/InvalidType.js.map +1 -1
  599. package/dist/types/InvalidType.spec.js +8 -4
  600. package/dist/types/InvalidType.spec.js.map +1 -1
  601. package/dist/types/LongIntegerType.d.ts +10 -5
  602. package/dist/types/LongIntegerType.js +21 -17
  603. package/dist/types/LongIntegerType.js.map +1 -1
  604. package/dist/types/LongIntegerType.spec.js +10 -4
  605. package/dist/types/LongIntegerType.spec.js.map +1 -1
  606. package/dist/types/NamespaceType.d.ts +12 -0
  607. package/dist/types/NamespaceType.js +28 -0
  608. package/dist/types/NamespaceType.js.map +1 -0
  609. package/dist/types/ObjectType.d.ts +12 -5
  610. package/dist/types/ObjectType.js +25 -8
  611. package/dist/types/ObjectType.js.map +1 -1
  612. package/dist/types/ObjectType.spec.js +3 -3
  613. package/dist/types/ObjectType.spec.js.map +1 -1
  614. package/dist/types/ReferenceType.d.ts +123 -0
  615. package/dist/types/ReferenceType.js +720 -0
  616. package/dist/types/ReferenceType.js.map +1 -0
  617. package/dist/types/ReferenceType.spec.d.ts +1 -0
  618. package/dist/types/ReferenceType.spec.js +151 -0
  619. package/dist/types/ReferenceType.spec.js.map +1 -0
  620. package/dist/types/StringType.d.ts +12 -5
  621. package/dist/types/StringType.js +23 -8
  622. package/dist/types/StringType.js.map +1 -1
  623. package/dist/types/StringType.spec.js +3 -3
  624. package/dist/types/StringType.spec.js.map +1 -1
  625. package/dist/types/TypeStatementType.d.ts +18 -0
  626. package/dist/types/TypeStatementType.js +45 -0
  627. package/dist/types/TypeStatementType.js.map +1 -0
  628. package/dist/types/TypedFunctionType.d.ts +34 -0
  629. package/dist/types/TypedFunctionType.js +147 -0
  630. package/dist/types/TypedFunctionType.js.map +1 -0
  631. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  632. package/dist/types/TypedFunctionType.spec.js +122 -0
  633. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  634. package/dist/types/UninitializedType.d.ts +11 -6
  635. package/dist/types/UninitializedType.js +20 -11
  636. package/dist/types/UninitializedType.js.map +1 -1
  637. package/dist/types/UnionType.d.ts +27 -0
  638. package/dist/types/UnionType.js +193 -0
  639. package/dist/types/UnionType.js.map +1 -0
  640. package/dist/types/UnionType.spec.d.ts +1 -0
  641. package/dist/types/UnionType.spec.js +205 -0
  642. package/dist/types/UnionType.spec.js.map +1 -0
  643. package/dist/types/VoidType.d.ts +11 -5
  644. package/dist/types/VoidType.js +22 -8
  645. package/dist/types/VoidType.js.map +1 -1
  646. package/dist/types/VoidType.spec.js +3 -3
  647. package/dist/types/VoidType.spec.js.map +1 -1
  648. package/dist/types/helper.spec.d.ts +1 -0
  649. package/dist/types/helper.spec.js +174 -0
  650. package/dist/types/helper.spec.js.map +1 -0
  651. package/dist/types/helpers.d.ts +51 -0
  652. package/dist/types/helpers.js +323 -0
  653. package/dist/types/helpers.js.map +1 -0
  654. package/dist/types/index.d.ts +22 -0
  655. package/dist/types/index.js +39 -0
  656. package/dist/types/index.js.map +1 -0
  657. package/dist/types/roFunctionType.d.ts +11 -0
  658. package/dist/types/roFunctionType.js +37 -0
  659. package/dist/types/roFunctionType.js.map +1 -0
  660. package/dist/types/roFunctionType.spec.d.ts +1 -0
  661. package/dist/types/roFunctionType.spec.js +20 -0
  662. package/dist/types/roFunctionType.spec.js.map +1 -0
  663. package/dist/util.d.ts +288 -187
  664. package/dist/util.js +2018 -575
  665. package/dist/util.js.map +1 -1
  666. package/dist/validators/ClassValidator.d.ts +9 -15
  667. package/dist/validators/ClassValidator.js +93 -138
  668. package/dist/validators/ClassValidator.js.map +1 -1
  669. package/package.json +185 -138
  670. package/CHANGELOG.md +0 -1188
  671. package/dist/astUtils/index.d.ts +0 -7
  672. package/dist/astUtils/index.js +0 -26
  673. package/dist/astUtils/index.js.map +0 -1
  674. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  675. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  676. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  677. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  678. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  679. package/dist/lexer/index.d.ts +0 -3
  680. package/dist/lexer/index.js +0 -17
  681. package/dist/lexer/index.js.map +0 -1
  682. package/dist/parser/SGTypes.spec.js +0 -351
  683. package/dist/parser/SGTypes.spec.js.map +0 -1
  684. package/dist/parser/index.d.ts +0 -3
  685. package/dist/parser/index.js +0 -16
  686. package/dist/parser/index.js.map +0 -1
  687. package/dist/preprocessor/Chunk.d.ts +0 -82
  688. package/dist/preprocessor/Chunk.js +0 -77
  689. package/dist/preprocessor/Chunk.js.map +0 -1
  690. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  691. package/dist/preprocessor/Preprocessor.js +0 -156
  692. package/dist/preprocessor/Preprocessor.js.map +0 -1
  693. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  694. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  695. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  696. package/dist/preprocessor/PreprocessorParser.js +0 -194
  697. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  698. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  699. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  700. package/dist/preprocessor/index.d.ts +0 -3
  701. package/dist/preprocessor/index.js +0 -16
  702. package/dist/preprocessor/index.js.map +0 -1
  703. package/dist/types/CustomType.d.ts +0 -10
  704. package/dist/types/CustomType.js +0 -35
  705. package/dist/types/CustomType.js.map +0 -1
  706. package/dist/types/FunctionType.spec.js +0 -29
  707. package/dist/types/FunctionType.spec.js.map +0 -1
  708. package/dist/types/LazyType.d.ts +0 -15
  709. package/dist/types/LazyType.js +0 -32
  710. package/dist/types/LazyType.js.map +0 -1
  711. /package/dist/{bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts → astUtils/CachedLookups.spec.d.ts} +0 -0
  712. /package/dist/{parser/SGTypes.spec.d.ts → astUtils/Editor.spec.d.ts} +0 -0
  713. /package/dist/{preprocessor/Preprocessor.spec.d.ts → bscPlugin/completions/CompletionsProcessor.spec.d.ts} +0 -0
  714. /package/dist/{preprocessor/PreprocessorParser.spec.d.ts → bscPlugin/definition/DefinitionProvider.spec.d.ts} +0 -0
  715. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/hover/HoverProcessor.spec.d.ts} +0 -0
@@ -1,15 +1,19 @@
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");
16
+ const Expression_1 = require("../parser/Expression");
13
17
  describe('astUtils visitors', () => {
14
18
  const rootDir = process.cwd();
15
19
  let program;
@@ -74,27 +78,62 @@ describe('astUtils visitors', () => {
74
78
  });
75
79
  function functionsWalker(visitor, cancel) {
76
80
  return (file) => {
77
- file.parser.references.functionExpressions.some(functionExpression => {
81
+ const funcExpressions = file.ast.findChildren(reflection_1.isFunctionExpression, { walkMode: visitors_1.WalkMode.visitExpressionsRecursive });
82
+ funcExpressions.some(functionExpression => {
78
83
  visitor(functionExpression.body, undefined);
79
- visitors_1.walkStatements(functionExpression.body, (statement, parent) => visitor(statement, parent), cancel);
84
+ (0, visitors_1.walkStatements)(functionExpression.body, (statement, parent) => visitor(statement, parent), cancel);
80
85
  return cancel === null || cancel === void 0 ? void 0 : cancel.isCancellationRequested;
81
86
  });
82
87
  };
83
88
  }
89
+ describe('createVisitor', () => {
90
+ it(`calls the 'AstNode' event for every node`, () => {
91
+ const file = program.setFile('source/main.brs', `
92
+ sub Main()
93
+ print "Hello"
94
+ end sub
95
+ `);
96
+ const nodes = [];
97
+ function track(node) {
98
+ nodes.push(node);
99
+ }
100
+ const visitor = (0, visitors_1.createVisitor)({
101
+ AstNode: track,
102
+ FunctionStatement: track,
103
+ FunctionExpression: track,
104
+ PrintStatement: track,
105
+ Block: track,
106
+ LiteralExpression: track
107
+ });
108
+ file.ast.walk(visitor, { walkMode: visitors_1.WalkMode.visitAllRecursive });
109
+ (0, chai_config_spec_1.expect)(nodes.map(x => x.constructor.name)).to.eql([
110
+ 'FunctionStatement',
111
+ 'FunctionStatement',
112
+ 'FunctionExpression',
113
+ 'FunctionExpression',
114
+ 'Block',
115
+ 'Block',
116
+ 'PrintStatement',
117
+ 'PrintStatement',
118
+ 'LiteralExpression',
119
+ 'LiteralExpression'
120
+ ]);
121
+ });
122
+ });
84
123
  describe('Statements', () => {
85
124
  it('Walks through all the statements with depth', () => {
86
125
  const actual = [];
87
- const visitor = stackedVisitor_1.createStackedVisitor((s, stack) => {
126
+ const visitor = (0, stackedVisitor_1.createStackedVisitor)((s, stack) => {
88
127
  const d = stack.length;
89
128
  actual.push(`${s.constructor.name}:${d}`);
90
129
  });
91
130
  const walker = functionsWalker(visitor);
92
131
  program.plugins.add({
93
132
  name: 'walker',
94
- afterFileParse: (event) => walker(event.file)
133
+ afterProvideFile: event => walker(event.files[0])
95
134
  });
96
135
  program.setFile('source/main.brs', PRINTS_SRC);
97
- chai_1.expect(actual).to.deep.equal([
136
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
98
137
  'Block:0',
99
138
  'PrintStatement:1',
100
139
  'PrintStatement:1',
@@ -127,10 +166,10 @@ describe('astUtils visitors', () => {
127
166
  const walker = functionsWalker(s => actual.push(s.constructor.name), cancel.token);
128
167
  program.plugins.add({
129
168
  name: 'walker',
130
- afterFileParse: (event) => walker(event.file)
169
+ afterProvideFile: event => walker(event.files[0])
131
170
  });
132
- program.setFile('source/file.brs', PRINTS_SRC);
133
- chai_1.expect(actual).to.deep.equal([
171
+ program.setFile('source/main.brs', PRINTS_SRC);
172
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
134
173
  'Block',
135
174
  'PrintStatement',
136
175
  'PrintStatement',
@@ -163,7 +202,7 @@ describe('astUtils visitors', () => {
163
202
  let count = 0;
164
203
  const walker = functionsWalker(s => {
165
204
  actual.push(s.constructor.name);
166
- if (reflection_1.isPrintStatement(s)) {
205
+ if ((0, reflection_1.isPrintStatement)(s)) {
167
206
  if (++count === 4) {
168
207
  cancel.cancel();
169
208
  }
@@ -171,12 +210,10 @@ describe('astUtils visitors', () => {
171
210
  }, cancel.token);
172
211
  program.plugins.add({
173
212
  name: 'walker',
174
- afterFileParse: (event) => {
175
- walker(event.file);
176
- }
213
+ afterProvideFile: event => walker(event.files[0])
177
214
  });
178
- program.setFile('source/file.brs', PRINTS_SRC);
179
- chai_1.expect(actual).to.deep.equal([
215
+ program.setFile('source/main.brs', PRINTS_SRC);
216
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
180
217
  'Block',
181
218
  'PrintStatement',
182
219
  'PrintStatement',
@@ -195,46 +232,74 @@ describe('astUtils visitors', () => {
195
232
  it('Maps statements to individual handlers', () => {
196
233
  const printHandler = sinon.spy();
197
234
  const blockHandler = sinon.spy();
198
- const visitor = visitors_1.createVisitor({
235
+ const visitor = (0, visitors_1.createVisitor)({
199
236
  PrintStatement: printHandler,
200
237
  Block: blockHandler
201
238
  });
202
239
  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));
240
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
241
+ expressions: []
242
+ });
243
+ const blockStatement = new Statement_1.Block({ statements: [] });
206
244
  visitor(printStatement, undefined);
207
245
  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;
246
+ (0, chai_config_spec_1.expect)(printHandler.callCount).to.equal(1);
247
+ (0, chai_config_spec_1.expect)(printHandler.calledWith(printStatement)).to.be.true;
248
+ (0, chai_config_spec_1.expect)(blockHandler.callCount).to.equal(1);
249
+ (0, chai_config_spec_1.expect)(blockHandler.calledWith(blockStatement)).to.be.true;
212
250
  });
213
251
  });
214
252
  describe('Statement editor', () => {
215
253
  it('allows replacing statements', () => {
216
254
  const printStatement1 = new Statement_1.PrintStatement({
217
- print: creators_1.createToken(lexer_1.TokenKind.Print)
218
- }, []);
255
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
256
+ expressions: []
257
+ });
258
+ const printStatement2 = new Statement_1.PrintStatement({
259
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
260
+ expressions: []
261
+ });
262
+ const block = new Statement_1.Block({
263
+ statements: [
264
+ printStatement1,
265
+ new Statement_1.ReturnStatement({ return: (0, creators_1.createToken)(TokenKind_1.TokenKind.Return) })
266
+ ]
267
+ });
268
+ const visitor = (0, visitors_1.createVisitor)({
269
+ PrintStatement: () => printStatement2
270
+ });
271
+ (0, visitors_1.walkStatements)(block, visitor);
272
+ (0, chai_config_spec_1.expect)(block.statements[0]).to.equal(printStatement2);
273
+ });
274
+ it('uses the Editor for replacement when provided', () => {
275
+ const editor = new Editor_1.Editor();
276
+ const printStatement1 = new Statement_1.PrintStatement({
277
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
278
+ expressions: []
279
+ });
219
280
  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({
281
+ print: (0, creators_1.createToken)(TokenKind_1.TokenKind.Print),
282
+ expressions: []
283
+ });
284
+ const block = new Statement_1.Block({
285
+ statements: [printStatement1]
286
+ });
287
+ block.walk((0, visitors_1.createVisitor)({
227
288
  PrintStatement: () => printStatement2
289
+ }), {
290
+ walkMode: visitors_1.WalkMode.visitAll,
291
+ editor: editor
228
292
  });
229
- visitors_1.walkStatements(block, visitor);
230
- chai_1.expect(block.statements[0]).to.equal(printStatement2);
293
+ (0, chai_config_spec_1.expect)(block.statements[0]).to.equal(printStatement2);
294
+ editor.undoAll();
295
+ (0, chai_config_spec_1.expect)(block.statements[0]).to.equal(printStatement1);
231
296
  });
232
297
  });
233
298
  describe('Expressions', () => {
234
299
  it('Walks through all expressions', () => {
235
300
  const actual = [];
236
301
  let curr;
237
- const statementVisitor = stackedVisitor_1.createStackedVisitor((statement, stack) => {
302
+ const statementVisitor = (0, stackedVisitor_1.createStackedVisitor)((statement, stack) => {
238
303
  curr = { statement: statement, depth: stack.length };
239
304
  });
240
305
  function expressionVisitor(expression, _) {
@@ -249,13 +314,12 @@ describe('astUtils visitors', () => {
249
314
  });
250
315
  program.plugins.add({
251
316
  name: 'walker',
252
- afterFileParse: (event) => walker(event.file)
317
+ afterProvideFile: (event) => walker(event.files[0])
253
318
  });
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>
319
+ program.setFile('source/main.brs', EXPRESSIONS_SRC);
320
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
258
321
  'PrintStatement:1:LiteralExpression',
322
+ 'PrintStatement:1:PrintSeparatorExpression',
259
323
  'PrintStatement:1:LiteralExpression',
260
324
  'PrintStatement:1:TemplateStringExpression',
261
325
  'PrintStatement:1:TemplateStringQuasiExpression',
@@ -308,8 +372,102 @@ describe('astUtils visitors', () => {
308
372
  walkMode: walkMode
309
373
  });
310
374
  index = 1;
311
- chai_1.expect(items.map(x => `${x.constructor.name}:${x._testId}`)).to.eql(expectedConstructors.map(x => `${x}:${index++}`));
375
+ (0, chai_config_spec_1.expect)(items.map(x => `${x.constructor.name}:${x._testId}`)).to.eql(expectedConstructors.map(x => `${x}:${index++}`));
312
376
  }
377
+ it('links every ast node to its parent when walked', () => {
378
+ const { ast } = program.setFile('source/main.bs', `
379
+ library "v30/bslCore.brs"
380
+ import "source/main.bs"
381
+ namespace alpha
382
+ namespace beta
383
+ sub charlie()
384
+ delta = 1
385
+ delta++
386
+ delta = sub()
387
+ 'do some printing
388
+ print "hello"
389
+ end sub
390
+ delta()
391
+ for i = 0 to 10 step 1
392
+ exit for
393
+ end for
394
+ while false
395
+ exit while
396
+ end while
397
+ if true or false then
398
+ print 1.2
399
+ else
400
+ print 123123123123
401
+ end if
402
+ dim arr[1, 2]
403
+ goto theLabel
404
+ theLabel:
405
+ return false
406
+ end
407
+ stop
408
+ for each item in [1, 2, 3]
409
+ continue for
410
+ end for
411
+ obj = { name: "bob"}
412
+ obj.name = obj.name
413
+ obj["name"] = obj["name"]
414
+ obj.name = obj@firstName
415
+ print (true or false)
416
+ print \`true\${false}\\n\`
417
+ print not true
418
+ print FUNCTION_NAME
419
+ print new Person()
420
+ print tag\`stuff\${1}\`
421
+ print true ? true : false
422
+ print true ?? false
423
+ print /search stuff/g
424
+ try
425
+ obj.bob = "carl"
426
+ throw "e"
427
+ catch e
428
+ obj["name"] = "dale"
429
+ print e
430
+ end try
431
+ obj@.doCallfunc(1, 2)
432
+ end sub
433
+ end namespace
434
+ end namespace
435
+ @SomeAnnotation(1, "two")
436
+ interface IPerson
437
+ name as string
438
+ function doSomething() as string
439
+ end interface
440
+ class Person
441
+ name as string = "bob"
442
+ function doSomething(value = true) as string
443
+ end function
444
+ end class
445
+ enum Direction
446
+ up = "up"
447
+ end enum
448
+ enum Logical
449
+ yes = 1
450
+ no = 0
451
+ end enum
452
+ const CONST_VALUE = 1.2
453
+ `);
454
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
455
+ const nodes = [];
456
+ //get every expression and statement in the file
457
+ ast.walk((node) => {
458
+ nodes.push(node);
459
+ }, { walkMode: visitors_1.WalkMode.visitAllRecursive });
460
+ for (let i = 0; i < nodes.length; i++) {
461
+ const node = nodes[i];
462
+ //find the top-most ast node
463
+ let top = node;
464
+ while (top.parent) {
465
+ top = top.parent;
466
+ }
467
+ //should be the same instance. If it doesn't then something is wrong with the .parent linking
468
+ (0, chai_config_spec_1.expect)(top === ast || node === ast, `Node ${node.constructor.name} (index ${i}) has broken parent link`).to.be.true;
469
+ }
470
+ });
313
471
  it('Walks through all expressions until cancelled', () => {
314
472
  const file = program.setFile('source/main.bs', `
315
473
  sub logger(message = "nil" as string)
@@ -331,7 +489,7 @@ describe('astUtils visitors', () => {
331
489
  walkMode: visitors_1.WalkMode.visitAllRecursive,
332
490
  cancel: cancel.token
333
491
  });
334
- chai_1.expect(count).to.equal(stopIndex);
492
+ (0, chai_config_spec_1.expect)(count).to.equal(stopIndex);
335
493
  });
336
494
  it('walks if statement', () => {
337
495
  testWalk(`
@@ -492,7 +650,6 @@ describe('astUtils visitors', () => {
492
650
  end namespace
493
651
  `, [
494
652
  'NamespaceStatement',
495
- 'NamespacedVariableNameExpression',
496
653
  'DottedGetExpression',
497
654
  'VariableExpression'
498
655
  ]);
@@ -646,7 +803,6 @@ describe('astUtils visitors', () => {
646
803
  'Block',
647
804
  'AssignmentStatement',
648
805
  'AALiteralExpression',
649
- 'CommentStatement',
650
806
  'AAMemberExpression',
651
807
  'LiteralExpression'
652
808
  ]);
@@ -718,8 +874,7 @@ describe('astUtils visitors', () => {
718
874
  'LiteralExpression',
719
875
  //else
720
876
  'Block',
721
- 'ReturnStatement',
722
- 'CommentStatement'
877
+ 'ReturnStatement'
723
878
  ]);
724
879
  });
725
880
  it('walks TaggedTemplateStringExpression', () => {
@@ -769,7 +924,6 @@ describe('astUtils visitors', () => {
769
924
  'AssignmentStatement',
770
925
  'NewExpression',
771
926
  'CallExpression',
772
- 'NamespacedVariableNameExpression',
773
927
  'VariableExpression'
774
928
  ]);
775
929
  });
@@ -799,10 +953,14 @@ describe('astUtils visitors', () => {
799
953
  end class
800
954
  `, [
801
955
  'ClassStatement',
802
- 'ClassFieldStatement',
803
- 'ClassFieldStatement',
956
+ 'FieldStatement',
957
+ 'TypeExpression',
958
+ 'VariableExpression',
959
+ 'FieldStatement',
960
+ 'TypeExpression',
961
+ 'VariableExpression',
804
962
  'LiteralExpression',
805
- 'ClassMethodStatement',
963
+ 'MethodStatement',
806
964
  'FunctionExpression',
807
965
  'Block',
808
966
  'ReturnStatement',
@@ -849,6 +1007,426 @@ describe('astUtils visitors', () => {
849
1007
  'LiteralExpression'
850
1008
  ], visitors_1.WalkMode.visitExpressionsRecursive);
851
1009
  });
1010
+ it('provides owner and key', () => {
1011
+ const items = [];
1012
+ const { ast } = Parser_1.Parser.parse(`
1013
+ sub main()
1014
+ log = sub(message)
1015
+ print "hello " + message
1016
+ end sub
1017
+ log("hello" + " world")
1018
+ end sub
1019
+ `);
1020
+ ast.walk((astNode, parent, owner, key) => {
1021
+ items.push(astNode);
1022
+ (0, chai_config_spec_1.expect)(owner[key]).to.equal(astNode);
1023
+ }, {
1024
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1025
+ });
1026
+ (0, chai_config_spec_1.expect)(items).to.be.length(17);
1027
+ });
1028
+ it('can be used to delete statements', () => {
1029
+ const { ast } = Parser_1.Parser.parse(`
1030
+ sub main()
1031
+ print 1
1032
+ print 2
1033
+ print 3
1034
+ end sub
1035
+ `);
1036
+ let callCount = 0;
1037
+ ast.walk((astNode, parent, owner, key) => {
1038
+ if ((0, reflection_1.isPrintStatement)(astNode)) {
1039
+ callCount++;
1040
+ //delete the print statement (we know owner is an array based on this specific test)
1041
+ owner.splice(key, 1);
1042
+ }
1043
+ }, {
1044
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1045
+ });
1046
+ //the visitor should have been called for every statement
1047
+ (0, chai_config_spec_1.expect)(callCount).to.eql(3);
1048
+ (0, chai_config_spec_1.expect)(ast.statements[0].func.body.statements).to.be.lengthOf(0);
1049
+ });
1050
+ it('walks everything when the first element is replaced', () => {
1051
+ const { ast } = Parser_1.Parser.parse(`
1052
+ sub main()
1053
+ print 1
1054
+ print 2
1055
+ print 3
1056
+ end sub
1057
+ `);
1058
+ const target = ast.findChild(reflection_1.isBlock).statements[0];
1059
+ let callCount = 0;
1060
+ ast.walk((astNode, parent, owner, key) => {
1061
+ if ((0, reflection_1.isPrintStatement)(astNode)) {
1062
+ callCount++;
1063
+ }
1064
+ if (astNode === target) {
1065
+ owner.splice(key, 1);
1066
+ }
1067
+ }, {
1068
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1069
+ });
1070
+ //the visitor should have been called for every statement
1071
+ (0, chai_config_spec_1.expect)(callCount).to.eql(3);
1072
+ (0, chai_config_spec_1.expect)(ast.statements[0].func.body.statements).not.to.include(target);
1073
+ });
1074
+ it('walks everything when the middle element is replaced', () => {
1075
+ const { ast } = Parser_1.Parser.parse(`
1076
+ sub main()
1077
+ print 1
1078
+ print 2
1079
+ print 3
1080
+ end sub
1081
+ `);
1082
+ const target = ast.findChild(reflection_1.isBlock).statements[1];
1083
+ let callCount = 0;
1084
+ ast.walk((astNode, parent, owner, key) => {
1085
+ if ((0, reflection_1.isPrintStatement)(astNode)) {
1086
+ callCount++;
1087
+ }
1088
+ if (astNode === target) {
1089
+ owner.splice(key, 1);
1090
+ }
1091
+ }, {
1092
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1093
+ });
1094
+ //the visitor should have been called for every statement
1095
+ (0, chai_config_spec_1.expect)(callCount).to.eql(3);
1096
+ (0, chai_config_spec_1.expect)(ast.statements[0].func.body.statements).not.to.include(target);
1097
+ });
1098
+ it('walks everything when the end element is replaced', () => {
1099
+ const { ast } = Parser_1.Parser.parse(`
1100
+ sub main()
1101
+ print 1
1102
+ print 2
1103
+ print 3
1104
+ end sub
1105
+ `);
1106
+ const target = ast.findChild(reflection_1.isBlock).statements[2];
1107
+ let callCount = 0;
1108
+ ast.walk((astNode, parent, owner, key) => {
1109
+ if ((0, reflection_1.isPrintStatement)(astNode)) {
1110
+ callCount++;
1111
+ }
1112
+ if (astNode === target) {
1113
+ owner.splice(key, 1);
1114
+ }
1115
+ }, {
1116
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1117
+ });
1118
+ //the visitor should have been called for every statement
1119
+ (0, chai_config_spec_1.expect)(callCount).to.eql(3);
1120
+ (0, chai_config_spec_1.expect)(ast.statements[0].func.body.statements).not.to.include(target);
1121
+ });
1122
+ it('can be used to insert statements', () => {
1123
+ const { ast } = Parser_1.Parser.parse(`
1124
+ sub main()
1125
+ print 1
1126
+ print 2
1127
+ print 3
1128
+ end sub
1129
+ `);
1130
+ let printStatementCount = 0;
1131
+ let callExpressionCount = 0;
1132
+ const calls = [];
1133
+ ast.walk((0, visitors_1.createVisitor)({
1134
+ PrintStatement: (astNode, parent, owner, key) => {
1135
+ printStatementCount++;
1136
+ //add another expression to the list every time. This should result in 1 the first time, 2 the second, 3 the third.
1137
+ calls.push(new Statement_1.ExpressionStatement({
1138
+ expression: (0, creators_1.createCall)((0, creators_1.createVariableExpression)('doSomethingBeforePrint'), [
1139
+ (0, creators_1.createIntegerLiteral)(callExpressionCount.toString())
1140
+ ])
1141
+ }));
1142
+ owner.splice(key + 1, 0, ...calls.map(x => x.clone()));
1143
+ },
1144
+ CallExpression: (call) => {
1145
+ callExpressionCount++;
1146
+ console.log('call visitor for', call.args[0].tokens.value.text);
1147
+ }
1148
+ }), {
1149
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1150
+ });
1151
+ //the visitor should have been called for every statement
1152
+ (0, chai_config_spec_1.expect)(printStatementCount).to.eql(3);
1153
+ //since the calls were injected after each print statement, we should have 1 call for the first print, 2 for the second, and 3 for the third
1154
+ (0, chai_config_spec_1.expect)(callExpressionCount).to.eql(6);
1155
+ (0, chai_config_spec_1.expect)(ast.statements[0].func.body.statements).to.be.lengthOf(9);
1156
+ });
1157
+ it('skips children when requested', () => {
1158
+ const file = program.setFile('source/main.bs', `
1159
+ sub test()
1160
+ print 1 + 1
1161
+ print "hello"
1162
+ end sub
1163
+
1164
+ sub test2()
1165
+ i = 2
1166
+ while i > 0
1167
+ print createObject("roDateTime").ToISOString()
1168
+ i--
1169
+ end while
1170
+ end sub
1171
+ `);
1172
+ const actual = new Array();
1173
+ program.validate();
1174
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
1175
+ // do not walk into print statements
1176
+ const skipper = new visitors_1.ChildrenSkipper();
1177
+ file.ast.walk((node) => {
1178
+ actual.push(node.kind);
1179
+ if ((0, reflection_1.isPrintStatement)(node)) {
1180
+ skipper.skip();
1181
+ }
1182
+ }, {
1183
+ walkMode: visitors_1.WalkMode.visitAllRecursive,
1184
+ skipChildren: skipper
1185
+ });
1186
+ // Does not walk into print statements
1187
+ (0, chai_config_spec_1.expect)(actual).to.deep.equal([
1188
+ 'FunctionStatement',
1189
+ 'FunctionExpression',
1190
+ 'Block',
1191
+ 'PrintStatement',
1192
+ 'PrintStatement',
1193
+ 'FunctionStatement',
1194
+ 'FunctionExpression',
1195
+ 'Block',
1196
+ 'AssignmentStatement',
1197
+ 'LiteralExpression',
1198
+ 'WhileStatement',
1199
+ 'BinaryExpression',
1200
+ 'VariableExpression',
1201
+ 'LiteralExpression',
1202
+ 'Block',
1203
+ 'PrintStatement',
1204
+ 'IncrementStatement',
1205
+ 'VariableExpression'
1206
+ ]);
1207
+ });
1208
+ it('can get end trivia of any kind of block type node', () => {
1209
+ const file = program.setFile('source/main.bs', `
1210
+ sub test()
1211
+ x = {
1212
+ val: [123],
1213
+ count: 4
1214
+ ' end comment in literal AA 1
1215
+ }
1216
+ for each y in x.val
1217
+ print y
1218
+ ' end comment in for 2
1219
+ end for
1220
+
1221
+ if x.count > 2
1222
+ print "hi"
1223
+ ' end comment in if 3
1224
+ end if
1225
+
1226
+ while x.count > 3
1227
+ x.count--
1228
+ ' end comment in while 4
1229
+ end while
1230
+
1231
+ try
1232
+ print "in try"
1233
+ catch e
1234
+ ' end comment in try 5
1235
+ end try
1236
+
1237
+ array = [
1238
+ 1,
1239
+ 2,
1240
+ ' end comment in array 6
1241
+ ]
1242
+
1243
+ ' end comment in function 7
1244
+ end sub
1245
+ `);
1246
+ const comments = [];
1247
+ program.validate();
1248
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
1249
+ file.ast.walk((0, visitors_1.createVisitor)({
1250
+ AstNode: (node) => {
1251
+ const endNodeComments = node.endTrivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment);
1252
+ comments.push(...endNodeComments);
1253
+ }
1254
+ }), {
1255
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1256
+ });
1257
+ });
1258
+ it('walks a new child when returned from a visitor', () => {
1259
+ let walkedLiterals = [];
1260
+ Parser_1.Parser.parse(`
1261
+ sub main()
1262
+ print 1 + 2
1263
+ end sub
1264
+ `).ast.walk((0, visitors_1.createVisitor)({
1265
+ BinaryExpression: (node, parent, owner, key) => {
1266
+ //replace the `1 + 2` binary expression with a new binary expression
1267
+ if ((0, reflection_1.isLiteralExpression)(node.left) && node.left.tokens.value.text === '1') {
1268
+ return new Expression_1.BinaryExpression({
1269
+ left: (0, creators_1.createIntegerLiteral)('3'),
1270
+ operator: (0, creators_1.createToken)(TokenKind_1.TokenKind.Plus),
1271
+ right: (0, creators_1.createIntegerLiteral)('4')
1272
+ });
1273
+ }
1274
+ },
1275
+ LiteralExpression: (node) => {
1276
+ walkedLiterals.push(node.tokens.value.text);
1277
+ }
1278
+ }), {
1279
+ walkMode: visitors_1.WalkMode.visitAllRecursive
1280
+ });
1281
+ (0, chai_config_spec_1.expect)(walkedLiterals).to.eql(['3', '4']);
1282
+ });
1283
+ it('can set bsConst in walk', () => {
1284
+ const { ast } = program.setFile('source/main.brs', `
1285
+ #if DEBUG
1286
+ sub main()
1287
+ end sub
1288
+ #end if
1289
+ `);
1290
+ const bsConsts = new Map();
1291
+ let foundMainFunc = false;
1292
+ const visitor = (0, visitors_1.createVisitor)({
1293
+ FunctionStatement: (func) => {
1294
+ foundMainFunc || (foundMainFunc = func.getName(Parser_1.ParseMode.BrighterScript) === 'main');
1295
+ }
1296
+ });
1297
+ ast.walk(visitor, {
1298
+ walkMode: visitors_1.WalkMode.visitStatements,
1299
+ bsConsts: bsConsts
1300
+ });
1301
+ // did not walk false block
1302
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.false;
1303
+ bsConsts.set('debug', true);
1304
+ ast.walk(visitor, {
1305
+ walkMode: visitors_1.WalkMode.visitStatements,
1306
+ bsConsts: bsConsts
1307
+ });
1308
+ // debug is true, so it did walk block
1309
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.true;
1310
+ });
1311
+ it('can walk false cc blocks', () => {
1312
+ const { ast } = program.setFile('source/main.brs', `
1313
+ #if false
1314
+ sub main()
1315
+ end sub
1316
+ #end if
1317
+ `);
1318
+ const bsConsts = new Map();
1319
+ let foundMainFunc = false;
1320
+ const visitor = (0, visitors_1.createVisitor)({
1321
+ FunctionStatement: (func) => {
1322
+ foundMainFunc || (foundMainFunc = func.getName(Parser_1.ParseMode.BrighterScript) === 'main');
1323
+ }
1324
+ });
1325
+ ast.walk(visitor, {
1326
+ walkMode: visitors_1.WalkMode.visitStatements,
1327
+ bsConsts: bsConsts
1328
+ });
1329
+ // did not walk false block
1330
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.false;
1331
+ ast.walk(visitor, {
1332
+ // eslint-disable-next-line no-bitwise
1333
+ walkMode: visitors_1.WalkMode.visitStatements | visitors_1.InternalWalkMode.visitFalseConditionalCompilationBlocks,
1334
+ bsConsts: bsConsts
1335
+ });
1336
+ // did walk false block
1337
+ (0, chai_config_spec_1.expect)(foundMainFunc).to.be.true;
1338
+ });
1339
+ it('will correctly walk `not condition` cc blocks', () => {
1340
+ const { ast } = program.setFile('source/main.brs', `
1341
+ #const DEBUG = false
1342
+ #if not DEBUG
1343
+ sub notDebug()
1344
+ end sub
1345
+ #end if
1346
+ #if not false
1347
+ sub notFalse()
1348
+ end sub
1349
+ #end if
1350
+ `);
1351
+ const bsConsts = new Map();
1352
+ let functionsFound = new Set();
1353
+ const visitor = (0, visitors_1.createVisitor)({
1354
+ FunctionStatement: (func) => {
1355
+ functionsFound.add(func.getName(Parser_1.ParseMode.BrighterScript));
1356
+ }
1357
+ });
1358
+ ast.walk(visitor, {
1359
+ walkMode: visitors_1.WalkMode.visitStatements,
1360
+ bsConsts: bsConsts
1361
+ });
1362
+ // did walk 'not' block
1363
+ (0, chai_config_spec_1.expect)(functionsFound.has('notDebug')).to.be.true;
1364
+ (0, chai_config_spec_1.expect)(functionsFound.has('notFalse')).to.be.true;
1365
+ });
1366
+ it('walks a new child when returned from a visitor and using an AstEditor', () => {
1367
+ let walkedLiterals = [];
1368
+ Parser_1.Parser.parse(`
1369
+ sub main()
1370
+ print 1 + 2
1371
+ end sub
1372
+ `).ast.walk((0, visitors_1.createVisitor)({
1373
+ BinaryExpression: (node, parent, owner, key) => {
1374
+ //replace the `1 + 2` binary expression with a new binary expression
1375
+ if ((0, reflection_1.isLiteralExpression)(node.left) && node.left.tokens.value.text === '1') {
1376
+ return new Expression_1.BinaryExpression({
1377
+ left: (0, creators_1.createIntegerLiteral)('3'),
1378
+ operator: (0, creators_1.createToken)(TokenKind_1.TokenKind.Plus),
1379
+ right: (0, creators_1.createIntegerLiteral)('4')
1380
+ });
1381
+ }
1382
+ },
1383
+ LiteralExpression: (node) => {
1384
+ walkedLiterals.push(node.tokens.value.text);
1385
+ }
1386
+ }), {
1387
+ walkMode: visitors_1.WalkMode.visitAllRecursive,
1388
+ editor: new Editor_1.Editor()
1389
+ });
1390
+ (0, chai_config_spec_1.expect)(walkedLiterals).to.eql(['3', '4']);
1391
+ });
1392
+ });
1393
+ describe('walkArray', () => {
1394
+ const one = (0, creators_1.createVariableExpression)('one');
1395
+ const two = (0, creators_1.createVariableExpression)('two');
1396
+ const three = (0, creators_1.createVariableExpression)('three');
1397
+ const four = (0, creators_1.createVariableExpression)('four');
1398
+ const five = (0, creators_1.createVariableExpression)('five');
1399
+ function doTest(startingArray, expected, visitor) {
1400
+ const visitedItems = [];
1401
+ (0, visitors_1.walkArray)(startingArray, (item, parent, owner, key) => {
1402
+ visitedItems.push(item);
1403
+ return visitor === null || visitor === void 0 ? void 0 : visitor(item, parent, owner, key);
1404
+ }, { walkMode: visitors_1.WalkMode.visitAllRecursive });
1405
+ (0, chai_config_spec_1.expect)(visitedItems.map(x => x.tokens.name.text)).to.eql(expected.map(x => x.tokens.name.text));
1406
+ }
1407
+ it('walks every element in the array', () => {
1408
+ doTest([one, two, three, four, five], [one, two, three, four, five]);
1409
+ });
1410
+ it('walks new items added to the array', () => {
1411
+ doTest([one, two], [one, three, two, four], (item, parent, owner, key) => {
1412
+ //insert a value after one
1413
+ if (item === one) {
1414
+ owner.splice(key + 1, 0, three);
1415
+ //insert a value after one
1416
+ }
1417
+ else if (item === two) {
1418
+ owner.splice(key + 1, 0, four);
1419
+ }
1420
+ });
1421
+ });
1422
+ it('triggers on nodes that were skiped due to insertions', () => {
1423
+ doTest([one, two, three], [one, two, four, three], (item, parent, owner, key) => {
1424
+ //insert a value after one
1425
+ if (item === two) {
1426
+ owner.splice(key, 0, four);
1427
+ }
1428
+ });
1429
+ });
852
1430
  });
853
1431
  });
854
1432
  //# sourceMappingURL=visitors.spec.js.map