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
@@ -1,178 +1,299 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SymbolTable = void 0;
4
- const BscType_1 = require("./types/BscType");
5
- const DynamicType_1 = require("./types/DynamicType");
3
+ exports.SymbolTable = exports.SymbolTypeFlag = void 0;
4
+ const CacheVerifier_1 = require("./CacheVerifier");
5
+ const helpers_1 = require("./types/helpers");
6
+ const reflection_1 = require("./astUtils/reflection");
7
+ var SymbolTypeFlag;
8
+ (function (SymbolTypeFlag) {
9
+ SymbolTypeFlag[SymbolTypeFlag["runtime"] = 1] = "runtime";
10
+ SymbolTypeFlag[SymbolTypeFlag["typetime"] = 2] = "typetime";
11
+ SymbolTypeFlag[SymbolTypeFlag["optional"] = 4] = "optional";
12
+ SymbolTypeFlag[SymbolTypeFlag["private"] = 8] = "private";
13
+ SymbolTypeFlag[SymbolTypeFlag["protected"] = 16] = "protected";
14
+ SymbolTypeFlag[SymbolTypeFlag["postTranspile"] = 32] = "postTranspile";
15
+ })(SymbolTypeFlag = exports.SymbolTypeFlag || (exports.SymbolTypeFlag = {}));
6
16
  /**
7
17
  * Stores the types associated with variables and functions in the Brighterscript code
8
18
  * Can be part of a hierarchy, so lookups can reference parent scopes
9
19
  */
