brighterscript 1.0.0-alpha.50 → 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 (482) hide show
  1. package/README.md +3 -0
  2. package/bsconfig.schema.json +75 -0
  3. package/dist/BsConfig.d.ts +90 -5
  4. package/dist/CodeActionUtil.d.ts +17 -0
  5. package/dist/CodeActionUtil.js.map +1 -1
  6. package/dist/CommentFlagProcessor.d.ts +16 -12
  7. package/dist/CommentFlagProcessor.js +141 -59
  8. package/dist/CommentFlagProcessor.js.map +1 -1
  9. package/dist/CrossScopeValidator.js +13 -5
  10. package/dist/CrossScopeValidator.js.map +1 -1
  11. package/dist/DiagnosticManager.d.ts +1 -0
  12. package/dist/DiagnosticManager.js +25 -9
  13. package/dist/DiagnosticManager.js.map +1 -1
  14. package/dist/DiagnosticMessages.d.ts +61 -17
  15. package/dist/DiagnosticMessages.js +78 -24
  16. package/dist/DiagnosticMessages.js.map +1 -1
  17. package/dist/LanguageServer.d.ts +39 -2
  18. package/dist/LanguageServer.js +142 -5
  19. package/dist/LanguageServer.js.map +1 -1
  20. package/dist/Program.d.ts +62 -1
  21. package/dist/Program.js +185 -13
  22. package/dist/Program.js.map +1 -1
  23. package/dist/ProgramBuilder.d.ts +1 -8
  24. package/dist/ProgramBuilder.js +31 -11
  25. package/dist/ProgramBuilder.js.map +1 -1
  26. package/dist/Scope.d.ts +87 -6
  27. package/dist/Scope.js +76 -31
  28. package/dist/Scope.js.map +1 -1
  29. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  30. package/dist/ScopeNamespaceLookup.js +242 -0
  31. package/dist/ScopeNamespaceLookup.js.map +1 -0
  32. package/dist/SymbolTable.d.ts +9 -2
  33. package/dist/SymbolTable.js +24 -14
  34. package/dist/SymbolTable.js.map +1 -1
  35. package/dist/astUtils/CachedLookups.js +3 -0
  36. package/dist/astUtils/CachedLookups.js.map +1 -1
  37. package/dist/astUtils/reflection.d.ts +4 -1
  38. package/dist/astUtils/reflection.js +24 -4
  39. package/dist/astUtils/reflection.js.map +1 -1
  40. package/dist/astUtils/visitors.d.ts +2 -1
  41. package/dist/astUtils/visitors.js.map +1 -1
  42. package/dist/bscPlugin/BscPlugin.d.ts +4 -2
  43. package/dist/bscPlugin/BscPlugin.js +10 -2
  44. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  45. package/dist/bscPlugin/CallExpressionInfo.d.ts +1 -1
  46. package/dist/bscPlugin/CallExpressionInfo.js +1 -2
  47. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  48. package/dist/bscPlugin/FileWriter.d.ts +13 -0
  49. package/dist/bscPlugin/FileWriter.js +56 -1
  50. package/dist/bscPlugin/FileWriter.js.map +1 -1
  51. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +106 -5
  52. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +630 -126
  53. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  54. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  55. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  56. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  57. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  58. package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
  59. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  60. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +1 -1
  61. package/dist/bscPlugin/completions/CompletionsProcessor.js +5 -5
  62. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  63. package/dist/bscPlugin/definition/DefinitionProvider.js +8 -0
  64. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -1
  65. package/dist/bscPlugin/hover/HoverProcessor.js +11 -3
  66. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  67. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  68. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
  69. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  70. package/dist/bscPlugin/serialize/FileSerializer.d.ts +1 -1
  71. package/dist/bscPlugin/serialize/FileSerializer.js +12 -7
  72. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -1
  73. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +7 -0
  74. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +87 -1
  75. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -1
  76. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +14 -0
  77. package/dist/bscPlugin/validation/BrsFileValidator.js +97 -21
  78. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  79. package/dist/bscPlugin/validation/ScopeValidator.d.ts +17 -0
  80. package/dist/bscPlugin/validation/ScopeValidator.js +162 -4
  81. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  82. package/dist/bscPlugin/validation/XmlFileValidator.js +14 -0
  83. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  84. package/dist/cli.js +13 -0
  85. package/dist/cli.js.map +1 -1
  86. package/dist/diagnosticUtils.d.ts +51 -1
  87. package/dist/diagnosticUtils.js +222 -1
  88. package/dist/diagnosticUtils.js.map +1 -1
  89. package/dist/files/BrsFile.d.ts +18 -2
  90. package/dist/files/BrsFile.js +87 -6
  91. package/dist/files/BrsFile.js.map +1 -1
  92. package/dist/files/XmlFile.js +2 -1
  93. package/dist/files/XmlFile.js.map +1 -1
  94. package/dist/interfaces.d.ts +68 -23
  95. package/dist/interfaces.js.map +1 -1
  96. package/dist/lexer/Lexer.js +4 -5
  97. package/dist/lexer/Lexer.js.map +1 -1
  98. package/dist/lexer/Token.d.ts +1 -1
  99. package/dist/lexer/TokenKind.d.ts +8 -0
  100. package/dist/lexer/TokenKind.js +21 -1
  101. package/dist/lexer/TokenKind.js.map +1 -1
  102. package/dist/lsp/LspProject.d.ts +49 -1
  103. package/dist/lsp/Project.d.ts +33 -1
  104. package/dist/lsp/Project.js +129 -4
  105. package/dist/lsp/Project.js.map +1 -1
  106. package/dist/lsp/ProjectManager.d.ts +48 -2
  107. package/dist/lsp/ProjectManager.js +152 -9
  108. package/dist/lsp/ProjectManager.js.map +1 -1
  109. package/dist/lsp/worker/WorkerThreadProject.d.ts +27 -2
  110. package/dist/lsp/worker/WorkerThreadProject.js +16 -0
  111. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
  112. package/dist/parser/AstNode.d.ts +3 -1
  113. package/dist/parser/AstNode.js +2 -0
  114. package/dist/parser/AstNode.js.map +1 -1
  115. package/dist/parser/Expression.d.ts +54 -5
  116. package/dist/parser/Expression.js +112 -7
  117. package/dist/parser/Expression.js.map +1 -1
  118. package/dist/parser/Parser.d.ts +24 -1
  119. package/dist/parser/Parser.js +180 -41
  120. package/dist/parser/Parser.js.map +1 -1
  121. package/dist/parser/SGParser.d.ts +1 -0
  122. package/dist/parser/SGParser.js +9 -0
  123. package/dist/parser/SGParser.js.map +1 -1
  124. package/dist/parser/Statement.d.ts +6 -1
  125. package/dist/parser/Statement.js +22 -14
  126. package/dist/parser/Statement.js.map +1 -1
  127. package/dist/parser/TranspileState.d.ts +4 -2
  128. package/dist/parser/TranspileState.js +10 -4
  129. package/dist/parser/TranspileState.js.map +1 -1
  130. package/dist/roku-types/data.json +210 -3
  131. package/dist/types/ArrayType.js +6 -1
  132. package/dist/types/ArrayType.js.map +1 -1
  133. package/dist/types/BooleanType.js +1 -1
  134. package/dist/types/BooleanType.js.map +1 -1
  135. package/dist/types/CallFuncableType.d.ts +1 -1
  136. package/dist/types/ClassType.js +3 -0
  137. package/dist/types/ClassType.js.map +1 -1
  138. package/dist/types/ComponentType.js +3 -0
  139. package/dist/types/ComponentType.js.map +1 -1
  140. package/dist/types/EnumType.js +3 -0
  141. package/dist/types/EnumType.js.map +1 -1
  142. package/dist/types/IntersectionType.js +3 -0
  143. package/dist/types/IntersectionType.js.map +1 -1
  144. package/dist/types/ReferenceType.js +6 -0
  145. package/dist/types/ReferenceType.js.map +1 -1
  146. package/dist/types/TypeStatementType.d.ts +1 -0
  147. package/dist/types/TypeStatementType.js +12 -1
  148. package/dist/types/TypeStatementType.js.map +1 -1
  149. package/dist/types/TypedFunctionType.js +20 -10
  150. package/dist/types/TypedFunctionType.js.map +1 -1
  151. package/dist/types/UnionType.js +3 -0
  152. package/dist/types/UnionType.js.map +1 -1
  153. package/dist/types/helpers.js +6 -0
  154. package/dist/types/helpers.js.map +1 -1
  155. package/dist/util.d.ts +42 -3
  156. package/dist/util.js +131 -7
  157. package/dist/util.js.map +1 -1
  158. package/package.json +24 -26
  159. package/dist/astUtils/CachedLookups.spec.d.ts +0 -1
  160. package/dist/astUtils/CachedLookups.spec.js +0 -39
  161. package/dist/astUtils/CachedLookups.spec.js.map +0 -1
  162. package/dist/astUtils/Editor.spec.d.ts +0 -1
  163. package/dist/astUtils/Editor.spec.js +0 -258
  164. package/dist/astUtils/Editor.spec.js.map +0 -1
  165. package/dist/astUtils/creators.spec.d.ts +0 -1
  166. package/dist/astUtils/creators.spec.js +0 -21
  167. package/dist/astUtils/creators.spec.js.map +0 -1
  168. package/dist/astUtils/reflection.spec.d.ts +0 -1
  169. package/dist/astUtils/reflection.spec.js +0 -392
  170. package/dist/astUtils/reflection.spec.js.map +0 -1
  171. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  172. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  173. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  174. package/dist/astUtils/visitors.spec.d.ts +0 -1
  175. package/dist/astUtils/visitors.spec.js +0 -1432
  176. package/dist/astUtils/visitors.spec.js.map +0 -1
  177. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  178. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -311
  179. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  180. package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +0 -1
  181. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +0 -2512
  182. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +0 -1
  183. package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +0 -1
  184. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +0 -87
  185. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +0 -1
  186. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +0 -1
  187. package/dist/bscPlugin/hover/HoverProcessor.spec.js +0 -991
  188. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +0 -1
  189. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +0 -1
  190. package/dist/bscPlugin/references/ReferencesProvider.spec.js +0 -51
  191. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +0 -1
  192. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +0 -1
  193. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -564
  194. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +0 -1
  195. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +0 -1
  196. package/dist/bscPlugin/serialize/BslibInjector.spec.js +0 -33
  197. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +0 -1
  198. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +0 -1
  199. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +0 -291
  200. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +0 -1
  201. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +0 -1
  202. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +0 -245
  203. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +0 -1
  204. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +0 -1
  205. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +0 -75
  206. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +0 -1
  207. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +0 -1
  208. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +0 -1517
  209. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +0 -1
  210. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +0 -1
  211. package/dist/bscPlugin/validation/ScopeValidator.spec.js +0 -6135
  212. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +0 -1
  213. package/dist/common/Sequencer.spec.d.ts +0 -1
  214. package/dist/common/Sequencer.spec.js +0 -75
  215. package/dist/common/Sequencer.spec.js.map +0 -1
  216. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  217. package/dist/files/BrsFile.Class.spec.js +0 -2035
  218. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  219. package/dist/files/BrsFile.spec.d.ts +0 -1
  220. package/dist/files/BrsFile.spec.js +0 -5848
  221. package/dist/files/BrsFile.spec.js.map +0 -1
  222. package/dist/files/LazyFileData.spec.d.ts +0 -1
  223. package/dist/files/LazyFileData.spec.js +0 -27
  224. package/dist/files/LazyFileData.spec.js.map +0 -1
  225. package/dist/files/XmlFile.spec.d.ts +0 -1
  226. package/dist/files/XmlFile.spec.js +0 -1173
  227. package/dist/files/XmlFile.spec.js.map +0 -1
  228. package/dist/files/tests/imports.spec.d.ts +0 -1
  229. package/dist/files/tests/imports.spec.js +0 -251
  230. package/dist/files/tests/imports.spec.js.map +0 -1
  231. package/dist/files/tests/optionalChaning.spec.d.ts +0 -1
  232. package/dist/files/tests/optionalChaning.spec.js +0 -152
  233. package/dist/files/tests/optionalChaning.spec.js.map +0 -1
  234. package/dist/lexer/Character.spec.d.ts +0 -1
  235. package/dist/lexer/Character.spec.js +0 -27
  236. package/dist/lexer/Character.spec.js.map +0 -1
  237. package/dist/lexer/Lexer.spec.d.ts +0 -1
  238. package/dist/lexer/Lexer.spec.js +0 -1345
  239. package/dist/lexer/Lexer.spec.js.map +0 -1
  240. package/dist/lsp/ActionQueue.spec.d.ts +0 -1
  241. package/dist/lsp/ActionQueue.spec.js +0 -80
  242. package/dist/lsp/ActionQueue.spec.js.map +0 -1
  243. package/dist/lsp/DocumentManager.spec.d.ts +0 -1
  244. package/dist/lsp/DocumentManager.spec.js +0 -103
  245. package/dist/lsp/DocumentManager.spec.js.map +0 -1
  246. package/dist/lsp/PathFilterer.spec.d.ts +0 -1
  247. package/dist/lsp/PathFilterer.spec.js +0 -182
  248. package/dist/lsp/PathFilterer.spec.js.map +0 -1
  249. package/dist/lsp/Project.spec.d.ts +0 -1
  250. package/dist/lsp/Project.spec.js +0 -267
  251. package/dist/lsp/Project.spec.js.map +0 -1
  252. package/dist/lsp/ProjectManager.spec.d.ts +0 -1
  253. package/dist/lsp/ProjectManager.spec.js +0 -913
  254. package/dist/lsp/ProjectManager.spec.js.map +0 -1
  255. package/dist/lsp/worker/MessageHandler.spec.d.ts +0 -1
  256. package/dist/lsp/worker/MessageHandler.spec.js +0 -64
  257. package/dist/lsp/worker/MessageHandler.spec.js.map +0 -1
  258. package/dist/lsp/worker/WorkerPool.spec.d.ts +0 -1
  259. package/dist/lsp/worker/WorkerPool.spec.js +0 -59
  260. package/dist/lsp/worker/WorkerPool.spec.js.map +0 -1
  261. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +0 -2
  262. package/dist/lsp/worker/WorkerThreadProject.spec.js +0 -71
  263. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +0 -1
  264. package/dist/parser/AstNode.spec.d.ts +0 -1
  265. package/dist/parser/AstNode.spec.js +0 -1455
  266. package/dist/parser/AstNode.spec.js.map +0 -1
  267. package/dist/parser/BrightScriptDocParser.spec.d.ts +0 -1
  268. package/dist/parser/BrightScriptDocParser.spec.js +0 -310
  269. package/dist/parser/BrightScriptDocParser.spec.js.map +0 -1
  270. package/dist/parser/Expression.spec.d.ts +0 -1
  271. package/dist/parser/Expression.spec.js +0 -40
  272. package/dist/parser/Expression.spec.js.map +0 -1
  273. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  274. package/dist/parser/Parser.Class.spec.js +0 -520
  275. package/dist/parser/Parser.Class.spec.js.map +0 -1
  276. package/dist/parser/Parser.spec.d.ts +0 -6
  277. package/dist/parser/Parser.spec.js +0 -2802
  278. package/dist/parser/Parser.spec.js.map +0 -1
  279. package/dist/parser/SGParser.spec.d.ts +0 -1
  280. package/dist/parser/SGParser.spec.js +0 -130
  281. package/dist/parser/SGParser.spec.js.map +0 -1
  282. package/dist/parser/Statement.spec.d.ts +0 -1
  283. package/dist/parser/Statement.spec.js +0 -191
  284. package/dist/parser/Statement.spec.js.map +0 -1
  285. package/dist/parser/tests/Parser.spec.d.ts +0 -12
  286. package/dist/parser/tests/Parser.spec.js +0 -29
  287. package/dist/parser/tests/Parser.spec.js.map +0 -1
  288. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  289. package/dist/parser/tests/controlFlow/For.spec.js +0 -169
  290. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  291. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  292. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -140
  293. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  294. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  295. package/dist/parser/tests/controlFlow/If.spec.js +0 -694
  296. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  297. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  298. package/dist/parser/tests/controlFlow/While.spec.js +0 -114
  299. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  300. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  301. package/dist/parser/tests/expression/Additive.spec.js +0 -107
  302. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  303. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  304. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -304
  305. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  306. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  307. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -342
  308. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  309. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  310. package/dist/parser/tests/expression/Boolean.spec.js +0 -90
  311. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  312. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  313. package/dist/parser/tests/expression/Call.spec.js +0 -252
  314. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  315. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  316. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  317. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  318. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  319. package/dist/parser/tests/expression/Function.spec.js +0 -412
  320. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  321. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  322. package/dist/parser/tests/expression/Indexing.spec.js +0 -302
  323. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  324. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  325. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  326. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  327. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  328. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -346
  329. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  330. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  331. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -111
  332. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  333. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  334. package/dist/parser/tests/expression/Primary.spec.js +0 -165
  335. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  336. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +0 -1
  337. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +0 -171
  338. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +0 -1
  339. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  340. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  341. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  342. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  343. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  344. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  345. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  346. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -389
  347. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  348. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  349. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -878
  350. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  351. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +0 -1
  352. package/dist/parser/tests/expression/TypeExpression.spec.js +0 -126
  353. package/dist/parser/tests/expression/TypeExpression.spec.js.map +0 -1
  354. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +0 -1
  355. package/dist/parser/tests/expression/UnaryExpression.spec.js +0 -52
  356. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +0 -1
  357. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  358. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  359. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  360. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +0 -1
  361. package/dist/parser/tests/statement/ConstStatement.spec.js +0 -500
  362. package/dist/parser/tests/statement/ConstStatement.spec.js.map +0 -1
  363. package/dist/parser/tests/statement/Continue.spec.d.ts +0 -1
  364. package/dist/parser/tests/statement/Continue.spec.js +0 -119
  365. package/dist/parser/tests/statement/Continue.spec.js.map +0 -1
  366. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  367. package/dist/parser/tests/statement/Declaration.spec.js +0 -114
  368. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  369. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  370. package/dist/parser/tests/statement/Dim.spec.js +0 -80
  371. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  372. package/dist/parser/tests/statement/Enum.spec.d.ts +0 -1
  373. package/dist/parser/tests/statement/Enum.spec.js +0 -744
  374. package/dist/parser/tests/statement/Enum.spec.js.map +0 -1
  375. package/dist/parser/tests/statement/For.spec.d.ts +0 -1
  376. package/dist/parser/tests/statement/For.spec.js +0 -45
  377. package/dist/parser/tests/statement/For.spec.js.map +0 -1
  378. package/dist/parser/tests/statement/ForEach.spec.d.ts +0 -1
  379. package/dist/parser/tests/statement/ForEach.spec.js +0 -36
  380. package/dist/parser/tests/statement/ForEach.spec.js.map +0 -1
  381. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  382. package/dist/parser/tests/statement/Function.spec.js +0 -343
  383. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  384. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  385. package/dist/parser/tests/statement/Goto.spec.js +0 -51
  386. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  387. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  388. package/dist/parser/tests/statement/Increment.spec.js +0 -120
  389. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  390. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +0 -1
  391. package/dist/parser/tests/statement/InterfaceStatement.spec.js +0 -110
  392. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +0 -1
  393. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  394. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  395. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  396. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  397. package/dist/parser/tests/statement/Misc.spec.js +0 -292
  398. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  399. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  400. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -200
  401. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  402. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  403. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -97
  404. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  405. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  406. package/dist/parser/tests/statement/Set.spec.js +0 -232
  407. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  408. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  409. package/dist/parser/tests/statement/Stop.spec.js +0 -38
  410. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  411. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  412. package/dist/parser/tests/statement/Throw.spec.js +0 -38
  413. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  414. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  415. package/dist/parser/tests/statement/TryCatch.spec.js +0 -151
  416. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  417. package/dist/preprocessor/Manifest.spec.d.ts +0 -1
  418. package/dist/preprocessor/Manifest.spec.js +0 -80
  419. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  420. package/dist/types/ArrayType.spec.d.ts +0 -1
  421. package/dist/types/ArrayType.spec.js +0 -58
  422. package/dist/types/ArrayType.spec.js.map +0 -1
  423. package/dist/types/BooleanType.spec.d.ts +0 -1
  424. package/dist/types/BooleanType.spec.js +0 -18
  425. package/dist/types/BooleanType.spec.js.map +0 -1
  426. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +0 -1
  427. package/dist/types/BuiltInInterfaceAdder.spec.js +0 -115
  428. package/dist/types/BuiltInInterfaceAdder.spec.js.map +0 -1
  429. package/dist/types/ClassType.spec.d.ts +0 -1
  430. package/dist/types/ClassType.spec.js +0 -76
  431. package/dist/types/ClassType.spec.js.map +0 -1
  432. package/dist/types/DoubleType.spec.d.ts +0 -1
  433. package/dist/types/DoubleType.spec.js +0 -20
  434. package/dist/types/DoubleType.spec.js.map +0 -1
  435. package/dist/types/DynamicType.spec.d.ts +0 -1
  436. package/dist/types/DynamicType.spec.js +0 -23
  437. package/dist/types/DynamicType.spec.js.map +0 -1
  438. package/dist/types/EnumType.spec.d.ts +0 -1
  439. package/dist/types/EnumType.spec.js +0 -33
  440. package/dist/types/EnumType.spec.js.map +0 -1
  441. package/dist/types/FloatType.spec.d.ts +0 -1
  442. package/dist/types/FloatType.spec.js +0 -12
  443. package/dist/types/FloatType.spec.js.map +0 -1
  444. package/dist/types/IntegerType.spec.d.ts +0 -1
  445. package/dist/types/IntegerType.spec.js +0 -16
  446. package/dist/types/IntegerType.spec.js.map +0 -1
  447. package/dist/types/InterfaceType.spec.d.ts +0 -1
  448. package/dist/types/InterfaceType.spec.js +0 -227
  449. package/dist/types/InterfaceType.spec.js.map +0 -1
  450. package/dist/types/IntersectionType.spec.d.ts +0 -1
  451. package/dist/types/IntersectionType.spec.js +0 -150
  452. package/dist/types/IntersectionType.spec.js.map +0 -1
  453. package/dist/types/InvalidType.spec.d.ts +0 -1
  454. package/dist/types/InvalidType.spec.js +0 -16
  455. package/dist/types/InvalidType.spec.js.map +0 -1
  456. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  457. package/dist/types/LongIntegerType.spec.js +0 -18
  458. package/dist/types/LongIntegerType.spec.js.map +0 -1
  459. package/dist/types/ObjectType.spec.d.ts +0 -1
  460. package/dist/types/ObjectType.spec.js +0 -12
  461. package/dist/types/ObjectType.spec.js.map +0 -1
  462. package/dist/types/ReferenceType.spec.d.ts +0 -1
  463. package/dist/types/ReferenceType.spec.js +0 -151
  464. package/dist/types/ReferenceType.spec.js.map +0 -1
  465. package/dist/types/StringType.spec.d.ts +0 -1
  466. package/dist/types/StringType.spec.js +0 -12
  467. package/dist/types/StringType.spec.js.map +0 -1
  468. package/dist/types/TypedFunctionType.spec.d.ts +0 -1
  469. package/dist/types/TypedFunctionType.spec.js +0 -122
  470. package/dist/types/TypedFunctionType.spec.js.map +0 -1
  471. package/dist/types/UnionType.spec.d.ts +0 -1
  472. package/dist/types/UnionType.spec.js +0 -205
  473. package/dist/types/UnionType.spec.js.map +0 -1
  474. package/dist/types/VoidType.spec.d.ts +0 -1
  475. package/dist/types/VoidType.spec.js +0 -12
  476. package/dist/types/VoidType.spec.js.map +0 -1
  477. package/dist/types/helper.spec.d.ts +0 -1
  478. package/dist/types/helper.spec.js +0 -174
  479. package/dist/types/helper.spec.js.map +0 -1
  480. package/dist/types/roFunctionType.spec.d.ts +0 -1
  481. package/dist/types/roFunctionType.spec.js +0 -20
  482. package/dist/types/roFunctionType.spec.js.map +0 -1
