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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (715) hide show
  1. package/README.md +76 -138
  2. package/bsconfig.schema.json +121 -5
  3. package/dist/ActionPipeline.d.ts +10 -0
  4. package/dist/ActionPipeline.js +40 -0
  5. package/dist/ActionPipeline.js.map +1 -0
  6. package/dist/AstValidationSegmenter.d.ts +45 -0
  7. package/dist/AstValidationSegmenter.js +322 -0
  8. package/dist/AstValidationSegmenter.js.map +1 -0
  9. package/dist/BsConfig.d.ts +72 -39
  10. package/dist/BusyStatusTracker.d.ts +61 -0
  11. package/dist/BusyStatusTracker.js +148 -0
  12. package/dist/BusyStatusTracker.js.map +1 -0
  13. package/dist/Cache.d.ts +3 -8
  14. package/dist/Cache.js +9 -14
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +12 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +7 -6
  23. package/dist/CommentFlagProcessor.js +11 -8
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +642 -0
  27. package/dist/CrossScopeValidator.js.map +1 -0
  28. package/dist/DependencyGraph.d.ts +8 -3
  29. package/dist/DependencyGraph.js +49 -16
  30. package/dist/DependencyGraph.js.map +1 -1
  31. package/dist/DiagnosticCollection.d.ts +21 -5
  32. package/dist/DiagnosticCollection.js +77 -24
  33. package/dist/DiagnosticCollection.js.map +1 -1
  34. package/dist/DiagnosticFilterer.d.ts +27 -6
  35. package/dist/DiagnosticFilterer.js +273 -60
  36. package/dist/DiagnosticFilterer.js.map +1 -1
  37. package/dist/DiagnosticManager.d.ts +82 -0
  38. package/dist/DiagnosticManager.js +406 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +558 -196
  41. package/dist/DiagnosticMessages.js +870 -340
  42. package/dist/DiagnosticMessages.js.map +1 -1
  43. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  44. package/dist/DiagnosticSeverityAdjuster.js +45 -0
  45. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  46. package/dist/FunctionScope.d.ts +28 -0
  47. package/dist/FunctionScope.js +52 -0
  48. package/dist/FunctionScope.js.map +1 -0
  49. package/dist/KeyedThrottler.d.ts +3 -3
  50. package/dist/KeyedThrottler.js +3 -3
  51. package/dist/KeyedThrottler.js.map +1 -1
  52. package/dist/LanguageServer.d.ts +100 -105
  53. package/dist/LanguageServer.js +444 -745
  54. package/dist/LanguageServer.js.map +1 -1
  55. package/dist/Logger.d.ts +17 -13
  56. package/dist/Logger.js +64 -34
  57. package/dist/Logger.js.map +1 -1
  58. package/dist/PluginInterface.d.ts +32 -10
  59. package/dist/PluginInterface.js +117 -7
  60. package/dist/PluginInterface.js.map +1 -1
  61. package/dist/Program.d.ts +241 -98
  62. package/dist/Program.js +1432 -717
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +47 -23
  65. package/dist/ProgramBuilder.js +224 -178
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +149 -109
  68. package/dist/Scope.js +557 -550
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/SemanticTokenUtils.js +5 -1
  71. package/dist/SemanticTokenUtils.js.map +1 -1
  72. package/dist/Stopwatch.d.ts +4 -0
  73. package/dist/Stopwatch.js +8 -1
  74. package/dist/Stopwatch.js.map +1 -1
  75. package/dist/SymbolTable.d.ts +136 -24
  76. package/dist/SymbolTable.js +565 -64
  77. package/dist/SymbolTable.js.map +1 -1
  78. package/dist/SymbolTypeFlag.d.ts +9 -0
  79. package/dist/SymbolTypeFlag.js +14 -0
  80. package/dist/SymbolTypeFlag.js.map +1 -0
  81. package/dist/Throttler.d.ts +12 -0
  82. package/dist/Throttler.js +39 -0
  83. package/dist/Throttler.js.map +1 -1
  84. package/dist/Watcher.d.ts +0 -3
  85. package/dist/Watcher.js +0 -3
  86. package/dist/Watcher.js.map +1 -1
  87. package/dist/XmlScope.d.ts +5 -15
  88. package/dist/XmlScope.js +34 -90
  89. package/dist/XmlScope.js.map +1 -1
  90. package/dist/astUtils/CachedLookups.d.ts +50 -0
  91. package/dist/astUtils/CachedLookups.js +334 -0
  92. package/dist/astUtils/CachedLookups.js.map +1 -0
  93. package/dist/astUtils/CachedLookups.spec.js +39 -0
  94. package/dist/astUtils/CachedLookups.spec.js.map +1 -0
  95. package/dist/astUtils/Editor.d.ts +69 -0
  96. package/dist/astUtils/Editor.js +245 -0
  97. package/dist/astUtils/Editor.js.map +1 -0
  98. package/dist/astUtils/Editor.spec.js +258 -0
  99. package/dist/astUtils/Editor.spec.js.map +1 -0
  100. package/dist/astUtils/creators.d.ts +54 -19
  101. package/dist/astUtils/creators.js +242 -42
  102. package/dist/astUtils/creators.js.map +1 -1
  103. package/dist/astUtils/creators.spec.js +5 -5
  104. package/dist/astUtils/creators.spec.js.map +1 -1
  105. package/dist/astUtils/reflection.d.ts +196 -85
  106. package/dist/astUtils/reflection.js +497 -144
  107. package/dist/astUtils/reflection.js.map +1 -1
  108. package/dist/astUtils/reflection.spec.js +267 -167
  109. package/dist/astUtils/reflection.spec.js.map +1 -1
  110. package/dist/astUtils/stackedVisitor.js.map +1 -1
  111. package/dist/astUtils/stackedVisitor.spec.js +14 -14
  112. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  113. package/dist/astUtils/visitors.d.ts +116 -53
  114. package/dist/astUtils/visitors.js +95 -15
  115. package/dist/astUtils/visitors.js.map +1 -1
  116. package/dist/astUtils/visitors.spec.js +629 -51
  117. package/dist/astUtils/visitors.spec.js.map +1 -1
  118. package/dist/astUtils/xml.d.ts +9 -8
  119. package/dist/astUtils/xml.js +12 -7
  120. package/dist/astUtils/xml.js.map +1 -1
  121. package/dist/bscPlugin/BscPlugin.d.ts +24 -4
  122. package/dist/bscPlugin/BscPlugin.js +88 -4
  123. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  124. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  125. package/dist/bscPlugin/CallExpressionInfo.js +143 -0
  126. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  127. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  128. package/dist/bscPlugin/FileWriter.js +24 -0
  129. package/dist/bscPlugin/FileWriter.js.map +1 -0
  130. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  131. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  132. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  133. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +6 -5
  134. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +173 -27
  135. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  136. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +138 -21
  137. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  138. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  139. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  140. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  141. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +2512 -0
  142. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  143. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  144. package/dist/bscPlugin/definition/DefinitionProvider.js +212 -0
  145. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  146. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  147. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  148. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  149. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  150. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  151. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  152. package/dist/bscPlugin/hover/HoverProcessor.js +230 -0
  153. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  154. package/dist/bscPlugin/hover/HoverProcessor.spec.js +991 -0
  155. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  156. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  157. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  158. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  159. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
  160. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  161. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  162. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  163. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  164. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  165. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  166. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +564 -0
  167. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  168. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  169. package/dist/bscPlugin/serialize/BslibInjector.spec.js +33 -0
  170. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  171. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  172. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  173. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  174. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  175. package/dist/bscPlugin/serialize/FileSerializer.js +75 -0
  176. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  177. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  178. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  179. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  180. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +1 -0
  181. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +291 -0
  182. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  183. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  184. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  185. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  186. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +1 -0
  187. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  188. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  189. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  190. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  191. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  192. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +27 -0
  193. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +418 -0
  194. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  195. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  196. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +75 -0
  197. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  198. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  199. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  200. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  201. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  202. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  203. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  204. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +37 -0
  205. package/dist/bscPlugin/validation/BrsFileValidator.js +638 -0
  206. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  207. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  208. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1517 -0
  209. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  210. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  211. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  212. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  213. package/dist/bscPlugin/validation/ScopeValidator.d.ts +141 -0
  214. package/dist/bscPlugin/validation/ScopeValidator.js +1323 -0
  215. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  216. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  217. package/dist/bscPlugin/validation/ScopeValidator.spec.js +6135 -0
  218. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  219. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  220. package/dist/bscPlugin/validation/XmlFileValidator.js +36 -0
  221. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  222. package/dist/cli.js +126 -27
  223. package/dist/cli.js.map +1 -1
  224. package/dist/common/Sequencer.d.ts +53 -0
  225. package/dist/common/Sequencer.js +233 -0
  226. package/dist/common/Sequencer.js.map +1 -0
  227. package/dist/common/Sequencer.spec.d.ts +1 -0
  228. package/dist/common/Sequencer.spec.js +75 -0
  229. package/dist/common/Sequencer.spec.js.map +1 -0
  230. package/dist/deferred.d.ts +5 -3
  231. package/dist/deferred.js +10 -0
  232. package/dist/deferred.js.map +1 -1
  233. package/dist/diagnosticUtils.d.ts +10 -3
  234. package/dist/diagnosticUtils.js +64 -25
  235. package/dist/diagnosticUtils.js.map +1 -1
  236. package/dist/examples/plugins/removePrint.d.ts +2 -2
  237. package/dist/examples/plugins/removePrint.js +8 -12
  238. package/dist/examples/plugins/removePrint.js.map +1 -1
  239. package/dist/files/AssetFile.d.ts +24 -0
  240. package/dist/files/AssetFile.js +25 -0
  241. package/dist/files/AssetFile.js.map +1 -0
  242. package/dist/files/BrsFile.Class.spec.js +1213 -259
  243. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  244. package/dist/files/BrsFile.d.ts +145 -87
  245. package/dist/files/BrsFile.js +836 -934
  246. package/dist/files/BrsFile.js.map +1 -1
  247. package/dist/files/BrsFile.spec.js +4226 -902
  248. package/dist/files/BrsFile.spec.js.map +1 -1
  249. package/dist/files/BscFile.d.ts +102 -0
  250. package/dist/files/BscFile.js +15 -0
  251. package/dist/files/BscFile.js.map +1 -0
  252. package/dist/files/Factory.d.ts +25 -0
  253. package/dist/files/Factory.js +22 -0
  254. package/dist/files/Factory.js.map +1 -0
  255. package/dist/files/LazyFileData.d.ts +21 -0
  256. package/dist/files/LazyFileData.js +54 -0
  257. package/dist/files/LazyFileData.js.map +1 -0
  258. package/dist/files/LazyFileData.spec.d.ts +1 -0
  259. package/dist/files/LazyFileData.spec.js +27 -0
  260. package/dist/files/LazyFileData.spec.js.map +1 -0
  261. package/dist/files/XmlFile.d.ts +80 -41
  262. package/dist/files/XmlFile.js +161 -137
  263. package/dist/files/XmlFile.js.map +1 -1
  264. package/dist/files/XmlFile.spec.js +444 -336
  265. package/dist/files/XmlFile.spec.js.map +1 -1
  266. package/dist/files/tests/imports.spec.js +62 -52
  267. package/dist/files/tests/imports.spec.js.map +1 -1
  268. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  269. package/dist/files/tests/optionalChaning.spec.js +152 -0
  270. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  271. package/dist/globalCallables.d.ts +3 -1
  272. package/dist/globalCallables.js +424 -184
  273. package/dist/globalCallables.js.map +1 -1
  274. package/dist/index.d.ts +32 -4
  275. package/dist/index.js +54 -7
  276. package/dist/index.js.map +1 -1
  277. package/dist/interfaces.d.ts +942 -125
  278. package/dist/interfaces.js +21 -0
  279. package/dist/interfaces.js.map +1 -1
  280. package/dist/lexer/Character.spec.js +5 -5
  281. package/dist/lexer/Character.spec.js.map +1 -1
  282. package/dist/lexer/Lexer.d.ts +51 -12
  283. package/dist/lexer/Lexer.js +215 -65
  284. package/dist/lexer/Lexer.js.map +1 -1
  285. package/dist/lexer/Lexer.spec.js +812 -568
  286. package/dist/lexer/Lexer.spec.js.map +1 -1
  287. package/dist/lexer/Token.d.ts +27 -11
  288. package/dist/lexer/Token.js +10 -2
  289. package/dist/lexer/Token.js.map +1 -1
  290. package/dist/lexer/TokenKind.d.ts +40 -2
  291. package/dist/lexer/TokenKind.js +147 -10
  292. package/dist/lexer/TokenKind.js.map +1 -1
  293. package/dist/logging.d.ts +14 -0
  294. package/dist/logging.js +29 -0
  295. package/dist/logging.js.map +1 -0
  296. package/dist/lsp/ActionQueue.d.ts +35 -0
  297. package/dist/lsp/ActionQueue.js +115 -0
  298. package/dist/lsp/ActionQueue.js.map +1 -0
  299. package/dist/lsp/ActionQueue.spec.d.ts +1 -0
  300. package/dist/lsp/ActionQueue.spec.js +80 -0
  301. package/dist/lsp/ActionQueue.spec.js.map +1 -0
  302. package/dist/lsp/DocumentManager.d.ts +63 -0
  303. package/dist/lsp/DocumentManager.js +122 -0
  304. package/dist/lsp/DocumentManager.js.map +1 -0
  305. package/dist/lsp/DocumentManager.spec.d.ts +1 -0
  306. package/dist/lsp/DocumentManager.spec.js +103 -0
  307. package/dist/lsp/DocumentManager.spec.js.map +1 -0
  308. package/dist/lsp/LspProject.d.ts +239 -0
  309. package/dist/lsp/LspProject.js +3 -0
  310. package/dist/lsp/LspProject.js.map +1 -0
  311. package/dist/lsp/PathFilterer.d.ts +75 -0
  312. package/dist/lsp/PathFilterer.js +196 -0
  313. package/dist/lsp/PathFilterer.js.map +1 -0
  314. package/dist/lsp/PathFilterer.spec.d.ts +1 -0
  315. package/dist/lsp/PathFilterer.spec.js +182 -0
  316. package/dist/lsp/PathFilterer.spec.js.map +1 -0
  317. package/dist/lsp/Project.d.ts +168 -0
  318. package/dist/lsp/Project.js +437 -0
  319. package/dist/lsp/Project.js.map +1 -0
  320. package/dist/lsp/Project.spec.d.ts +1 -0
  321. package/dist/lsp/Project.spec.js +267 -0
  322. package/dist/lsp/Project.spec.js.map +1 -0
  323. package/dist/lsp/ProjectManager.d.ts +242 -0
  324. package/dist/lsp/ProjectManager.js +824 -0
  325. package/dist/lsp/ProjectManager.js.map +1 -0
  326. package/dist/lsp/ProjectManager.spec.d.ts +1 -0
  327. package/dist/lsp/ProjectManager.spec.js +913 -0
  328. package/dist/lsp/ProjectManager.spec.js.map +1 -0
  329. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  330. package/dist/lsp/ReaderWriterManager.js +60 -0
  331. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  332. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  333. package/dist/lsp/worker/MessageHandler.js +138 -0
  334. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  335. package/dist/lsp/worker/MessageHandler.spec.d.ts +1 -0
  336. package/dist/lsp/worker/MessageHandler.spec.js +64 -0
  337. package/dist/lsp/worker/MessageHandler.spec.js.map +1 -0
  338. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  339. package/dist/lsp/worker/WorkerPool.js +78 -0
  340. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  341. package/dist/lsp/worker/WorkerPool.spec.d.ts +1 -0
  342. package/dist/lsp/worker/WorkerPool.spec.js +59 -0
  343. package/dist/lsp/worker/WorkerPool.spec.js.map +1 -0
  344. package/dist/lsp/worker/WorkerThreadProject.d.ts +143 -0
  345. package/dist/lsp/worker/WorkerThreadProject.js +189 -0
  346. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  347. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +2 -0
  348. package/dist/lsp/worker/WorkerThreadProject.spec.js +71 -0
  349. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -0
  350. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  351. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  352. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  353. package/dist/lsp/worker/run.d.ts +1 -0
  354. package/dist/lsp/worker/run.js +14 -0
  355. package/dist/lsp/worker/run.js.map +1 -0
  356. package/dist/parser/AstNode.d.ts +203 -0
  357. package/dist/parser/AstNode.js +303 -0
  358. package/dist/parser/AstNode.js.map +1 -0
  359. package/dist/parser/AstNode.spec.d.ts +1 -0
  360. package/dist/parser/AstNode.spec.js +1455 -0
  361. package/dist/parser/AstNode.spec.js.map +1 -0
  362. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  363. package/dist/parser/BrightScriptDocParser.js +294 -0
  364. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  365. package/dist/parser/BrightScriptDocParser.spec.d.ts +1 -0
  366. package/dist/parser/BrightScriptDocParser.spec.js +310 -0
  367. package/dist/parser/BrightScriptDocParser.spec.js.map +1 -0
  368. package/dist/parser/BrsTranspileState.d.ts +22 -3
  369. package/dist/parser/BrsTranspileState.js +19 -0
  370. package/dist/parser/BrsTranspileState.js.map +1 -1
  371. package/dist/parser/Expression.d.ts +553 -221
  372. package/dist/parser/Expression.js +1414 -505
  373. package/dist/parser/Expression.js.map +1 -1
  374. package/dist/parser/Expression.spec.d.ts +1 -0
  375. package/dist/parser/Expression.spec.js +40 -0
  376. package/dist/parser/Expression.spec.js.map +1 -0
  377. package/dist/parser/Parser.Class.spec.js +255 -125
  378. package/dist/parser/Parser.Class.spec.js.map +1 -1
  379. package/dist/parser/Parser.d.ts +117 -124
  380. package/dist/parser/Parser.js +1669 -982
  381. package/dist/parser/Parser.js.map +1 -1
  382. package/dist/parser/Parser.spec.d.ts +3 -1
  383. package/dist/parser/Parser.spec.js +2111 -525
  384. package/dist/parser/Parser.spec.js.map +1 -1
  385. package/dist/parser/SGParser.d.ts +29 -13
  386. package/dist/parser/SGParser.js +85 -56
  387. package/dist/parser/SGParser.js.map +1 -1
  388. package/dist/parser/SGParser.spec.js +30 -45
  389. package/dist/parser/SGParser.spec.js.map +1 -1
  390. package/dist/parser/SGTypes.d.ts +134 -46
  391. package/dist/parser/SGTypes.js +206 -115
  392. package/dist/parser/SGTypes.js.map +1 -1
  393. package/dist/parser/Statement.d.ts +849 -267
  394. package/dist/parser/Statement.js +2412 -625
  395. package/dist/parser/Statement.js.map +1 -1
  396. package/dist/parser/Statement.spec.js +133 -36
  397. package/dist/parser/Statement.spec.js.map +1 -1
  398. package/dist/parser/TranspileState.d.ts +26 -12
  399. package/dist/parser/TranspileState.js +115 -24
  400. package/dist/parser/TranspileState.js.map +1 -1
  401. package/dist/parser/tests/Parser.spec.d.ts +3 -9
  402. package/dist/parser/tests/Parser.spec.js +7 -13
  403. package/dist/parser/tests/Parser.spec.js.map +1 -1
  404. package/dist/parser/tests/controlFlow/For.spec.js +83 -75
  405. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  406. package/dist/parser/tests/controlFlow/ForEach.spec.js +85 -51
  407. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  408. package/dist/parser/tests/controlFlow/If.spec.js +382 -239
  409. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  410. package/dist/parser/tests/controlFlow/While.spec.js +52 -45
  411. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  412. package/dist/parser/tests/expression/Additive.spec.js +51 -43
  413. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  414. package/dist/parser/tests/expression/ArrayLiterals.spec.js +192 -142
  415. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  416. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +236 -160
  417. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  418. package/dist/parser/tests/expression/Boolean.spec.js +41 -34
  419. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  420. package/dist/parser/tests/expression/Call.spec.js +173 -55
  421. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  422. package/dist/parser/tests/expression/Exponential.spec.js +20 -20
  423. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  424. package/dist/parser/tests/expression/Function.spec.js +291 -282
  425. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  426. package/dist/parser/tests/expression/Indexing.spec.js +193 -110
  427. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  428. package/dist/parser/tests/expression/Multiplicative.spec.js +42 -42
  429. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  430. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +260 -115
  431. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  432. package/dist/parser/tests/expression/PrefixUnary.spec.js +58 -52
  433. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  434. package/dist/parser/tests/expression/Primary.spec.js +76 -60
  435. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  436. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  437. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  438. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  439. package/dist/parser/tests/expression/Relational.spec.js +50 -50
  440. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  441. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +31 -31
  442. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  443. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +281 -94
  444. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  445. package/dist/parser/tests/expression/TernaryExpression.spec.js +747 -192
  446. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  447. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  448. package/dist/parser/tests/expression/TypeExpression.spec.js +126 -0
  449. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  450. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  451. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  452. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  453. package/dist/parser/tests/statement/AssignmentOperators.spec.js +44 -44
  454. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  455. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  456. package/dist/parser/tests/statement/ConstStatement.spec.js +500 -0
  457. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  458. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  459. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  460. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  461. package/dist/parser/tests/statement/Declaration.spec.js +61 -55
  462. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  463. package/dist/parser/tests/statement/Dim.spec.js +29 -22
  464. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  465. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  466. package/dist/parser/tests/statement/Enum.spec.js +744 -0
  467. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  468. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  469. package/dist/parser/tests/statement/For.spec.js +45 -0
  470. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  471. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  472. package/dist/parser/tests/statement/ForEach.spec.js +36 -0
  473. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  474. package/dist/parser/tests/statement/Function.spec.js +226 -215
  475. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  476. package/dist/parser/tests/statement/Goto.spec.js +16 -15
  477. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  478. package/dist/parser/tests/statement/Increment.spec.js +64 -61
  479. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  480. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  481. package/dist/parser/tests/statement/InterfaceStatement.spec.js +110 -0
  482. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  483. package/dist/parser/tests/statement/LibraryStatement.spec.js +22 -22
  484. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  485. package/dist/parser/tests/statement/Misc.spec.js +127 -168
  486. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  487. package/dist/parser/tests/statement/PrintStatement.spec.js +133 -114
  488. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  489. package/dist/parser/tests/statement/ReturnStatement.spec.js +57 -54
  490. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  491. package/dist/parser/tests/statement/Set.spec.js +131 -117
  492. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  493. package/dist/parser/tests/statement/Stop.spec.js +14 -13
  494. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  495. package/dist/parser/tests/statement/Throw.spec.js +11 -8
  496. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  497. package/dist/parser/tests/statement/TryCatch.spec.js +26 -15
  498. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  499. package/dist/preprocessor/Manifest.d.ts +6 -6
  500. package/dist/preprocessor/Manifest.js +17 -38
  501. package/dist/preprocessor/Manifest.js.map +1 -1
  502. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  503. package/dist/preprocessor/Manifest.spec.js +78 -103
  504. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  505. package/dist/roku-types/data.json +20347 -0
  506. package/dist/roku-types/index.d.ts +5726 -0
  507. package/dist/roku-types/index.js +11 -0
  508. package/dist/roku-types/index.js.map +1 -0
  509. package/dist/types/ArrayType.d.ts +12 -5
  510. package/dist/types/ArrayType.js +89 -24
  511. package/dist/types/ArrayType.js.map +1 -1
  512. package/dist/types/ArrayType.spec.js +39 -11
  513. package/dist/types/ArrayType.spec.js.map +1 -1
  514. package/dist/types/AssociativeArrayType.d.ts +15 -0
  515. package/dist/types/AssociativeArrayType.js +64 -0
  516. package/dist/types/AssociativeArrayType.js.map +1 -0
  517. package/dist/types/BaseFunctionType.d.ts +10 -0
  518. package/dist/types/BaseFunctionType.js +26 -0
  519. package/dist/types/BaseFunctionType.js.map +1 -0
  520. package/dist/types/BooleanType.d.ts +9 -5
  521. package/dist/types/BooleanType.js +19 -8
  522. package/dist/types/BooleanType.js.map +1 -1
  523. package/dist/types/BooleanType.spec.js +10 -4
  524. package/dist/types/BooleanType.spec.js.map +1 -1
  525. package/dist/types/BscType.d.ts +41 -3
  526. package/dist/types/BscType.js +152 -0
  527. package/dist/types/BscType.js.map +1 -1
  528. package/dist/types/BscTypeKind.d.ts +28 -0
  529. package/dist/types/BscTypeKind.js +33 -0
  530. package/dist/types/BscTypeKind.js.map +1 -0
  531. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  532. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  533. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  534. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  535. package/dist/types/BuiltInInterfaceAdder.spec.js +115 -0
  536. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  537. package/dist/types/CallFuncableType.d.ts +24 -0
  538. package/dist/types/CallFuncableType.js +91 -0
  539. package/dist/types/CallFuncableType.js.map +1 -0
  540. package/dist/types/ClassType.d.ts +17 -0
  541. package/dist/types/ClassType.js +60 -0
  542. package/dist/types/ClassType.js.map +1 -0
  543. package/dist/types/ClassType.spec.d.ts +1 -0
  544. package/dist/types/ClassType.spec.js +76 -0
  545. package/dist/types/ClassType.spec.js.map +1 -0
  546. package/dist/types/ComponentType.d.ts +22 -0
  547. package/dist/types/ComponentType.js +107 -0
  548. package/dist/types/ComponentType.js.map +1 -0
  549. package/dist/types/DoubleType.d.ts +10 -5
  550. package/dist/types/DoubleType.js +21 -17
  551. package/dist/types/DoubleType.js.map +1 -1
  552. package/dist/types/DoubleType.spec.js +12 -4
  553. package/dist/types/DoubleType.spec.js.map +1 -1
  554. package/dist/types/DynamicType.d.ts +13 -5
  555. package/dist/types/DynamicType.js +26 -5
  556. package/dist/types/DynamicType.js.map +1 -1
  557. package/dist/types/DynamicType.spec.js +16 -5
  558. package/dist/types/DynamicType.spec.js.map +1 -1
  559. package/dist/types/EnumType.d.ts +42 -0
  560. package/dist/types/EnumType.js +98 -0
  561. package/dist/types/EnumType.js.map +1 -0
  562. package/dist/types/EnumType.spec.d.ts +1 -0
  563. package/dist/types/EnumType.spec.js +33 -0
  564. package/dist/types/EnumType.spec.js.map +1 -0
  565. package/dist/types/FloatType.d.ts +10 -5
  566. package/dist/types/FloatType.js +21 -17
  567. package/dist/types/FloatType.js.map +1 -1
  568. package/dist/types/FloatType.spec.js +4 -4
  569. package/dist/types/FloatType.spec.js.map +1 -1
  570. package/dist/types/FunctionType.d.ts +8 -22
  571. package/dist/types/FunctionType.js +25 -63
  572. package/dist/types/FunctionType.js.map +1 -1
  573. package/dist/types/InheritableType.d.ts +29 -0
  574. package/dist/types/InheritableType.js +173 -0
  575. package/dist/types/InheritableType.js.map +1 -0
  576. package/dist/types/InlineInterfaceType.d.ts +5 -0
  577. package/dist/types/InlineInterfaceType.js +17 -0
  578. package/dist/types/InlineInterfaceType.js.map +1 -0
  579. package/dist/types/IntegerType.d.ts +10 -5
  580. package/dist/types/IntegerType.js +21 -17
  581. package/dist/types/IntegerType.js.map +1 -1
  582. package/dist/types/IntegerType.spec.js +8 -4
  583. package/dist/types/IntegerType.spec.js.map +1 -1
  584. package/dist/types/InterfaceType.d.ts +14 -6
  585. package/dist/types/InterfaceType.js +30 -15
  586. package/dist/types/InterfaceType.js.map +1 -1
  587. package/dist/types/InterfaceType.spec.d.ts +1 -0
  588. package/dist/types/InterfaceType.spec.js +227 -0
  589. package/dist/types/InterfaceType.spec.js.map +1 -0
  590. package/dist/types/IntersectionType.d.ts +29 -0
  591. package/dist/types/IntersectionType.js +253 -0
  592. package/dist/types/IntersectionType.js.map +1 -0
  593. package/dist/types/IntersectionType.spec.d.ts +1 -0
  594. package/dist/types/IntersectionType.spec.js +150 -0
  595. package/dist/types/IntersectionType.spec.js.map +1 -0
  596. package/dist/types/InvalidType.d.ts +10 -5
  597. package/dist/types/InvalidType.js +21 -9
  598. package/dist/types/InvalidType.js.map +1 -1
  599. package/dist/types/InvalidType.spec.js +8 -4
  600. package/dist/types/InvalidType.spec.js.map +1 -1
  601. package/dist/types/LongIntegerType.d.ts +10 -5
  602. package/dist/types/LongIntegerType.js +21 -17
  603. package/dist/types/LongIntegerType.js.map +1 -1
  604. package/dist/types/LongIntegerType.spec.js +10 -4
  605. package/dist/types/LongIntegerType.spec.js.map +1 -1
  606. package/dist/types/NamespaceType.d.ts +12 -0
  607. package/dist/types/NamespaceType.js +28 -0
  608. package/dist/types/NamespaceType.js.map +1 -0
  609. package/dist/types/ObjectType.d.ts +12 -5
  610. package/dist/types/ObjectType.js +25 -8
  611. package/dist/types/ObjectType.js.map +1 -1
  612. package/dist/types/ObjectType.spec.js +3 -3
  613. package/dist/types/ObjectType.spec.js.map +1 -1
  614. package/dist/types/ReferenceType.d.ts +123 -0
  615. package/dist/types/ReferenceType.js +720 -0
  616. package/dist/types/ReferenceType.js.map +1 -0
  617. package/dist/types/ReferenceType.spec.d.ts +1 -0
  618. package/dist/types/ReferenceType.spec.js +151 -0
  619. package/dist/types/ReferenceType.spec.js.map +1 -0
  620. package/dist/types/StringType.d.ts +12 -5
  621. package/dist/types/StringType.js +23 -8
  622. package/dist/types/StringType.js.map +1 -1
  623. package/dist/types/StringType.spec.js +3 -3
  624. package/dist/types/StringType.spec.js.map +1 -1
  625. package/dist/types/TypeStatementType.d.ts +18 -0
  626. package/dist/types/TypeStatementType.js +45 -0
  627. package/dist/types/TypeStatementType.js.map +1 -0
  628. package/dist/types/TypedFunctionType.d.ts +34 -0
  629. package/dist/types/TypedFunctionType.js +147 -0
  630. package/dist/types/TypedFunctionType.js.map +1 -0
  631. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  632. package/dist/types/TypedFunctionType.spec.js +122 -0
  633. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  634. package/dist/types/UninitializedType.d.ts +11 -6
  635. package/dist/types/UninitializedType.js +20 -11
  636. package/dist/types/UninitializedType.js.map +1 -1
  637. package/dist/types/UnionType.d.ts +27 -0
  638. package/dist/types/UnionType.js +193 -0
  639. package/dist/types/UnionType.js.map +1 -0
  640. package/dist/types/UnionType.spec.d.ts +1 -0
  641. package/dist/types/UnionType.spec.js +205 -0
  642. package/dist/types/UnionType.spec.js.map +1 -0
  643. package/dist/types/VoidType.d.ts +11 -5
  644. package/dist/types/VoidType.js +22 -8
  645. package/dist/types/VoidType.js.map +1 -1
  646. package/dist/types/VoidType.spec.js +3 -3
  647. package/dist/types/VoidType.spec.js.map +1 -1
  648. package/dist/types/helper.spec.d.ts +1 -0
  649. package/dist/types/helper.spec.js +174 -0
  650. package/dist/types/helper.spec.js.map +1 -0
  651. package/dist/types/helpers.d.ts +51 -0
  652. package/dist/types/helpers.js +323 -0
  653. package/dist/types/helpers.js.map +1 -0
  654. package/dist/types/index.d.ts +22 -0
  655. package/dist/types/index.js +39 -0
  656. package/dist/types/index.js.map +1 -0
  657. package/dist/types/roFunctionType.d.ts +11 -0
  658. package/dist/types/roFunctionType.js +37 -0
  659. package/dist/types/roFunctionType.js.map +1 -0
  660. package/dist/types/roFunctionType.spec.d.ts +1 -0
  661. package/dist/types/roFunctionType.spec.js +20 -0
  662. package/dist/types/roFunctionType.spec.js.map +1 -0
  663. package/dist/util.d.ts +288 -187
  664. package/dist/util.js +2018 -575
  665. package/dist/util.js.map +1 -1
  666. package/dist/validators/ClassValidator.d.ts +9 -15
  667. package/dist/validators/ClassValidator.js +93 -138
  668. package/dist/validators/ClassValidator.js.map +1 -1
  669. package/package.json +185 -138
  670. package/CHANGELOG.md +0 -1188
  671. package/dist/astUtils/index.d.ts +0 -7
  672. package/dist/astUtils/index.js +0 -26
  673. package/dist/astUtils/index.js.map +0 -1
  674. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  675. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  676. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  677. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  678. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  679. package/dist/lexer/index.d.ts +0 -3
  680. package/dist/lexer/index.js +0 -17
  681. package/dist/lexer/index.js.map +0 -1
  682. package/dist/parser/SGTypes.spec.js +0 -351
  683. package/dist/parser/SGTypes.spec.js.map +0 -1
  684. package/dist/parser/index.d.ts +0 -3
  685. package/dist/parser/index.js +0 -16
  686. package/dist/parser/index.js.map +0 -1
  687. package/dist/preprocessor/Chunk.d.ts +0 -82
  688. package/dist/preprocessor/Chunk.js +0 -77
  689. package/dist/preprocessor/Chunk.js.map +0 -1
  690. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  691. package/dist/preprocessor/Preprocessor.js +0 -156
  692. package/dist/preprocessor/Preprocessor.js.map +0 -1
  693. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  694. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  695. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  696. package/dist/preprocessor/PreprocessorParser.js +0 -194
  697. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  698. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  699. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  700. package/dist/preprocessor/index.d.ts +0 -3
  701. package/dist/preprocessor/index.js +0 -16
  702. package/dist/preprocessor/index.js.map +0 -1
  703. package/dist/types/CustomType.d.ts +0 -10
  704. package/dist/types/CustomType.js +0 -35
  705. package/dist/types/CustomType.js.map +0 -1
  706. package/dist/types/FunctionType.spec.js +0 -29
  707. package/dist/types/FunctionType.spec.js.map +0 -1
  708. package/dist/types/LazyType.d.ts +0 -15
  709. package/dist/types/LazyType.js +0 -32
  710. package/dist/types/LazyType.js.map +0 -1
  711. /package/dist/{bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts → astUtils/CachedLookups.spec.d.ts} +0 -0
  712. /package/dist/{parser/SGTypes.spec.d.ts → astUtils/Editor.spec.d.ts} +0 -0
  713. /package/dist/{preprocessor/Preprocessor.spec.d.ts → bscPlugin/completions/CompletionsProcessor.spec.d.ts} +0 -0
  714. /package/dist/{preprocessor/PreprocessorParser.spec.d.ts → bscPlugin/definition/DefinitionProvider.spec.d.ts} +0 -0
  715. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/hover/HoverProcessor.spec.d.ts} +0 -0
