brighterscript 1.0.0-alpha.24 → 1.0.0-alpha.25

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 (530) hide show
  1. package/CHANGELOG.md +493 -233
  2. package/README.md +45 -139
  3. package/bsconfig.schema.json +41 -0
  4. package/dist/ActionPipeline.d.ts +10 -0
  5. package/dist/ActionPipeline.js +40 -0
  6. package/dist/ActionPipeline.js.map +1 -0
  7. package/dist/AstValidationSegmenter.d.ts +25 -0
  8. package/dist/AstValidationSegmenter.js +152 -0
  9. package/dist/AstValidationSegmenter.js.map +1 -0
  10. package/dist/BsConfig.d.ts +39 -4
  11. package/dist/BusyStatusTracker.d.ts +31 -0
  12. package/dist/BusyStatusTracker.js +83 -0
  13. package/dist/BusyStatusTracker.js.map +1 -0
  14. package/dist/Cache.js +3 -3
  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 +3 -3
  20. package/dist/CodeActionUtil.js.map +1 -1
  21. package/dist/CommentFlagProcessor.d.ts +3 -2
  22. package/dist/CommentFlagProcessor.js +5 -4
  23. package/dist/CommentFlagProcessor.js.map +1 -1
  24. package/dist/DependencyGraph.d.ts +3 -2
  25. package/dist/DependencyGraph.js +11 -10
  26. package/dist/DependencyGraph.js.map +1 -1
  27. package/dist/DiagnosticCollection.js +9 -5
  28. package/dist/DiagnosticCollection.js.map +1 -1
  29. package/dist/DiagnosticFilterer.d.ts +1 -0
  30. package/dist/DiagnosticFilterer.js +5 -3
  31. package/dist/DiagnosticFilterer.js.map +1 -1
  32. package/dist/DiagnosticMessages.d.ts +61 -13
  33. package/dist/DiagnosticMessages.js +116 -19
  34. package/dist/DiagnosticMessages.js.map +1 -1
  35. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  36. package/dist/DiagnosticSeverityAdjuster.js +41 -0
  37. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  38. package/dist/FunctionScope.d.ts +28 -0
  39. package/dist/FunctionScope.js +52 -0
  40. package/dist/FunctionScope.js.map +1 -0
  41. package/dist/KeyedThrottler.d.ts +3 -3
  42. package/dist/KeyedThrottler.js +3 -3
  43. package/dist/KeyedThrottler.js.map +1 -1
  44. package/dist/LanguageServer.d.ts +23 -11
  45. package/dist/LanguageServer.js +150 -69
  46. package/dist/LanguageServer.js.map +1 -1
  47. package/dist/Logger.d.ts +3 -2
  48. package/dist/Logger.js +11 -3
  49. package/dist/Logger.js.map +1 -1
  50. package/dist/PluginInterface.d.ts +21 -3
  51. package/dist/PluginInterface.js +74 -6
  52. package/dist/PluginInterface.js.map +1 -1
  53. package/dist/Program.d.ts +158 -79
  54. package/dist/Program.js +831 -695
  55. package/dist/Program.js.map +1 -1
  56. package/dist/ProgramBuilder.d.ts +22 -12
  57. package/dist/ProgramBuilder.js +130 -103
  58. package/dist/ProgramBuilder.js.map +1 -1
  59. package/dist/Scope.d.ts +87 -133
  60. package/dist/Scope.js +450 -510
  61. package/dist/Scope.js.map +1 -1
  62. package/dist/Stopwatch.js +1 -1
  63. package/dist/Stopwatch.js.map +1 -1
  64. package/dist/SymbolTable.d.ts +89 -34
  65. package/dist/SymbolTable.js +239 -114
  66. package/dist/SymbolTable.js.map +1 -1
  67. package/dist/Throttler.d.ts +12 -0
  68. package/dist/Throttler.js +39 -0
  69. package/dist/Throttler.js.map +1 -1
  70. package/dist/Watcher.d.ts +0 -3
  71. package/dist/Watcher.js +0 -3
  72. package/dist/Watcher.js.map +1 -1
  73. package/dist/XmlScope.d.ts +4 -6
  74. package/dist/XmlScope.js +74 -69
  75. package/dist/XmlScope.js.map +1 -1
  76. package/dist/astUtils/CachedLookups.d.ts +48 -0
  77. package/dist/astUtils/CachedLookups.js +323 -0
  78. package/dist/astUtils/CachedLookups.js.map +1 -0
  79. package/dist/astUtils/{AstEditor.d.ts → Editor.d.ts} +9 -5
  80. package/dist/astUtils/{AstEditor.js → Editor.js} +10 -4
  81. package/dist/astUtils/Editor.js.map +1 -0
  82. package/dist/astUtils/{AstEditor.spec.js → Editor.spec.js} +68 -64
  83. package/dist/astUtils/Editor.spec.js.map +1 -0
  84. package/dist/astUtils/creators.d.ts +10 -10
  85. package/dist/astUtils/creators.js +26 -16
  86. package/dist/astUtils/creators.js.map +1 -1
  87. package/dist/astUtils/creators.spec.js +5 -5
  88. package/dist/astUtils/creators.spec.js.map +1 -1
  89. package/dist/astUtils/reflection.d.ts +132 -104
  90. package/dist/astUtils/reflection.js +220 -174
  91. package/dist/astUtils/reflection.js.map +1 -1
  92. package/dist/astUtils/reflection.spec.js +208 -126
  93. package/dist/astUtils/reflection.spec.js.map +1 -1
  94. package/dist/astUtils/stackedVisitor.spec.js +12 -12
  95. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  96. package/dist/astUtils/visitors.d.ts +53 -35
  97. package/dist/astUtils/visitors.js +29 -3
  98. package/dist/astUtils/visitors.js.map +1 -1
  99. package/dist/astUtils/visitors.spec.js +178 -33
  100. package/dist/astUtils/visitors.spec.js.map +1 -1
  101. package/dist/astUtils/xml.d.ts +9 -9
  102. package/dist/astUtils/xml.js +9 -9
  103. package/dist/astUtils/xml.js.map +1 -1
  104. package/dist/bscPlugin/BscPlugin.d.ts +10 -2
  105. package/dist/bscPlugin/BscPlugin.js +33 -3
  106. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  107. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  108. package/dist/bscPlugin/CallExpressionInfo.js +131 -0
  109. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  110. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  111. package/dist/bscPlugin/FileWriter.js +24 -0
  112. package/dist/bscPlugin/FileWriter.js.map +1 -0
  113. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  114. package/dist/bscPlugin/SignatureHelpUtil.js +135 -0
  115. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  116. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +14 -11
  117. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  118. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +16 -16
  119. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  120. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +52 -1
  121. package/dist/bscPlugin/completions/CompletionsProcessor.js +517 -26
  122. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  123. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1909 -0
  124. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  125. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  126. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  127. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  128. package/dist/bscPlugin/hover/HoverProcessor.d.ts +7 -7
  129. package/dist/bscPlugin/hover/HoverProcessor.js +123 -125
  130. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  131. package/dist/bscPlugin/hover/HoverProcessor.spec.js +371 -53
  132. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  133. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +2 -1
  134. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +85 -23
  135. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  136. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +83 -6
  137. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  138. package/dist/bscPlugin/serialize/BslibInjector.spec.js +19 -0
  139. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  140. package/dist/bscPlugin/serialize/BslibManager.d.ts +9 -0
  141. package/dist/bscPlugin/serialize/BslibManager.js +40 -0
  142. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  143. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  144. package/dist/bscPlugin/serialize/FileSerializer.js +72 -0
  145. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  146. package/dist/bscPlugin/transpile/{BrsFilePreTranspileProcessor.d.ts → BrsFileTranspileProcessor.d.ts} +4 -2
  147. package/dist/bscPlugin/transpile/{BrsFilePreTranspileProcessor.js → BrsFileTranspileProcessor.js} +33 -9
  148. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  149. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  150. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +41 -0
  151. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  152. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  153. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  154. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  155. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +13 -5
  156. package/dist/bscPlugin/validation/BrsFileValidator.js +259 -49
  157. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  158. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +230 -14
  159. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  160. package/dist/bscPlugin/validation/ProgramValidator.d.ts +10 -0
  161. package/dist/bscPlugin/validation/ProgramValidator.js +32 -0
  162. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  163. package/dist/bscPlugin/validation/ScopeValidator.d.ts +54 -27
  164. package/dist/bscPlugin/validation/ScopeValidator.js +483 -286
  165. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  166. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  167. package/dist/bscPlugin/validation/ScopeValidator.spec.js +2454 -0
  168. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  169. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  170. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  171. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  172. package/dist/cli.js +104 -13
  173. package/dist/cli.js.map +1 -1
  174. package/dist/deferred.d.ts +3 -3
  175. package/dist/deferred.js.map +1 -1
  176. package/dist/diagnosticUtils.d.ts +8 -2
  177. package/dist/diagnosticUtils.js +47 -17
  178. package/dist/diagnosticUtils.js.map +1 -1
  179. package/dist/examples/plugins/removePrint.js +8 -10
  180. package/dist/examples/plugins/removePrint.js.map +1 -1
  181. package/dist/files/AssetFile.d.ts +26 -0
  182. package/dist/files/AssetFile.js +26 -0
  183. package/dist/files/AssetFile.js.map +1 -0
  184. package/dist/files/BrsFile.Class.spec.js +523 -493
  185. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  186. package/dist/files/BrsFile.d.ts +112 -111
  187. package/dist/files/BrsFile.js +741 -1032
  188. package/dist/files/BrsFile.js.map +1 -1
  189. package/dist/files/BrsFile.spec.js +1728 -1232
  190. package/dist/files/BrsFile.spec.js.map +1 -1
  191. package/dist/files/BscFile.d.ts +104 -0
  192. package/dist/files/BscFile.js +16 -0
  193. package/dist/files/BscFile.js.map +1 -0
  194. package/dist/files/Factory.d.ts +25 -0
  195. package/dist/files/Factory.js +22 -0
  196. package/dist/files/Factory.js.map +1 -0
  197. package/dist/files/LazyFileData.d.ts +20 -0
  198. package/dist/files/LazyFileData.js +54 -0
  199. package/dist/files/LazyFileData.js.map +1 -0
  200. package/dist/files/LazyFileData.spec.d.ts +1 -0
  201. package/dist/files/LazyFileData.spec.js +27 -0
  202. package/dist/files/LazyFileData.spec.js.map +1 -0
  203. package/dist/files/XmlFile.d.ts +70 -32
  204. package/dist/files/XmlFile.js +106 -118
  205. package/dist/files/XmlFile.js.map +1 -1
  206. package/dist/files/XmlFile.spec.js +325 -262
  207. package/dist/files/XmlFile.spec.js.map +1 -1
  208. package/dist/files/tests/imports.spec.js +48 -40
  209. package/dist/files/tests/imports.spec.js.map +1 -1
  210. package/dist/files/tests/optionalChaning.spec.js +84 -24
  211. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  212. package/dist/globalCallables.js +16 -21
  213. package/dist/globalCallables.js.map +1 -1
  214. package/dist/index.d.ts +12 -1
  215. package/dist/index.js +12 -1
  216. package/dist/index.js.map +1 -1
  217. package/dist/interfaces.d.ts +389 -161
  218. package/dist/interfaces.js +27 -0
  219. package/dist/interfaces.js.map +1 -1
  220. package/dist/lexer/Character.spec.js +5 -5
  221. package/dist/lexer/Character.spec.js.map +1 -1
  222. package/dist/lexer/Lexer.d.ts +12 -5
  223. package/dist/lexer/Lexer.js +28 -13
  224. package/dist/lexer/Lexer.js.map +1 -1
  225. package/dist/lexer/Lexer.spec.js +181 -135
  226. package/dist/lexer/Lexer.spec.js.map +1 -1
  227. package/dist/lexer/Token.d.ts +9 -1
  228. package/dist/lexer/Token.js +9 -1
  229. package/dist/lexer/Token.js.map +1 -1
  230. package/dist/lexer/TokenKind.d.ts +8 -0
  231. package/dist/lexer/TokenKind.js +24 -4
  232. package/dist/lexer/TokenKind.js.map +1 -1
  233. package/dist/parser/AstNode.d.ts +162 -0
  234. package/dist/parser/AstNode.js +225 -0
  235. package/dist/parser/AstNode.js.map +1 -0
  236. package/dist/parser/AstNode.spec.d.ts +1 -0
  237. package/dist/parser/AstNode.spec.js +165 -0
  238. package/dist/parser/AstNode.spec.js.map +1 -0
  239. package/dist/parser/BrsTranspileState.d.ts +4 -7
  240. package/dist/parser/BrsTranspileState.js +4 -12
  241. package/dist/parser/BrsTranspileState.js.map +1 -1
  242. package/dist/parser/Expression.d.ts +126 -176
  243. package/dist/parser/Expression.js +523 -405
  244. package/dist/parser/Expression.js.map +1 -1
  245. package/dist/parser/Parser.Class.spec.js +151 -145
  246. package/dist/parser/Parser.Class.spec.js.map +1 -1
  247. package/dist/parser/Parser.d.ts +43 -201
  248. package/dist/parser/Parser.js +446 -962
  249. package/dist/parser/Parser.js.map +1 -1
  250. package/dist/parser/Parser.spec.d.ts +3 -1
  251. package/dist/parser/Parser.spec.js +1002 -846
  252. package/dist/parser/Parser.spec.js.map +1 -1
  253. package/dist/parser/SGParser.d.ts +9 -8
  254. package/dist/parser/SGParser.js +10 -8
  255. package/dist/parser/SGParser.js.map +1 -1
  256. package/dist/parser/SGParser.spec.js +27 -38
  257. package/dist/parser/SGParser.spec.js.map +1 -1
  258. package/dist/parser/SGTypes.d.ts +98 -35
  259. package/dist/parser/SGTypes.js +169 -99
  260. package/dist/parser/SGTypes.js.map +1 -1
  261. package/dist/parser/Statement.d.ts +183 -131
  262. package/dist/parser/Statement.js +549 -387
  263. package/dist/parser/Statement.js.map +1 -1
  264. package/dist/parser/Statement.spec.js +45 -21
  265. package/dist/parser/Statement.spec.js.map +1 -1
  266. package/dist/parser/TranspileState.d.ts +1 -1
  267. package/dist/parser/TranspileState.js +7 -12
  268. package/dist/parser/TranspileState.js.map +1 -1
  269. package/dist/parser/tests/Parser.spec.js +3 -2
  270. package/dist/parser/tests/Parser.spec.js.map +1 -1
  271. package/dist/parser/tests/controlFlow/For.spec.js +33 -23
  272. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  273. package/dist/parser/tests/controlFlow/ForEach.spec.js +25 -20
  274. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  275. package/dist/parser/tests/controlFlow/If.spec.js +96 -94
  276. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  277. package/dist/parser/tests/controlFlow/While.spec.js +22 -16
  278. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  279. package/dist/parser/tests/expression/Additive.spec.js +8 -8
  280. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  281. package/dist/parser/tests/expression/ArrayLiterals.spec.js +58 -21
  282. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  283. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +61 -20
  284. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  285. package/dist/parser/tests/expression/Boolean.spec.js +8 -8
  286. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  287. package/dist/parser/tests/expression/Call.spec.js +129 -21
  288. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  289. package/dist/parser/tests/expression/Exponential.spec.js +5 -5
  290. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  291. package/dist/parser/tests/expression/Function.spec.js +36 -36
  292. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  293. package/dist/parser/tests/expression/Indexing.spec.js +67 -22
  294. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  295. package/dist/parser/tests/expression/Multiplicative.spec.js +9 -9
  296. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  297. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -59
  298. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  299. package/dist/parser/tests/expression/PrefixUnary.spec.js +12 -12
  300. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  301. package/dist/parser/tests/expression/Primary.spec.js +12 -12
  302. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  303. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
  304. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  305. package/dist/parser/tests/expression/Relational.spec.js +13 -13
  306. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  307. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
  308. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  309. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +96 -57
  310. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  311. package/dist/parser/tests/expression/TernaryExpression.spec.js +89 -89
  312. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  313. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  314. package/dist/parser/tests/expression/TypeExpression.spec.js +127 -0
  315. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  316. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  317. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  318. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  319. package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
  320. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  321. package/dist/parser/tests/statement/ConstStatement.spec.js +82 -33
  322. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  323. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  324. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  325. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  326. package/dist/parser/tests/statement/Declaration.spec.js +19 -19
  327. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  328. package/dist/parser/tests/statement/Dim.spec.js +22 -22
  329. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  330. package/dist/parser/tests/statement/Enum.spec.js +98 -302
  331. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  332. package/dist/parser/tests/statement/For.spec.js +9 -10
  333. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  334. package/dist/parser/tests/statement/ForEach.spec.js +8 -9
  335. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  336. package/dist/parser/tests/statement/Function.spec.js +44 -35
  337. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  338. package/dist/parser/tests/statement/Goto.spec.js +5 -5
  339. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  340. package/dist/parser/tests/statement/Increment.spec.js +20 -20
  341. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  342. package/dist/parser/tests/statement/InterfaceStatement.spec.js +30 -196
  343. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  344. package/dist/parser/tests/statement/LibraryStatement.spec.js +11 -11
  345. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  346. package/dist/parser/tests/statement/Misc.spec.js +16 -78
  347. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  348. package/dist/parser/tests/statement/PrintStatement.spec.js +35 -33
  349. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  350. package/dist/parser/tests/statement/ReturnStatement.spec.js +14 -12
  351. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  352. package/dist/parser/tests/statement/Set.spec.js +48 -35
  353. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  354. package/dist/parser/tests/statement/Stop.spec.js +6 -6
  355. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  356. package/dist/parser/tests/statement/Throw.spec.js +6 -6
  357. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  358. package/dist/parser/tests/statement/TryCatch.spec.js +18 -16
  359. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  360. package/dist/preprocessor/Manifest.d.ts +1 -1
  361. package/dist/preprocessor/Manifest.js +2 -2
  362. package/dist/preprocessor/Manifest.js.map +1 -1
  363. package/dist/preprocessor/Manifest.spec.js +8 -8
  364. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  365. package/dist/preprocessor/Preprocessor.d.ts +5 -6
  366. package/dist/preprocessor/Preprocessor.js +5 -5
  367. package/dist/preprocessor/Preprocessor.js.map +1 -1
  368. package/dist/preprocessor/Preprocessor.spec.js +25 -25
  369. package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
  370. package/dist/preprocessor/PreprocessorParser.d.ts +1 -1
  371. package/dist/preprocessor/PreprocessorParser.js +7 -1
  372. package/dist/preprocessor/PreprocessorParser.js.map +1 -1
  373. package/dist/preprocessor/PreprocessorParser.spec.js +13 -13
  374. package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
  375. package/dist/roku-types/data.json +5892 -10081
  376. package/dist/roku-types/index.d.ts +622 -1719
  377. package/dist/types/ArrayType.d.ts +10 -9
  378. package/dist/types/ArrayType.js +65 -60
  379. package/dist/types/ArrayType.js.map +1 -1
  380. package/dist/types/ArrayType.spec.js +36 -68
  381. package/dist/types/ArrayType.spec.js.map +1 -1
  382. package/dist/types/AssociativeArrayType.d.ts +11 -0
  383. package/dist/types/AssociativeArrayType.js +52 -0
  384. package/dist/types/AssociativeArrayType.js.map +1 -0
  385. package/dist/types/BaseFunctionType.d.ts +9 -0
  386. package/dist/types/BaseFunctionType.js +25 -0
  387. package/dist/types/BaseFunctionType.js.map +1 -0
  388. package/dist/types/BooleanType.d.ts +8 -5
  389. package/dist/types/BooleanType.js +14 -7
  390. package/dist/types/BooleanType.js.map +1 -1
  391. package/dist/types/BooleanType.spec.js +10 -6
  392. package/dist/types/BooleanType.spec.js.map +1 -1
  393. package/dist/types/BscType.d.ts +32 -21
  394. package/dist/types/BscType.js +118 -21
  395. package/dist/types/BscType.js.map +1 -1
  396. package/dist/types/BscTypeKind.d.ts +25 -0
  397. package/dist/types/BscTypeKind.js +30 -0
  398. package/dist/types/BscTypeKind.js.map +1 -0
  399. package/dist/types/BuiltInInterfaceAdder.d.ts +23 -0
  400. package/dist/types/BuiltInInterfaceAdder.js +164 -0
  401. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  402. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  403. package/dist/types/BuiltInInterfaceAdder.spec.js +116 -0
  404. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  405. package/dist/types/ClassType.d.ts +17 -0
  406. package/dist/types/ClassType.js +58 -0
  407. package/dist/types/ClassType.js.map +1 -0
  408. package/dist/types/ClassType.spec.d.ts +1 -0
  409. package/dist/types/ClassType.spec.js +77 -0
  410. package/dist/types/ClassType.spec.js.map +1 -0
  411. package/dist/types/ComponentType.d.ts +26 -0
  412. package/dist/types/ComponentType.js +83 -0
  413. package/dist/types/ComponentType.js.map +1 -0
  414. package/dist/types/DoubleType.d.ts +8 -5
  415. package/dist/types/DoubleType.js +18 -16
  416. package/dist/types/DoubleType.js.map +1 -1
  417. package/dist/types/DoubleType.spec.js +12 -6
  418. package/dist/types/DoubleType.spec.js.map +1 -1
  419. package/dist/types/DynamicType.d.ts +9 -5
  420. package/dist/types/DynamicType.js +15 -4
  421. package/dist/types/DynamicType.js.map +1 -1
  422. package/dist/types/DynamicType.spec.js +16 -5
  423. package/dist/types/DynamicType.spec.js.map +1 -1
  424. package/dist/types/EnumType.d.ts +30 -12
  425. package/dist/types/EnumType.js +43 -17
  426. package/dist/types/EnumType.js.map +1 -1
  427. package/dist/types/EnumType.spec.d.ts +1 -0
  428. package/dist/types/EnumType.spec.js +33 -0
  429. package/dist/types/EnumType.spec.js.map +1 -0
  430. package/dist/types/FloatType.d.ts +8 -5
  431. package/dist/types/FloatType.js +18 -16
  432. package/dist/types/FloatType.js.map +1 -1
  433. package/dist/types/FloatType.spec.js +4 -6
  434. package/dist/types/FloatType.spec.js.map +1 -1
  435. package/dist/types/FunctionType.d.ts +13 -8
  436. package/dist/types/FunctionType.js +30 -14
  437. package/dist/types/FunctionType.js.map +1 -1
  438. package/dist/types/InheritableType.d.ts +28 -0
  439. package/dist/types/InheritableType.js +152 -0
  440. package/dist/types/InheritableType.js.map +1 -0
  441. package/dist/types/IntegerType.d.ts +8 -5
  442. package/dist/types/IntegerType.js +18 -16
  443. package/dist/types/IntegerType.js.map +1 -1
  444. package/dist/types/IntegerType.spec.js +8 -6
  445. package/dist/types/IntegerType.spec.js.map +1 -1
  446. package/dist/types/InterfaceType.d.ts +12 -13
  447. package/dist/types/InterfaceType.js +20 -48
  448. package/dist/types/InterfaceType.js.map +1 -1
  449. package/dist/types/InterfaceType.spec.js +90 -56
  450. package/dist/types/InterfaceType.spec.js.map +1 -1
  451. package/dist/types/InvalidType.d.ts +7 -5
  452. package/dist/types/InvalidType.js +13 -7
  453. package/dist/types/InvalidType.js.map +1 -1
  454. package/dist/types/InvalidType.spec.js +8 -6
  455. package/dist/types/InvalidType.spec.js.map +1 -1
  456. package/dist/types/LongIntegerType.d.ts +8 -5
  457. package/dist/types/LongIntegerType.js +17 -15
  458. package/dist/types/LongIntegerType.js.map +1 -1
  459. package/dist/types/LongIntegerType.spec.js +10 -6
  460. package/dist/types/LongIntegerType.spec.js.map +1 -1
  461. package/dist/types/NamespaceType.d.ts +12 -0
  462. package/dist/types/NamespaceType.js +28 -0
  463. package/dist/types/NamespaceType.js.map +1 -0
  464. package/dist/types/ObjectType.d.ts +9 -8
  465. package/dist/types/ObjectType.js +21 -11
  466. package/dist/types/ObjectType.js.map +1 -1
  467. package/dist/types/ObjectType.spec.js +3 -3
  468. package/dist/types/ObjectType.spec.js.map +1 -1
  469. package/dist/types/ReferenceType.d.ts +63 -0
  470. package/dist/types/ReferenceType.js +423 -0
  471. package/dist/types/ReferenceType.js.map +1 -0
  472. package/dist/types/ReferenceType.spec.d.ts +1 -0
  473. package/dist/types/ReferenceType.spec.js +137 -0
  474. package/dist/types/ReferenceType.spec.js.map +1 -0
  475. package/dist/types/StringType.d.ts +11 -5
  476. package/dist/types/StringType.js +18 -7
  477. package/dist/types/StringType.js.map +1 -1
  478. package/dist/types/StringType.spec.js +3 -5
  479. package/dist/types/StringType.spec.js.map +1 -1
  480. package/dist/types/TypedFunctionType.d.ts +22 -17
  481. package/dist/types/TypedFunctionType.js +78 -60
  482. package/dist/types/TypedFunctionType.js.map +1 -1
  483. package/dist/types/TypedFunctionType.spec.js +105 -20
  484. package/dist/types/TypedFunctionType.spec.js.map +1 -1
  485. package/dist/types/UninitializedType.d.ts +8 -6
  486. package/dist/types/UninitializedType.js +13 -7
  487. package/dist/types/UninitializedType.js.map +1 -1
  488. package/dist/types/UnionType.d.ts +20 -0
  489. package/dist/types/UnionType.js +123 -0
  490. package/dist/types/UnionType.js.map +1 -0
  491. package/dist/types/UnionType.spec.d.ts +1 -0
  492. package/dist/types/UnionType.spec.js +130 -0
  493. package/dist/types/UnionType.spec.js.map +1 -0
  494. package/dist/types/VoidType.d.ts +8 -5
  495. package/dist/types/VoidType.js +14 -7
  496. package/dist/types/VoidType.js.map +1 -1
  497. package/dist/types/VoidType.spec.js +3 -3
  498. package/dist/types/VoidType.spec.js.map +1 -1
  499. package/dist/types/helper.spec.d.ts +1 -0
  500. package/dist/types/helper.spec.js +145 -0
  501. package/dist/types/helper.spec.js.map +1 -0
  502. package/dist/types/helpers.d.ts +19 -37
  503. package/dist/types/helpers.js +159 -99
  504. package/dist/types/helpers.js.map +1 -1
  505. package/dist/types/index.d.ts +22 -0
  506. package/dist/types/index.js +39 -0
  507. package/dist/types/index.js.map +1 -0
  508. package/dist/util.d.ts +132 -137
  509. package/dist/util.js +796 -362
  510. package/dist/util.js.map +1 -1
  511. package/dist/validators/ClassValidator.d.ts +8 -25
  512. package/dist/validators/ClassValidator.js +96 -176
  513. package/dist/validators/ClassValidator.js.map +1 -1
  514. package/package.json +165 -152
  515. package/dist/astUtils/AstEditor.js.map +0 -1
  516. package/dist/astUtils/AstEditor.spec.js.map +0 -1
  517. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +0 -1
  518. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -32
  519. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
  520. package/dist/parser/SGTypes.spec.js +0 -351
  521. package/dist/parser/SGTypes.spec.js.map +0 -1
  522. package/dist/types/CustomType.d.ts +0 -12
  523. package/dist/types/CustomType.js +0 -44
  524. package/dist/types/CustomType.js.map +0 -1
  525. package/dist/types/LazyType.d.ts +0 -16
  526. package/dist/types/LazyType.js +0 -44
  527. package/dist/types/LazyType.js.map +0 -1
  528. /package/dist/astUtils/{AstEditor.spec.d.ts → Editor.spec.d.ts} +0 -0
  529. /package/dist/bscPlugin/{transpile/BrsFilePreTranspileProcessor.spec.d.ts → completions/CompletionsProcessor.spec.d.ts} +0 -0
  530. /package/dist/{parser/SGTypes.spec.d.ts → bscPlugin/serialize/BslibInjector.spec.d.ts} +0 -0
