brighterscript 1.0.0-alpha.5 → 1.0.0-alpha.51

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 (652) hide show
  1. package/README.md +79 -138
  2. package/bsconfig.schema.json +196 -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 +161 -43
  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 +29 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +20 -15
  23. package/dist/CommentFlagProcessor.js +143 -58
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +650 -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 +83 -0
  38. package/dist/DiagnosticManager.js +422 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +602 -196
  41. package/dist/DiagnosticMessages.js +926 -342
  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 +136 -104
  53. package/dist/LanguageServer.js +577 -741
  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 +302 -98
  62. package/dist/Program.js +1613 -726
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +39 -22
  65. package/dist/ProgramBuilder.js +245 -179
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +227 -106
  68. package/dist/Scope.js +609 -557
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  71. package/dist/ScopeNamespaceLookup.js +242 -0
  72. package/dist/ScopeNamespaceLookup.js.map +1 -0
  73. package/dist/SemanticTokenUtils.js +5 -1
  74. package/dist/SemanticTokenUtils.js.map +1 -1
  75. package/dist/Stopwatch.d.ts +4 -0
  76. package/dist/Stopwatch.js +8 -1
  77. package/dist/Stopwatch.js.map +1 -1
  78. package/dist/SymbolTable.d.ts +145 -26
  79. package/dist/SymbolTable.js +575 -64
  80. package/dist/SymbolTable.js.map +1 -1
  81. package/dist/SymbolTypeFlag.d.ts +9 -0
  82. package/dist/SymbolTypeFlag.js +14 -0
  83. package/dist/SymbolTypeFlag.js.map +1 -0
  84. package/dist/Throttler.d.ts +12 -0
  85. package/dist/Throttler.js +39 -0
  86. package/dist/Throttler.js.map +1 -1
  87. package/dist/Watcher.d.ts +0 -3
  88. package/dist/Watcher.js +0 -3
  89. package/dist/Watcher.js.map +1 -1
  90. package/dist/XmlScope.d.ts +5 -15
  91. package/dist/XmlScope.js +34 -90
  92. package/dist/XmlScope.js.map +1 -1
  93. package/dist/astUtils/CachedLookups.d.ts +50 -0
  94. package/dist/astUtils/CachedLookups.js +337 -0
  95. package/dist/astUtils/CachedLookups.js.map +1 -0
  96. package/dist/astUtils/Editor.d.ts +69 -0
  97. package/dist/astUtils/Editor.js +245 -0
  98. package/dist/astUtils/Editor.js.map +1 -0
  99. package/dist/astUtils/creators.d.ts +54 -19
  100. package/dist/astUtils/creators.js +242 -42
  101. package/dist/astUtils/creators.js.map +1 -1
  102. package/dist/astUtils/reflection.d.ts +199 -85
  103. package/dist/astUtils/reflection.js +518 -145
  104. package/dist/astUtils/reflection.js.map +1 -1
  105. package/dist/astUtils/stackedVisitor.js.map +1 -1
  106. package/dist/astUtils/visitors.d.ts +117 -53
  107. package/dist/astUtils/visitors.js +95 -15
  108. package/dist/astUtils/visitors.js.map +1 -1
  109. package/dist/astUtils/xml.d.ts +9 -8
  110. package/dist/astUtils/xml.js +12 -7
  111. package/dist/astUtils/xml.js.map +1 -1
  112. package/dist/bscPlugin/BscPlugin.d.ts +26 -4
  113. package/dist/bscPlugin/BscPlugin.js +96 -4
  114. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  115. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  116. package/dist/bscPlugin/CallExpressionInfo.js +142 -0
  117. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  118. package/dist/bscPlugin/FileWriter.d.ts +19 -0
  119. package/dist/bscPlugin/FileWriter.js +79 -0
  120. package/dist/bscPlugin/FileWriter.js.map +1 -0
  121. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  122. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  123. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  124. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +109 -7
  125. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +676 -26
  126. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  127. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  128. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  129. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  130. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  131. package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
  132. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  133. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  134. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  135. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  136. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  137. package/dist/bscPlugin/definition/DefinitionProvider.js +220 -0
  138. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  139. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  140. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  141. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  142. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  143. package/dist/bscPlugin/hover/HoverProcessor.js +238 -0
  144. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  145. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  146. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  147. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  148. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  149. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
  150. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  151. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  152. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  153. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  154. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  155. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  156. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  157. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  158. package/dist/bscPlugin/serialize/FileSerializer.js +80 -0
  159. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  160. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  161. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  162. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  163. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  164. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  165. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  166. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  167. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  168. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  169. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +34 -0
  170. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +504 -0
  171. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  172. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  173. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  174. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  175. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  176. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  177. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  178. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +51 -0
  179. package/dist/bscPlugin/validation/BrsFileValidator.js +714 -0
  180. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  181. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  182. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  183. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  184. package/dist/bscPlugin/validation/ScopeValidator.d.ts +158 -0
  185. package/dist/bscPlugin/validation/ScopeValidator.js +1481 -0
  186. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  187. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  188. package/dist/bscPlugin/validation/XmlFileValidator.js +50 -0
  189. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  190. package/dist/cli.js +140 -28
  191. package/dist/cli.js.map +1 -1
  192. package/dist/common/Sequencer.d.ts +53 -0
  193. package/dist/common/Sequencer.js +233 -0
  194. package/dist/common/Sequencer.js.map +1 -0
  195. package/dist/deferred.d.ts +5 -3
  196. package/dist/deferred.js +10 -0
  197. package/dist/deferred.js.map +1 -1
  198. package/dist/diagnosticUtils.d.ts +61 -4
  199. package/dist/diagnosticUtils.js +285 -25
  200. package/dist/diagnosticUtils.js.map +1 -1
  201. package/dist/examples/plugins/removePrint.d.ts +2 -2
  202. package/dist/examples/plugins/removePrint.js +8 -12
  203. package/dist/examples/plugins/removePrint.js.map +1 -1
  204. package/dist/files/AssetFile.d.ts +24 -0
  205. package/dist/files/AssetFile.js +25 -0
  206. package/dist/files/AssetFile.js.map +1 -0
  207. package/dist/files/BrsFile.d.ts +161 -87
  208. package/dist/files/BrsFile.js +919 -936
  209. package/dist/files/BrsFile.js.map +1 -1
  210. package/dist/files/BscFile.d.ts +102 -0
  211. package/dist/files/BscFile.js +15 -0
  212. package/dist/files/BscFile.js.map +1 -0
  213. package/dist/files/Factory.d.ts +25 -0
  214. package/dist/files/Factory.js +22 -0
  215. package/dist/files/Factory.js.map +1 -0
  216. package/dist/files/LazyFileData.d.ts +21 -0
  217. package/dist/files/LazyFileData.js +54 -0
  218. package/dist/files/LazyFileData.js.map +1 -0
  219. package/dist/files/XmlFile.d.ts +80 -41
  220. package/dist/files/XmlFile.js +162 -137
  221. package/dist/files/XmlFile.js.map +1 -1
  222. package/dist/globalCallables.d.ts +3 -1
  223. package/dist/globalCallables.js +424 -184
  224. package/dist/globalCallables.js.map +1 -1
  225. package/dist/index.d.ts +32 -4
  226. package/dist/index.js +54 -7
  227. package/dist/index.js.map +1 -1
  228. package/dist/interfaces.d.ts +987 -125
  229. package/dist/interfaces.js +21 -0
  230. package/dist/interfaces.js.map +1 -1
  231. package/dist/lexer/Lexer.d.ts +51 -12
  232. package/dist/lexer/Lexer.js +214 -65
  233. package/dist/lexer/Lexer.js.map +1 -1
  234. package/dist/lexer/Token.d.ts +27 -11
  235. package/dist/lexer/Token.js +10 -2
  236. package/dist/lexer/Token.js.map +1 -1
  237. package/dist/lexer/TokenKind.d.ts +48 -2
  238. package/dist/lexer/TokenKind.js +167 -10
  239. package/dist/lexer/TokenKind.js.map +1 -1
  240. package/dist/logging.d.ts +14 -0
  241. package/dist/logging.js +29 -0
  242. package/dist/logging.js.map +1 -0
  243. package/dist/lsp/ActionQueue.d.ts +35 -0
  244. package/dist/lsp/ActionQueue.js +115 -0
  245. package/dist/lsp/ActionQueue.js.map +1 -0
  246. package/dist/lsp/DocumentManager.d.ts +63 -0
  247. package/dist/lsp/DocumentManager.js +122 -0
  248. package/dist/lsp/DocumentManager.js.map +1 -0
  249. package/dist/lsp/LspProject.d.ts +287 -0
  250. package/dist/lsp/LspProject.js +3 -0
  251. package/dist/lsp/LspProject.js.map +1 -0
  252. package/dist/lsp/PathFilterer.d.ts +75 -0
  253. package/dist/lsp/PathFilterer.js +196 -0
  254. package/dist/lsp/PathFilterer.js.map +1 -0
  255. package/dist/lsp/Project.d.ts +200 -0
  256. package/dist/lsp/Project.js +562 -0
  257. package/dist/lsp/Project.js.map +1 -0
  258. package/dist/lsp/ProjectManager.d.ts +288 -0
  259. package/dist/lsp/ProjectManager.js +967 -0
  260. package/dist/lsp/ProjectManager.js.map +1 -0
  261. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  262. package/dist/lsp/ReaderWriterManager.js +60 -0
  263. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  264. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  265. package/dist/lsp/worker/MessageHandler.js +138 -0
  266. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  267. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  268. package/dist/lsp/worker/WorkerPool.js +78 -0
  269. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  270. package/dist/lsp/worker/WorkerThreadProject.d.ts +168 -0
  271. package/dist/lsp/worker/WorkerThreadProject.js +205 -0
  272. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  273. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  274. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  275. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  276. package/dist/lsp/worker/run.js +14 -0
  277. package/dist/lsp/worker/run.js.map +1 -0
  278. package/dist/parser/AstNode.d.ts +205 -0
  279. package/dist/parser/AstNode.js +305 -0
  280. package/dist/parser/AstNode.js.map +1 -0
  281. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  282. package/dist/parser/BrightScriptDocParser.js +294 -0
  283. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  284. package/dist/parser/BrsTranspileState.d.ts +22 -3
  285. package/dist/parser/BrsTranspileState.js +19 -0
  286. package/dist/parser/BrsTranspileState.js.map +1 -1
  287. package/dist/parser/Expression.d.ts +601 -220
  288. package/dist/parser/Expression.js +1516 -502
  289. package/dist/parser/Expression.js.map +1 -1
  290. package/dist/parser/Parser.d.ts +137 -121
  291. package/dist/parser/Parser.js +1808 -982
  292. package/dist/parser/Parser.js.map +1 -1
  293. package/dist/parser/SGParser.d.ts +30 -13
  294. package/dist/parser/SGParser.js +94 -56
  295. package/dist/parser/SGParser.js.map +1 -1
  296. package/dist/parser/SGTypes.d.ts +134 -46
  297. package/dist/parser/SGTypes.js +206 -115
  298. package/dist/parser/SGTypes.js.map +1 -1
  299. package/dist/parser/Statement.d.ts +854 -267
  300. package/dist/parser/Statement.js +2416 -621
  301. package/dist/parser/Statement.js.map +1 -1
  302. package/dist/parser/TranspileState.d.ts +30 -14
  303. package/dist/parser/TranspileState.js +124 -27
  304. package/dist/parser/TranspileState.js.map +1 -1
  305. package/dist/preprocessor/Manifest.d.ts +6 -6
  306. package/dist/preprocessor/Manifest.js +17 -38
  307. package/dist/preprocessor/Manifest.js.map +1 -1
  308. package/dist/roku-types/data.json +20554 -0
  309. package/dist/roku-types/index.d.ts +5726 -0
  310. package/dist/roku-types/index.js +11 -0
  311. package/dist/roku-types/index.js.map +1 -0
  312. package/dist/types/ArrayType.d.ts +12 -5
  313. package/dist/types/ArrayType.js +95 -25
  314. package/dist/types/ArrayType.js.map +1 -1
  315. package/dist/types/AssociativeArrayType.d.ts +15 -0
  316. package/dist/types/AssociativeArrayType.js +64 -0
  317. package/dist/types/AssociativeArrayType.js.map +1 -0
  318. package/dist/types/BaseFunctionType.d.ts +10 -0
  319. package/dist/types/BaseFunctionType.js +26 -0
  320. package/dist/types/BaseFunctionType.js.map +1 -0
  321. package/dist/types/BooleanType.d.ts +9 -5
  322. package/dist/types/BooleanType.js +19 -8
  323. package/dist/types/BooleanType.js.map +1 -1
  324. package/dist/types/BscType.d.ts +41 -3
  325. package/dist/types/BscType.js +152 -0
  326. package/dist/types/BscType.js.map +1 -1
  327. package/dist/types/BscTypeKind.d.ts +28 -0
  328. package/dist/types/BscTypeKind.js +33 -0
  329. package/dist/types/BscTypeKind.js.map +1 -0
  330. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  331. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  332. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  333. package/dist/types/CallFuncableType.d.ts +24 -0
  334. package/dist/types/CallFuncableType.js +91 -0
  335. package/dist/types/CallFuncableType.js.map +1 -0
  336. package/dist/types/ClassType.d.ts +17 -0
  337. package/dist/types/ClassType.js +63 -0
  338. package/dist/types/ClassType.js.map +1 -0
  339. package/dist/types/ComponentType.d.ts +22 -0
  340. package/dist/types/ComponentType.js +110 -0
  341. package/dist/types/ComponentType.js.map +1 -0
  342. package/dist/types/DoubleType.d.ts +10 -5
  343. package/dist/types/DoubleType.js +21 -17
  344. package/dist/types/DoubleType.js.map +1 -1
  345. package/dist/types/DynamicType.d.ts +13 -5
  346. package/dist/types/DynamicType.js +26 -5
  347. package/dist/types/DynamicType.js.map +1 -1
  348. package/dist/types/EnumType.d.ts +42 -0
  349. package/dist/types/EnumType.js +101 -0
  350. package/dist/types/EnumType.js.map +1 -0
  351. package/dist/types/FloatType.d.ts +10 -5
  352. package/dist/types/FloatType.js +21 -17
  353. package/dist/types/FloatType.js.map +1 -1
  354. package/dist/types/FunctionType.d.ts +8 -22
  355. package/dist/types/FunctionType.js +25 -63
  356. package/dist/types/FunctionType.js.map +1 -1
  357. package/dist/types/InheritableType.d.ts +29 -0
  358. package/dist/types/InheritableType.js +173 -0
  359. package/dist/types/InheritableType.js.map +1 -0
  360. package/dist/types/InlineInterfaceType.d.ts +5 -0
  361. package/dist/types/InlineInterfaceType.js +17 -0
  362. package/dist/types/InlineInterfaceType.js.map +1 -0
  363. package/dist/types/IntegerType.d.ts +10 -5
  364. package/dist/types/IntegerType.js +21 -17
  365. package/dist/types/IntegerType.js.map +1 -1
  366. package/dist/types/InterfaceType.d.ts +14 -6
  367. package/dist/types/InterfaceType.js +30 -15
  368. package/dist/types/InterfaceType.js.map +1 -1
  369. package/dist/types/IntersectionType.d.ts +29 -0
  370. package/dist/types/IntersectionType.js +256 -0
  371. package/dist/types/IntersectionType.js.map +1 -0
  372. package/dist/types/InvalidType.d.ts +10 -5
  373. package/dist/types/InvalidType.js +21 -9
  374. package/dist/types/InvalidType.js.map +1 -1
  375. package/dist/types/LongIntegerType.d.ts +10 -5
  376. package/dist/types/LongIntegerType.js +21 -17
  377. package/dist/types/LongIntegerType.js.map +1 -1
  378. package/dist/types/NamespaceType.d.ts +12 -0
  379. package/dist/types/NamespaceType.js +28 -0
  380. package/dist/types/NamespaceType.js.map +1 -0
  381. package/dist/types/ObjectType.d.ts +12 -5
  382. package/dist/types/ObjectType.js +25 -8
  383. package/dist/types/ObjectType.js.map +1 -1
  384. package/dist/types/ReferenceType.d.ts +123 -0
  385. package/dist/types/ReferenceType.js +726 -0
  386. package/dist/types/ReferenceType.js.map +1 -0
  387. package/dist/types/StringType.d.ts +12 -5
  388. package/dist/types/StringType.js +23 -8
  389. package/dist/types/StringType.js.map +1 -1
  390. package/dist/types/TypeStatementType.d.ts +19 -0
  391. package/dist/types/TypeStatementType.js +56 -0
  392. package/dist/types/TypeStatementType.js.map +1 -0
  393. package/dist/types/TypedFunctionType.d.ts +34 -0
  394. package/dist/types/TypedFunctionType.js +157 -0
  395. package/dist/types/TypedFunctionType.js.map +1 -0
  396. package/dist/types/UninitializedType.d.ts +11 -6
  397. package/dist/types/UninitializedType.js +20 -11
  398. package/dist/types/UninitializedType.js.map +1 -1
  399. package/dist/types/UnionType.d.ts +27 -0
  400. package/dist/types/UnionType.js +196 -0
  401. package/dist/types/UnionType.js.map +1 -0
  402. package/dist/types/VoidType.d.ts +11 -5
  403. package/dist/types/VoidType.js +22 -8
  404. package/dist/types/VoidType.js.map +1 -1
  405. package/dist/types/helpers.d.ts +51 -0
  406. package/dist/types/helpers.js +329 -0
  407. package/dist/types/helpers.js.map +1 -0
  408. package/dist/types/index.d.ts +22 -0
  409. package/dist/types/index.js +39 -0
  410. package/dist/types/index.js.map +1 -0
  411. package/dist/types/roFunctionType.d.ts +11 -0
  412. package/dist/types/roFunctionType.js +37 -0
  413. package/dist/types/roFunctionType.js.map +1 -0
  414. package/dist/util.d.ts +325 -185
  415. package/dist/util.js +2135 -568
  416. package/dist/util.js.map +1 -1
  417. package/dist/validators/ClassValidator.d.ts +9 -15
  418. package/dist/validators/ClassValidator.js +93 -138
  419. package/dist/validators/ClassValidator.js.map +1 -1
  420. package/package.json +183 -138
  421. package/CHANGELOG.md +0 -1188
  422. package/dist/astUtils/creators.spec.js +0 -21
  423. package/dist/astUtils/creators.spec.js.map +0 -1
  424. package/dist/astUtils/index.d.ts +0 -7
  425. package/dist/astUtils/index.js +0 -26
  426. package/dist/astUtils/index.js.map +0 -1
  427. package/dist/astUtils/reflection.spec.d.ts +0 -1
  428. package/dist/astUtils/reflection.spec.js +0 -292
  429. package/dist/astUtils/reflection.spec.js.map +0 -1
  430. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  431. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  432. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  433. package/dist/astUtils/visitors.spec.d.ts +0 -1
  434. package/dist/astUtils/visitors.spec.js +0 -854
  435. package/dist/astUtils/visitors.spec.js.map +0 -1
  436. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  437. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -194
  438. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  439. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  440. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  441. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  442. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +0 -1
  443. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  444. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  445. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  446. package/dist/files/BrsFile.Class.spec.js +0 -1081
  447. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  448. package/dist/files/BrsFile.spec.d.ts +0 -1
  449. package/dist/files/BrsFile.spec.js +0 -2524
  450. package/dist/files/BrsFile.spec.js.map +0 -1
  451. package/dist/files/XmlFile.spec.d.ts +0 -1
  452. package/dist/files/XmlFile.spec.js +0 -1065
  453. package/dist/files/XmlFile.spec.js.map +0 -1
  454. package/dist/files/tests/imports.spec.d.ts +0 -1
  455. package/dist/files/tests/imports.spec.js +0 -241
  456. package/dist/files/tests/imports.spec.js.map +0 -1
  457. package/dist/lexer/Character.spec.d.ts +0 -1
  458. package/dist/lexer/Character.spec.js +0 -27
  459. package/dist/lexer/Character.spec.js.map +0 -1
  460. package/dist/lexer/Lexer.spec.d.ts +0 -1
  461. package/dist/lexer/Lexer.spec.js +0 -1101
  462. package/dist/lexer/Lexer.spec.js.map +0 -1
  463. package/dist/lexer/index.d.ts +0 -3
  464. package/dist/lexer/index.js +0 -17
  465. package/dist/lexer/index.js.map +0 -1
  466. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  467. package/dist/parser/Parser.Class.spec.js +0 -390
  468. package/dist/parser/Parser.Class.spec.js.map +0 -1
  469. package/dist/parser/Parser.spec.d.ts +0 -4
  470. package/dist/parser/Parser.spec.js +0 -1216
  471. package/dist/parser/Parser.spec.js.map +0 -1
  472. package/dist/parser/SGParser.spec.d.ts +0 -1
  473. package/dist/parser/SGParser.spec.js +0 -145
  474. package/dist/parser/SGParser.spec.js.map +0 -1
  475. package/dist/parser/SGTypes.spec.d.ts +0 -1
  476. package/dist/parser/SGTypes.spec.js +0 -351
  477. package/dist/parser/SGTypes.spec.js.map +0 -1
  478. package/dist/parser/Statement.spec.d.ts +0 -1
  479. package/dist/parser/Statement.spec.js +0 -94
  480. package/dist/parser/Statement.spec.js.map +0 -1
  481. package/dist/parser/index.d.ts +0 -3
  482. package/dist/parser/index.js +0 -16
  483. package/dist/parser/index.js.map +0 -1
  484. package/dist/parser/tests/Parser.spec.d.ts +0 -18
  485. package/dist/parser/tests/Parser.spec.js +0 -35
  486. package/dist/parser/tests/Parser.spec.js.map +0 -1
  487. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  488. package/dist/parser/tests/controlFlow/For.spec.js +0 -161
  489. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  490. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  491. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -106
  492. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  493. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  494. package/dist/parser/tests/controlFlow/If.spec.js +0 -551
  495. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  496. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  497. package/dist/parser/tests/controlFlow/While.spec.js +0 -107
  498. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  499. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  500. package/dist/parser/tests/expression/Additive.spec.js +0 -99
  501. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  502. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  503. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -254
  504. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  505. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  506. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -266
  507. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  508. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  509. package/dist/parser/tests/expression/Boolean.spec.js +0 -83
  510. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  511. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  512. package/dist/parser/tests/expression/Call.spec.js +0 -134
  513. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  514. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  515. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  516. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  517. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  518. package/dist/parser/tests/expression/Function.spec.js +0 -403
  519. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  520. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  521. package/dist/parser/tests/expression/Indexing.spec.js +0 -219
  522. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  523. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  524. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  525. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  526. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  527. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -201
  528. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  529. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  530. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
  531. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  532. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  533. package/dist/parser/tests/expression/Primary.spec.js +0 -149
  534. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  535. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  536. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  537. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  538. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  539. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  540. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  541. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  542. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -202
  543. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  544. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  545. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -323
  546. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  547. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  548. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  549. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  550. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  551. package/dist/parser/tests/statement/Declaration.spec.js +0 -108
  552. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  553. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  554. package/dist/parser/tests/statement/Dim.spec.js +0 -73
  555. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  556. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  557. package/dist/parser/tests/statement/Function.spec.js +0 -332
  558. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  559. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  560. package/dist/parser/tests/statement/Goto.spec.js +0 -50
  561. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  562. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  563. package/dist/parser/tests/statement/Increment.spec.js +0 -117
  564. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  565. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  566. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  567. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  568. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  569. package/dist/parser/tests/statement/Misc.spec.js +0 -333
  570. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  571. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  572. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -181
  573. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  574. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  575. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
  576. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  577. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  578. package/dist/parser/tests/statement/Set.spec.js +0 -218
  579. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  580. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  581. package/dist/parser/tests/statement/Stop.spec.js +0 -37
  582. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  583. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  584. package/dist/parser/tests/statement/Throw.spec.js +0 -35
  585. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  586. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  587. package/dist/parser/tests/statement/TryCatch.spec.js +0 -140
  588. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  589. package/dist/preprocessor/Chunk.d.ts +0 -82
  590. package/dist/preprocessor/Chunk.js +0 -77
  591. package/dist/preprocessor/Chunk.js.map +0 -1
  592. package/dist/preprocessor/Manifest.spec.d.ts +0 -0
  593. package/dist/preprocessor/Manifest.spec.js +0 -105
  594. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  595. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  596. package/dist/preprocessor/Preprocessor.js +0 -156
  597. package/dist/preprocessor/Preprocessor.js.map +0 -1
  598. package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
  599. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  600. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  601. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  602. package/dist/preprocessor/PreprocessorParser.js +0 -194
  603. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  604. package/dist/preprocessor/PreprocessorParser.spec.d.ts +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/ArrayType.spec.d.ts +0 -1
  611. package/dist/types/ArrayType.spec.js +0 -30
  612. package/dist/types/ArrayType.spec.js.map +0 -1
  613. package/dist/types/BooleanType.spec.d.ts +0 -1
  614. package/dist/types/BooleanType.spec.js +0 -12
  615. package/dist/types/BooleanType.spec.js.map +0 -1
  616. package/dist/types/CustomType.d.ts +0 -10
  617. package/dist/types/CustomType.js +0 -35
  618. package/dist/types/CustomType.js.map +0 -1
  619. package/dist/types/DoubleType.spec.d.ts +0 -1
  620. package/dist/types/DoubleType.spec.js +0 -12
  621. package/dist/types/DoubleType.spec.js.map +0 -1
  622. package/dist/types/DynamicType.spec.d.ts +0 -1
  623. package/dist/types/DynamicType.spec.js +0 -12
  624. package/dist/types/DynamicType.spec.js.map +0 -1
  625. package/dist/types/FloatType.spec.d.ts +0 -1
  626. package/dist/types/FloatType.spec.js +0 -12
  627. package/dist/types/FloatType.spec.js.map +0 -1
  628. package/dist/types/FunctionType.spec.d.ts +0 -1
  629. package/dist/types/FunctionType.spec.js +0 -29
  630. package/dist/types/FunctionType.spec.js.map +0 -1
  631. package/dist/types/IntegerType.spec.d.ts +0 -1
  632. package/dist/types/IntegerType.spec.js +0 -12
  633. package/dist/types/IntegerType.spec.js.map +0 -1
  634. package/dist/types/InvalidType.spec.d.ts +0 -1
  635. package/dist/types/InvalidType.spec.js +0 -12
  636. package/dist/types/InvalidType.spec.js.map +0 -1
  637. package/dist/types/LazyType.d.ts +0 -15
  638. package/dist/types/LazyType.js +0 -32
  639. package/dist/types/LazyType.js.map +0 -1
  640. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  641. package/dist/types/LongIntegerType.spec.js +0 -12
  642. package/dist/types/LongIntegerType.spec.js.map +0 -1
  643. package/dist/types/ObjectType.spec.d.ts +0 -1
  644. package/dist/types/ObjectType.spec.js +0 -12
  645. package/dist/types/ObjectType.spec.js.map +0 -1
  646. package/dist/types/StringType.spec.d.ts +0 -1
  647. package/dist/types/StringType.spec.js +0 -12
  648. package/dist/types/StringType.spec.js.map +0 -1
  649. package/dist/types/VoidType.spec.d.ts +0 -1
  650. package/dist/types/VoidType.spec.js +0 -12
  651. package/dist/types/VoidType.spec.js.map +0 -1
  652. /package/dist/{astUtils/creators.spec.d.ts → lsp/worker/run.d.ts} +0 -0