@@ -265,7 +265,7 @@ class ProgramBuilder {
265
265
  return runPromise;
266
266
  }
267
267
  printDiagnostics(diagnostics) {
268
- var _a, _b, _c, _d, _e, _f, _g, _h;
268
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
269
269
  if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.showDiagnosticsInConsole) === false) {
270
270
  return;
271
271
  }
@@ -284,6 +284,15 @@ class ProgramBuilder {
284
284
  //get printing options
285
285
  const options = diagnosticUtils.getPrintDiagnosticOptions(this.options);
286
286
  const { cwd, emitFullPaths } = options;
287
+ //custom-template reporters are pre-resolved once so we don't recompile them per diagnostic;
288
+ //the resolved function is stashed on the entry as `run` so we don't have to keep a parallel array.
289
+ //invalid entries are warned about and skipped (we never want to abort a build over a config typo).
290
+ const reporters = diagnosticUtils.normalizeDiagnosticReporters((_d = this.options) === null || _d === void 0 ? void 0 : _d.diagnosticReporters, this.logger)
291
+ .map(reporter => (reporter.type === 'custom'
292
+ ? Object.assign(Object.assign({}, reporter), { run: diagnosticUtils.createCustomDiagnosticReporter(reporter.format) }) : reporter));
293
+ if (reporters.length === 0) {
294
+ return;
295
+ }
287
296
  let fileUris = Object.keys(diagnosticsByFile).sort();
288
297
  for (let fileUri of fileUris) {
289
298
  let diagnosticsForFile = diagnosticsByFile[fileUri];
@@ -298,13 +307,13 @@ class ProgramBuilder {
298
307
  filePath = path.relative(cwd, filePath);
299
308
  }
300
309
  //load the file text
301
- const file = (_d = this.program) === null || _d === void 0 ? void 0 : _d.getFile(fileUri);
310
+ const file = (_e = this.program) === null || _e === void 0 ? void 0 : _e.getFile(fileUri);
302
311
  //get the file's in-memory contents if available
303
- const lines = (_f = (_e = file === null || file === void 0 ? void 0 : file.fileContents) === null || _e === void 0 ? void 0 : _e.split(/\r?\n/g)) !== null && _f !== void 0 ? _f : [];
312
+ const lines = (_g = (_f = file === null || file === void 0 ? void 0 : file.fileContents) === null || _f === void 0 ? void 0 : _f.split(/\r?\n/g)) !== null && _g !== void 0 ? _g : [];
304
313
  for (let diagnostic of sortedDiagnostics) {
305
314
  //default the severity to error if undefined
306
315
  let severity = typeof diagnostic.severity === 'number' ? diagnostic.severity : vscode_languageserver_1.DiagnosticSeverity.Error;
307
- let relatedInformation = ((_h = (_g = util_1.util.toDiagnostic(diagnostic, diagnostic.source)) === null || _g === void 0 ? void 0 : _g.relatedInformation) !== null && _h !== void 0 ? _h : []).map(x => {
316
+ let relatedInformation = ((_j = (_h = util_1.util.toDiagnostic(diagnostic, diagnostic.source)) === null || _h === void 0 ? void 0 : _h.relatedInformation) !== null && _j !== void 0 ? _j : []).map(x => {
308
317
  var _a;
309
318
  let relatedInfoFilePath = util_1.util.uriToPath((_a = x.location) === null || _a === void 0 ? void 0 : _a.uri);
310
319
  if (!emitFullPaths) {
@@ -316,8 +325,18 @@ class ProgramBuilder {
316
325
  message: x.message
317
326
  };
318
327
  });
319
- //format output
320
- diagnosticUtils.printDiagnostic(options, severity, filePath, lines, diagnostic, relatedInformation);
328
+ //format output once per configured reporter
329
+ for (const reporter of reporters) {
330
+ if (reporter.type === 'github-actions') {
331
+ diagnosticUtils.printDiagnosticGithubActions({ options: options, severity: severity, filePath: filePath, diagnostic: diagnostic });
332
+ }
333
+ else if (reporter.type === 'custom') {
334
+ reporter.run({ options: options, severity: severity, filePath: filePath, diagnostic: diagnostic });
335
+ }
336
+ else {
337
+ diagnosticUtils.printDiagnostic(options, severity, filePath, lines, diagnostic, relatedInformation);
338
+ }
339
+ }
321
340
  }
322
341
  }
323
342
  }
@@ -326,19 +345,20 @@ class ProgramBuilder {
326
345
  * NOTE: This should only be called by `runOnce`.
327
346
  */
328
347
  async _runOnce(options) {
329
- var _a, _b, _c;
348
+ var _a, _b, _c, _d;
330
349
  let wereDiagnosticsPrinted = false;
331
350
  try {
332
351
  //maybe cancel?
333
352
  if (((_a = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _a === void 0 ? void 0 : _a.isCanceled) === true) {
334
353
  return -1;
335
354
  }
336
- //validate program. false means no, everything else (including missing) means true
337
- if ((options === null || options === void 0 ? void 0 : options.validate) !== false) {
355
+ //the prop-drilled validate value takes precedence over this.options.validate.
356
+ //false means no, everything else (including missing) means true
357
+ if (((_b = options === null || options === void 0 ? void 0 : options.validate) !== null && _b !== void 0 ? _b : this.options.validate) !== false) {
338
358
  this.validateProject();
339
359
  }
340
360
  //maybe cancel?
341
- if (((_b = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _b === void 0 ? void 0 : _b.isCanceled) === true) {
361
+ if (((_c = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _c === void 0 ? void 0 : _c.isCanceled) === true) {
342
362
  return -1;
343
363
  }
344
364
  const diagnostics = this.getDiagnostics();
@@ -353,7 +373,7 @@ class ProgramBuilder {
353
373
  await this.transpile();
354
374
  }
355
375
  //maybe cancel?
356
- if (((_c = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _c === void 0 ? void 0 : _c.isCanceled) === true) {
376
+ if (((_d = options === null || options === void 0 ? void 0 : options.cancellationToken) === null || _d === void 0 ? void 0 : _d.isCanceled) === true) {
357
377
  return -1;
358
378
  }
359
379
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"ProgramBuilder.js","sourceRoot":"","sources":["../src/ProgramBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProgramBuilder.js","sourceRoot":"","sources":["../src/ProgramBuilder.ts"],"names":[],"mappings":"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"}
package/dist/Scope.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- import type { CallableContainer, FileReference, FileLink, Callable, NamespaceContainer, ScopeValidationOptions, ScopeNamespaceContainer } from './interfaces';
1
+ import type { Range } from 'vscode-languageserver-protocol';
2
+ import type { CallableContainer, FileReference, FileLink, Callable, ScopeValidationOptions } from './interfaces';
2
3
  import type { Program } from './Program';
3
- import { type NamespaceStatement, type ClassStatement, type EnumStatement, type InterfaceStatement, type EnumMemberStatement, type ConstStatement } from './parser/Statement';
4
+ import type { NamespaceStatement, FunctionStatement, ClassStatement, EnumStatement, InterfaceStatement, EnumMemberStatement, ConstStatement, TypeStatement } from './parser/Statement';
4
5
  import { Cache } from './Cache';
5
6
  import type { BrsFile } from './files/BrsFile';
7
+ import type { Identifier } from './lexer/Token';
6
8
  import type { DependencyGraph, DependencyChangedEvent } from './DependencyGraph';
7
9
  import { SymbolTable } from './SymbolTable';
8
10
  import type { BscFile } from './files/BscFile';
@@ -27,7 +29,7 @@ export declare class Scope {
27
29
  * If a namespace is declared as "NameA.NameB.NameC", there will be 3 entries in this dictionary,
28
30
  * "namea", "namea.nameb", "namea.nameb.namec"
29
31
  */
30
- get namespaceLookup(): Map<string, ScopeNamespaceContainer>;
32
+ get namespaceLookup(): Map<string, NamespaceContainer>;
31
33
  /**
32
34
  * A dictionary of namespaces, indexed by the lower case full name of each namespace.
33
35
  * If a namespace is declared as "NameA.NameB.NameC", there will be 3 entries in this dictionary,
@@ -41,7 +43,7 @@ export declare class Scope {
41
43
  /**
42
44
  * Get a NamespaceContainer by its name, looking for a fully qualified version first, then global version next if not found
43
45
  */
44
- getNamespacesWithRoot(rootName: string, containingNamespace?: string): ScopeNamespaceContainer[];
46
+ getNamespacesWithRoot(rootName: string, containingNamespace?: string): NamespaceContainer[];
45
47
  /**
46
48
  * Get a NamespaceContainer by its name, looking for a fully qualified version first, then global version next if not found
47
49
  */
@@ -66,6 +68,7 @@ export declare class Scope {
66
68
  getEnum(enumName: string, containingNamespace?: string): EnumStatement;
67
69
  private useFileCachesForFileLinkLookups;
68
70
  private getFileLinkFromFileMap;
71
+ getTypeStatement(typeName: string, containingNamespace?: string): Statement;
69
72
  /**
70
73
  * Get a class and its containing file by the class name
71
74
  * @param className - The class name, including the namespace of the class if possible
@@ -97,6 +100,12 @@ export declare class Scope {
97
100
  */
98
101
  getConstFileLink(constName: string, containingNamespace?: string): FileLink<ConstStatement>;
99
102
  getAllFileLinks(name: string, containingNamespace?: string, includeNamespaces?: boolean, includeNameShadowsOutsideNamespace?: boolean): FileLink<Statement>[];
103
+ /**
104
+ * Get an TypeStatement and its containing file by the type name
105
+ * @param typeName - The TypeStatement name, including the namespace of the type if possible
106
+ * @param containingNamespace - The namespace used to resolve relative type names. (i.e. the namespace around the current statement trying to find a type)
107
+ */
108
+ getTypeStatementFileLink(typeName: string, containingNamespace?: string): FileLink<TypeStatement>;
100
109
  /**
101
110
  * Get a map of all enums by their member name.
102
111
  * The keys are lower-case fully-qualified paths to the enum and its member. For example:
@@ -121,6 +130,7 @@ export declare class Scope {
121
130
  * @param namespaceName - the current namespace name
122
131
  */
123
132
  hasEnum(enumName: string, namespaceName?: string): boolean;
133
+ hasTypeStatementType(typeName: string, namespaceName?: string): boolean;
124
134
  /**
125
135
  * A dictionary of all classes in this scope. This includes namespaced classes always with their full name.
126
136
  * The key is stored in lower case
@@ -141,6 +151,11 @@ export declare class Scope {
141
151
  * The key is stored in lower case
142
152
  */
143
153
  getConstMap(): Map<string, FileLink<ConstStatement>>;
154
+ /**
155
+ * A dictionary of all TypeStatements in this scope. This includes namespaced types always with their full name.
156
+ * The key is stored in lower case
157
+ */
158
+ getTypeStatementMap(): Map<string, FileLink<TypeStatement>>;
144
159
  protected onDependenciesChanged(event: DependencyChangedEvent): void;
145
160
  /**
146
161
  * Clean up all event handles
@@ -212,9 +227,20 @@ export declare class Scope {
212
227
  */
213
228
  getOwnCallables(): CallableContainer[];
214
229
  /**
215
- * Builds a tree of namespace objects
230
+ * Build the namespace lookup for this scope.
231
+ *
232
+ * The lookup is now backed by `ScopeNamespaceLookup`, which queries the
233
+ * Program-level `getNamespaceContributors` map lazily on each
234
+ * `.get(name)` call. Per-file contributions are pre-built by
235
+ * `BrsFile.getNamespaceContributions` and shared across every scope that
236
+ * pulls in the file, so single-contribution containers reuse the file's
237
+ * pre-built statement collections and symbolTable instead of allocating
238
+ * per-scope copies.
239
+ *
240
+ * The return type is `Map<string, NamespaceContainer>` for backward
241
+ * compatibility with plugins that consume the public API.
216
242
  */
217
- buildNamespaceLookup(): Map<string, ScopeNamespaceContainer>;
243
+ buildNamespaceLookup(): Map<string, NamespaceContainer>;
218
244
  getAllNamespaceStatements(): NamespaceStatement[];
219
245
  protected logDebug(...args: any[]): void;
220
246
  private _debugLogComponentName;
@@ -276,3 +302,58 @@ export declare class Scope {
276
302
  */
277
303
  getClassHierarchy(className: string, callsiteNamespace?: string): FileLink<ClassStatement>[];
278
304
  }
305
+ /**
306
+ * A single file's contribution to a namespace name. Cached on `BrsFile` and shared
307
+ * across every scope that pulls in this file. The fields here are intrinsic to the
308
+ * file's parsed AST, so they never need to be rebuilt per scope.
309
+ *
310
+ * Pure-intermediate contributions (a namespace name part that this file only references
311
+ * as a dotted prefix, e.g. `A` from `namespace A.B`) carry only the structural fields
312
+ * (file, fullName, lastPartName, nameRange). Leaf contributions populate the relevant
313
+ * statement collections and the per-file `symbolTable`.
314
+ *
315
+ * The `symbolTable` here has no parent provider; sibling resolution in `linkSymbolTable`
316
+ * does not walk into a sibling's parent, so the parent-provider plumbing was dead code.
317
+ */
318
+ export interface NamespaceFileContribution {
319
+ file: BrsFile;
320
+ fullName: string;
321
+ lastPartName: string;
322
+ nameRange: Range;
323
+ namespaceStatements?: NamespaceStatement[];
324
+ statements?: Statement[];
325
+ classStatements?: Record<string, ClassStatement>;
326
+ functionStatements?: Record<string, FunctionStatement>;
327
+ enumStatements?: Map<string, EnumStatement>;
328
+ constStatements?: Map<string, ConstStatement>;
329
+ symbolTable?: SymbolTable;
330
+ }
331
+ /**
332
+ * A node in the per-scope namespace tree.
333
+ *
334
+ * `namespaces` is always allocated so parent-child wiring works for every container.
335
+ * The remaining collections are lazily allocated by `buildNamespaceLookup` only when
336
+ * a corresponding declaration is encountered, so pure-intermediate containers and
337
+ * sparsely-populated leaves do not pay the cost of empty Maps/Records they will never use.
338
+ *
339
+ * Consumers must handle these fields being undefined.
340
+ */
341
+ export interface NamespaceContainer {
342
+ file: BscFile;
343
+ fullName: string;
344
+ nameRange: Range;
345
+ lastPartName: string;
346
+ namespaces?: Map<string, NamespaceContainer>;
347
+ namespaceStatements?: NamespaceStatement[];
348
+ statements?: Statement[];
349
+ classStatements?: Record<string, ClassStatement>;
350
+ functionStatements?: Record<string, FunctionStatement>;
351
+ enumStatements?: Map<string, EnumStatement>;
352
+ constStatements?: Map<string, ConstStatement>;
353
+ symbolTable?: SymbolTable;
354
+ fullNameLower?: string;
355
+ parentNameLower?: string;
356
+ nameParts?: Identifier[];
357
+ lastPartNameLower?: string;
358
+ isTopLevel?: boolean;
359
+ }
package/dist/Scope.js CHANGED
@@ -8,6 +8,7 @@ const Parser_1 = require("./parser/Parser");
8
8
  const util_1 = require("./util");
9
9
  const Cache_1 = require("./Cache");
10
10
  const reflection_1 = require("./astUtils/reflection");
11
+ const visitors_1 = require("./astUtils/visitors");
11
12
  const SymbolTable_1 = require("./SymbolTable");
12
13
  const ReferenceType_1 = require("./types/ReferenceType");
13
14
  const UnionType_1 = require("./types/UnionType");
@@ -15,6 +16,7 @@ const AssociativeArrayType_1 = require("./types/AssociativeArrayType");
15
16
  const perf_hooks_1 = require("perf_hooks");
16
17
  const logging_1 = require("./logging");
17
18
  const UninitializedType_1 = require("./types/UninitializedType");
19
+ const ScopeNamespaceLookup_1 = require("./ScopeNamespaceLookup");
18
20
  /**
19
21
  * Assign some few factories to the SymbolTable to prevent cyclical imports. This file seems like the most intuitive place to do the linking
20
22
  * since Scope will be used by pretty much everything
@@ -91,16 +93,15 @@ class Scope {
91
93
  * Get a NamespaceContainer by its name, looking for a fully qualified version first, then global version next if not found
92
94
  */
93
95
  getNamespace(name, containingNamespace) {
94
- var _a, _b;
95
96
  const nameLower = name === null || name === void 0 ? void 0 : name.toLowerCase();
96
97
  const lookup = this.namespaceLookup;
97
98
  let ns;
98
99
  if (containingNamespace) {
99
- ns = (_a = lookup.get(`${containingNamespace === null || containingNamespace === void 0 ? void 0 : containingNamespace.toLowerCase()}.${nameLower}`)) === null || _a === void 0 ? void 0 : _a.firstInstance;
100
+ ns = lookup.get(`${containingNamespace === null || containingNamespace === void 0 ? void 0 : containingNamespace.toLowerCase()}.${nameLower}`);
100
101
  }
101
102
  //if we couldn't find the namespace by its full namespaced name, look for a global version
102
103
  if (!ns) {
103
- ns = (_b = lookup.get(nameLower)) === null || _b === void 0 ? void 0 : _b.firstInstance;
104
+ ns = lookup.get(nameLower);
104
105
  }
105
106
  return ns;
106
107
  }
@@ -122,13 +123,12 @@ class Scope {
122
123
  * Get a NamespaceContainer by its name, looking for a fully qualified version first, then global version next if not found
123
124
  */
124
125
  getFirstNamespaceWithRoot(rootName, containingNamespace) {
125
- var _a;
126
126
  const nameLower = rootName === null || rootName === void 0 ? void 0 : rootName.toLowerCase();
127
127
  let lookupName = nameLower;
128
128
  if (containingNamespace) {
129
129
  lookupName = `${containingNamespace === null || containingNamespace === void 0 ? void 0 : containingNamespace.toLowerCase()}.${nameLower}`;
130
130
  }
131
- return (_a = this.namespaceLookup.get(lookupName)) === null || _a === void 0 ? void 0 : _a.firstInstance;
131
+ return this.namespaceLookup.get(lookupName);
132
132
  }
133
133
  /**
134
134
  * Get the class with the specified name.
@@ -182,6 +182,10 @@ class Scope {
182
182
  }
183
183
  return result;
184
184
  }
185
+ getTypeStatement(typeName, containingNamespace) {
186
+ var _a;
187
+ return (_a = this.getTypeStatementFileLink(typeName, containingNamespace)) === null || _a === void 0 ? void 0 : _a.item;
188
+ }
185
189
  /**
186
190
  * Get a class and its containing file by the class name
187
191
  * @param className - The class name, including the namespace of the class if possible
@@ -307,6 +311,21 @@ class Scope {
307
311
  // remove empty links
308
312
  return links.filter(link => link);
309
313
  }
314
+ /**
315
+ * Get an TypeStatement and its containing file by the type name
316
+ * @param typeName - The TypeStatement name, including the namespace of the type if possible
317
+ * @param containingNamespace - The namespace used to resolve relative type names. (i.e. the namespace around the current statement trying to find a type)
318
+ */
319
+ getTypeStatementFileLink(typeName, containingNamespace) {
320
+ const lowerName = typeName === null || typeName === void 0 ? void 0 : typeName.toLowerCase();
321
+ const typeStatementMap = this.getTypeStatementMap();
322
+ let typeStatement = typeStatementMap.get(util_1.util.getFullyQualifiedClassName(lowerName, containingNamespace === null || containingNamespace === void 0 ? void 0 : containingNamespace.toLowerCase()));
323
+ //if we couldn't find the enum by its full namespaced name, look for a global enum with that name
324
+ if (!typeStatement) {
325
+ typeStatement = typeStatementMap.get(lowerName);
326
+ }
327
+ return typeStatement;
328
+ }
310
329
  /**
311
330
  * Get a map of all enums by their member name.
312
331
  * The keys are lower-case fully-qualified paths to the enum and its member. For example:
@@ -347,6 +366,9 @@ class Scope {
347
366
  hasEnum(enumName, namespaceName) {
348
367
  return !!this.getEnum(enumName, namespaceName);
349
368
  }
369
+ hasTypeStatementType(typeName, namespaceName) {
370
+ return !!this.getTypeStatement(typeName, namespaceName);
371
+ }
350
372
  /**
351
373
  * A dictionary of all classes in this scope. This includes namespaced classes always with their full name.
352
374
  * The key is stored in lower case
@@ -425,6 +447,29 @@ class Scope {
425
447
  return map;
426
448
  });
427
449
  }
450
+ /**
451
+ * A dictionary of all TypeStatements in this scope. This includes namespaced types always with their full name.
452
+ * The key is stored in lower case
453
+ */
454
+ getTypeStatementMap() {
455
+ return this.cache.getOrAdd('typeStatementMap', () => {
456
+ const map = new Map();
457
+ this.enumerateBrsFiles((file) => {
458
+ file.ast.walk((node) => {
459
+ var _a, _b;
460
+ if ((0, reflection_1.isTypeStatement)(node)) {
461
+ const namespaceName = (_a = node.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript);
462
+ const typeName = (_b = node.tokens.name) === null || _b === void 0 ? void 0 : _b.text;
463
+ if (typeName) {
464
+ const fullName = (namespaceName ? `${namespaceName}.${typeName}` : typeName).toLowerCase();
465
+ map.set(fullName, { item: node, file: file });
466
+ }
467
+ }
468
+ }, { walkMode: visitors_1.WalkMode.visitAllRecursive });
469
+ });
470
+ return map;
471
+ });
472
+ }
428
473
  onDependenciesChanged(event) {
429
474
  this.logDebug('invalidated because dependency graph said [', event.sourceKey, '] changed');
430
475
  this.invalidate();
@@ -434,6 +479,8 @@ class Scope {
434
479
  */
435
480
  dispose() {
436
481
  var _a;
482
+ this.unlinkSymbolTable();
483
+ this.cache.clear();
437
484
  (_a = this.unsubscribeFromDependencyGraph) === null || _a === void 0 ? void 0 : _a.call(this);
438
485
  }
439
486
  /**
@@ -664,27 +711,21 @@ class Scope {
664
711
  return result;
665
712
  }
666
713
  /**
667
- * Builds a tree of namespace objects
714
+ * Build the namespace lookup for this scope.
715
+ *
716
+ * The lookup is now backed by `ScopeNamespaceLookup`, which queries the
717
+ * Program-level `getNamespaceContributors` map lazily on each
718
+ * `.get(name)` call. Per-file contributions are pre-built by
719
+ * `BrsFile.getNamespaceContributions` and shared across every scope that
720
+ * pulls in the file, so single-contribution containers reuse the file's
721
+ * pre-built statement collections and symbolTable instead of allocating
722
+ * per-scope copies.
723
+ *
724
+ * The return type is `Map<string, NamespaceContainer>` for backward
725
+ * compatibility with plugins that consume the public API.
668
726
  */
669
727
  buildNamespaceLookup() {
670
- let namespaceLookup = new Map();
671
- this.enumerateBrsFiles((file) => {
672
- const fileNamespaceLookup = file.getNamespaceLookupObject();
673
- for (const [lowerNamespaceName, nsContainer] of fileNamespaceLookup) {
674
- if (!namespaceLookup.has(lowerNamespaceName)) {
675
- const newScopeNsContainer = {
676
- namespaceContainers: [],
677
- symbolTable: new SymbolTable_1.SymbolTable(`Namespace Scope Aggregate: '${nsContainer.fullName}'`),
678
- firstInstance: nsContainer
679
- };
680
- namespaceLookup.set(lowerNamespaceName, newScopeNsContainer);
681
- }
682
- const scopeNsContainer = namespaceLookup.get(lowerNamespaceName);
683
- scopeNsContainer.symbolTable.mergeSymbolTable(nsContainer.symbolTable);
684
- scopeNsContainer.namespaceContainers.push(nsContainer);
685
- }
686
- });
687
- return namespaceLookup;
728
+ return new ScopeNamespaceLookup_1.ScopeNamespaceLookup(this);
688
729
  }
689
730
  getAllNamespaceStatements() {
690
731
  let result = [];
@@ -798,24 +839,28 @@ class Scope {
798
839
  * ```
799
840
  */
800
841
  linkSymbolTable() {
842
+ var _a;
801
843
  SymbolTable_1.SymbolTable.cacheVerifier.generateToken();
802
844
  this._allNamespaceTypeTable = new SymbolTable_1.SymbolTable(`Scope NamespaceTypes ${this.name}`);
803
845
  for (const file of this.getAllFiles()) {
804
846
  if ((0, reflection_1.isBrsFile)(file)) {
805
847
  this.linkSymbolTableDisposables.push(file.parser.symbolTable.pushParentProvider(() => this.symbolTable));
848
+ //link each NamespaceStatement's SymbolTable with the aggregate NamespaceLookup SymbolTable.
849
+ //Leaf containers always have symbolTable populated, so the lookup below is safe; the null
850
+ //guard tolerates edge cases like a namespace that failed to register.
851
+ for (const namespace of file['_cachedLookups'].namespaceStatements) {
852
+ const namespaceNameLower = namespace.getName(Parser_1.ParseMode.BrighterScript).toLowerCase();
853
+ const aggregate = (_a = this.namespaceLookup.get(namespaceNameLower)) === null || _a === void 0 ? void 0 : _a.symbolTable;
854
+ if (aggregate) {
855
+ this.linkSymbolTableDisposables.push(namespace.getSymbolTable().addSibling(aggregate));
856
+ }
857
+ }
806
858
  }
807
859
  }
808
860
  this.enumerateBrsFiles((file) => {
809
861
  const namespaceTypes = file.getNamespaceSymbolTable();
810
862
  this.linkSymbolTableDisposables.push(...this._allNamespaceTypeTable.mergeNamespaceSymbolTables(namespaceTypes));
811
863
  });
812
- for (const [_, scopeNsContainer] of this.namespaceLookup) {
813
- for (let nsContainer of scopeNsContainer.namespaceContainers) {
814
- for (let nsStmt of nsContainer.namespaceStatements) {
815
- this.linkSymbolTableDisposables.push(nsStmt === null || nsStmt === void 0 ? void 0 : nsStmt.getSymbolTable().addSibling(scopeNsContainer.symbolTable));
816
- }
817
- }
818
- }
819
864
  this.linkSymbolTableDisposables.push(this.symbolTable.addSibling(this._allNamespaceTypeTable));
820
865
  }
821
866
  unlinkSymbolTable() {