@@ -0,0 +1,162 @@
1
+ import type { WalkVisitor, WalkOptions } from '../astUtils/visitors';
2
+ import type { Position, Range } from 'vscode-languageserver';
3
+ import { CancellationTokenSource } from 'vscode-languageserver';
4
+ import { InternalWalkMode } from '../astUtils/visitors';
5
+ import type { SymbolTable } from '../SymbolTable';
6
+ import type { BrsTranspileState } from './BrsTranspileState';
7
+ import type { GetTypeOptions, TranspileResult } from '../interfaces';
8
+ import type { AnnotationExpression } from './Expression';
9
+ import type { BscType } from '../types/BscType';
10
+ import type { Token } from '../lexer/Token';
11
+ /**
12
+ * A BrightScript AST node
13
+ */
14
+ export declare abstract class AstNode {
15
+ abstract kind: AstNodeKind;
16
+ /**
17
+ * The starting and ending location of the node.
18
+ */
19
+ abstract range: Range;
20
+ abstract transpile(state: BrsTranspileState): TranspileResult;
21
+ /**
22
+ * When being considered by the walk visitor, this describes what type of element the current class is.
23
+ */
24
+ visitMode: InternalWalkMode;
25
+ abstract walk(visitor: WalkVisitor, options: WalkOptions): any;
26
+ /**
27
+ * The parent node for this statement. This is set dynamically during `onFileValidate`, and should not be set directly.
28
+ */
29
+ parent?: AstNode;
30
+ /**
31
+ * Certain expressions or statements can have a symbol table (such as blocks, functions, namespace bodies, etc).
32
+ * If you're interested in getting the closest SymbolTable, use `getSymbolTable` instead.
33
+ */
34
+ symbolTable?: SymbolTable;
35
+ /**
36
+ * Get the closest symbol table for this node
37
+ */
38
+ getSymbolTable(): SymbolTable;
39
+ /**
40
+ * Walk upward and return the first node that results in `true` from the matcher.
41
+ * @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
42
+ * The function's second parameter is a cancellation token. If you'd like to short-circuit the walk, call `cancellationToken.cancel()`, then this function will return `undefined`
43
+ */
44
+ findAncestor<TNode extends AstNode = AstNode>(matcher: (node: AstNode, cancellationToken: CancellationTokenSource) => boolean | AstNode | undefined | void): TNode | undefined;
45
+ /**
46
+ * Find the first child where the matcher evaluates to true.
47
+ * @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
48
+ */
49
+ findChild<TNode extends AstNode = AstNode>(matcher: (node: AstNode, cancellationSource: any) => boolean | AstNode | undefined | void, options?: WalkOptions): TNode | undefined;
50
+ /**
51
+ * Find a list of all children first child where the matcher evaluates to true.
52
+ * @param matcher a function called for each node. If you return true, the specified node is included in the results. If you return a node,
53
+ * that node is returned. all other return values exclude that value and continue the loop
54
+ */
55
+ findChildren<TNode extends AstNode = AstNode>(matcher: (node: AstNode, cancellationSource: CancellationTokenSource) => boolean | AstNode | undefined | void, options?: WalkOptions): Array<TNode>;
56
+ /**
57
+ * FInd the deepest child that includes the given position
58
+ */
59
+ findChildAtPosition<TNodeType extends AstNode = AstNode>(position: Position, options?: WalkOptions): TNodeType | undefined;
60
+ /**
61
+ * Get the BscType of this node.
62
+ */
63
+ getType(options: GetTypeOptions): BscType;
64
+ /**
65
+ * Links all child nodes to their parent AstNode, and the same with symbol tables. This performs a full AST walk, so you should use this sparingly
66
+ */
67
+ link(): void;
68
+ /**
69
+ * Walk upward and return the root node
70
+ */
71
+ getRoot(): AstNode;
72
+ getLeadingTrivia(): Token[];
73
+ }
74
+ export declare abstract class Statement extends AstNode {
75
+ /**
76
+ * When being considered by the walk visitor, this describes what type of element the current class is.
77
+ */
78
+ visitMode: InternalWalkMode;
79
+ /**
80
+ * Annotations for this statement
81
+ */
82
+ annotations?: AnnotationExpression[] | undefined;
83
+ }
84
+ /** A BrightScript expression */
85
+ export declare abstract class Expression extends AstNode {
86
+ /**
87
+ * When being considered by the walk visitor, this describes what type of element the current class is.
88
+ */
89
+ visitMode: InternalWalkMode;
90
+ }
91
+ export declare enum AstNodeKind {
92
+ Body = "Body",
93
+ BinaryExpression = "BinaryExpression",
94
+ CallExpression = "CallExpression",
95
+ FunctionExpression = "FunctionExpression",
96
+ FunctionParameterExpression = "FunctionParameterExpression",
97
+ NamespacedVariableNameExpression = "NamespacedVariableNameExpression",
98
+ DottedGetExpression = "DottedGetExpression",
99
+ XmlAttributeGetExpression = "XmlAttributeGetExpression",
100
+ IndexedGetExpression = "IndexedGetExpression",
101
+ GroupingExpression = "GroupingExpression",
102
+ LiteralExpression = "LiteralExpression",
103
+ EscapedCharCodeLiteralExpression = "EscapedCharCodeLiteralExpression",
104
+ ArrayLiteralExpression = "ArrayLiteralExpression",
105
+ AAMemberExpression = "AAMemberExpression",
106
+ AALiteralExpression = "AALiteralExpression",
107
+ UnaryExpression = "UnaryExpression",
108
+ VariableExpression = "VariableExpression",
109
+ SourceLiteralExpression = "SourceLiteralExpression",
110
+ NewExpression = "NewExpression",
111
+ CallfuncExpression = "CallfuncExpression",
112
+ TemplateStringQuasiExpression = "TemplateStringQuasiExpression",
113
+ TemplateStringExpression = "TemplateStringExpression",
114
+ TaggedTemplateStringExpression = "TaggedTemplateStringExpression",
115
+ AnnotationExpression = "AnnotationExpression",
116
+ TernaryExpression = "TernaryExpression",
117
+ NullCoalescingExpression = "NullCoalescingExpression",
118
+ RegexLiteralExpression = "RegexLiteralExpression",
119
+ EmptyStatement = "EmptyStatement",
120
+ AssignmentStatement = "AssignmentStatement",
121
+ ExpressionStatement = "ExpressionStatement",
122
+ CommentStatement = "CommentStatement",
123
+ ExitForStatement = "ExitForStatement",
124
+ ExitWhileStatement = "ExitWhileStatement",
125
+ FunctionStatement = "FunctionStatement",
126
+ IfStatement = "IfStatement",
127
+ IncrementStatement = "IncrementStatement",
128
+ PrintStatement = "PrintStatement",
129
+ DimStatement = "DimStatement",
130
+ GotoStatement = "GotoStatement",
131
+ LabelStatement = "LabelStatement",
132
+ ReturnStatement = "ReturnStatement",
133
+ EndStatement = "EndStatement",
134
+ StopStatement = "StopStatement",
135
+ ForStatement = "ForStatement",
136
+ ForEachStatement = "ForEachStatement",
137
+ WhileStatement = "WhileStatement",
138
+ DottedSetStatement = "DottedSetStatement",
139
+ IndexedSetStatement = "IndexedSetStatement",
140
+ LibraryStatement = "LibraryStatement",
141
+ NamespaceStatement = "NamespaceStatement",
142
+ ImportStatement = "ImportStatement",
143
+ InterfaceStatement = "InterfaceStatement",
144
+ InterfaceFieldStatement = "InterfaceFieldStatement",
145
+ InterfaceMethodStatement = "InterfaceMethodStatement",
146
+ ClassStatement = "ClassStatement",
147
+ MethodStatement = "MethodStatement",
148
+ ClassMethodStatement = "ClassMethodStatement",
149
+ FieldStatement = "FieldStatement",
150
+ ClassFieldStatement = "ClassFieldStatement",
151
+ TryCatchStatement = "TryCatchStatement",
152
+ CatchStatement = "CatchStatement",
153
+ ThrowStatement = "ThrowStatement",
154
+ EnumStatement = "EnumStatement",
155
+ EnumMemberStatement = "EnumMemberStatement",
156
+ ConstStatement = "ConstStatement",
157
+ ContinueStatement = "ContinueStatement",
158
+ Block = "Block",
159
+ TypeExpression = "TypeExpression",
160
+ TypeCastExpression = "TypeCastExpression",
161
+ TypedArrayExpression = "TypedArrayExpression"
162
+ }
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AstNodeKind = exports.Expression = exports.Statement = exports.AstNode = void 0;
4
+ const visitors_1 = require("../astUtils/visitors");
5
+ const vscode_languageserver_1 = require("vscode-languageserver");
6
+ const visitors_2 = require("../astUtils/visitors");
7
+ const util_1 = require("../util");
8
+ const DynamicType_1 = require("../types/DynamicType");
9
+ /**
10
+ * A BrightScript AST node
11
+ */
12
+ class AstNode {
13
+ constructor() {
14
+ /**
15
+ * When being considered by the walk visitor, this describes what type of element the current class is.
16
+ */
17
+ this.visitMode = visitors_2.InternalWalkMode.visitStatements;
18
+ }
19
+ /**
20
+ * Get the closest symbol table for this node
21
+ */
22
+ getSymbolTable() {
23
+ let node = this;
24
+ while (node) {
25
+ if (node.symbolTable) {
26
+ return node.symbolTable;
27
+ }
28
+ node = node.parent;
29
+ }
30
+ //justification: we are following a chain of nodes until we get to one with a SymbolTable,
31
+ //and the top-level node will always have a SymbolTable. So we'll never hit this undefined,
32
+ //but it is not so easy to convince the typechecker of this.
33
+ return undefined;
34
+ }
35
+ /**
36
+ * Walk upward and return the first node that results in `true` from the matcher.
37
+ * @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
38
+ * The function's second parameter is a cancellation token. If you'd like to short-circuit the walk, call `cancellationToken.cancel()`, then this function will return `undefined`
39
+ */
40
+ findAncestor(matcher) {
41
+ let node = this.parent;
42
+ const cancel = new vscode_languageserver_1.CancellationTokenSource();
43
+ while (node) {
44
+ let matcherValue = matcher(node, cancel);
45
+ if (cancel.token.isCancellationRequested) {
46
+ return;
47
+ }
48
+ if (matcherValue) {
49
+ cancel.cancel();
50
+ return (matcherValue === true ? node : matcherValue);
51
+ }
52
+ node = node.parent;
53
+ }
54
+ }
55
+ /**
56
+ * Find the first child where the matcher evaluates to true.
57
+ * @param matcher a function called for each node. If you return true, this function returns the specified node. If you return a node, that node is returned. all other return values continue the loop
58
+ */
59
+ findChild(matcher, options) {
60
+ const cancel = new vscode_languageserver_1.CancellationTokenSource();
61
+ let result;
62
+ this.walk((node) => {
63
+ const matcherValue = matcher(node, cancel);
64
+ if (matcherValue) {
65
+ cancel.cancel();
66
+ result = matcherValue === true ? node : matcherValue;
67
+ }
68
+ }, Object.assign(Object.assign({ walkMode: visitors_1.WalkMode.visitAllRecursive }, options !== null && options !== void 0 ? options : {}), { cancel: cancel.token }));
69
+ return result;
70
+ }
71
+ /**
72
+ * Find a list of all children first child where the matcher evaluates to true.
73
+ * @param matcher a function called for each node. If you return true, the specified node is included in the results. If you return a node,
74
+ * that node is returned. all other return values exclude that value and continue the loop
75
+ */
76
+ findChildren(matcher, options) {
77
+ const cancel = new vscode_languageserver_1.CancellationTokenSource();
78
+ let result = [];
79
+ this.walk((node) => {
80
+ const matcherValue = matcher(node, cancel);
81
+ if (matcherValue) {
82
+ result.push(matcherValue === true ? node : matcherValue);
83
+ }
84
+ }, Object.assign(Object.assign({ walkMode: visitors_1.WalkMode.visitAllRecursive }, options !== null && options !== void 0 ? options : {}), { cancel: cancel.token }));
85
+ return result;
86
+ }
87
+ /**
88
+ * FInd the deepest child that includes the given position
89
+ */
90
+ findChildAtPosition(position, options) {
91
+ return this.findChild((node) => {
92
+ var _a;
93
+ //if the current node includes this range, keep that node
94
+ if (util_1.default.rangeContains(node.range, position)) {
95
+ return (_a = node.findChildAtPosition(position, options)) !== null && _a !== void 0 ? _a : node;
96
+ }
97
+ }, options);
98
+ }
99
+ /**
100
+ * Get the BscType of this node.
101
+ */
102
+ getType(options) {
103
+ return DynamicType_1.DynamicType.instance;
104
+ }
105
+ /**
106
+ * Links all child nodes to their parent AstNode, and the same with symbol tables. This performs a full AST walk, so you should use this sparingly
107
+ */
108
+ link() {
109
+ //the act of walking causes the nodes to be linked
110
+ this.walk(() => { }, {
111
+ walkMode: visitors_1.WalkMode.visitAllRecursive
112
+ });
113
+ }
114
+ /**
115
+ * Walk upward and return the root node
116
+ */
117
+ getRoot() {
118
+ let node = this;
119
+ while (node) {
120
+ if (!node.parent) {
121
+ return node;
122
+ }
123
+ node = node.parent;
124
+ }
125
+ }
126
+ getLeadingTrivia() {
127
+ return [];
128
+ }
129
+ }
130
+ exports.AstNode = AstNode;
131
+ class Statement extends AstNode {
132
+ constructor() {
133
+ super(...arguments);
134
+ /**
135
+ * When being considered by the walk visitor, this describes what type of element the current class is.
136
+ */
137
+ this.visitMode = visitors_2.InternalWalkMode.visitStatements;
138
+ }
139
+ }
140
+ exports.Statement = Statement;
141
+ /** A BrightScript expression */
142
+ class Expression extends AstNode {
143
+ constructor() {
144
+ super(...arguments);
145
+ /**
146
+ * When being considered by the walk visitor, this describes what type of element the current class is.
147
+ */
148
+ this.visitMode = visitors_2.InternalWalkMode.visitExpressions;
149
+ }
150
+ }
151
+ exports.Expression = Expression;
152
+ var AstNodeKind;
153
+ (function (AstNodeKind) {
154
+ AstNodeKind["Body"] = "Body";
155
+ AstNodeKind["BinaryExpression"] = "BinaryExpression";
156
+ AstNodeKind["CallExpression"] = "CallExpression";
157
+ AstNodeKind["FunctionExpression"] = "FunctionExpression";
158
+ AstNodeKind["FunctionParameterExpression"] = "FunctionParameterExpression";
159
+ AstNodeKind["NamespacedVariableNameExpression"] = "NamespacedVariableNameExpression";
160
+ AstNodeKind["DottedGetExpression"] = "DottedGetExpression";
161
+ AstNodeKind["XmlAttributeGetExpression"] = "XmlAttributeGetExpression";
162
+ AstNodeKind["IndexedGetExpression"] = "IndexedGetExpression";
163
+ AstNodeKind["GroupingExpression"] = "GroupingExpression";
164
+ AstNodeKind["LiteralExpression"] = "LiteralExpression";
165
+ AstNodeKind["EscapedCharCodeLiteralExpression"] = "EscapedCharCodeLiteralExpression";
166
+ AstNodeKind["ArrayLiteralExpression"] = "ArrayLiteralExpression";
167
+ AstNodeKind["AAMemberExpression"] = "AAMemberExpression";
168
+ AstNodeKind["AALiteralExpression"] = "AALiteralExpression";
169
+ AstNodeKind["UnaryExpression"] = "UnaryExpression";
170
+ AstNodeKind["VariableExpression"] = "VariableExpression";
171
+ AstNodeKind["SourceLiteralExpression"] = "SourceLiteralExpression";
172
+ AstNodeKind["NewExpression"] = "NewExpression";
173
+ AstNodeKind["CallfuncExpression"] = "CallfuncExpression";
174
+ AstNodeKind["TemplateStringQuasiExpression"] = "TemplateStringQuasiExpression";
175
+ AstNodeKind["TemplateStringExpression"] = "TemplateStringExpression";
176
+ AstNodeKind["TaggedTemplateStringExpression"] = "TaggedTemplateStringExpression";
177
+ AstNodeKind["AnnotationExpression"] = "AnnotationExpression";
178
+ AstNodeKind["TernaryExpression"] = "TernaryExpression";
179
+ AstNodeKind["NullCoalescingExpression"] = "NullCoalescingExpression";
180
+ AstNodeKind["RegexLiteralExpression"] = "RegexLiteralExpression";
181
+ AstNodeKind["EmptyStatement"] = "EmptyStatement";
182
+ AstNodeKind["AssignmentStatement"] = "AssignmentStatement";
183
+ AstNodeKind["ExpressionStatement"] = "ExpressionStatement";
184
+ AstNodeKind["CommentStatement"] = "CommentStatement";
185
+ AstNodeKind["ExitForStatement"] = "ExitForStatement";
186
+ AstNodeKind["ExitWhileStatement"] = "ExitWhileStatement";
187
+ AstNodeKind["FunctionStatement"] = "FunctionStatement";
188
+ AstNodeKind["IfStatement"] = "IfStatement";
189
+ AstNodeKind["IncrementStatement"] = "IncrementStatement";
190
+ AstNodeKind["PrintStatement"] = "PrintStatement";
191
+ AstNodeKind["DimStatement"] = "DimStatement";
192
+ AstNodeKind["GotoStatement"] = "GotoStatement";
193
+ AstNodeKind["LabelStatement"] = "LabelStatement";
194
+ AstNodeKind["ReturnStatement"] = "ReturnStatement";
195
+ AstNodeKind["EndStatement"] = "EndStatement";
196
+ AstNodeKind["StopStatement"] = "StopStatement";
197
+ AstNodeKind["ForStatement"] = "ForStatement";
198
+ AstNodeKind["ForEachStatement"] = "ForEachStatement";
199
+ AstNodeKind["WhileStatement"] = "WhileStatement";
200
+ AstNodeKind["DottedSetStatement"] = "DottedSetStatement";
201
+ AstNodeKind["IndexedSetStatement"] = "IndexedSetStatement";
202
+ AstNodeKind["LibraryStatement"] = "LibraryStatement";
203
+ AstNodeKind["NamespaceStatement"] = "NamespaceStatement";
204
+ AstNodeKind["ImportStatement"] = "ImportStatement";
205
+ AstNodeKind["InterfaceStatement"] = "InterfaceStatement";
206
+ AstNodeKind["InterfaceFieldStatement"] = "InterfaceFieldStatement";
207
+ AstNodeKind["InterfaceMethodStatement"] = "InterfaceMethodStatement";
208
+ AstNodeKind["ClassStatement"] = "ClassStatement";
209
+ AstNodeKind["MethodStatement"] = "MethodStatement";
210
+ AstNodeKind["ClassMethodStatement"] = "ClassMethodStatement";
211
+ AstNodeKind["FieldStatement"] = "FieldStatement";
212
+ AstNodeKind["ClassFieldStatement"] = "ClassFieldStatement";
213
+ AstNodeKind["TryCatchStatement"] = "TryCatchStatement";
214
+ AstNodeKind["CatchStatement"] = "CatchStatement";
215
+ AstNodeKind["ThrowStatement"] = "ThrowStatement";
216
+ AstNodeKind["EnumStatement"] = "EnumStatement";
217
+ AstNodeKind["EnumMemberStatement"] = "EnumMemberStatement";
218
+ AstNodeKind["ConstStatement"] = "ConstStatement";
219
+ AstNodeKind["ContinueStatement"] = "ContinueStatement";
220
+ AstNodeKind["Block"] = "Block";
221
+ AstNodeKind["TypeExpression"] = "TypeExpression";
222
+ AstNodeKind["TypeCastExpression"] = "TypeCastExpression";
223
+ AstNodeKind["TypedArrayExpression"] = "TypedArrayExpression";
224
+ })(AstNodeKind = exports.AstNodeKind || (exports.AstNodeKind = {}));
225
+ //# sourceMappingURL=AstNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AstNode.js","sourceRoot":"","sources":["../../src/parser/AstNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("../util");
4
+ const fsExtra = require("fs-extra");
5
+ const Program_1 = require("../Program");
6
+ const chai_config_spec_1 = require("../chai-config.spec");
7
+ const testHelpers_spec_1 = require("../testHelpers.spec");
8
+ const testHelpers_spec_2 = require("../testHelpers.spec");
9
+ const reflection_1 = require("../astUtils/reflection");
10
+ const Statement_1 = require("./Statement");
11
+ describe('AstNode', () => {
12
+ let program;
13
+ beforeEach(() => {
14
+ fsExtra.emptyDirSync(testHelpers_spec_2.tempDir);
15
+ program = new Program_1.Program({
16
+ rootDir: testHelpers_spec_2.rootDir,
17
+ stagingDir: testHelpers_spec_2.stagingDir
18
+ });
19
+ program.createSourceScope(); //ensure source scope is created
20
+ });
21
+ afterEach(() => {
22
+ fsExtra.emptyDirSync(testHelpers_spec_2.tempDir);
23
+ program.dispose();
24
+ });
25
+ describe('findChildAtPosition', () => {
26
+ it('finds deepest AstNode that matches the position', () => {
27
+ const file = program.setFile('source/main.brs', `
28
+ sub main()
29
+ alpha = invalid
30
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
31
+ end sub
32
+ `);
33
+ program.validate();
34
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
35
+ const delta = file.ast.findChildAtPosition(util_1.util.createPosition(3, 52));
36
+ (0, chai_config_spec_1.expect)(delta.name.text).to.eql('delta');
37
+ const foxtrot = file.ast.findChildAtPosition(util_1.util.createPosition(3, 71));
38
+ (0, chai_config_spec_1.expect)(foxtrot.name.text).to.eql('foxtrot');
39
+ });
40
+ });
41
+ describe('findChild', () => {
42
+ it('finds a child that matches the matcher', () => {
43
+ const file = program.setFile('source/main.brs', `
44
+ sub main()
45
+ alpha = invalid
46
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
47
+ end sub
48
+ `);
49
+ (0, chai_config_spec_1.expect)(file.ast.findChild((node) => {
50
+ return (0, reflection_1.isAssignmentStatement)(node) && node.name.text === 'alpha';
51
+ })).instanceof(Statement_1.AssignmentStatement);
52
+ });
53
+ it('returns the exact node that matches', () => {
54
+ const file = program.setFile('source/main.brs', `
55
+ sub main()
56
+ alpha1 = invalid
57
+ alpha2 = invalid
58
+ end sub
59
+ `);
60
+ let count = 0;
61
+ const instance = file.ast.findChild((node) => {
62
+ if ((0, reflection_1.isAssignmentStatement)(node)) {
63
+ count++;
64
+ if (count === 2) {
65
+ return true;
66
+ }
67
+ }
68
+ });
69
+ const expected = file.ast.statements[0].func.body.statements[1];
70
+ (0, chai_config_spec_1.expect)(instance).to.equal(expected);
71
+ });
72
+ it('returns undefined when matcher never returned true', () => {
73
+ const file = program.setFile('source/main.brs', `
74
+ sub main()
75
+ alpha = invalid
76
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
77
+ end sub
78
+ `);
79
+ (0, chai_config_spec_1.expect)(file.ast.findChild((node) => false)).not.to.exist;
80
+ });
81
+ it('returns the value returned from the matcher', () => {
82
+ const file = program.setFile('source/main.brs', `
83
+ sub main()
84
+ alpha = invalid
85
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
86
+ end sub
87
+ `);
88
+ const secondStatement = file.ast.statements[0].func.body.statements[1];
89
+ (0, chai_config_spec_1.expect)(file.ast.findChild((node) => secondStatement)).to.equal(secondStatement);
90
+ });
91
+ it('cancels properly', () => {
92
+ const file = program.setFile('source/main.brs', `
93
+ sub main()
94
+ alpha = invalid
95
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
96
+ end sub
97
+ `);
98
+ let count = 0;
99
+ file.ast.findChild((node, cancelToken) => {
100
+ count++;
101
+ cancelToken.cancel();
102
+ });
103
+ (0, chai_config_spec_1.expect)(count).to.eql(1);
104
+ });
105
+ });
106
+ describe('findAncestor', () => {
107
+ it('returns node when matcher returns true', () => {
108
+ const file = program.setFile('source/main.brs', `
109
+ sub main()
110
+ alpha = invalid
111
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
112
+ end sub
113
+ `);
114
+ const secondStatement = file.ast.statements[0].func.body.statements[1];
115
+ const foxtrot = file.ast.findChild((node) => {
116
+ var _a;
117
+ return (0, reflection_1.isDottedGetExpression)(node) && ((_a = node.name) === null || _a === void 0 ? void 0 : _a.text) === 'foxtrot';
118
+ });
119
+ (0, chai_config_spec_1.expect)(foxtrot.findAncestor(reflection_1.isPrintStatement)).to.equal(secondStatement);
120
+ });
121
+ it('returns undefined when no match found', () => {
122
+ const file = program.setFile('source/main.brs', `
123
+ sub main()
124
+ alpha = invalid
125
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
126
+ end sub
127
+ `);
128
+ const foxtrot = file.ast.findChild((node) => {
129
+ var _a;
130
+ return (0, reflection_1.isDottedGetExpression)(node) && ((_a = node.name) === null || _a === void 0 ? void 0 : _a.text) === 'foxtrot';
131
+ });
132
+ (0, chai_config_spec_1.expect)(foxtrot.findAncestor(reflection_1.isClassStatement)).to.be.undefined;
133
+ });
134
+ it('returns overridden node when returned in matcher', () => {
135
+ const file = program.setFile('source/main.brs', `
136
+ sub main()
137
+ alpha = invalid
138
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
139
+ end sub
140
+ `);
141
+ const firstStatement = file.ast.statements[0].func.body.statements[0];
142
+ const foxtrot = file.ast.findChild((node) => {
143
+ var _a;
144
+ return (0, reflection_1.isDottedGetExpression)(node) && ((_a = node.name) === null || _a === void 0 ? void 0 : _a.text) === 'foxtrot';
145
+ });
146
+ (0, chai_config_spec_1.expect)(foxtrot.findAncestor(node => firstStatement)).to.equal(firstStatement);
147
+ });
148
+ it('returns overridden node when returned in matcher', () => {
149
+ const file = program.setFile('source/main.brs', `
150
+ sub main()
151
+ alpha = invalid
152
+ print alpha.beta.charlie.delta(alpha.echo.foxtrot())
153
+ end sub
154
+ `);
155
+ let count = 0;
156
+ const firstStatement = file.ast.statements[0].func.body.statements[0];
157
+ firstStatement.findAncestor((node, cancel) => {
158
+ count++;
159
+ cancel.cancel();
160
+ });
161
+ (0, chai_config_spec_1.expect)(count).to.eql(1);
162
+ });
163
+ });
164
+ });
165
+ //# sourceMappingURL=AstNode.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AstNode.spec.js","sourceRoot":"","sources":["../../src/parser/AstNode.spec.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,6 @@
1
1
  import type { Range } from 'vscode-languageserver';