10
20
  class SymbolTable {
11
- constructor(parent, name = '') {
21
+ constructor(name, parentProvider) {
12
22
  this.name = name;
13
23
  /**
14
24
  * The map of symbols declared directly in this SymbolTable (excludes parent SymbolTable).
15
25
  * Indexed by lower symbol name
16
26
  */
17
27
  this.symbolMap = new Map();
18
- /**
19
- * Sets the parent table for lookups. There can only be one parent at a time, but sometimes you
20
- * want to temporarily change the parent, and then restore it later. This allows that.
21
- *
22
- * @param [parent]
23
- */
24
- this.parentStack = [];
25
- this.pushParent(parent);
28
+ this.parentProviders = [];
29
+ this.siblings = new Set();
30
+ this.resetTypeCache();
31
+ if (parentProvider) {
32
+ this.pushParentProvider(parentProvider);
33
+ }
26
34
  }
27
35
  /**
28
- * Get list of symbols declared directly in this SymbolTable (excludes parent SymbolTable).
29
- */
30
- getOwnSymbols() {
31
- return [].concat(...this.symbolMap.values());
36
+ * Push a function that will provide a parent SymbolTable when requested
37
+ */
38
+ pushParentProvider(provider) {
39
+ this.parentProviders.push(provider);
40
+ return () => {
41
+ this.popParentProvider();
42
+ };
32
43
  }
33
44
  /**
34
- * Get list of all symbols declared in this SymbolTable (includes parent SymbolTable).
45
+ * Pop the current parentProvider
35
46
  */
36
- getAllSymbols() {
37
- let symbols = this.getOwnSymbols();
38
- if (this.parent) {
39
- symbols = symbols.concat(this.parent.getAllSymbols());
40
- }
41
- return symbols;
47
+ popParentProvider() {
48
+ this.parentProviders.pop();
42
49
  }
50
+ /**
51
+ * The parent SymbolTable (if there is one)
52
+ */
43
53
  get parent() {
44
- return this.parentStack[0];
54
+ var _a, _b;
55
+ return (_b = (_a = this.parentProviders)[this.parentProviders.length - 1]) === null || _b === void 0 ? void 0 : _b.call(_a);
45
56
  }
46
- pushParent(parent) {
47
- this.parentStack.unshift(parent);
48
- return parent;
57
+ /**
58
+ * Add a sibling symbol table (which will be inspected first before walking upward to the parent
59
+ */
60
+ addSibling(sibling) {
61
+ this.siblings.add(sibling);
62
+ return () => {
63
+ this.siblings.delete(sibling);
64
+ };
49
65
  }
50
66
  /**
51
- * Remove the current parent, restoring the previous parent (if there was one)
67
+ * Remove a sibling symbol table
52
68
  */
53
- popParent() {
54
- return this.parentStack.shift();
69
+ removeSibling(sibling) {
70
+ this.siblings.delete(sibling);
71
+ }
72
+ clearSymbols() {
73
+ this.symbolMap.clear();
55
74
  }
56
75
  /**
57
76
  * Checks if the symbol table contains the given symbol by name
58
77
  * If the identifier is not in this table, it will check the parent
59
78
  *
60
79
  * @param name the name to lookup
61
- * @param searchParent should we look to our parent if we don't have the symbol?
80
+ * @param bitFlags flags to match (See SymbolTypeFlags)
62
81
  * @returns true if this symbol is in the symbol table
63
82
  */
64
- hasSymbol(name, searchParent = true) {
65
- var _a;
66
- const key = name.toLowerCase();
67
- let result = this.symbolMap.has(key);
68
- if (!result && searchParent) {
69
- result = !!((_a = this.parent) === null || _a === void 0 ? void 0 : _a.hasSymbol(key));
70
- }
71
- return result;
83
+ hasSymbol(name, bitFlags) {
84
+ let currentTable = this;
85
+ const key = name === null || name === void 0 ? void 0 : name.toLowerCase();
86
+ let result;
87
+ do {
88
+ // look in our map first
89
+ if ((result = currentTable.symbolMap.get(key))) {
90
+ // eslint-disable-next-line no-bitwise
91
+ if (result.find(symbol => symbol.flags & bitFlags)) {
92
+ return true;
93
+ }
94
+ }
95
+ //look through any sibling maps next
96
+ for (let sibling of currentTable.siblings) {
97
+ if ((result = sibling.symbolMap.get(key))) {
98
+ // eslint-disable-next-line no-bitwise
99
+ if (result.find(symbol => symbol.flags & bitFlags)) {
100
+ return true;
101
+ }
102
+ }
103
+ }
104
+ currentTable = currentTable.parent;
105
+ } while (currentTable);
106
+ return false;
72
107
  }
73
108
  /**
74
109
  * Gets the name/type pair for a given named variable or function name
75
110
  * If the identifier is not in this table, it will check the parent
76
111
  *
77
112
  * @param name the name to lookup
78
- * @param searchParent should we look to our parent if we don't have the symbol?
113
+ * @param bitFlags flags to match
79
114
  * @returns An array of BscSymbols - one for each time this symbol had a type implicitly defined
80
115
  */
81
- getSymbol(name, searchParent = true) {
82
- var _a;
83
- const key = name.toLowerCase();
84
- let result = this.symbolMap.get(key);
85
- if (!result && searchParent) {
86
- result = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbol(key);
87
- }
88
- return result;
116
+ getSymbol(name, bitFlags) {
117
+ let currentTable = this;
118
+ const key = name === null || name === void 0 ? void 0 : name.toLowerCase();
119
+ let result;
120
+ let memberOfAncestor = false;
121
+ const addAncestorInfo = (symbol) => (Object.assign(Object.assign({}, symbol), { data: Object.assign(Object.assign({}, symbol.data), { memberOfAncestor: memberOfAncestor }) }));
122
+ do {
123
+ // look in our map first
124
+ if ((result = currentTable.symbolMap.get(key))) {
125
+ // eslint-disable-next-line no-bitwise
126
+ result = result.filter(symbol => symbol.flags & bitFlags);
127
+ if (result.length > 0) {
128
+ return result.map(addAncestorInfo);
129
+ }
130
+ }
131
+ //look through any sibling maps next
132
+ for (let sibling of currentTable.siblings) {
133
+ result = sibling.getSymbol(key, bitFlags);
134
+ if ((result === null || result === void 0 ? void 0 : result.length) > 0) {
135
+ return result.map(addAncestorInfo);
136
+ }
137
+ }
138
+ currentTable = currentTable.parent;
139
+ memberOfAncestor = true;
140
+ } while (currentTable);
89
141
  }
90
142
  /**
91
143
  * Adds a new symbol to the table
92
- * @param name
93
- * @param type
94
144
  */
95
- addSymbol(name, range, type) {
145
+ addSymbol(name, data, type, bitFlags) {
146
+ var _a;
96
147
  const key = name.toLowerCase();
97
148
  if (!this.symbolMap.has(key)) {
98
149
  this.symbolMap.set(key, []);
99
150
  }
100
- this.symbolMap.get(key).push({
151
+ (_a = this.symbolMap.get(key)) === null || _a === void 0 ? void 0 : _a.push({
101
152
  name: name,
102
- range: range,
103
- type: type
153
+ data: data,
154
+ type: type,
155
+ flags: bitFlags
104
156
  });
105
157
  }
106
158
  /**
107
- * Gets the type for a symbol
108
- * @param name the name of the symbol to get the type for
109
- * @param searchParent should we look to our parent if we don't have the symbol?
110
- * @param context the context for where this type was referenced - used ONLY for lazy types
111
- * @returns The type, if found. If the type has ever changed, return DynamicType. If not found, returns UninitializedType
159
+ * Removes a new symbol from the table
112
160
  */
113
- getSymbolType(name, searchParent = true, context) {
114
- var _a, _b, _c;
161
+ removeSymbol(name) {
115
162
  const key = name.toLowerCase();
116
- const symbols = this.symbolMap.get(key);
117
- if ((symbols === null || symbols === void 0 ? void 0 : symbols.length) > 1) {
118
- //Check if each time it was set, it was set to the same type
119
- // TODO TYPES handle union types
120
- let sameInferredType = true;
121
- let inferredType;
122
- for (const symbol of symbols) {
123
- if (((context === null || context === void 0 ? void 0 : context.position) && isPositionBefore((_a = symbol.range) === null || _a === void 0 ? void 0 : _a.end, context.position)) || !(context === null || context === void 0 ? void 0 : context.position)) {
124
- // if we're looking at context with a position, only look at types that were set before
125
- const existingType = (0, BscType_1.getTypeFromContext)(symbol.type, context);
126
- // if the type is not known yet, imply that the first assignment is the type
127
- inferredType = inferredType !== null && inferredType !== void 0 ? inferredType : existingType;
128
- // TODO TYPES ... maybe this should look as 'convertibility' to infer a type
129
- // EG.:
130
- // value = 1
131
- // value = 3.4
132
- // print value ' hover here would say "dynamic", but it's been treated like a float
133
- //
134
- // This also impacts Enums, for example, as literal members are different types than a value that is generically a value of the type of the Enum:
135
- //
136
- // function getDataType(defaultValue as DataEnum) as DataEnum
137
- // returnVal = defaultValue
138
- // if someCondition
139
- // returnVal = DataEnum.Other
140
- // end if
141
- // return returnVal ' hover here would say dynamic, but returnVal was always some kind of "DataEnum"
142
- // end function
143
- sameInferredType = (inferredType === null || inferredType === void 0 ? void 0 : inferredType.equals(existingType, context));
144
- }
145
- if (!sameInferredType) {
146
- break;
147
- }
148
- }
149
- return sameInferredType ? inferredType : new DynamicType_1.DynamicType();
163
+ if (!this.symbolMap.has(key)) {
164
+ this.symbolMap.set(key, []);
165
+ }
166
+ this.symbolMap.delete(key);
167
+ }
168
+ getSymbolTypes(name, options) {
169
+ const symbolArray = this.getSymbol(name, options.flags);
170
+ if (!symbolArray) {
171
+ return undefined;
150
172
  }
151
- else if ((symbols === null || symbols === void 0 ? void 0 : symbols.length) === 1) {
152
- return (0, BscType_1.getTypeFromContext)(symbols[0].type, context);
173
+ return symbolArray === null || symbolArray === void 0 ? void 0 : symbolArray.map(symbol => ({ type: symbol.type, data: symbol.data, flags: symbol.flags }));
174
+ }
175
+ getSymbolType(name, options) {
176
+ var _a, _b;
177
+ const cacheEntry = options.ignoreCacheForRetrieval ? undefined : this.getCachedType(name, options);
178
+ let resolvedType = cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.type;
179
+ let doSetCache = !resolvedType;
180
+ const originalIsReferenceType = (0, reflection_1.isAnyReferenceType)(resolvedType);
181
+ let data = (cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.data) || {};
182
+ let foundFlags = cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.flags;
183
+ if (!resolvedType || originalIsReferenceType) {
184
+ const symbolTypes = this.getSymbolTypes(name, options);
185
+ data = (_a = symbolTypes === null || symbolTypes === void 0 ? void 0 : symbolTypes[0]) === null || _a === void 0 ? void 0 : _a.data;
186
+ foundFlags = symbolTypes === null || symbolTypes === void 0 ? void 0 : symbolTypes[0].flags;
187
+ resolvedType = (0, helpers_1.getUniqueType)(symbolTypes === null || symbolTypes === void 0 ? void 0 : symbolTypes.map(symbol => symbol.type), SymbolTable.unionTypeFactory);
153
188
  }
154
- if (searchParent) {
155
- const parentContext = context ? { file: context === null || context === void 0 ? void 0 : context.file, scope: context === null || context === void 0 ? void 0 : context.scope } : undefined;
156
- return (_c = (_b = this.parent) === null || _b === void 0 ? void 0 : _b.getSymbolType(name, true, parentContext)) !== null && _c !== void 0 ? _c : undefined;
189
+ if (!resolvedType && options.fullName && options.tableProvider) {
190
+ resolvedType = SymbolTable.referenceTypeFactory(name, options.fullName, options.flags, options.tableProvider);
157
191
  }
158
- else {
159
- return undefined;
192
+ const resolvedTypeIsReference = (0, reflection_1.isAnyReferenceType)(resolvedType);
193
+ const newNonReferenceType = originalIsReferenceType && !(0, reflection_1.isAnyReferenceType)(resolvedType);
194
+ doSetCache = doSetCache && (options.onlyCacheResolvedTypes ? !resolvedTypeIsReference : true);
195
+ if (doSetCache || newNonReferenceType) {
196
+ this.setCachedType(name, { type: resolvedType, data: data, flags: foundFlags }, options);
160
197
  }
198
+ (_b = options.data) !== null && _b !== void 0 ? _b : (options.data = {});
199
+ if (options.data) {
200
+ options.data.definingNode = data === null || data === void 0 ? void 0 : data.definingNode;
201
+ options.data.description = data === null || data === void 0 ? void 0 : data.description;
202
+ options.data.flags = foundFlags !== null && foundFlags !== void 0 ? foundFlags : options.flags;
203
+ options.data.memberOfAncestor = data === null || data === void 0 ? void 0 : data.memberOfAncestor;
204
+ }
205
+ return resolvedType;
161
206
  }
162
207
  /**
163
208
  * Adds all the symbols from another table to this one
164
209
  * It will overwrite any existing symbols in this table
165
- * @param symbolTable
166
210
  */
167
211
  mergeSymbolTable(symbolTable) {
168
212
  for (let [, value] of symbolTable.symbolMap) {
169
213
  for (const symbol of value) {
170
- this.addSymbol(symbol.name, symbol.range, symbol.type);
214
+ this.addSymbol(symbol.name, symbol.data, symbol.type, symbol.flags);
171
215
  }
172
216
  }
173
217
  }
174
- clear() {
175
- this.symbolMap.clear();
218
+ /**
219
+ * Get list of symbols declared directly in this SymbolTable (excludes parent SymbolTable).
220
+ */
221
+ getOwnSymbols(bitFlags) {
222
+ let symbols = [].concat(...this.symbolMap.values());
223
+ // eslint-disable-next-line no-bitwise
224
+ symbols = symbols.filter(symbol => symbol.flags & bitFlags);
225
+ return symbols;
226
+ }
227
+ /**
228
+ * Get list of all symbols declared in this SymbolTable (includes parent SymbolTable).
229
+ */
230
+ getAllSymbols(bitFlags) {
231
+ let symbols = [].concat(...this.symbolMap.values());
232
+ //look through any sibling maps next
233
+ for (let sibling of this.siblings) {
234
+ symbols = symbols.concat(sibling.getAllSymbols(bitFlags));
235
+ }
236
+ if (this.parent) {
237
+ symbols = symbols.concat(this.parent.getAllSymbols(bitFlags));
238
+ }
239
+ // eslint-disable-next-line no-bitwise
240
+ symbols = symbols.filter(symbol => symbol.flags & bitFlags);
241
+ //remove duplicate symbols
242
+ const symbolsMap = new Map();
243
+ for (const symbol of symbols) {
244
+ const lowerSymbolName = symbol.name.toLowerCase();
245
+ if (!symbolsMap.has(lowerSymbolName)) {
246
+ symbolsMap.set(lowerSymbolName, symbol);
247
+ }
248
+ }
249
+ return [...symbolsMap.values()];
250
+ }
251
+ resetTypeCache() {
252
+ var _a;
253
+ this.typeCache = [
254
+ undefined,
255
+ new Map(),
256
+ new Map(),
257
+ new Map() // SymbolTypeFlags.runtime & SymbolTypeFlags.typetime
258
+ ];
259
+ this.cacheToken = (_a = SymbolTable.cacheVerifier) === null || _a === void 0 ? void 0 : _a.getToken();
260
+ }
261
+ getCachedType(name, options) {
262
+ var _a, _b;
263
+ if (SymbolTable.cacheVerifier) {
264
+ if (!((_a = SymbolTable.cacheVerifier) === null || _a === void 0 ? void 0 : _a.checkToken(this.cacheToken))) {
265
+ // we have a bad token
266
+ this.resetTypeCache();
267
+ return;
268
+ }
269
+ }
270
+ else {
271
+ // no cache verifier
272
+ return;
273
+ }
274
+ return (_b = this.typeCache[options.flags]) === null || _b === void 0 ? void 0 : _b.get(name.toLowerCase());
275
+ }
276
+ setCachedType(name, cacheEntry, options) {
277
+ var _a, _b, _c;
278
+ if (!cacheEntry) {
279
+ return;
280
+ }
281
+ if (SymbolTable.cacheVerifier) {
282
+ if (!((_a = SymbolTable.cacheVerifier) === null || _a === void 0 ? void 0 : _a.checkToken(this.cacheToken))) {
283
+ // we have a bad token - remove all other caches
284
+ this.resetTypeCache();
285
+ }
286
+ }
287
+ else {
288
+ // no cache verifier
289
+ return;
290
+ }
291
+ let existingCachedValue = (_b = this.typeCache[options.flags]) === null || _b === void 0 ? void 0 : _b.get(name.toLowerCase());
292
+ if ((0, reflection_1.isReferenceType)(cacheEntry.type) && !(0, reflection_1.isReferenceType)(existingCachedValue)) {
293
+ // No need to overwrite a non-referenceType with a referenceType
294
+ return;
295
+ }
296
+ return (_c = this.typeCache[options.flags]) === null || _c === void 0 ? void 0 : _c.set(name.toLowerCase(), cacheEntry);
176
297
  }
177
298
  /**
178
299
  * Serialize this SymbolTable to JSON (useful for debugging reasons)
@@ -181,21 +302,25 @@ class SymbolTable {
181
302
  var _a;
182
303
  return {
183
304
  name: this.name,
305
+ siblings: [...this.siblings].map(sibling => sibling.toJSON()),
184
306
  parent: (_a = this.parent) === null || _a === void 0 ? void 0 : _a.toJSON(),
185
- parentStack: this.parentStack.map(p => p === null || p === void 0 ? void 0 : p.toJSON()),
186
307
  symbols: [
187
308
  ...new Set([...this.symbolMap.entries()].map(([key, symbols]) => {
188
- return symbols.map(x => x.name);
309
+ return symbols.map(x => {
310
+ var _a;
311
+ return { name: x.name, type: (_a = x.type) === null || _a === void 0 ? void 0 : _a.__identifier };
312
+ });
189
313
  }).flat().sort())
190
314
  ]
191
315
  };
192
316
  }
193
317
  }
194
318
  exports.SymbolTable = SymbolTable;
195
- function isPositionBefore(pos1, pos2) {
196
- if ((pos1 === null || pos1 === void 0 ? void 0 : pos1.line) < (pos2 === null || pos2 === void 0 ? void 0 : pos2.line)) {
197
- return true;
198
- }
199
- return false;
200
- }
319
+ /**
320
+ * Used to invalidate the cache for all symbol tables.
321
+ *
322
+ * This is not the most optimized solution as cache will be shared across all instances of SymbolTable across all programs,
323
+ * but this is the easiest way to handle nested/linked symbol table cache management so we can optimize this in the future some time...
324
+ */
325
+ SymbolTable.cacheVerifier = new CacheVerifier_1.CacheVerifier();
201
326
  //# sourceMappingURL=SymbolTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SymbolTable.js","sourceRoot":"","sources":["../src/SymbolTable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SymbolTable.js","sourceRoot":"","sources":["../src/SymbolTable.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,18 @@ export declare class Throttler {
5
5
  private pendingJob;
6
6
  private emitter;
7
7
  private get isIdle();
8
+ on(eventName: 'idle' | 'run', callback: () => any): () => void;
9
+ /**
10
+ * Resolve a promise the next time the event fires
11
+ * @param eventName the name of the event to subscribe to
12
+ * @param timeout if the event doesn't fire within the specified time, the promise will auto-resolve itself
13
+ */
14
+ once(eventName: 'idle' | 'run', timeout?: number): Promise<any>;
15
+ /**
16
+ * Wait for the next 'run' event. Or resolve immediately if already running.
17
+ * @param timeout after this timeout, the promise resolves even if the 'run' event never fired
18
+ */
19
+ onRunOnce(timeout?: number): Promise<any>;
8
20
  /**
9
21
  * Get a promise that resolves the next time the throttler becomes idle
10
22
  */
package/dist/Throttler.js CHANGED
@@ -12,6 +12,42 @@ class Throttler {
12
12
  get isIdle() {
13
13
  return !this.runningJobPromise;
14
14
  }
15
+ on(eventName, callback) {
16
+ this.emitter.on(eventName, callback);
17
+ return () => {
18
+ this.emitter.off(eventName, callback);
19
+ };
20
+ }
21
+ /**
22
+ * Resolve a promise the next time the event fires
23
+ * @param eventName the name of the event to subscribe to
24
+ * @param timeout if the event doesn't fire within the specified time, the promise will auto-resolve itself
25
+ */
26
+ once(eventName, timeout) {
27
+ const promises = [];
28
+ //register a timeout if specified
29
+ if (timeout > 0) {
30
+ promises.push(util_1.default.sleep(timeout));
31
+ }
32
+ //wait for the event
33
+ promises.push(new Promise((resolve) => {
34
+ const disconnect = this.on(eventName, () => {
35
+ disconnect();
36
+ resolve();
37
+ });
38
+ }));
39
+ return Promise.race(promises);
40
+ }
41
+ /**
42
+ * Wait for the next 'run' event. Or resolve immediately if already running.
43
+ * @param timeout after this timeout, the promise resolves even if the 'run' event never fired
44
+ */
45
+ async onRunOnce(timeout = 0) {
46
+ if (!this.isIdle) {
47
+ return;
48
+ }
49
+ return this.once('run', timeout);
50
+ }
15
51
  /**
16
52
  * Get a promise that resolves the next time the throttler becomes idle
17
53
  */
@@ -55,6 +91,9 @@ class Throttler {
55
91
  * Private method to run a job after a delay.
56
92
  */
57
93
  async runInternal(job) {
94
+ if (!this.pendingJob) {
95
+ this.emitter.emit('run');
96
+ }
58
97
  this.runningJobPromise = util_1.default.sleep(this.delay).then(() => {
59
98
  //run the job
60
99
  return job();
@@ -1 +1 @@
1
- {"version":3,"file":"Throttler.js","sourceRoot":"","sources":["../src/Throttler.ts"],"names":[],"mappings":";;;AAAA,iCAA0B;AAC1B,iDAA6C;AAC7C,yCAAsC;AAEtC,MAAa,SAAS;IAClB,YACa,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAMlB,YAAO,GAAG,IAAI,4BAAY,EAAE,CAAC;IAJrC,CAAC;IAMD,IAAY,MAAM;QACd,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU,CAAC,wBAAwB,GAAG,IAAI;QACnD,IAAI,wBAAwB,IAAI,IAAI,CAAC,MAAM,EAAE;YACzC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;SAC5B;QACD,MAAM,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACnC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,QAAQ;QAClB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,GAAG,CAAC,GAAG;QAChB,kDAAkD;QAClD,mCAAmC;QACnC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YACtB,yDAAyD;YACzD,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;SAC5B;aAAM;YACH,0BAA0B;YAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SAChC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,GAAG;QACzB,IAAI,CAAC,iBAAiB,GAAG,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACtD,aAAa;YACb,OAAO,GAAG,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,gCAAgC;YAChC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACT,4CAA4C;YAC5C,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,kCAAkC;gBAClC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBACjC,kFAAkF;gBAClF,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aACvC;iBAAM;gBACH,yBAAyB;gBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;aACtC;QACL,CAAC,CAAC,CAAC;QACH,qCAAqC;QACrC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IACtC,CAAC;CACJ;AAtFD,8BAsFC"}
1
+ {"version":3,"file":"Throttler.js","sourceRoot":"","sources":["../src/Throttler.ts"],"names":[],"mappings":"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"}
package/dist/Watcher.d.ts CHANGED
@@ -8,13 +8,10 @@ export declare class Watcher {
8
8
  private watchers;
9
9
  /**
10
10
  * Watch the paths or globs
11
- * @param paths
12
11
  */
13
12
  watch(paths: string | string[]): () => Promise<void>;
14
13
  /**
15
14
  * Be notified of all events
16
- * @param event
17
- * @param callback
18
15
  */
19
16
  on(event: 'all', callback: (event: any, path: any, details: any) => void): () => void;
20
17
  dispose(): void;
package/dist/Watcher.js CHANGED
@@ -12,7 +12,6 @@ class Watcher {
12
12
  }
13
13
  /**
14
14
  * Watch the paths or globs
15
- * @param paths
16
15
  */
17
16
  watch(paths) {
18
17
  let watcher = chokidar.watch(paths, {
@@ -35,8 +34,6 @@ class Watcher {
35
34
  }
36
35
  /**
37
36
  * Be notified of all events
38
- * @param event
39
- * @param callback
40
37
  */
41
38
  on(event, callback) {
42
39
  let watchers = [...this.watchers];
@@ -1 +1 @@
1
- {"version":3,"file":"Watcher.js","sourceRoot":"","sources":["../src/Watcher.ts"],"names":[],"mappings":";;;AAAA,qCAAqC;AAIrC;;GAEG;AACH,MAAa,OAAO;IAChB,YACY,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;QAKrB,aAAQ,GAAyB,EAAE,CAAC;IAF5C,CAAC;IAID;;;OAGG;IACI,KAAK,CAAC,KAAwB;QACjC,IAAI,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;YAChC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YACzB,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE;gBACd,kBAAkB,EAAE,GAAG;gBACvB,YAAY,EAAE,GAAG;aACpB;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,OAAO,KAAK,IAAI,EAAE;YACd,mBAAmB;YACnB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,mBAAmB;YACnB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,kCAAkC;YAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,EAAE,CAAC,KAAY,EAAE,QAAwC;QAC5D,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;YAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC/B;QAED,uBAAuB;QACvB,OAAO,GAAG,EAAE;YACR,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;gBAC1B,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC3C;QACL,CAAC,CAAC;IACN,CAAC;IAEM,OAAO;QACV,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,OAAO,CAAC,kBAAkB,EAAE,CAAC;SAChC;IACL,CAAC;CACJ;AA1DD,0BA0DC"}
1
+ {"version":3,"file":"Watcher.js","sourceRoot":"","sources":["../src/Watcher.ts"],"names":[],"mappings":";;;AAAA,qCAAqC;AAIrC;;GAEG;AACH,MAAa,OAAO;IAChB,YACY,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;QAKrB,aAAQ,GAAyB,EAAE,CAAC;IAF5C,CAAC;IAID;;OAEG;IACI,KAAK,CAAC,KAAwB;QACjC,IAAI,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;YAChC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YACzB,aAAa,EAAE,IAAI;YACnB,gBAAgB,EAAE;gBACd,kBAAkB,EAAE,GAAG;gBACvB,YAAY,EAAE,GAAG;aACpB;SACJ,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5B,OAAO,KAAK,IAAI,EAAE;YACd,mBAAmB;YACnB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,mBAAmB;YACnB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,kCAAkC;YAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACI,EAAE,CAAC,KAAY,EAAE,QAAwC;QAC5D,IAAI,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;YAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAC/B;QAED,uBAAuB;QACvB,OAAO,GAAG,EAAE;YACR,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE;gBAC1B,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC3C;QACL,CAAC,CAAC;IACN,CAAC;IAEM,OAAO;QACV,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,OAAO,CAAC,kBAAkB,EAAE,CAAC;SAChC;IACL,CAAC;CACJ;AAvDD,0BAuDC"}
@@ -1,9 +1,10 @@
1
1
  import type { Location, Position } from 'vscode-languageserver';
2
2
  import { Scope } from './Scope';
3
3
  import type { XmlFile } from './files/XmlFile';
4
- import type { BscFile, CallableContainerMap } from './interfaces';
4
+ import { type CallableContainerMap } from './interfaces';
5
5
  import type { Program } from './Program';
6
- import { SymbolTable } from './SymbolTable';
6
+ import type { BscFile } from './files/BscFile';
7
+ import { ComponentType } from './types/ComponentType';
7
8
  export declare class XmlScope extends Scope {
8
9
  xmlFile: XmlFile;
9
10
  program: Program;
@@ -14,10 +15,7 @@ export declare class XmlScope extends Scope {
14
15
  * Otherwise default to global scope
15
16
  */
16
17
  getParentScope(): Scope;
17
- private _topTable;
18
- protected clearSymbolTable(): void;
19
- get topTable(): SymbolTable;
20
- get memberTable(): SymbolTable;
18
+ getComponentType(): ComponentType;
21
19
  protected _validate(callableContainerMap: CallableContainerMap): void;
22
20
  private diagnosticValidateInterface;
23
21
  private diagnosticMissingAttribute;