@@ -0,0 +1,991 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_config_spec_1 = require("../../chai-config.spec");
4
+ const Program_1 = require("../../Program");
5
+ const util_1 = require("../../util");
6
+ const sinon_1 = require("sinon");
7
+ const testHelpers_spec_1 = require("../../testHelpers.spec");
8
+ const HoverProcessor_1 = require("./HoverProcessor");
9
+ const creators_1 = require("../../astUtils/creators");
10
+ let sinon = (0, sinon_1.createSandbox)();
11
+ const fence = (code) => util_1.util.mdFence(code, 'brightscript');
12
+ const commentSep = `\n***\n`;
13
+ describe('HoverProcessor', () => {
14
+ let program;
15
+ beforeEach(() => {
16
+ program = new Program_1.Program({ rootDir: testHelpers_spec_1.rootDir, sourceMap: true });
17
+ });
18
+ afterEach(() => {
19
+ sinon.restore();
20
+ program.dispose();
21
+ });
22
+ it('does not short-circuit the event since our plugin is the base plugin', () => {
23
+ const mock = sinon.mock();
24
+ program.plugins.add({
25
+ name: 'test-plugin',
26
+ provideHover: mock
27
+ });
28
+ const file = program.setFile('source/main.brs', `
29
+ sub main()
30
+ end sub
31
+ `);
32
+ //get the hover
33
+ program.getHover(file.srcPath, util_1.util.createPosition(1, 20));
34
+ //the onGetHover function from `test-plugin` should always get called because
35
+ //BscPlugin should never short-circuit the event
36
+ (0, chai_config_spec_1.expect)(mock.called).to.be.true;
37
+ });
38
+ describe('BrsFile', () => {
39
+ it('getConstHover does not crash on expression with missing range', () => {
40
+ const file = program.setFile('source/main.bs', ``);
41
+ const processor = new HoverProcessor_1.HoverProcessor({});
42
+ const expression = (0, creators_1.createIntegerLiteral)('1');
43
+ (0, chai_config_spec_1.expect)(processor['getConstHover']((0, creators_1.createIdentifier)('hello'), file, program.getScopeByName('source'), expression)).to.eql(undefined);
44
+ });
45
+ it('works for param types', () => {
46
+ const file = program.setFile('source/main.brs', `
47
+ sub DoSomething(name as string)
48
+ name = 1
49
+ sayMyName = function(name as string)
50
+ end function
51
+ end sub
52
+ `);
53
+ program.validate();
54
+ //hover over the `name = 1` line
55
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 24))[0];
56
+ (0, chai_config_spec_1.expect)(hover).to.exist;
57
+ (0, chai_config_spec_1.expect)(hover.range).to.eql(util_1.util.createRange(2, 20, 2, 24));
58
+ //hover over the `name` parameter declaration
59
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(1, 34))[0];
60
+ (0, chai_config_spec_1.expect)(hover).to.exist;
61
+ (0, chai_config_spec_1.expect)(hover.range).to.eql(util_1.util.createRange(1, 32, 1, 36));
62
+ });
63
+ //ignore this for now...it's not a huge deal
64
+ it('does not match on keywords or data types', () => {
65
+ let file = program.setFile('source/main.brs', `
66
+ sub Main(name as string)
67
+ end sub
68
+ sub as()
69
+ end sub
70
+ `);
71
+ //hover over the `as`
72
+ (0, chai_config_spec_1.expect)(program.getHover(file.srcPath, util_1.util.createPosition(1, 31))).to.be.empty;
73
+ //hover over the `string`
74
+ (0, chai_config_spec_1.expect)(program.getHover(file.srcPath, util_1.util.createPosition(1, 36))).to.be.empty;
75
+ });
76
+ it('finds declared function', () => {
77
+ let file = program.setFile('source/main.brs', `
78
+ function Main(count = 1)
79
+ firstName = "bob"
80
+ age = 21
81
+ shoeSize = 10
82
+ end function
83
+ `);
84
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(1, 28))[0];
85
+ (0, chai_config_spec_1.expect)(hover).to.exist;
86
+ (0, chai_config_spec_1.expect)(hover.range).to.eql(util_1.util.createRange(1, 25, 1, 29));
87
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql([fence('function Main(count? as integer) as dynamic')]);
88
+ });
89
+ it('finds declared namespace function', () => {
90
+ let file = program.setFile('source/main.brs', `
91
+ namespace mySpace
92
+ function Main(count = 1)
93
+ firstName = "bob"
94
+ age = 21
95
+ shoeSize = 10
96
+ end function
97
+ end namespace
98
+ `);
99
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 28))[0];
100
+ (0, chai_config_spec_1.expect)(hover).to.exist;
101
+ (0, chai_config_spec_1.expect)(hover.range).to.eql(util_1.util.createRange(2, 25, 2, 29));
102
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql([fence('function mySpace.Main(count? as integer) as dynamic')]);
103
+ });
104
+ it('finds variable function hover in same scope', () => {
105
+ let file = program.setFile('source/main.brs', `
106
+ sub Main()
107
+ sayMyName = sub(name as string)
108
+ end sub
109
+
110
+ sayMyName()
111
+ end sub
112
+ `);
113
+ program.validate();
114
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(5, 24))[0];
115
+ (0, chai_config_spec_1.expect)(hover.range).to.eql(util_1.util.createRange(5, 20, 5, 29));
116
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql([fence('sub sayMyName(name as string) as void')]);
117
+ });
118
+ it('does not crash when hovering on built-in functions', () => {
119
+ let file = program.setFile('source/main.brs', `
120
+ function doUcase(text)
121
+ return ucase(text)
122
+ end function
123
+ `);
124
+ let commentSep = `\n***\n`;
125
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 30))[0];
126
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql([`${fence('function ucase(s as string) as string')}${commentSep}Converts the string to all upper case.`]);
127
+ });
128
+ it('does not crash when hovering on object method call', () => {
129
+ let file = program.setFile('source/main.brs', `
130
+ function getInstr(url, text)
131
+ return url.instr(text)
132
+ end function
133
+
134
+ function getInstrTyped(urlStr as string, text)
135
+ return urlStr.instr(text)
136
+ end function
137
+ `);
138
+ program.validate();
139
+ // return url.ins|tr(text)
140
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 35))[0];
141
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql(['```brightscript\ninstr as dynamic\n```']);
142
+ // return urlStr.ins|tr(text)
143
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(6, 38))[0];
144
+ (0, chai_config_spec_1.expect)(hover.contents[0]).to.include('```brightscript\nfunction string.instr(substringOrStart_index as string or integer, substring? as string) as integer\n```');
145
+ (0, chai_config_spec_1.expect)(hover.contents[0]).to.include('OVERLOADED METHOD');
146
+ });
147
+ it('finds function hover in file scope', () => {
148
+ let file = program.setFile('source/main.brs', `
149
+ sub Main()
150
+ sayMyName()
151
+ end sub
152
+
153
+ sub sayMyName()
154
+ end sub
155
+ `);
156
+ program.validate();
157
+ //sayM|yName()
158
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 25))[0];
159
+ (0, chai_config_spec_1.expect)(hover.range).to.eql(util_1.util.createRange(2, 20, 2, 29));
160
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql([fence('sub sayMyName() as void')]);
161
+ });
162
+ it('finds function hover in scope', () => {
163
+ let mainFile = program.setFile('source/main.brs', `
164
+ sub Main()
165
+ sayMyName()
166
+ end sub
167
+ `);
168
+ program.setFile('source/lib.brs', `
169
+ sub sayMyName(name as string)
170
+
171
+ end sub
172
+ `);
173
+ program.validate();
174
+ let hover = program.getHover(mainFile.srcPath, util_1.util.createPosition(2, 25))[0];
175
+ (0, chai_config_spec_1.expect)(hover.range).to.eql(util_1.util.createRange(2, 20, 2, 29));
176
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql([fence('sub sayMyName(name as string) as void')]);
177
+ });
178
+ it('finds top-level constant value', () => {
179
+ program.setFile('source/main.bs', `
180
+ sub main()
181
+ print SOME_VALUE
182
+ end sub
183
+ const SOME_VALUE = true
184
+ `);
185
+ program.validate();
186
+ // print SOM|E_VALUE
187
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 29))[0];
188
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(2, 26, 2, 36));
189
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('const SOME_VALUE = true as boolean')]);
190
+ });
191
+ it('finds top-level constant in assignment expression', () => {
192
+ program.setFile('source/main.bs', `
193
+ sub main()
194
+ value = ""
195
+ value += SOME_VALUE
196
+ end sub
197
+ const SOME_VALUE = "value"
198
+ `);
199
+ program.validate();
200
+ // value += SOME|_VALUE
201
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(3, 33))[0];
202
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(3, 29, 3, 39));
203
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('const SOME_VALUE = "value" as string')]);
204
+ });
205
+ it('finds namespaced constant in assignment expression', () => {
206
+ program.setFile('source/main.bs', `
207
+ sub main()
208
+ value = ""
209
+ value += someNamespace.SOME_VALUE
210
+ end sub
211
+ namespace someNamespace
212
+ const SOME_VALUE = "value"
213
+ end namespace
214
+ `);
215
+ program.validate();
216
+ // value += SOME|_VALUE
217
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(3, 47))[0];
218
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(3, 43, 3, 53));
219
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('const someNamespace.SOME_VALUE = "value" as string')]);
220
+ });
221
+ it('finds namespaced constant value', () => {
222
+ program.setFile('source/main.bs', `
223
+ sub main()
224
+ print name.SOME_VALUE
225
+ end sub
226
+ namespace name
227
+ const SOME_VALUE = true
228
+ end namespace
229
+ `);
230
+ program.validate();
231
+ // print name.SOM|E_VALUE
232
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 34))[0];
233
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(2, 31, 2, 41));
234
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('const name.SOME_VALUE = true as boolean')]);
235
+ });
236
+ it('finds constant value that is an array', () => {
237
+ program.setFile('source/main.bs', `
238
+ sub main()
239
+ print SOME_VALUE
240
+ end sub
241
+ const SOME_VALUE = [] as function[]
242
+ `);
243
+ program.validate();
244
+ // print SOM|E_VALUE
245
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 30))[0];
246
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(2, 26, 2, 36));
247
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('const SOME_VALUE = [] as Array<function>')]);
248
+ });
249
+ it('finds deep namespaced constant value', () => {
250
+ program.setFile('source/main.bs', `
251
+ sub main()
252
+ print name.sp.a.c.e.SOME_VALUE
253
+ end sub
254
+ namespace name.sp.a.c.e
255
+ const SOME_VALUE = true
256
+ end namespace
257
+ `);
258
+ program.validate();
259
+ // print name.sp.a.c.e.SOM|E_VALUE
260
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 43))[0];
261
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(2, 40, 2, 50));
262
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('const name.sp.a.c.e.SOME_VALUE = true as boolean')]);
263
+ });
264
+ it('finds namespaced class types', () => {
265
+ program.setFile('source/main.bs', `
266
+ sub main()
267
+ myKlass = new name.Klass()
268
+ runNoop(myKlass)
269
+ end sub
270
+
271
+ sub runNoop(myKlass as name.Klass)
272
+ myKlass.noop()
273
+ end sub
274
+
275
+ namespace name
276
+ class Klass
277
+ sub noop()
278
+ end sub
279
+ end class
280
+ end namespace
281
+ `);
282
+ program.validate();
283
+ // run|Noop(myKlass)
284
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(3, 24))[0];
285
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(3, 20, 3, 27));
286
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('sub runNoop(myKlass as name.Klass) as void')]);
287
+ // myKl|ass.noop()
288
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(7, 25))[0];
289
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(7, 20, 7, 27));
290
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('myKlass as name.Klass')]);
291
+ // sub no|op()
292
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(12, 31))[0];
293
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('sub name.Klass.noop() as void')]);
294
+ });
295
+ it('finds local variables that shadow namespaces', () => {
296
+ program.setFile('source/main.bs', `
297
+ sub foo1(alpha as string)
298
+ print alpha.toStr() ' in foo1()
299
+ end sub
300
+
301
+ sub foo2()
302
+ alpha = 123
303
+ print alpha.toStr() ' in foo2()
304
+ end sub
305
+
306
+ namespace alpha
307
+ function toStr()
308
+ return "alpha"
309
+ end function
310
+ end namespace
311
+ `);
312
+ program.validate();
313
+ // sub foo1(alp|ha as string)
314
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(1, 29))[0];
315
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('alpha as string')]);
316
+ // print alp|ha.toStr() ' in foo1()
317
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 30))[0];
318
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('alpha as string')]);
319
+ // alp|ha = 123
320
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(6, 23))[0];
321
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('alpha as integer')]);
322
+ // print alp|ha.toStr() ' in foo2()
323
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(7, 30))[0];
324
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('alpha as integer')]);
325
+ });
326
+ it('finds types properly', () => {
327
+ program.setFile('source/main.bs', `
328
+ class Person
329
+ end class
330
+
331
+ sub doWork(age as integer, name as string, guy as Person)
332
+ end sub
333
+ `);
334
+ program.validate();
335
+ // a|ge as integer
336
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(4, 29))[0];
337
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(4, 27, 4, 30));
338
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('age as integer')]);
339
+ // age as int|eger
340
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(4, 39))[0];
341
+ // no hover on base types
342
+ (0, chai_config_spec_1.expect)(hover).to.be.undefined;
343
+ // n|ame as string
344
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(4, 46))[0];
345
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(4, 43, 4, 47));
346
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('name as string')]);
347
+ // name as st|ring
348
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(4, 54))[0];
349
+ // no hover on base types
350
+ (0, chai_config_spec_1.expect)(hover).to.be.undefined;
351
+ // gu|y as Person
352
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(4, 60))[0];
353
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(4, 59, 4, 62));
354
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('guy as Person')]);
355
+ // guy as Pe|rson
356
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(4, 69))[0];
357
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('class Person')]);
358
+ });
359
+ it('finds namespaces properly', () => {
360
+ program.setFile('source/main.bs', `
361
+ namespace Name1
362
+ namespace Name2
363
+ const hi = "hello"
364
+ end namespace
365
+ end namespace
366
+
367
+ sub doWork()
368
+ print Name1.Name2.hi
369
+ end sub
370
+ `);
371
+ program.validate();
372
+ // print Name1.Nam|e2.hi
373
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(8, 36))[0];
374
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('namespace Name1.Name2')]);
375
+ });
376
+ it('finds enum properly', () => {
377
+ program.setFile('source/main.bs', `
378
+ enum Direction
379
+ up
380
+ down
381
+ end enum
382
+
383
+ sub doWork()
384
+ print Direction.up
385
+ end sub
386
+ `);
387
+ program.validate();
388
+ // print Dire|ction.up
389
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(7, 30))[0];
390
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('enum Direction')]);
391
+ // print Direction.u|p
392
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(7, 37))[0];
393
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('Direction.up as Direction')]);
394
+ });
395
+ it('finds types hover with comment', () => {
396
+ program.setFile('source/main.bs', `
397
+ ' this is a class comment
398
+ ' it is more than one line
399
+ class Person
400
+ end class
401
+
402
+ ' does some work
403
+ sub doWork(age as integer, name as string, guy as Person)
404
+ end sub
405
+ `);
406
+ program.validate();
407
+ // gu|y as Person
408
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(7, 60))[0];
409
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(7, 59, 7, 62));
410
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('guy as Person')}${commentSep}this is a class comment\nit is more than one line`]);
411
+ // guy as Pe|rson
412
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(7, 69))[0];
413
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('class Person')}${commentSep}this is a class comment\nit is more than one line`]);
414
+ });
415
+ it('finds types from assignments defined in different file', () => {
416
+ program.setFile(`source/main.bs`, `
417
+ sub main()
418
+ thing = new MyKlass()
419
+ useKlass(thing)
420
+ someVal = getValue()
421
+ print someVal
422
+ end sub
423
+
424
+ sub useKlass(thing as MyKlass)
425
+ print thing
426
+ end sub
427
+ `);
428
+ program.setFile(`source/MyKlass.bs`, `
429
+ class MyKlass
430
+ end class
431
+ `);
432
+ program.setFile(`source/util.bs`, `
433
+ function getValue() as string
434
+ return "hello"
435
+ end function
436
+ `);
437
+ program.validate();
438
+ //th|ing = new MyKlass()
439
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 24))[0];
440
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(2, 20, 2, 25));
441
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('thing as MyKlass')]);
442
+ //print some|Val
443
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(5, 31))[0];
444
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(5, 26, 5, 33));
445
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('someVal as string')]);
446
+ });
447
+ it('hovers of functions include comments', () => {
448
+ program.setFile(`source/main.bs`, `
449
+ sub main()
450
+ thing = new MyKlass()
451
+ useKlass(thing)
452
+ end sub
453
+
454
+ ' Prints a MyKlass.name
455
+ sub useKlass(thing as MyKlass)
456
+ print thing.getName()
457
+ end sub
458
+
459
+ ' A sample class
460
+ class MyKlass
461
+ name as string
462
+
463
+ ' Gets the name of this thing
464
+ function getName() as string
465
+ return m.name
466
+ end function
467
+
468
+ ' Wraps another function
469
+ function getNameWrap() as string
470
+ return m.getName()
471
+ end function
472
+ end class
473
+ `);
474
+ program.validate();
475
+ let commentSep = `\n***\n`;
476
+ //th|ing = new MyKlass()
477
+ let hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 24))[0];
478
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('thing as MyKlass')}`]);
479
+ //thing = new MyK|lass()
480
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(2, 37))[0];
481
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('class MyKlass')}${commentSep}A sample class`]);
482
+ //use|Klass(thing)
483
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(3, 24))[0];
484
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('sub useKlass(thing as MyKlass) as void')}${commentSep}Prints a MyKlass.name`]);
485
+ //print thing.getN|ame()
486
+ hover = program.getHover('source/main.bs', util_1.util.createPosition(8, 37))[0];
487
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('function MyKlass.getName() as string')}${commentSep}Gets the name of this thing`]);
488
+ });
489
+ it('finds globalCallables with documentation', () => {
490
+ let mainFile = program.setFile('source/main.brs', `
491
+ sub Main()
492
+ print lcase("HELLO")
493
+ end sub
494
+ `);
495
+ program.validate();
496
+ // print lc|ase("HELLO")
497
+ let hover = program.getHover(mainFile.srcPath, util_1.util.createPosition(2, 29))[0];
498
+ (0, chai_config_spec_1.expect)(hover.contents).to.eql([`${fence('function lcase(s as string) as string')}${commentSep}Converts the string to all lower case.`]);
499
+ });
500
+ it('finds functions as params', () => {
501
+ program.setFile('source/main.brs', `
502
+ function getStrLength(name as string) as integer
503
+ return len(name)
504
+ end function
505
+
506
+ sub tryManyParams(someFunc as function)
507
+ print someFunc(1, 2, "hello", "world")
508
+ end sub
509
+
510
+ sub test()
511
+ tryManyParams(getStrLength)
512
+ end sub
513
+ `);
514
+ program.validate();
515
+ // print some|Func(1, 2, "hello", "world")
516
+ let hover = program.getHover('source/main.brs', util_1.util.createPosition(6, 31))[0];
517
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(6, 26, 6, 34));
518
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('someFunc as function')]);
519
+ });
520
+ it('keeps unresolved types as type names', () => {
521
+ const file = program.setFile('source/main.bs', `
522
+ sub doSomething(thing as UnknownType)
523
+ print thing
524
+ end sub
525
+ `);
526
+ program.validate();
527
+ // print thi|ng
528
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 30))[0];
529
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(2, 26, 2, 31));
530
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('thing as UnknownType')]);
531
+ });
532
+ it('says members on dynamic are dynamic', () => {
533
+ const file = program.setFile('source/main.bs', `
534
+ sub doSomething(thing)
535
+ print thing.member
536
+ end sub
537
+ `);
538
+ program.validate();
539
+ // print thing.mem|ber
540
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 36))[0];
541
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.range).to.eql(util_1.util.createRange(2, 32, 2, 38));
542
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('member as dynamic')]);
543
+ });
544
+ it('should recognize consistent type after function call in binary op', () => {
545
+ let file = program.setFile('source/main.bs', `
546
+ function arrayToString(items as object) as string
547
+ description = "["
548
+ for each item in items
549
+ description += utils.toString(item) + ", "
550
+ end for
551
+ description += "]"
552
+ return description
553
+ end function
554
+ `);
555
+ program.setFile('source/utils.bs', `
556
+ namespace utils
557
+ function toString(thing as dynamic) as string
558
+ return "hello"
559
+ end function
560
+ end namespace
561
+ `);
562
+ program.validate();
563
+ // return myS|tring
564
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(7, 31))[0];
565
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('description as string')]);
566
+ });
567
+ it('should provide correct hover for LHS of assignment', () => {
568
+ let file = program.setFile('source/main.bs', `
569
+ function getFloat() as float
570
+ return 123
571
+ end function
572
+
573
+ sub doStuff()
574
+ myFloat = getFloat()
575
+ end sub
576
+ `);
577
+ program.validate();
578
+ // myF|loat = getFloat()
579
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(6, 24))[0];
580
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('myFloat as float')]);
581
+ });
582
+ it('should provide correct hover for members of classes', () => {
583
+ let file = program.setFile('source/main.bs', `
584
+ class SomeKlass
585
+ name as string
586
+ other as OtherKlass
587
+ myLabel as roSGNodeLabel
588
+ end class
589
+
590
+ class OtherKlass
591
+ size as integer
592
+ end class
593
+ `);
594
+ program.validate();
595
+ // na|me as string
596
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 24))[0];
597
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('SomeKlass.name as string')]);
598
+ // ot|her as OtherKlass
599
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 24))[0];
600
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('SomeKlass.other as OtherKlass')]);
601
+ // my|Label as RoSGNodeLabel
602
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(4, 24))[0];
603
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('SomeKlass.myLabel as roSGNodeLabel')]);
604
+ });
605
+ it('should provide correct hover for members of interfaces', () => {
606
+ let file = program.setFile('source/main.bs', `
607
+ interface SomeIFace
608
+ name as string
609
+ other as OtherIFace
610
+ myLabel as roSGNodeLabel
611
+ end interface
612
+
613
+ interface OtherIFace
614
+ size as integer
615
+ end interface
616
+ `);
617
+ program.validate();
618
+ // na|me as string
619
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 24))[0];
620
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('SomeIFace.name as string')]);
621
+ // ot|her as OtherIFace
622
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 24))[0];
623
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('SomeIFace.other as OtherIFace')]);
624
+ // my|Label as RoSGNodeLabel
625
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(4, 24))[0];
626
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('SomeIFace.myLabel as roSGNodeLabel')]);
627
+ });
628
+ it('should include leading trivia of member field hover', () => {
629
+ let file = program.setFile('source/main.bs', `
630
+ interface SomeIFace
631
+ ' Some description
632
+ name as string
633
+ other as OtherIFace
634
+ myLabel as roSGNodeLabel
635
+ end interface
636
+ `);
637
+ program.validate();
638
+ // na|me as string
639
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 24))[0];
640
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('SomeIFace.name as string')}${commentSep}Some description`]);
641
+ });
642
+ it('should include leading trivia of enum member field hover', () => {
643
+ let file = program.setFile('source/main.bs', `
644
+ enum Direction
645
+ ' Go Up
646
+ up = "up"
647
+ down = "down"
648
+ end enum
649
+ `);
650
+ program.validate();
651
+ // u|p = "up"
652
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 22))[0];
653
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('Direction.up as Direction')}${commentSep}Go Up`]);
654
+ });
655
+ it('should have correct hovers for loop-items of for-loops', () => {
656
+ let file = program.setFile('source/main.bs', `
657
+ sub test()
658
+ for index = 0 to 10
659
+ print index
660
+ end for
661
+ end sub
662
+ `);
663
+ program.validate();
664
+ // for in|dex = 0 to 10
665
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 27))[0];
666
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('index as integer')]);
667
+ });
668
+ it('should have correct hovers for loop-items of for-each-loops', () => {
669
+ let file = program.setFile('source/main.bs', `
670
+ sub test()
671
+ numbers = [1,2,3]
672
+ for each number in numbers
673
+ print number
674
+ end for
675
+ end sub
676
+ `);
677
+ program.validate();
678
+ // for each number in num|bers
679
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 43))[0];
680
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('numbers as Array<integer>')]);
681
+ // for each num|ber in numbers
682
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 33))[0];
683
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('number as integer')]);
684
+ // for each number i|n numbers
685
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 38))[0];
686
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.be.undefined;
687
+ });
688
+ it('should have correct hovers for loop-items of for-each-loops', () => {
689
+ let file = program.setFile('source/main.bs', `
690
+ sub test(strArray)
691
+ for each thing as string in strArray
692
+ print thing
693
+ end for
694
+ end sub
695
+ `);
696
+ program.validate();
697
+ // for each thing as string in str|Array
698
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 52))[0];
699
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('strArray as dynamic')]);
700
+ // print th|ing
701
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 33))[0];
702
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([fence('thing as string')]);
703
+ });
704
+ it('should show unresolved members as invalid', () => {
705
+ const file = program.setFile('source/main.bs', `
706
+ interface MyIFace
707
+ name as string
708
+ end interface
709
+
710
+ sub doSomething(thing as MyIFace)
711
+ print thing.member
712
+ end sub
713
+ `);
714
+ program.validate();
715
+ // print thing.mem|ber
716
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(6, 40))[0];
717
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('MyIFace.member as invalid')]);
718
+ });
719
+ it('has m as an AA in inline function', () => {
720
+ const file = program.setFile('source/main.bs', `
721
+ class Test
722
+ sub method()
723
+ stub = function()
724
+ m.whatever = false
725
+ end function
726
+ end sub
727
+ end class
728
+ `);
729
+ program.validate();
730
+ // |m.whatever = false
731
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(4, 29))[0];
732
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('m as roAssociativeArray')]);
733
+ // m.what|ever = false
734
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(4, 35))[0];
735
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('whatever as dynamic')]);
736
+ });
737
+ it('should include leading Trivia of inline interface members', () => {
738
+ const file = program.setFile('source/main.bs', `
739
+ ' @param input from doc comment
740
+ sub fooFunc(input as {
741
+ ' description of name prop
742
+ name as string
743
+ })
744
+ print input.name
745
+ end sub
746
+ `);
747
+ program.validate();
748
+ // print input.na|me
749
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(6, 35))[0];
750
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('{name as string}.name as string')}${commentSep}description of name prop`]);
751
+ // print in|put.name
752
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(6, 29))[0];
753
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).to.eql([`${fence('input as {name as string}')}${commentSep}from doc comment`]);
754
+ });
755
+ });
756
+ describe('callFunc', () => {
757
+ it('should get hovers on @callfunc invocations', () => {
758
+ program.setFile('components/Widget.xml', (0, testHelpers_spec_1.trim) `
759
+ <?xml version="1.0" encoding="utf-8" ?>
760
+ <component name="Widget" extends="Group">
761
+ <script uri="Widget.bs"/>
762
+ <interface>
763
+ <function name="someFunc" />
764
+ </interface>
765
+ </component>
766
+ `);
767
+ const file = program.setFile('components/Widget.bs', `
768
+ sub foo()
769
+ top = m.top as roSgNodeWidget
770
+ print top@.someFunc("3.14")
771
+ end sub
772
+
773
+ function someFunc(input as string) as float
774
+ return input.toFloat()
775
+ end function
776
+ `);
777
+ program.validate();
778
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
779
+ // print top@.some|Func("3.14")
780
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 35))[0];
781
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('function roSGNodeWidget@.someFunc(input as string) as float')]);
782
+ });
783
+ it('should include documentation on @callfunc hovers', () => {
784
+ program.setFile('components/Widget.xml', (0, testHelpers_spec_1.trim) `
785
+ <?xml version="1.0" encoding="utf-8" ?>
786
+ <component name="Widget" extends="Group">
787
+ <script uri="Widget.bs"/>
788
+ <interface>
789
+ <function name="someFunc" />
790
+ </interface>
791
+ </component>
792
+ `);
793
+ const file = program.setFile('components/Widget.bs', `
794
+ sub foo()
795
+ top = m.top as roSgNodeWidget
796
+ print top@.someFunc("3.14")
797
+ end sub
798
+
799
+ ' Some Cool function
800
+ function someFunc(input as string) as float
801
+ return input.toFloat()
802
+ end function
803
+ `);
804
+ program.validate();
805
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
806
+ // print top@.some|Func("3.14")
807
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 35))[0];
808
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents[0]).include('Some Cool function');
809
+ });
810
+ });
811
+ describe('multiple definition locations', () => {
812
+ it('gets hover on assignment node', () => {
813
+ const file = program.setFile('source/util.bs', `
814
+ sub test(obj as Data)
815
+ myVar = obj.name ' setting type to string
816
+ end sub
817
+
818
+ interface Data
819
+ name as string
820
+ end interface
821
+ `);
822
+ program.validate();
823
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
824
+ // my|Var = obj.name
825
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 22))[0];
826
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`myVar as string`)]);
827
+ });
828
+ it('shows correct type in all locations', () => {
829
+ const file = program.setFile('source/util.bs', `
830
+ sub test()
831
+ myVar = "hello" ' setting type to string
832
+ print 1; myVar
833
+ myVar = "hello".len() ' setting type to integer
834
+ print 2; myVar
835
+ myVar = sqr(33) ' setting type to float
836
+ print 3; myVar
837
+ end sub
838
+ `);
839
+ program.validate();
840
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
841
+ // print 1; my|Var
842
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 31))[0];
843
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`myVar as string`)]);
844
+ // my|Var = "hello".len()
845
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(4, 23))[0];
846
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`myVar as integer`)]);
847
+ // print 2; my|Var
848
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(7, 31))[0];
849
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`myVar as float`)]);
850
+ });
851
+ it('reusing same variable for multiple types', () => {
852
+ const file = program.setFile('source/util.bs', `
853
+ namespace stringUtil
854
+ function pad(x as string or integer) as string
855
+ return "0"+x.toStr()
856
+ end function
857
+ end namespace
858
+
859
+ ' Formats a timestamp into a user friendly string.
860
+ ' @param {Integer} time - The unix time stamp to format.
861
+ ' @param {String} meridiemStyle - A style key to be wrapped around the meridiem for MultiStyleLabels.
862
+ ' @return {String} - The formatted time
863
+ function formatTime(time as integer, meridiemStyle = "" as string) as string
864
+ dateObj = createObject("roDateTime")
865
+ deviceInfo = createObject("roDeviceInfo")
866
+ dateObj.fromSeconds(time)
867
+ hour = dateObj.getHours()
868
+ minutes = dateObj.getMinutes()
869
+
870
+ ' Get the Meridiem value
871
+ if hour > 11 then
872
+ meridiem = "pm"
873
+ else
874
+ meridiem = "am"
875
+ end if
876
+
877
+ if meridiemStyle <> "" then
878
+ meridiem = "<" + meridiemStyle + ">" + meridiem + "</" + meridiemStyle + ">"
879
+ end if
880
+
881
+ minutes = stringUtil.pad(minutes)
882
+
883
+ if deviceInfo.getClockFormat() = "24h" then
884
+ hour = stringUtil.pad(hour)
885
+ ' "22:01" | "01:01"
886
+ return substitute("{0}:{1}", hour as string, minutes as string)
887
+ else
888
+ hour = hour mod 12
889
+ if hour = 0 then hour = 12
890
+ ' "10:01 AM" | "1:01 AM"
891
+ return substitute("{0}:{1} {2}", hour.toStr(), minutes as string, meridiem)
892
+ end if
893
+ end function
894
+ `);
895
+ program.validate();
896
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
897
+ // ho|ur = stringUtil.pad(hour)
898
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(32, 27))[0];
899
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`hour as string`)]);
900
+ // ho|ur = hour mod 12
901
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(36, 27))[0];
902
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`hour as integer`)]);
903
+ });
904
+ it('reusing same variable for multiple types - multiple hovers', () => {
905
+ const file = program.setFile('source/util.bs', `
906
+ function foo(toggle as boolean) as string
907
+ someVar = "hello"
908
+ print someVar; 1
909
+ if toggle
910
+ print someVar; 2
911
+ someVar = 1
912
+ print someVar; 3
913
+ else
914
+ print someVar; 4
915
+ someVar = 0
916
+ print someVar; 5
917
+ end if
918
+ print someVar; 6
919
+ return someVar.toStr()
920
+ end function
921
+ `);
922
+ program.validate();
923
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
924
+ // some|Var = "hello"
925
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 25))[0];
926
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as string`)]);
927
+ // print some|Var; 1
928
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 31))[0];
929
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as string`)]);
930
+ // print some|Var; 2
931
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(5, 35))[0];
932
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as string`)]);
933
+ // some|Var = 1
934
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(6, 29))[0];
935
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as integer`)]);
936
+ // print some|Var; 3
937
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(7, 35))[0];
938
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as integer`)]);
939
+ // print some|Var; 4
940
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(9, 35))[0];
941
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as string`)]);
942
+ // some|Var = 0
943
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(10, 29))[0];
944
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as integer`)]);
945
+ // print some|Var; 5
946
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(11, 35))[0];
947
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as integer`)]);
948
+ // print some|Var; 6
949
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(13, 31))[0];
950
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as integer`)]);
951
+ // return some|Var.toStr()
952
+ hover = program.getHover(file.srcPath, util_1.util.createPosition(14, 32))[0];
953
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence(`someVar as integer`)]);
954
+ });
955
+ });
956
+ describe('doc type definitions', () => {
957
+ it('should show correct hover for params', () => {
958
+ const file = program.setFile('source/test.bs', `
959
+ namespace alpha
960
+ '@param {DataType} data
961
+ sub printName(data)
962
+ print data.name
963
+ end sub
964
+
965
+ interface DataType
966
+ name as string
967
+ end interface
968
+ end namespace
969
+ `);
970
+ program.validate();
971
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
972
+ // sub printName(da|ta)
973
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(3, 37))[0];
974
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([fence('data as alpha.DataType')]);
975
+ });
976
+ it('should include doc comment descriptions in hover for params', () => {
977
+ const file = program.setFile('source/test.bs', `
978
+ '@param {string} data A cool JSON string of data
979
+ sub printName(data)
980
+ print data
981
+ end sub
982
+ `);
983
+ program.validate();
984
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
985
+ // sub printName(da|ta)
986
+ let hover = program.getHover(file.srcPath, util_1.util.createPosition(2, 33))[0];
987
+ (0, chai_config_spec_1.expect)(hover === null || hover === void 0 ? void 0 : hover.contents).eql([`${fence('data as string')}${commentSep}A cool JSON string of data`]);
988
+ });
989
+ });
990
+ });
991
+ //# sourceMappingURL=HoverProcessor.spec.js.map