2
- import { AstEditor } from '../astUtils/AstEditor';
2
+ import { Editor } from '../astUtils/Editor';
3
3
  import type { BrsFile } from '../files/BrsFile';
4
- import type { Scope } from '../Scope';
5
- import type { TypeContext } from '../types/BscType';
6
4
  import type { ClassStatement } from './Statement';
7
5
  import { TranspileState } from './TranspileState';
8
6
  export declare class BrsTranspileState extends TranspileState {
@@ -24,9 +22,8 @@ export declare class BrsTranspileState extends TranspileState {
24
22
  */
25
23
  classStatement?: ClassStatement;
26
24
  /**
27
- * Transpilation of LazyTypes needs access to the scope - just pick the first
25
+ * An AST editor that can be used by the AST nodes to do various transformations to the AST which will be reverted at the end of the transpile cycle
26
+ * TODO remove this before file_api is merged
28
27
  */
29
- get scope(): Scope;
30
- get typeContext(): TypeContext;
31
- editor: AstEditor;
28
+ editor: Editor;
32
29
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BrsTranspileState = void 0;
4
- const AstEditor_1 = require("../astUtils/AstEditor");
4
+ const Editor_1 = require("../astUtils/Editor");
5
5
  const TranspileState_1 = require("./TranspileState");
6
6
  class BrsTranspileState extends TranspileState_1.TranspileState {
7
7
  constructor(file) {
@@ -12,21 +12,13 @@ class BrsTranspileState extends TranspileState_1.TranspileState {
12
12
  * Used to assist blocks in knowing when to add a comment statement to the same line as the first line of the parent
13
13
  */
14
14
  this.lineage = [];
15
- /*
15
+ /**
16
16
  * An AST editor that can be used by the AST nodes to do various transformations to the AST which will be reverted at the end of the transpile cycle
17
+ * TODO remove this before file_api is merged
17
18
  */
18
- this.editor = new AstEditor_1.AstEditor();
19
+ this.editor = new Editor_1.Editor();
19
20
  this.bslibPrefix = this.file.program.bslibPrefix;
20
21
  }
21
- /**
22
- * Transpilation of LazyTypes needs access to the scope - just pick the first
23
- */
24
- get scope() {
25
- return this.file.program.getScopesForFile(this.file)[0];
26
- }
27
- get typeContext() {
28
- return { file: this.file, scope: this.scope };
29
- }
30
22
  }
31
23
  exports.BrsTranspileState = BrsTranspileState;
32
24
  //# sourceMappingURL=BrsTranspileState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrsTranspileState.js","sourceRoot":"","sources":["../../src/parser/BrsTranspileState.ts"],"names":[],"mappings":";;;AACA,qDAAkD;AAKlD,qDAAkD;AAElD,MAAa,iBAAkB,SAAQ,+BAAc;IACjD,YACW,IAAa;QAEpB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAFnC,SAAI,GAAJ,IAAI,CAAS;QAWxB;;;WAGG;QACH,YAAO,GAAG,EAER,CAAC;QAkBH;;WAEG;QACI,WAAM,GAAG,IAAI,qBAAS,EAAE,CAAC;QAnC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACrD,CAAC;IAoBD;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAW,WAAW;QAClB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAClD,CAAC;CAMJ;AAzCD,8CAyCC"}
1
+ {"version":3,"file":"BrsTranspileState.js","sourceRoot":"","sources":["../../src/parser/BrsTranspileState.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAG5C,qDAAkD;AAElD,MAAa,iBAAkB,SAAQ,+BAAc;IACjD,YACW,IAAa;QAEpB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAFnC,SAAI,GAAJ,IAAI,CAAS;QAWxB;;;WAGG;QACH,YAAO,GAAG,EAER,CAAC;QAOH;;;WAGG;QACI,WAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAzBzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACrD,CAAC;CAyBJ;AA/BD,8CA+BC"}