@@ -1,854 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vscode_languageserver_1 = require("vscode-languageserver");
4
- const chai_1 = require("chai");
5
- const sinon = require("sinon");
6
- const Program_1 = require("../Program");
7
- const Statement_1 = require("../parser/Statement");
8
- const lexer_1 = require("../lexer");
9
- const visitors_1 = require("./visitors");
10
- const reflection_1 = require("./reflection");
11
- const creators_1 = require("./creators");
12
- const stackedVisitor_1 = require("./stackedVisitor");
13
- describe('astUtils visitors', () => {
14
- const rootDir = process.cwd();
15
- let program;
16
- const PRINTS_SRC = `
17
- sub Main()
18
- print 1
19
- print 2
20
-
21
- function exec(s)
22
- s()
23
- end function
24
-
25
- exec(sub()
26
- print 8
27
- end sub)
28
-
29
- if a = 1
30
- print 3
31
- else if a = 2
32
- print 4
33
- else
34
- print 5
35
- end if
36
-
37
- while a <> invalid
38
- print 6
39
- end while
40
-
41
- for a = 1 to 10
42
- print 7
43
- end for
44
- end sub
45
- `;
46
- const EXPRESSIONS_SRC = `
47
- sub Main()
48
- 'comment
49
- print "msg"; 3
50
- print \`expand \${var}\`
51
- a = "a"
52
- b = "b" + c
53
- m.global.x = "x"
54
- aa[10] = "aa"
55
- exec("e", some())
56
- for i = 1 to 10
57
- end for
58
- for each n in aa
59
- end for
60
- while i < 10
61
- i++
62
- end while
63
- if j > 0
64
- else if j < -10
65
- end if
66
- return invalid
67
- end sub
68
- `;
69
- beforeEach(() => {
70
- program = new Program_1.Program({ rootDir: rootDir });
71
- });
72
- afterEach(() => {
73
- program.dispose();
74
- });
75
- function functionsWalker(visitor, cancel) {
76
- return (file) => {
77
- file.parser.references.functionExpressions.some(functionExpression => {
78
- visitor(functionExpression.body, undefined);
79
- visitors_1.walkStatements(functionExpression.body, (statement, parent) => visitor(statement, parent), cancel);
80
- return cancel === null || cancel === void 0 ? void 0 : cancel.isCancellationRequested;
81
- });
82
- };
83
- }
84
- describe('Statements', () => {
85
- it('Walks through all the statements with depth', () => {
86
- const actual = [];
87
- const visitor = stackedVisitor_1.createStackedVisitor((s, stack) => {
88
- const d = stack.length;
89
- actual.push(`${s.constructor.name}:${d}`);
90
- });
91
- const walker = functionsWalker(visitor);
92
- program.plugins.add({
93
- name: 'walker',
94
- afterFileParse: (event) => walker(event.file)
95
- });
96
- program.setFile('source/main.brs', PRINTS_SRC);
97
- chai_1.expect(actual).to.deep.equal([
98
- 'Block:0',
99
- 'PrintStatement:1',
100
- 'PrintStatement:1',
101
- 'FunctionStatement:1',
102
- 'ExpressionStatement:1',
103
- 'IfStatement:1',
104
- 'Block:2',
105
- 'PrintStatement:3',
106
- 'IfStatement:2',
107
- 'Block:3',
108
- 'PrintStatement:4',
109
- 'Block:3',
110
- 'PrintStatement:4',
111
- 'WhileStatement:1',
112
- 'Block:2',
113
- 'PrintStatement:3',
114
- 'ForStatement:1',
115
- 'AssignmentStatement:2',
116
- 'Block:2',
117
- 'PrintStatement:3',
118
- 'Block:0',
119
- 'ExpressionStatement:1',
120
- 'Block:0',
121
- 'PrintStatement:1' // print 8
122
- ]);
123
- });
124
- it('Walks through all the statements with token not cancelled', () => {
125
- const cancel = new vscode_languageserver_1.CancellationTokenSource();
126
- const actual = [];
127
- const walker = functionsWalker(s => actual.push(s.constructor.name), cancel.token);
128
- program.plugins.add({
129
- name: 'walker',
130
- afterFileParse: (event) => walker(event.file)
131
- });
132
- program.setFile('source/file.brs', PRINTS_SRC);
133
- chai_1.expect(actual).to.deep.equal([
134
- 'Block',
135
- 'PrintStatement',
136
- 'PrintStatement',
137
- 'FunctionStatement',
138
- 'ExpressionStatement',
139
- 'IfStatement',
140
- 'Block',
141
- 'PrintStatement',
142
- 'IfStatement',
143
- 'Block',
144
- 'PrintStatement',
145
- 'Block',
146
- 'PrintStatement',
147
- 'WhileStatement',
148
- 'Block',
149
- 'PrintStatement',
150
- 'ForStatement',
151
- 'AssignmentStatement',
152
- 'Block',
153
- 'PrintStatement',
154
- 'Block',
155
- 'ExpressionStatement',
156
- 'Block',
157
- 'PrintStatement' // print 8
158
- ]);
159
- });
160
- it('Stops walking when requested', () => {
161
- const cancel = new vscode_languageserver_1.CancellationTokenSource();
162
- const actual = [];
163
- let count = 0;
164
- const walker = functionsWalker(s => {
165
- actual.push(s.constructor.name);
166
- if (reflection_1.isPrintStatement(s)) {
167
- if (++count === 4) {
168
- cancel.cancel();
169
- }
170
- }
171
- }, cancel.token);
172
- program.plugins.add({
173
- name: 'walker',
174
- afterFileParse: (event) => {
175
- walker(event.file);
176
- }
177
- });
178
- program.setFile('source/file.brs', PRINTS_SRC);
179
- chai_1.expect(actual).to.deep.equal([
180
- 'Block',
181
- 'PrintStatement',
182
- 'PrintStatement',
183
- 'FunctionStatement',
184
- 'ExpressionStatement',
185
- 'IfStatement',
186
- 'Block',
187
- 'PrintStatement',
188
- 'IfStatement',
189
- 'Block',
190
- 'PrintStatement' // print 4
191
- ]);
192
- });
193
- });
194
- describe('Statement visitor', () => {
195
- it('Maps statements to individual handlers', () => {
196
- const printHandler = sinon.spy();
197
- const blockHandler = sinon.spy();
198
- const visitor = visitors_1.createVisitor({
199
- PrintStatement: printHandler,
200
- Block: blockHandler
201
- });
202
- 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));
206
- visitor(printStatement, undefined);
207
- 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;
212
- });
213
- });
214
- describe('Statement editor', () => {
215
- it('allows replacing statements', () => {
216
- const printStatement1 = new Statement_1.PrintStatement({
217
- print: creators_1.createToken(lexer_1.TokenKind.Print)
218
- }, []);
219
- 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({
227
- PrintStatement: () => printStatement2
228
- });
229
- visitors_1.walkStatements(block, visitor);
230
- chai_1.expect(block.statements[0]).to.equal(printStatement2);
231
- });
232
- });
233
- describe('Expressions', () => {
234
- it('Walks through all expressions', () => {
235
- const actual = [];
236
- let curr;
237
- const statementVisitor = stackedVisitor_1.createStackedVisitor((statement, stack) => {
238
- curr = { statement: statement, depth: stack.length };
239
- });
240
- function expressionVisitor(expression, _) {
241
- const { statement, depth } = curr;
242
- actual.push(`${statement.constructor.name}:${depth}:${expression.constructor.name}`);
243
- }
244
- const walker = functionsWalker((statement, parentStatement) => {
245
- statementVisitor(statement, parentStatement);
246
- statement.walk(expressionVisitor, {
247
- walkMode: visitors_1.WalkMode.visitLocalExpressions
248
- });
249
- });
250
- program.plugins.add({
251
- name: 'walker',
252
- afterFileParse: (event) => walker(event.file)
253
- });
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>
258
- 'PrintStatement:1:LiteralExpression',
259
- 'PrintStatement:1:LiteralExpression',
260
- 'PrintStatement:1:TemplateStringExpression',
261
- 'PrintStatement:1:TemplateStringQuasiExpression',
262
- 'PrintStatement:1:LiteralExpression',
263
- 'PrintStatement:1:VariableExpression',
264
- 'PrintStatement:1:TemplateStringQuasiExpression',
265
- 'PrintStatement:1:LiteralExpression',
266
- 'AssignmentStatement:1:LiteralExpression',
267
- 'AssignmentStatement:1:BinaryExpression',
268
- 'AssignmentStatement:1:LiteralExpression',
269
- 'AssignmentStatement:1:VariableExpression',
270
- 'DottedSetStatement:1:DottedGetExpression',
271
- 'DottedSetStatement:1:VariableExpression',
272
- 'DottedSetStatement:1:LiteralExpression',
273
- 'IndexedSetStatement:1:VariableExpression',
274
- 'IndexedSetStatement:1:LiteralExpression',
275
- 'IndexedSetStatement:1:LiteralExpression',
276
- 'ExpressionStatement:1:CallExpression',
277
- 'ExpressionStatement:1:VariableExpression',
278
- 'ExpressionStatement:1:LiteralExpression',
279
- 'ExpressionStatement:1:CallExpression',
280
- 'ExpressionStatement:1:VariableExpression',
281
- 'ForStatement:1:LiteralExpression',
282
- 'AssignmentStatement:2:LiteralExpression',
283
- 'ForEachStatement:1:VariableExpression',
284
- 'WhileStatement:1:BinaryExpression',
285
- 'WhileStatement:1:VariableExpression',
286
- 'WhileStatement:1:LiteralExpression',
287
- 'IncrementStatement:3:VariableExpression',
288
- 'IfStatement:1:BinaryExpression',
289
- 'IfStatement:1:VariableExpression',
290
- 'IfStatement:1:LiteralExpression',
291
- 'IfStatement:2:BinaryExpression',
292
- 'IfStatement:2:VariableExpression',
293
- 'IfStatement:2:UnaryExpression',
294
- 'IfStatement:2:LiteralExpression',
295
- 'ReturnStatement:1:LiteralExpression' // return <invalid>
296
- ]);
297
- });
298
- });
299
- describe('walk', () => {
300
- function testWalk(text, expectedConstructors, walkMode = visitors_1.WalkMode.visitAllRecursive) {
301
- const file = program.setFile('source/main.bs', text);
302
- const items = [];
303
- let index = 1;
304
- file.ast.walk((element) => {
305
- element._testId = index++;
306
- items.push(element);
307
- }, {
308
- walkMode: walkMode
309
- });
310
- index = 1;
311
- chai_1.expect(items.map(x => `${x.constructor.name}:${x._testId}`)).to.eql(expectedConstructors.map(x => `${x}:${index++}`));
312
- }
313
- it('Walks through all expressions until cancelled', () => {
314
- const file = program.setFile('source/main.bs', `
315
- sub logger(message = "nil" as string)
316
- innerLog = sub(message = "nil" as string)
317
- print message
318
- end sub
319
- innerLog(message)
320
- end sub
321
- `);
322
- const cancel = new vscode_languageserver_1.CancellationTokenSource();
323
- let count = 0;
324
- const stopIndex = 5;
325
- file.ast.walk((statement, parent) => {
326
- count++;
327
- if (count === stopIndex) {
328
- cancel.cancel();
329
- }
330
- }, {
331
- walkMode: visitors_1.WalkMode.visitAllRecursive,
332
- cancel: cancel.token
333
- });
334
- chai_1.expect(count).to.equal(stopIndex);
335
- });
336
- it('walks if statement', () => {
337
- testWalk(`
338
- sub main()
339
- if true then
340
- print "true"
341
- else if true then
342
- print "true"
343
- else
344
- print "true"
345
- end if
346
- end sub
347
- `, [
348
- 'FunctionStatement',
349
- 'FunctionExpression',
350
- 'Block',
351
- //if
352
- 'IfStatement',
353
- 'LiteralExpression',
354
- 'Block',
355
- 'PrintStatement',
356
- 'LiteralExpression',
357
- //else if
358
- 'IfStatement',
359
- 'LiteralExpression',
360
- 'Block',
361
- 'PrintStatement',
362
- 'LiteralExpression',
363
- //else
364
- 'Block',
365
- 'PrintStatement',
366
- 'LiteralExpression'
367
- ]);
368
- });
369
- it('walks if statement without else', () => {
370
- testWalk(`
371
- sub main()
372
- if true then
373
- print "true"
374
- end if
375
- end sub
376
- `, [
377
- 'FunctionStatement',
378
- 'FunctionExpression',
379
- 'Block',
380
- 'IfStatement',
381
- 'LiteralExpression',
382
- 'Block',
383
- 'PrintStatement',
384
- 'LiteralExpression'
385
- ]);
386
- });
387
- it('walks increment statement', () => {
388
- testWalk(`
389
- sub main()
390
- age = 12
391
- age++
392
- end sub
393
- `, [
394
- 'FunctionStatement',
395
- 'FunctionExpression',
396
- 'Block',
397
- 'AssignmentStatement',
398
- 'LiteralExpression',
399
- 'IncrementStatement',
400
- 'VariableExpression'
401
- ]);
402
- });
403
- it('walks ForStatement', () => {
404
- testWalk(`
405
- sub main()
406
- for i = 0 to 10 step 1
407
- print i
408
- end for
409
- end sub
410
- `, [
411
- 'FunctionStatement',
412
- 'FunctionExpression',
413
- 'Block',
414
- 'ForStatement',
415
- 'AssignmentStatement',
416
- 'LiteralExpression',
417
- 'LiteralExpression',
418
- 'LiteralExpression',
419
- 'Block',
420
- 'PrintStatement',
421
- 'VariableExpression'
422
- ]);
423
- });
424
- it('walks ForEachStatement', () => {
425
- testWalk(`
426
- sub main()
427
- for each item in [1,2,3]
428
- print item
429
- end for
430
- end sub
431
- `, [
432
- 'FunctionStatement',
433
- 'FunctionExpression',
434
- 'Block',
435
- 'ForEachStatement',
436
- 'ArrayLiteralExpression',
437
- 'LiteralExpression',
438
- 'LiteralExpression',
439
- 'LiteralExpression',
440
- 'Block',
441
- 'PrintStatement',
442
- 'VariableExpression'
443
- ]);
444
- });
445
- it('walks dotted and indexed set statements', () => {
446
- testWalk(`
447
- sub main()
448
- person = {}
449
- person.name = "person"
450
- person["age"] = 12
451
- end sub
452
- `, [
453
- 'FunctionStatement',
454
- 'FunctionExpression',
455
- 'Block',
456
- 'AssignmentStatement',
457
- 'AALiteralExpression',
458
- 'DottedSetStatement',
459
- 'VariableExpression',
460
- 'LiteralExpression',
461
- 'IndexedSetStatement',
462
- 'VariableExpression',
463
- 'LiteralExpression',
464
- 'LiteralExpression'
465
- ]);
466
- });
467
- it('walks while loop', () => {
468
- testWalk(`
469
- sub main()
470
- while 1 + 1 = 2
471
- print "infinite"
472
- end while
473
- end sub
474
- `, [
475
- 'FunctionStatement',
476
- 'FunctionExpression',
477
- 'Block',
478
- 'WhileStatement',
479
- 'BinaryExpression',
480
- 'BinaryExpression',
481
- 'LiteralExpression',
482
- 'LiteralExpression',
483
- 'LiteralExpression',
484
- 'Block',
485
- 'PrintStatement',
486
- 'LiteralExpression'
487
- ]);
488
- });
489
- it('walks namespace', () => {
490
- testWalk(`
491
- namespace NameA.NameB
492
- end namespace
493
- `, [
494
- 'NamespaceStatement',
495
- 'NamespacedVariableNameExpression',
496
- 'DottedGetExpression',
497
- 'VariableExpression'
498
- ]);
499
- });
500
- it('walks nested functions', () => {
501
- testWalk(`
502
- sub main()
503
- print "main"
504
- inner1 = sub()
505
- print "inner1"
506
- inner2 = sub()
507
- print "inner2"
508
- inner3 = sub()
509
- print "inner3"
510
- end sub
511
- end sub
512
- end sub
513
- end sub
514
- `, [
515
- //sub main()
516
- 'FunctionStatement',
517
- 'FunctionExpression',
518
- 'Block',
519
- 'PrintStatement',
520
- 'LiteralExpression',
521
- //inner1 = sub()
522
- 'AssignmentStatement',
523
- 'FunctionExpression',
524
- 'Block',
525
- 'PrintStatement',
526
- 'LiteralExpression',
527
- //inner2 = sub()
528
- 'AssignmentStatement',
529
- 'FunctionExpression',
530
- 'Block',
531
- 'PrintStatement',
532
- 'LiteralExpression',
533
- //inner3 = sub
534
- 'AssignmentStatement',
535
- 'FunctionExpression',
536
- 'Block',
537
- 'PrintStatement',
538
- 'LiteralExpression'
539
- ]);
540
- });
541
- it('walks CallExpression', () => {
542
- testWalk(`
543
- sub main()
544
- Sleep(123)
545
- end sub
546
- `, [
547
- 'FunctionStatement',
548
- 'FunctionExpression',
549
- 'Block',
550
- 'ExpressionStatement',
551
- 'CallExpression',
552
- 'VariableExpression',
553
- 'LiteralExpression'
554
- ]);
555
- });
556
- it('walks function parameters', () => {
557
- testWalk(`
558
- sub main(arg1)
559
- speak = sub(arg1, arg2)
560
- end sub
561
- end sub
562
- `, [
563
- 'FunctionStatement',
564
- 'FunctionExpression',
565
- 'FunctionParameterExpression',
566
- 'Block',
567
- 'AssignmentStatement',
568
- 'FunctionExpression',
569
- 'FunctionParameterExpression',
570
- 'FunctionParameterExpression',
571
- 'Block'
572
- ]);
573
- });
574
- it('walks DottedGetExpression', () => {
575
- testWalk(`
576
- sub main()
577
- print person.name
578
- end sub
579
- `, [
580
- 'FunctionStatement',
581
- 'FunctionExpression',
582
- 'Block',
583
- 'PrintStatement',
584
- 'DottedGetExpression',
585
- 'VariableExpression'
586
- ]);
587
- });
588
- it('walks XmlAttributeGetExpression', () => {
589
- testWalk(`
590
- sub main()
591
- print person@name
592
- end sub
593
- `, [
594
- 'FunctionStatement',
595
- 'FunctionExpression',
596
- 'Block',
597
- 'PrintStatement',
598
- 'XmlAttributeGetExpression',
599
- 'VariableExpression'
600
- ]);
601
- });
602
- it('walks IndexedGetExpression', () => {
603
- testWalk(`
604
- sub main()
605
- print person["name"]
606
- end sub
607
- `, [
608
- 'FunctionStatement',
609
- 'FunctionExpression',
610
- 'Block',
611
- 'PrintStatement',
612
- 'IndexedGetExpression',
613
- 'VariableExpression',
614
- 'LiteralExpression'
615
- ]);
616
- });
617
- it('walks GroupingExpression', () => {
618
- testWalk(`
619
- sub main()
620
- print 1 + ( 1 + 2 )
621
- end sub
622
- `, [
623
- 'FunctionStatement',
624
- 'FunctionExpression',
625
- 'Block',
626
- 'PrintStatement',
627
- 'BinaryExpression',
628
- 'LiteralExpression',
629
- 'GroupingExpression',
630
- 'BinaryExpression',
631
- 'LiteralExpression',
632
- 'LiteralExpression'
633
- ]);
634
- });
635
- it('walks AALiteralExpression', () => {
636
- testWalk(`
637
- sub main()
638
- person = {
639
- 'comment
640
- "name": "John Doe"
641
- }
642
- end sub
643
- `, [
644
- 'FunctionStatement',
645
- 'FunctionExpression',
646
- 'Block',
647
- 'AssignmentStatement',
648
- 'AALiteralExpression',
649
- 'CommentStatement',
650
- 'AAMemberExpression',
651
- 'LiteralExpression'
652
- ]);
653
- });
654
- it('walks UnaryExpression', () => {
655
- testWalk(`
656
- sub main()
657
- isAlive = not isDead
658
- end sub
659
- `, [
660
- 'FunctionStatement',
661
- 'FunctionExpression',
662
- 'Block',
663
- 'AssignmentStatement',
664
- 'UnaryExpression',
665
- 'VariableExpression'
666
- ]);
667
- });
668
- it('walks TemplateStringExpression', () => {
669
- testWalk(`
670
- sub main()
671
- print \`Hello \${worldVar}\`
672
- end sub
673
- `, [
674
- 'FunctionStatement',
675
- 'FunctionExpression',
676
- 'Block',
677
- 'PrintStatement',
678
- 'TemplateStringExpression',
679
- 'TemplateStringQuasiExpression',
680
- 'LiteralExpression',
681
- 'VariableExpression',
682
- 'TemplateStringQuasiExpression',
683
- 'LiteralExpression'
684
- ]);
685
- });
686
- it('walks ReturnStatement with or without value', () => {
687
- testWalk(`
688
- sub main()
689
- a = 0
690
- if a = 0 then
691
- return
692
- else if a > 0 then
693
- return 1
694
- else
695
- return 'nothing
696
- end if
697
- end sub
698
- `, [
699
- 'FunctionStatement',
700
- 'FunctionExpression',
701
- 'Block',
702
- 'AssignmentStatement',
703
- 'LiteralExpression',
704
- //if
705
- 'IfStatement',
706
- 'BinaryExpression',
707
- 'VariableExpression',
708
- 'LiteralExpression',
709
- 'Block',
710
- 'ReturnStatement',
711
- //else if
712
- 'IfStatement',
713
- 'BinaryExpression',
714
- 'VariableExpression',
715
- 'LiteralExpression',
716
- 'Block',
717
- 'ReturnStatement',
718
- 'LiteralExpression',
719
- //else
720
- 'Block',
721
- 'ReturnStatement',
722
- 'CommentStatement'
723
- ]);
724
- });
725
- it('walks TaggedTemplateStringExpression', () => {
726
- testWalk(`
727
- sub main()
728
- print tag\`Hello \${worldVar}\`
729
- end sub
730
- `, [
731
- 'FunctionStatement',
732
- 'FunctionExpression',
733
- 'Block',
734
- 'PrintStatement',
735
- 'TaggedTemplateStringExpression',
736
- 'TemplateStringQuasiExpression',
737
- 'LiteralExpression',
738
- 'VariableExpression',
739
- 'TemplateStringQuasiExpression',
740
- 'LiteralExpression'
741
- ]);
742
- });
743
- it('walks CharCodeLiteral expression within TemplateLiteralExpression', () => {
744
- testWalk(`
745
- sub main()
746
- print \`\\n\`
747
- end sub
748
- `, [
749
- 'FunctionStatement',
750
- 'FunctionExpression',
751
- 'Block',
752
- 'PrintStatement',
753
- 'TemplateStringExpression',
754
- 'TemplateStringQuasiExpression',
755
- 'LiteralExpression',
756
- 'EscapedCharCodeLiteralExpression',
757
- 'LiteralExpression'
758
- ]);
759
- });
760
- it('walks NewExpression', () => {
761
- testWalk(`
762
- sub main()
763
- person = new Person()
764
- end sub
765
- `, [
766
- 'FunctionStatement',
767
- 'FunctionExpression',
768
- 'Block',
769
- 'AssignmentStatement',
770
- 'NewExpression',
771
- 'CallExpression',
772
- 'NamespacedVariableNameExpression',
773
- 'VariableExpression'
774
- ]);
775
- });
776
- it('walks CallfuncExpression', () => {
777
- testWalk(`
778
- sub main()
779
- person@.doSomething("arg1")
780
- end sub
781
- `, [
782
- 'FunctionStatement',
783
- 'FunctionExpression',
784
- 'Block',
785
- 'ExpressionStatement',
786
- 'CallfuncExpression',
787
- 'VariableExpression',
788
- 'LiteralExpression'
789
- ]);
790
- });
791
- it('walks ClassStatement', () => {
792
- testWalk(`
793
- class Person
794
- name as string
795
- age as integer = 1
796
- function getName()
797
- return m.name
798
- end function
799
- end class
800
- `, [
801
- 'ClassStatement',
802
- 'ClassFieldStatement',
803
- 'ClassFieldStatement',
804
- 'LiteralExpression',
805
- 'ClassMethodStatement',
806
- 'FunctionExpression',
807
- 'Block',
808
- 'ReturnStatement',
809
- 'DottedGetExpression',
810
- 'VariableExpression'
811
- ]);
812
- });
813
- it('visits all statements and no expressions', () => {
814
- testWalk(`
815
- sub main()
816
- log = sub(message)
817
- print "hello " + message
818
- end sub
819
- log("hello" + " world")
820
- end sub
821
- `, [
822
- 'FunctionStatement',
823
- 'Block',
824
- 'AssignmentStatement',
825
- 'Block',
826
- 'PrintStatement',
827
- 'ExpressionStatement'
828
- ], visitors_1.WalkMode.visitStatementsRecursive);
829
- });
830
- it('visits all expressions and no statement', () => {
831
- testWalk(`
832
- sub main()
833
- log = sub(message)
834
- print "hello " + message
835
- end sub
836
- log("hello" + " world")
837
- end sub
838
- `, [
839
- 'FunctionExpression',
840
- 'FunctionExpression',
841
- 'FunctionParameterExpression',
842
- 'BinaryExpression',
843
- 'LiteralExpression',
844
- 'VariableExpression',
845
- 'CallExpression',
846
- 'VariableExpression',
847
- 'BinaryExpression',
848
- 'LiteralExpression',
849
- 'LiteralExpression'
850
- ], visitors_1.WalkMode.visitExpressionsRecursive);
851
- });
852
- });
853
- });
854
- //# sourceMappingURL=visitors.spec.js.map