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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (652) hide show
  1. package/README.md +79 -138
  2. package/bsconfig.schema.json +196 -5
  3. package/dist/ActionPipeline.d.ts +10 -0
  4. package/dist/ActionPipeline.js +40 -0
  5. package/dist/ActionPipeline.js.map +1 -0
  6. package/dist/AstValidationSegmenter.d.ts +45 -0
  7. package/dist/AstValidationSegmenter.js +322 -0
  8. package/dist/AstValidationSegmenter.js.map +1 -0
  9. package/dist/BsConfig.d.ts +161 -43
  10. package/dist/BusyStatusTracker.d.ts +61 -0
  11. package/dist/BusyStatusTracker.js +148 -0
  12. package/dist/BusyStatusTracker.js.map +1 -0
  13. package/dist/Cache.d.ts +3 -8
  14. package/dist/Cache.js +9 -14
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +29 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +20 -15
  23. package/dist/CommentFlagProcessor.js +143 -58
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +650 -0
  27. package/dist/CrossScopeValidator.js.map +1 -0
  28. package/dist/DependencyGraph.d.ts +8 -3
  29. package/dist/DependencyGraph.js +49 -16
  30. package/dist/DependencyGraph.js.map +1 -1
  31. package/dist/DiagnosticCollection.d.ts +21 -5
  32. package/dist/DiagnosticCollection.js +77 -24
  33. package/dist/DiagnosticCollection.js.map +1 -1
  34. package/dist/DiagnosticFilterer.d.ts +27 -6
  35. package/dist/DiagnosticFilterer.js +273 -60
  36. package/dist/DiagnosticFilterer.js.map +1 -1
  37. package/dist/DiagnosticManager.d.ts +83 -0
  38. package/dist/DiagnosticManager.js +422 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +602 -196
  41. package/dist/DiagnosticMessages.js +926 -342
  42. package/dist/DiagnosticMessages.js.map +1 -1
  43. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  44. package/dist/DiagnosticSeverityAdjuster.js +45 -0
  45. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  46. package/dist/FunctionScope.d.ts +28 -0
  47. package/dist/FunctionScope.js +52 -0
  48. package/dist/FunctionScope.js.map +1 -0
  49. package/dist/KeyedThrottler.d.ts +3 -3
  50. package/dist/KeyedThrottler.js +3 -3
  51. package/dist/KeyedThrottler.js.map +1 -1
  52. package/dist/LanguageServer.d.ts +136 -104
  53. package/dist/LanguageServer.js +577 -741
  54. package/dist/LanguageServer.js.map +1 -1
  55. package/dist/Logger.d.ts +17 -13
  56. package/dist/Logger.js +64 -34
  57. package/dist/Logger.js.map +1 -1
  58. package/dist/PluginInterface.d.ts +32 -10
  59. package/dist/PluginInterface.js +117 -7
  60. package/dist/PluginInterface.js.map +1 -1
  61. package/dist/Program.d.ts +302 -98
  62. package/dist/Program.js +1613 -726
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +39 -22
  65. package/dist/ProgramBuilder.js +245 -179
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +227 -106
  68. package/dist/Scope.js +609 -557
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  71. package/dist/ScopeNamespaceLookup.js +242 -0
  72. package/dist/ScopeNamespaceLookup.js.map +1 -0
  73. package/dist/SemanticTokenUtils.js +5 -1
  74. package/dist/SemanticTokenUtils.js.map +1 -1
  75. package/dist/Stopwatch.d.ts +4 -0
  76. package/dist/Stopwatch.js +8 -1
  77. package/dist/Stopwatch.js.map +1 -1
  78. package/dist/SymbolTable.d.ts +145 -26
  79. package/dist/SymbolTable.js +575 -64
  80. package/dist/SymbolTable.js.map +1 -1
  81. package/dist/SymbolTypeFlag.d.ts +9 -0
  82. package/dist/SymbolTypeFlag.js +14 -0
  83. package/dist/SymbolTypeFlag.js.map +1 -0
  84. package/dist/Throttler.d.ts +12 -0
  85. package/dist/Throttler.js +39 -0
  86. package/dist/Throttler.js.map +1 -1
  87. package/dist/Watcher.d.ts +0 -3
  88. package/dist/Watcher.js +0 -3
  89. package/dist/Watcher.js.map +1 -1
  90. package/dist/XmlScope.d.ts +5 -15
  91. package/dist/XmlScope.js +34 -90
  92. package/dist/XmlScope.js.map +1 -1
  93. package/dist/astUtils/CachedLookups.d.ts +50 -0
  94. package/dist/astUtils/CachedLookups.js +337 -0
  95. package/dist/astUtils/CachedLookups.js.map +1 -0
  96. package/dist/astUtils/Editor.d.ts +69 -0
  97. package/dist/astUtils/Editor.js +245 -0
  98. package/dist/astUtils/Editor.js.map +1 -0
  99. package/dist/astUtils/creators.d.ts +54 -19
  100. package/dist/astUtils/creators.js +242 -42
  101. package/dist/astUtils/creators.js.map +1 -1
  102. package/dist/astUtils/reflection.d.ts +199 -85
  103. package/dist/astUtils/reflection.js +518 -145
  104. package/dist/astUtils/reflection.js.map +1 -1
  105. package/dist/astUtils/stackedVisitor.js.map +1 -1
  106. package/dist/astUtils/visitors.d.ts +117 -53
  107. package/dist/astUtils/visitors.js +95 -15
  108. package/dist/astUtils/visitors.js.map +1 -1
  109. package/dist/astUtils/xml.d.ts +9 -8
  110. package/dist/astUtils/xml.js +12 -7
  111. package/dist/astUtils/xml.js.map +1 -1
  112. package/dist/bscPlugin/BscPlugin.d.ts +26 -4
  113. package/dist/bscPlugin/BscPlugin.js +96 -4
  114. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  115. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  116. package/dist/bscPlugin/CallExpressionInfo.js +142 -0
  117. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  118. package/dist/bscPlugin/FileWriter.d.ts +19 -0
  119. package/dist/bscPlugin/FileWriter.js +79 -0
  120. package/dist/bscPlugin/FileWriter.js.map +1 -0
  121. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  122. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  123. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  124. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +109 -7
  125. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +676 -26
  126. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  127. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  128. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  129. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  130. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  131. package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
  132. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  133. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  134. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  135. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  136. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  137. package/dist/bscPlugin/definition/DefinitionProvider.js +220 -0
  138. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  139. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  140. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  141. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  142. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  143. package/dist/bscPlugin/hover/HoverProcessor.js +238 -0
  144. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  145. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  146. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  147. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  148. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  149. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
  150. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  151. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  152. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  153. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  154. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  155. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  156. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  157. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  158. package/dist/bscPlugin/serialize/FileSerializer.js +80 -0
  159. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  160. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  161. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  162. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  163. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  164. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  165. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  166. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  167. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  168. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  169. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +34 -0
  170. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +504 -0
  171. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  172. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  173. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  174. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  175. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  176. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  177. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  178. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +51 -0
  179. package/dist/bscPlugin/validation/BrsFileValidator.js +714 -0
  180. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  181. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  182. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  183. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  184. package/dist/bscPlugin/validation/ScopeValidator.d.ts +158 -0
  185. package/dist/bscPlugin/validation/ScopeValidator.js +1481 -0
  186. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  187. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  188. package/dist/bscPlugin/validation/XmlFileValidator.js +50 -0
  189. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  190. package/dist/cli.js +140 -28
  191. package/dist/cli.js.map +1 -1
  192. package/dist/common/Sequencer.d.ts +53 -0
  193. package/dist/common/Sequencer.js +233 -0
  194. package/dist/common/Sequencer.js.map +1 -0
  195. package/dist/deferred.d.ts +5 -3
  196. package/dist/deferred.js +10 -0
  197. package/dist/deferred.js.map +1 -1
  198. package/dist/diagnosticUtils.d.ts +61 -4
  199. package/dist/diagnosticUtils.js +285 -25
  200. package/dist/diagnosticUtils.js.map +1 -1
  201. package/dist/examples/plugins/removePrint.d.ts +2 -2
  202. package/dist/examples/plugins/removePrint.js +8 -12
  203. package/dist/examples/plugins/removePrint.js.map +1 -1
  204. package/dist/files/AssetFile.d.ts +24 -0
  205. package/dist/files/AssetFile.js +25 -0
  206. package/dist/files/AssetFile.js.map +1 -0
  207. package/dist/files/BrsFile.d.ts +161 -87
  208. package/dist/files/BrsFile.js +919 -936
  209. package/dist/files/BrsFile.js.map +1 -1
  210. package/dist/files/BscFile.d.ts +102 -0
  211. package/dist/files/BscFile.js +15 -0
  212. package/dist/files/BscFile.js.map +1 -0
  213. package/dist/files/Factory.d.ts +25 -0
  214. package/dist/files/Factory.js +22 -0
  215. package/dist/files/Factory.js.map +1 -0
  216. package/dist/files/LazyFileData.d.ts +21 -0
  217. package/dist/files/LazyFileData.js +54 -0
  218. package/dist/files/LazyFileData.js.map +1 -0
  219. package/dist/files/XmlFile.d.ts +80 -41
  220. package/dist/files/XmlFile.js +162 -137
  221. package/dist/files/XmlFile.js.map +1 -1
  222. package/dist/globalCallables.d.ts +3 -1
  223. package/dist/globalCallables.js +424 -184
  224. package/dist/globalCallables.js.map +1 -1
  225. package/dist/index.d.ts +32 -4
  226. package/dist/index.js +54 -7
  227. package/dist/index.js.map +1 -1
  228. package/dist/interfaces.d.ts +987 -125
  229. package/dist/interfaces.js +21 -0
  230. package/dist/interfaces.js.map +1 -1
  231. package/dist/lexer/Lexer.d.ts +51 -12
  232. package/dist/lexer/Lexer.js +214 -65
  233. package/dist/lexer/Lexer.js.map +1 -1
  234. package/dist/lexer/Token.d.ts +27 -11
  235. package/dist/lexer/Token.js +10 -2
  236. package/dist/lexer/Token.js.map +1 -1
  237. package/dist/lexer/TokenKind.d.ts +48 -2
  238. package/dist/lexer/TokenKind.js +167 -10
  239. package/dist/lexer/TokenKind.js.map +1 -1
  240. package/dist/logging.d.ts +14 -0
  241. package/dist/logging.js +29 -0
  242. package/dist/logging.js.map +1 -0
  243. package/dist/lsp/ActionQueue.d.ts +35 -0
  244. package/dist/lsp/ActionQueue.js +115 -0
  245. package/dist/lsp/ActionQueue.js.map +1 -0
  246. package/dist/lsp/DocumentManager.d.ts +63 -0
  247. package/dist/lsp/DocumentManager.js +122 -0
  248. package/dist/lsp/DocumentManager.js.map +1 -0
  249. package/dist/lsp/LspProject.d.ts +287 -0
  250. package/dist/lsp/LspProject.js +3 -0
  251. package/dist/lsp/LspProject.js.map +1 -0
  252. package/dist/lsp/PathFilterer.d.ts +75 -0
  253. package/dist/lsp/PathFilterer.js +196 -0
  254. package/dist/lsp/PathFilterer.js.map +1 -0
  255. package/dist/lsp/Project.d.ts +200 -0
  256. package/dist/lsp/Project.js +562 -0
  257. package/dist/lsp/Project.js.map +1 -0
  258. package/dist/lsp/ProjectManager.d.ts +288 -0
  259. package/dist/lsp/ProjectManager.js +967 -0
  260. package/dist/lsp/ProjectManager.js.map +1 -0
  261. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  262. package/dist/lsp/ReaderWriterManager.js +60 -0
  263. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  264. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  265. package/dist/lsp/worker/MessageHandler.js +138 -0
  266. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  267. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  268. package/dist/lsp/worker/WorkerPool.js +78 -0
  269. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  270. package/dist/lsp/worker/WorkerThreadProject.d.ts +168 -0
  271. package/dist/lsp/worker/WorkerThreadProject.js +205 -0
  272. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  273. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  274. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  275. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  276. package/dist/lsp/worker/run.js +14 -0
  277. package/dist/lsp/worker/run.js.map +1 -0
  278. package/dist/parser/AstNode.d.ts +205 -0
  279. package/dist/parser/AstNode.js +305 -0
  280. package/dist/parser/AstNode.js.map +1 -0
  281. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  282. package/dist/parser/BrightScriptDocParser.js +294 -0
  283. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  284. package/dist/parser/BrsTranspileState.d.ts +22 -3
  285. package/dist/parser/BrsTranspileState.js +19 -0
  286. package/dist/parser/BrsTranspileState.js.map +1 -1
  287. package/dist/parser/Expression.d.ts +601 -220
  288. package/dist/parser/Expression.js +1516 -502
  289. package/dist/parser/Expression.js.map +1 -1
  290. package/dist/parser/Parser.d.ts +137 -121
  291. package/dist/parser/Parser.js +1808 -982
  292. package/dist/parser/Parser.js.map +1 -1
  293. package/dist/parser/SGParser.d.ts +30 -13
  294. package/dist/parser/SGParser.js +94 -56
  295. package/dist/parser/SGParser.js.map +1 -1
  296. package/dist/parser/SGTypes.d.ts +134 -46
  297. package/dist/parser/SGTypes.js +206 -115
  298. package/dist/parser/SGTypes.js.map +1 -1
  299. package/dist/parser/Statement.d.ts +854 -267
  300. package/dist/parser/Statement.js +2416 -621
  301. package/dist/parser/Statement.js.map +1 -1
  302. package/dist/parser/TranspileState.d.ts +30 -14
  303. package/dist/parser/TranspileState.js +124 -27
  304. package/dist/parser/TranspileState.js.map +1 -1
  305. package/dist/preprocessor/Manifest.d.ts +6 -6
  306. package/dist/preprocessor/Manifest.js +17 -38
  307. package/dist/preprocessor/Manifest.js.map +1 -1
  308. package/dist/roku-types/data.json +20554 -0
  309. package/dist/roku-types/index.d.ts +5726 -0
  310. package/dist/roku-types/index.js +11 -0
  311. package/dist/roku-types/index.js.map +1 -0
  312. package/dist/types/ArrayType.d.ts +12 -5
  313. package/dist/types/ArrayType.js +95 -25
  314. package/dist/types/ArrayType.js.map +1 -1
  315. package/dist/types/AssociativeArrayType.d.ts +15 -0
  316. package/dist/types/AssociativeArrayType.js +64 -0
  317. package/dist/types/AssociativeArrayType.js.map +1 -0
  318. package/dist/types/BaseFunctionType.d.ts +10 -0
  319. package/dist/types/BaseFunctionType.js +26 -0
  320. package/dist/types/BaseFunctionType.js.map +1 -0
  321. package/dist/types/BooleanType.d.ts +9 -5
  322. package/dist/types/BooleanType.js +19 -8
  323. package/dist/types/BooleanType.js.map +1 -1
  324. package/dist/types/BscType.d.ts +41 -3
  325. package/dist/types/BscType.js +152 -0
  326. package/dist/types/BscType.js.map +1 -1
  327. package/dist/types/BscTypeKind.d.ts +28 -0
  328. package/dist/types/BscTypeKind.js +33 -0
  329. package/dist/types/BscTypeKind.js.map +1 -0
  330. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  331. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  332. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  333. package/dist/types/CallFuncableType.d.ts +24 -0
  334. package/dist/types/CallFuncableType.js +91 -0
  335. package/dist/types/CallFuncableType.js.map +1 -0
  336. package/dist/types/ClassType.d.ts +17 -0
  337. package/dist/types/ClassType.js +63 -0
  338. package/dist/types/ClassType.js.map +1 -0
  339. package/dist/types/ComponentType.d.ts +22 -0
  340. package/dist/types/ComponentType.js +110 -0
  341. package/dist/types/ComponentType.js.map +1 -0
  342. package/dist/types/DoubleType.d.ts +10 -5
  343. package/dist/types/DoubleType.js +21 -17
  344. package/dist/types/DoubleType.js.map +1 -1
  345. package/dist/types/DynamicType.d.ts +13 -5
  346. package/dist/types/DynamicType.js +26 -5
  347. package/dist/types/DynamicType.js.map +1 -1
  348. package/dist/types/EnumType.d.ts +42 -0
  349. package/dist/types/EnumType.js +101 -0
  350. package/dist/types/EnumType.js.map +1 -0
  351. package/dist/types/FloatType.d.ts +10 -5
  352. package/dist/types/FloatType.js +21 -17
  353. package/dist/types/FloatType.js.map +1 -1
  354. package/dist/types/FunctionType.d.ts +8 -22
  355. package/dist/types/FunctionType.js +25 -63
  356. package/dist/types/FunctionType.js.map +1 -1
  357. package/dist/types/InheritableType.d.ts +29 -0
  358. package/dist/types/InheritableType.js +173 -0
  359. package/dist/types/InheritableType.js.map +1 -0
  360. package/dist/types/InlineInterfaceType.d.ts +5 -0
  361. package/dist/types/InlineInterfaceType.js +17 -0
  362. package/dist/types/InlineInterfaceType.js.map +1 -0
  363. package/dist/types/IntegerType.d.ts +10 -5
  364. package/dist/types/IntegerType.js +21 -17
  365. package/dist/types/IntegerType.js.map +1 -1
  366. package/dist/types/InterfaceType.d.ts +14 -6
  367. package/dist/types/InterfaceType.js +30 -15
  368. package/dist/types/InterfaceType.js.map +1 -1
  369. package/dist/types/IntersectionType.d.ts +29 -0
  370. package/dist/types/IntersectionType.js +256 -0
  371. package/dist/types/IntersectionType.js.map +1 -0
  372. package/dist/types/InvalidType.d.ts +10 -5
  373. package/dist/types/InvalidType.js +21 -9
  374. package/dist/types/InvalidType.js.map +1 -1
  375. package/dist/types/LongIntegerType.d.ts +10 -5
  376. package/dist/types/LongIntegerType.js +21 -17
  377. package/dist/types/LongIntegerType.js.map +1 -1
  378. package/dist/types/NamespaceType.d.ts +12 -0
  379. package/dist/types/NamespaceType.js +28 -0
  380. package/dist/types/NamespaceType.js.map +1 -0
  381. package/dist/types/ObjectType.d.ts +12 -5
  382. package/dist/types/ObjectType.js +25 -8
  383. package/dist/types/ObjectType.js.map +1 -1
  384. package/dist/types/ReferenceType.d.ts +123 -0
  385. package/dist/types/ReferenceType.js +726 -0
  386. package/dist/types/ReferenceType.js.map +1 -0
  387. package/dist/types/StringType.d.ts +12 -5
  388. package/dist/types/StringType.js +23 -8
  389. package/dist/types/StringType.js.map +1 -1
  390. package/dist/types/TypeStatementType.d.ts +19 -0
  391. package/dist/types/TypeStatementType.js +56 -0
  392. package/dist/types/TypeStatementType.js.map +1 -0
  393. package/dist/types/TypedFunctionType.d.ts +34 -0
  394. package/dist/types/TypedFunctionType.js +157 -0
  395. package/dist/types/TypedFunctionType.js.map +1 -0
  396. package/dist/types/UninitializedType.d.ts +11 -6
  397. package/dist/types/UninitializedType.js +20 -11
  398. package/dist/types/UninitializedType.js.map +1 -1
  399. package/dist/types/UnionType.d.ts +27 -0
  400. package/dist/types/UnionType.js +196 -0
  401. package/dist/types/UnionType.js.map +1 -0
  402. package/dist/types/VoidType.d.ts +11 -5
  403. package/dist/types/VoidType.js +22 -8
  404. package/dist/types/VoidType.js.map +1 -1
  405. package/dist/types/helpers.d.ts +51 -0
  406. package/dist/types/helpers.js +329 -0
  407. package/dist/types/helpers.js.map +1 -0
  408. package/dist/types/index.d.ts +22 -0
  409. package/dist/types/index.js +39 -0
  410. package/dist/types/index.js.map +1 -0
  411. package/dist/types/roFunctionType.d.ts +11 -0
  412. package/dist/types/roFunctionType.js +37 -0
  413. package/dist/types/roFunctionType.js.map +1 -0
  414. package/dist/util.d.ts +325 -185
  415. package/dist/util.js +2135 -568
  416. package/dist/util.js.map +1 -1
  417. package/dist/validators/ClassValidator.d.ts +9 -15
  418. package/dist/validators/ClassValidator.js +93 -138
  419. package/dist/validators/ClassValidator.js.map +1 -1
  420. package/package.json +183 -138
  421. package/CHANGELOG.md +0 -1188
  422. package/dist/astUtils/creators.spec.js +0 -21
  423. package/dist/astUtils/creators.spec.js.map +0 -1
  424. package/dist/astUtils/index.d.ts +0 -7
  425. package/dist/astUtils/index.js +0 -26
  426. package/dist/astUtils/index.js.map +0 -1
  427. package/dist/astUtils/reflection.spec.d.ts +0 -1
  428. package/dist/astUtils/reflection.spec.js +0 -292
  429. package/dist/astUtils/reflection.spec.js.map +0 -1
  430. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  431. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  432. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  433. package/dist/astUtils/visitors.spec.d.ts +0 -1
  434. package/dist/astUtils/visitors.spec.js +0 -854
  435. package/dist/astUtils/visitors.spec.js.map +0 -1
  436. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  437. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -194
  438. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  439. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  440. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  441. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  442. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +0 -1
  443. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  444. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  445. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  446. package/dist/files/BrsFile.Class.spec.js +0 -1081
  447. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  448. package/dist/files/BrsFile.spec.d.ts +0 -1
  449. package/dist/files/BrsFile.spec.js +0 -2524
  450. package/dist/files/BrsFile.spec.js.map +0 -1
  451. package/dist/files/XmlFile.spec.d.ts +0 -1
  452. package/dist/files/XmlFile.spec.js +0 -1065
  453. package/dist/files/XmlFile.spec.js.map +0 -1
  454. package/dist/files/tests/imports.spec.d.ts +0 -1
  455. package/dist/files/tests/imports.spec.js +0 -241
  456. package/dist/files/tests/imports.spec.js.map +0 -1
  457. package/dist/lexer/Character.spec.d.ts +0 -1
  458. package/dist/lexer/Character.spec.js +0 -27
  459. package/dist/lexer/Character.spec.js.map +0 -1
  460. package/dist/lexer/Lexer.spec.d.ts +0 -1
  461. package/dist/lexer/Lexer.spec.js +0 -1101
  462. package/dist/lexer/Lexer.spec.js.map +0 -1
  463. package/dist/lexer/index.d.ts +0 -3
  464. package/dist/lexer/index.js +0 -17
  465. package/dist/lexer/index.js.map +0 -1
  466. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  467. package/dist/parser/Parser.Class.spec.js +0 -390
  468. package/dist/parser/Parser.Class.spec.js.map +0 -1
  469. package/dist/parser/Parser.spec.d.ts +0 -4
  470. package/dist/parser/Parser.spec.js +0 -1216
  471. package/dist/parser/Parser.spec.js.map +0 -1
  472. package/dist/parser/SGParser.spec.d.ts +0 -1
  473. package/dist/parser/SGParser.spec.js +0 -145
  474. package/dist/parser/SGParser.spec.js.map +0 -1
  475. package/dist/parser/SGTypes.spec.d.ts +0 -1
  476. package/dist/parser/SGTypes.spec.js +0 -351
  477. package/dist/parser/SGTypes.spec.js.map +0 -1
  478. package/dist/parser/Statement.spec.d.ts +0 -1
  479. package/dist/parser/Statement.spec.js +0 -94
  480. package/dist/parser/Statement.spec.js.map +0 -1
  481. package/dist/parser/index.d.ts +0 -3
  482. package/dist/parser/index.js +0 -16
  483. package/dist/parser/index.js.map +0 -1
  484. package/dist/parser/tests/Parser.spec.d.ts +0 -18
  485. package/dist/parser/tests/Parser.spec.js +0 -35
  486. package/dist/parser/tests/Parser.spec.js.map +0 -1
  487. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  488. package/dist/parser/tests/controlFlow/For.spec.js +0 -161
  489. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  490. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  491. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -106
  492. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  493. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  494. package/dist/parser/tests/controlFlow/If.spec.js +0 -551
  495. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  496. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  497. package/dist/parser/tests/controlFlow/While.spec.js +0 -107
  498. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  499. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  500. package/dist/parser/tests/expression/Additive.spec.js +0 -99
  501. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  502. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  503. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -254
  504. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  505. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  506. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -266
  507. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  508. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  509. package/dist/parser/tests/expression/Boolean.spec.js +0 -83
  510. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  511. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  512. package/dist/parser/tests/expression/Call.spec.js +0 -134
  513. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  514. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  515. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  516. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  517. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  518. package/dist/parser/tests/expression/Function.spec.js +0 -403
  519. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  520. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  521. package/dist/parser/tests/expression/Indexing.spec.js +0 -219
  522. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  523. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  524. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  525. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  526. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  527. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -201
  528. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  529. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  530. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
  531. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  532. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  533. package/dist/parser/tests/expression/Primary.spec.js +0 -149
  534. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  535. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  536. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  537. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  538. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  539. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  540. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  541. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  542. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -202
  543. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  544. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  545. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -323
  546. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  547. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  548. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  549. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  550. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  551. package/dist/parser/tests/statement/Declaration.spec.js +0 -108
  552. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  553. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  554. package/dist/parser/tests/statement/Dim.spec.js +0 -73
  555. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  556. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  557. package/dist/parser/tests/statement/Function.spec.js +0 -332
  558. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  559. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  560. package/dist/parser/tests/statement/Goto.spec.js +0 -50
  561. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  562. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  563. package/dist/parser/tests/statement/Increment.spec.js +0 -117
  564. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  565. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  566. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  567. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  568. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  569. package/dist/parser/tests/statement/Misc.spec.js +0 -333
  570. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  571. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  572. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -181
  573. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  574. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  575. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
  576. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  577. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  578. package/dist/parser/tests/statement/Set.spec.js +0 -218
  579. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  580. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  581. package/dist/parser/tests/statement/Stop.spec.js +0 -37
  582. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  583. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  584. package/dist/parser/tests/statement/Throw.spec.js +0 -35
  585. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  586. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  587. package/dist/parser/tests/statement/TryCatch.spec.js +0 -140
  588. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  589. package/dist/preprocessor/Chunk.d.ts +0 -82
  590. package/dist/preprocessor/Chunk.js +0 -77
  591. package/dist/preprocessor/Chunk.js.map +0 -1
  592. package/dist/preprocessor/Manifest.spec.d.ts +0 -0
  593. package/dist/preprocessor/Manifest.spec.js +0 -105
  594. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  595. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  596. package/dist/preprocessor/Preprocessor.js +0 -156
  597. package/dist/preprocessor/Preprocessor.js.map +0 -1
  598. package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
  599. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  600. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  601. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  602. package/dist/preprocessor/PreprocessorParser.js +0 -194
  603. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  604. package/dist/preprocessor/PreprocessorParser.spec.d.ts +0 -1
  605. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  606. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  607. package/dist/preprocessor/index.d.ts +0 -3
  608. package/dist/preprocessor/index.js +0 -16
  609. package/dist/preprocessor/index.js.map +0 -1
  610. package/dist/types/ArrayType.spec.d.ts +0 -1
  611. package/dist/types/ArrayType.spec.js +0 -30
  612. package/dist/types/ArrayType.spec.js.map +0 -1
  613. package/dist/types/BooleanType.spec.d.ts +0 -1
  614. package/dist/types/BooleanType.spec.js +0 -12
  615. package/dist/types/BooleanType.spec.js.map +0 -1
  616. package/dist/types/CustomType.d.ts +0 -10
  617. package/dist/types/CustomType.js +0 -35
  618. package/dist/types/CustomType.js.map +0 -1
  619. package/dist/types/DoubleType.spec.d.ts +0 -1
  620. package/dist/types/DoubleType.spec.js +0 -12
  621. package/dist/types/DoubleType.spec.js.map +0 -1
  622. package/dist/types/DynamicType.spec.d.ts +0 -1
  623. package/dist/types/DynamicType.spec.js +0 -12
  624. package/dist/types/DynamicType.spec.js.map +0 -1
  625. package/dist/types/FloatType.spec.d.ts +0 -1
  626. package/dist/types/FloatType.spec.js +0 -12
  627. package/dist/types/FloatType.spec.js.map +0 -1
  628. package/dist/types/FunctionType.spec.d.ts +0 -1
  629. package/dist/types/FunctionType.spec.js +0 -29
  630. package/dist/types/FunctionType.spec.js.map +0 -1
  631. package/dist/types/IntegerType.spec.d.ts +0 -1
  632. package/dist/types/IntegerType.spec.js +0 -12
  633. package/dist/types/IntegerType.spec.js.map +0 -1
  634. package/dist/types/InvalidType.spec.d.ts +0 -1
  635. package/dist/types/InvalidType.spec.js +0 -12
  636. package/dist/types/InvalidType.spec.js.map +0 -1
  637. package/dist/types/LazyType.d.ts +0 -15
  638. package/dist/types/LazyType.js +0 -32
  639. package/dist/types/LazyType.js.map +0 -1
  640. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  641. package/dist/types/LongIntegerType.spec.js +0 -12
  642. package/dist/types/LongIntegerType.spec.js.map +0 -1
  643. package/dist/types/ObjectType.spec.d.ts +0 -1
  644. package/dist/types/ObjectType.spec.js +0 -12
  645. package/dist/types/ObjectType.spec.js.map +0 -1
  646. package/dist/types/StringType.spec.d.ts +0 -1
  647. package/dist/types/StringType.spec.js +0 -12
  648. package/dist/types/StringType.spec.js.map +0 -1
  649. package/dist/types/VoidType.spec.d.ts +0 -1
  650. package/dist/types/VoidType.spec.js +0 -12
  651. package/dist/types/VoidType.spec.js.map +0 -1
  652. /package/dist/{astUtils/creators.spec.d.ts → lsp/worker/run.d.ts} +0 -0
@@ -1,1065 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const chai_1 = require("chai");
4
- const sinonImport = require("sinon");
5
- const vscode_languageserver_1 = require("vscode-languageserver");
6
- const fsExtra = require("fs-extra");
7
- const DiagnosticMessages_1 = require("../DiagnosticMessages");
8
- const Program_1 = require("../Program");
9
- const XmlFile_1 = require("./XmlFile");
10
- const util_1 = require("../util");
11
- const testHelpers_spec_1 = require("../testHelpers.spec");
12
- describe('XmlFile', () => {
13
- const tempDir = util_1.standardizePath `${process.cwd()}/.tmp`;
14
- const rootDir = util_1.standardizePath `${tempDir}/rootDir`;
15
- const stagingDir = util_1.standardizePath `${tempDir}/stagingDir`;
16
- let program;
17
- let sinon = sinonImport.createSandbox();
18
- let file;
19
- let testTranspile = testHelpers_spec_1.getTestTranspile(() => [program, rootDir]);
20
- beforeEach(() => {
21
- fsExtra.ensureDirSync(tempDir);
22
- fsExtra.emptyDirSync(tempDir);
23
- fsExtra.ensureDirSync(rootDir);
24
- fsExtra.ensureDirSync(stagingDir);
25
- program = new Program_1.Program({ rootDir: rootDir });
26
- file = new XmlFile_1.XmlFile(`${rootDir}/components/MainComponent.xml`, 'components/MainComponent.xml', program);
27
- });
28
- afterEach(() => {
29
- sinon.restore();
30
- program.dispose();
31
- });
32
- describe('parse', () => {
33
- it('allows modifying the parsed XML model', () => {
34
- const expected = 'OtherName';
35
- program.plugins.add({
36
- name: 'allows modifying the parsed XML model',
37
- afterFileParse: (event) => {
38
- event.file.parser.ast.root.attributes[0].tokens.value.text = expected;
39
- }
40
- });
41
- file = program.setFile('components/ChildScene.xml', testHelpers_spec_1.trim `
42
- <?xml version="1.0" encoding="utf-8" ?>
43
- <component name="ChildScene" extends="Scene">
44
- <script type="text/brightscript" uri="ChildScene1.brs" /> <script type="text/brightscript" uri="ChildScene2.brs" /> <script type="text/brightscript" uri="ChildScene3.brs" />
45
- </component>
46
- `);
47
- chai_1.expect(file.componentName.text).to.equal(expected);
48
- });
49
- it('only removes specified attribute when calling setAttribute', () => {
50
- file = new XmlFile_1.XmlFile('abs', 'rel', program);
51
- program.plugins.add({
52
- name: 'allows modifying the parsed XML model',
53
- afterFileParse: () => {
54
- let child = file.parser.ast.component.children.childNodes[0];
55
- chai_1.expect(child.attributes).to.have.lengthOf(4);
56
- child.setAttributeValue('text', undefined);
57
- chai_1.expect(child.id).to.equal('one');
58
- chai_1.expect(child.attributes).to.have.lengthOf(3);
59
- child.setAttributeValue('text3', undefined);
60
- chai_1.expect(child.id).to.equal('one');
61
- chai_1.expect(child.attributes).to.have.lengthOf(2);
62
- }
63
- });
64
- file.parse(testHelpers_spec_1.trim `
65
- <?xml version="1.0" encoding="utf-8" ?>
66
- <component name="ChildScene" extends="Scene">
67
- <script type="text/brightscript" uri="ChildScene1.brs" /> <script type="text/brightscript" uri="ChildScene2.brs" /> <script type="text/brightscript" uri="ChildScene3.brs" />
68
- <children>
69
- <Label id="one"
70
- text="two"
71
- text2="three"
72
- text3="four"
73
- />
74
- </children>
75
- </component>
76
- `);
77
- });
78
- it('supports importing BrighterScript files', () => {
79
- file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, testHelpers_spec_1.trim `
80
- <?xml version="1.0" encoding="utf-8" ?>
81
- <component name="ChildScene" extends="Scene">
82
- <script type="text/brightscript" uri="ChildScene.bs" />
83
- </component>
84
- `);
85
- chai_1.expect(file.scriptTagImports.map(x => x.pkgPath)[0]).to.equal('pkg:/components/ChildScene.bs');
86
- });
87
- it('does not include commented-out script imports', () => {
88
- var _a, _b;
89
- file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, testHelpers_spec_1.trim `
90
- <?xml version="1.0" encoding="utf-8" ?>
91
- <component name="ChildScene" extends="Scene">
92
- <script type="text/brightscript" uri="ChildScene.brs" />
93
- <!--
94
- <script type="text/brightscript" uri="ChildScene.brs" />
95
- -->
96
- </component>
97
- `);
98
- chai_1.expect((_b = (_a = file.scriptTagImports) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.pkgPath).to.eql('pkg:/components/ChildScene.brs');
99
- });
100
- it('finds scripts when more than one per line', () => {
101
- file = new XmlFile_1.XmlFile('abs', 'rel', program);
102
- file.parse(testHelpers_spec_1.trim `
103
- <?xml version="1.0" encoding="utf-8" ?>
104
- <component name="ChildScene" extends="Scene">
105
- <script type="text/brightscript" uri="ChildScene1.brs" /> <script type="text/brightscript" uri="ChildScene2.brs" /> <script type="text/brightscript" uri="ChildScene3.brs" />
106
- </component>
107
- `);
108
- chai_1.expect(file.scriptTagImports).to.be.lengthOf(3);
109
- chai_1.expect(file.scriptTagImports[0]).to.deep.include({
110
- text: 'ChildScene1.brs',
111
- filePathRange: vscode_languageserver_1.Range.create(2, 42, 2, 57)
112
- });
113
- chai_1.expect(file.scriptTagImports[1]).to.deep.include({
114
- text: 'ChildScene2.brs',
115
- filePathRange: vscode_languageserver_1.Range.create(2, 100, 2, 115)
116
- });
117
- chai_1.expect(file.scriptTagImports[2]).to.deep.include({
118
- text: 'ChildScene3.brs',
119
- filePathRange: vscode_languageserver_1.Range.create(2, 158, 2, 173)
120
- });
121
- });
122
- it('finds component names', () => {
123
- file = new XmlFile_1.XmlFile('abs', 'rel', program);
124
- file.parse(testHelpers_spec_1.trim `
125
- <?xml version="1.0" encoding="utf-8" ?>
126
- <component name="ChildScene" extends="ParentScene">
127
- <script type="text/brightscript" uri="ChildScene.brs" />
128
- </component>
129
- `);
130
- chai_1.expect(file.parentComponentName.text).to.equal('ParentScene');
131
- chai_1.expect(file.componentName.text).to.equal('ChildScene');
132
- });
133
- it('Adds error when whitespace appears before the prolog', () => {
134
- file = new XmlFile_1.XmlFile('abs', 'rel', program);
135
- file.parse(/* not trimmed */ `
136
- <?xml version="1.0" encoding="utf-8" ?>
137
- <component name="ChildScene" extends="ParentScene">
138
- <script type="text/brightscript" uri="ChildScene.brs" />
139
- </component>`);
140
- chai_1.expect(file.diagnostics).to.be.lengthOf(2);
141
- chai_1.expect(file.diagnostics[0]).to.deep.include({
142
- code: DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('').code,
143
- range: vscode_languageserver_1.Range.create(1, 16, 1, 22)
144
- });
145
- chai_1.expect(file.diagnostics[1]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('Syntax error: whitespace found before the XML prolog')), { range: vscode_languageserver_1.Range.create(0, 0, 1, 16) }));
146
- });
147
- it('Adds error when an unknown tag is found in xml', () => {
148
- file = new XmlFile_1.XmlFile('abs', 'rel', program);
149
- file.parse(testHelpers_spec_1.trim `
150
- <?xml version="1.0" encoding="utf-8" ?>
151
- <component name="ChildScene" extends="ParentScene">
152
- <interface>
153
- <unexpected />
154
- </interface>
155
- <unexpectedToo />
156
- </component>
157
- `);
158
- chai_1.expect(file.diagnostics).to.be.lengthOf(2);
159
- chai_1.expect(file.diagnostics[0]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('unexpected')), { range: vscode_languageserver_1.Range.create(3, 9, 3, 19) }));
160
- chai_1.expect(file.diagnostics[1]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('unexpectedToo')), { range: vscode_languageserver_1.Range.create(5, 5, 5, 18) }));
161
- });
162
- it('Adds error when no component is declared in xml', () => {
163
- file = program.setFile('components/file.xml', '<script type="text/brightscript" uri="ChildScene.brs" />');
164
- program.validate();
165
- chai_1.expect(file.diagnostics).to.be.lengthOf(2);
166
- chai_1.expect(file.diagnostics[0]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('script')), { range: vscode_languageserver_1.Range.create(0, 1, 0, 7) }));
167
- chai_1.expect(file.diagnostics[1]).to.deep.include(DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingComponentDeclaration());
168
- });
169
- it('adds error when component does not declare a name', () => {
170
- file = program.setFile('components/ParentScene.xml', testHelpers_spec_1.trim `
171
- <?xml version="1.0" encoding="utf-8" ?>
172
- <component extends="ParentScene">
173
- <script type="text/brightscript" uri="ChildScene.brs" />
174
- </component>
175
- `);
176
- program.validate();
177
- chai_1.expect(file.diagnostics).to.be.lengthOf(1);
178
- chai_1.expect(file.diagnostics[0]).to.deep.include({
179
- message: DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingNameAttribute().message,
180
- range: vscode_languageserver_1.Range.create(1, 1, 1, 10)
181
- });
182
- });
183
- it('catches xml parse errors', () => {
184
- file = program.setFile('components/ParentScene.xml', testHelpers_spec_1.trim `
185
- <?xml version="1.0" encoding="utf-8" ?>
186
- <component 1extends="ParentScene">
187
- </component>
188
- `);
189
- program.validate();
190
- chai_1.expect(file.diagnostics).to.be.lengthOf(2);
191
- chai_1.expect(file.diagnostics[0].code).to.equal(DiagnosticMessages_1.DiagnosticMessages.xmlGenericParseError('').code); //unexpected character '1'
192
- chai_1.expect(file.diagnostics[1]).to.deep.include({
193
- code: DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingNameAttribute().code,
194
- range: vscode_languageserver_1.Range.create(1, 1, 1, 10)
195
- });
196
- });
197
- it('finds script imports', () => {
198
- file = new XmlFile_1.XmlFile('abspath/components/cmp1.xml', 'components/cmp1.xml', program);
199
- file.parse(testHelpers_spec_1.trim `
200
- <?xml version="1.0" encoding="utf-8" ?>
201
- <component name="Cmp1" extends="Scene">
202
- <script type="text/brightscript" uri="pkg:/components/cmp1.brs" />
203
- </component>
204
- `);
205
- chai_1.expect(file.scriptTagImports.length).to.equal(1);
206
- chai_1.expect(file.scriptTagImports[0]).to.deep.include({
207
- sourceFile: file,
208
- text: 'pkg:/components/cmp1.brs',
209
- pkgPath: `pkg:/components/cmp1.brs`,
210
- filePathRange: vscode_languageserver_1.Range.create(2, 42, 2, 66)
211
- });
212
- });
213
- it('throws an error if the file has already been parsed', () => {
214
- file = new XmlFile_1.XmlFile('abspath', 'relpath', program);
215
- file.parse('a comment');
216
- try {
217
- file.parse(`'a new comment`);
218
- chai_1.assert.fail(null, null, 'Should have thrown an exception, but did not');
219
- }
220
- catch (e) {
221
- //test passes
222
- }
223
- });
224
- it('resolves relative paths', () => {
225
- file = program.setFile({
226
- src: `${rootDir}/components/comp1.xml`,
227
- dest: 'components/comp1.xml'
228
- }, testHelpers_spec_1.trim `
229
- <?xml version="1.0" encoding="utf-8" ?>
230
- <component name="Cmp1" extends="Scene">
231
- <script type="text/brightscript" uri="cmp1.brs" />
232
- </component>
233
- `);
234
- chai_1.expect(file.scriptTagImports.length).to.equal(1);
235
- chai_1.expect(file.scriptTagImports[0]).to.deep.include({
236
- text: 'cmp1.brs',
237
- pkgPath: `pkg:/components/cmp1.brs`
238
- });
239
- });
240
- it('finds correct position for empty uri in script tag', () => {
241
- var _a;
242
- file = program.setFile({
243
- src: `${rootDir}/components/comp1.xml`,
244
- dest: 'components/comp1.xml'
245
- }, testHelpers_spec_1.trim `
246
- <?xml version="1.0" encoding="utf-8" ?>
247
- <component name="Cmp1" extends="Scene">
248
- <script type="text/brightscript" uri="" />
249
- </component>
250
- `);
251
- chai_1.expect(file.scriptTagImports.length).to.equal(1);
252
- chai_1.expect((_a = file.scriptTagImports[0]) === null || _a === void 0 ? void 0 : _a.filePathRange).to.eql(vscode_languageserver_1.Range.create(2, 42, 2, 42));
253
- });
254
- });
255
- describe('doesReferenceFile', () => {
256
- it('compares case insensitive', () => {
257
- let xmlFile = program.setFile({
258
- src: `${rootDir}/components/comp1.xml`,
259
- dest: 'components/comp1.xml'
260
- }, testHelpers_spec_1.trim `
261
- <?xml version="1.0" encoding="utf-8" ?>
262
- <component name="Cmp1" extends="Scene">
263
- <script type="text/brightscript" uri="HeroGrid.brs" />
264
- </component>
265
- `);
266
- let brsFile = program.setFile({
267
- src: `${rootDir}/components/HEROGRID.brs`,
268
- dest: `components/HEROGRID.brs`
269
- }, ``);
270
- chai_1.expect(xmlFile.doesReferenceFile(brsFile)).to.be.true;
271
- });
272
- });
273
- describe('autoImportComponentScript', () => {
274
- it('is not enabled by default', () => {
275
- program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, testHelpers_spec_1.trim `
276
- <?xml version="1.0" encoding="utf-8" ?>
277
- <component name="ParentScene" extends="GrandparentScene">
278
- <script type="text/brightscript" uri="./lib.brs" />
279
- </component>
280
- `);
281
- program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
282
- function libFunc()
283
- end function
284
- `);
285
- program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
286
- function init()
287
- libFunc()
288
- end function
289
- `);
290
- program.validate();
291
- chai_1.expect(program.getDiagnostics().map(x => x.message)).to.include(DiagnosticMessages_1.DiagnosticMessages.fileNotReferencedByAnyOtherFile().message);
292
- });
293
- it('is not enabled by default', () => {
294
- program = new Program_1.Program({
295
- rootDir: rootDir,
296
- autoImportComponentScript: true
297
- });
298
- program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, testHelpers_spec_1.trim `
299
- <?xml version="1.0" encoding="utf-8" ?>
300
- <component name="ParentScene" extends="GrandparentScene">
301
- <script type="text/brightscript" uri="./lib.brs" />
302
- </component>
303
- `);
304
- program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
305
- function libFunc()
306
- end function
307
- `);
308
- program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
309
- function init()
310
- libFunc()
311
- end function
312
- `);
313
- program.validate();
314
- //there should be no errors
315
- chai_1.expect(program.getDiagnostics().map(x => x.message)[0]).not.to.exist;
316
- });
317
- });
318
- describe('getCompletions', () => {
319
- it('formats completion paths with proper slashes', () => {
320
- program.setFile('pkg:/components/component1/component1.brs', '');
321
- const xmlFile = program.setFile('components/component1/component1.xml', testHelpers_spec_1.trim `
322
- <?xml version="1.0" encoding="utf-8" ?>
323
- <component name="Component1" extends="Group">
324
- </component
325
- `);
326
- xmlFile.parser.references.scriptTagImports.push({
327
- pkgPath: 'pkg:/components/component1/component1.brs',
328
- text: 'component1.brs',
329
- filePathRange: vscode_languageserver_1.Range.create(1, 1, 1, 1)
330
- });
331
- chai_1.expect(xmlFile.getCompletions(vscode_languageserver_1.Position.create(1, 1))[0]).to.include({
332
- label: 'component1.brs',
333
- kind: vscode_languageserver_1.CompletionItemKind.File
334
- });
335
- chai_1.expect(xmlFile.getCompletions(vscode_languageserver_1.Position.create(1, 1))[1]).to.include({
336
- label: 'pkg:/components/component1/component1.brs',
337
- kind: vscode_languageserver_1.CompletionItemKind.File
338
- });
339
- });
340
- it('returns empty set when out of range', () => {
341
- program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
342
- chai_1.expect(file.getCompletions(vscode_languageserver_1.Position.create(99, 99))).to.be.empty;
343
- });
344
- //TODO - refine this test once cdata scripts are supported
345
- it('prevents scope completions entirely', () => {
346
- program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
347
- let xmlFile = program.setFile({ src: `${rootDir}/components/Component1.xml`, dest: 'components/component1.xml' }, testHelpers_spec_1.trim `
348
- <?xml version="1.0" encoding="utf-8" ?>
349
- <component name="ParentScene" extends="GrandparentScene">
350
- <script type="text/brightscript" uri="./Component1.brs" />
351
- </component>
352
- `);
353
- chai_1.expect(program.getCompletions(xmlFile.srcPath, vscode_languageserver_1.Position.create(1, 1))).to.be.empty;
354
- });
355
- });
356
- describe('getAllDependencies', () => {
357
- it('returns own imports', () => {
358
- file = program.setFile('components/comp1.xml', testHelpers_spec_1.trim `
359
- <?xml version="1.0" encoding="utf-8" ?>
360
- <component name="ChildScene" extends="BaseScene">
361
- <script type="text/brightscript" uri="pkg:/source/lib.brs" />
362
- </component>
363
- `);
364
- chai_1.expect(file.getOwnDependencies().sort()).to.eql([
365
- 'pkg:/source/lib.brs',
366
- 'pkg:/source/lib.d.bs'
367
- ]);
368
- });
369
- });
370
- it('invalidates dependent scopes on change', () => {
371
- let xmlFile = program.setFile({
372
- src: `${rootDir}/components/comp1.xml`,
373
- dest: `components/comp1.xml`
374
- }, testHelpers_spec_1.trim `
375
- <?xml version="1.0" encoding="utf-8" ?>
376
- <component name="ChildScene" extends="BaseScene">
377
- <script type="text/brightscript" uri="pkg:/source/lib.bs" />
378
- </component>
379
- `);
380
- program.validate();
381
- let scope = program.getScopesForFile(xmlFile)[0];
382
- //scope should be validated
383
- chai_1.expect(scope.isValidated);
384
- //add lib1
385
- program.setFile({
386
- src: `${rootDir}/source/lib.bs`,
387
- dest: `source/lib.bs`
388
- }, ``);
389
- //adding a dependent file should have invalidated the scope
390
- chai_1.expect(scope.isValidated).to.be.false;
391
- program.validate();
392
- chai_1.expect(scope.isValidated).to.be.true;
393
- //update lib1 to include an import
394
- program.setFile({
395
- src: `${rootDir}/source/lib.bs`,
396
- dest: `source/lib.bs`
397
- }, `
398
- import "lib2.bs"
399
- `);
400
- //scope should have been invalidated again
401
- chai_1.expect(scope.isValidated).to.be.false;
402
- program.validate();
403
- chai_1.expect(scope.isValidated).to.be.true;
404
- //add the lib2 imported from lib
405
- program.setFile({
406
- src: `${rootDir}/source/lib2.bs`,
407
- dest: `source/lib2.bs`
408
- }, ``);
409
- //scope should have been invalidated again because of chained dependency
410
- chai_1.expect(scope.isValidated).to.be.false;
411
- program.validate();
412
- chai_1.expect(scope.isValidated).to.be.true;
413
- program.removeFile(`${rootDir}/source/lib.bs`);
414
- chai_1.expect(scope.isValidated).to.be.false;
415
- });
416
- it('does not invalidate unrelated scopes on change', () => {
417
- let xmlFile1 = program.setFile({
418
- src: `${rootDir}/components/comp1.xml`,
419
- dest: `components/comp1.xml`
420
- }, testHelpers_spec_1.trim `
421
- <?xml version="1.0" encoding="utf-8" ?>
422
- <component name="ChildScene1" extends="BaseScene">
423
- <script type="text/brightscript" uri="pkg:/source/lib.brs" />
424
- </component>
425
- `);
426
- let xmlFile2 = program.setFile({
427
- src: `${rootDir}/components/comp2.xml`,
428
- dest: `components/comp2.xml`
429
- }, testHelpers_spec_1.trim `
430
- <?xml version="1.0" encoding="utf-8" ?>
431
- <component name="ChildScene2" extends="BaseScene">
432
- </component>
433
- `);
434
- program.validate();
435
- //scope should be validated
436
- chai_1.expect(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.true;
437
- chai_1.expect(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
438
- //add the lib file
439
- program.setFile({
440
- src: `${rootDir}/source/lib.brs`,
441
- dest: `source/lib.brs`
442
- }, ``);
443
- chai_1.expect(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.false;
444
- chai_1.expect(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
445
- });
446
- it('allows adding diagnostics', () => {
447
- const expected = [{
448
- message: 'message',
449
- file: undefined,
450
- range: undefined
451
- }];
452
- file.addDiagnostics(expected);
453
- const actual = file.getDiagnostics();
454
- chai_1.expect(actual).deep.equal(expected);
455
- });
456
- describe('component extends', () => {
457
- it('works for single-line', () => {
458
- file = program.setFile({
459
- src: `${rootDir}/components/comp1.xml`,
460
- dest: `components/comp1.xml`
461
- }, testHelpers_spec_1.trim `
462
- <?xml version="1.0" encoding="utf-8" ?>
463
- <component name="ChildScene" extends="BaseScene">
464
- </component>
465
- `);
466
- chai_1.expect(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(1, 38, 1, 47));
467
- });
468
- it('works for multi-line', () => {
469
- file = program.setFile({
470
- src: `${rootDir}/components/comp1.xml`,
471
- dest: `components/comp1.xml`
472
- }, testHelpers_spec_1.trim `
473
- <?xml version="1.0" encoding="utf-8" ?>
474
- <component name="ChildScene"
475
- extends="BaseScene">
476
- </component>
477
- `);
478
- chai_1.expect(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(2, 13, 2, 22));
479
- });
480
- it('does not throw when unable to find extends', () => {
481
- file = program.setFile({
482
- src: `${rootDir}/components/comp1.xml`,
483
- dest: `components/comp1.xml`
484
- }, testHelpers_spec_1.trim `
485
- <?xml version="1.0" encoding="utf-8" ?>
486
- <component name="ChildScene">
487
- </component>
488
- `);
489
- chai_1.expect(file.parentComponentName).to.not.exist;
490
- });
491
- it('adds warning when no "extends" attribute is found', () => {
492
- file = program.setFile({
493
- src: `${rootDir}/components/comp1.xml`,
494
- dest: `components/comp1.xml`
495
- }, testHelpers_spec_1.trim `
496
- <?xml version="1.0" encoding="utf-8" ?>
497
- <component name="ChildScene">
498
- </component>
499
- `);
500
- program.validate();
501
- chai_1.expect(file.getDiagnostics()[0]).to.include({
502
- severity: vscode_languageserver_1.DiagnosticSeverity.Warning,
503
- message: DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute().message
504
- });
505
- });
506
- });
507
- it('detects when importing the codebehind file unnecessarily', () => {
508
- var _a;
509
- program = new Program_1.Program({
510
- autoImportComponentScript: true,
511
- rootDir: rootDir
512
- });
513
- program.setFile({
514
- src: `${rootDir}/components/SimpleScene.bs`,
515
- dest: `components/SimpleScene.bs`
516
- }, '');
517
- program.setFile({
518
- src: `${rootDir}/components/SimpleScene.xml`,
519
- dest: `components/SimpleScene.xml`
520
- }, testHelpers_spec_1.trim `
521
- <?xml version="1.0" encoding="utf-8" ?>
522
- <component name="SimpleScene" extends="Scene">
523
- <script type="text/brighterscript" uri="SimpleScene.bs" />
524
- </component>
525
- `);
526
- program.validate();
527
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unnecessaryCodebehindScriptImport().message);
528
- });
529
- describe('transpile', () => {
530
- it(`honors the 'needsTranspiled' flag when set in 'afterFileParse'`, () => {
531
- program.plugins.add({
532
- name: 'test',
533
- afterFileParse: (event) => {
534
- //enable transpile for every file
535
- event.file.needsTranspiled = true;
536
- }
537
- });
538
- const file = program.setFile('components/file.xml', testHelpers_spec_1.trim `
539
- <?xml version="1.0" encoding="utf-8" ?>
540
- <component name="Comp" extends="Group">
541
- </component>
542
- `);
543
- chai_1.expect(file.needsTranspiled).to.be.true;
544
- });
545
- it('includes bslib script', () => {
546
- testTranspile(testHelpers_spec_1.trim `
547
- <?xml version="1.0" encoding="utf-8" ?>
548
- <component name="Comp" extends="Group">
549
- </component>
550
- `, testHelpers_spec_1.trim `
551
- <?xml version="1.0" encoding="utf-8" ?>
552
- <component name="Comp" extends="Group">
553
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
554
- </component>
555
- `, 'none', 'components/Comp.xml');
556
- });
557
- it('does not include additional bslib script if already there ', () => {
558
- testTranspile(testHelpers_spec_1.trim `
559
- <?xml version="1.0" encoding="utf-8" ?>
560
- <component name="Comp" extends="Group">
561
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
562
- </component>
563
- `, testHelpers_spec_1.trim `
564
- <?xml version="1.0" encoding="utf-8" ?>
565
- <component name="Comp" extends="Group">
566
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
567
- </component>
568
- `, 'none', 'components/child.xml');
569
- });
570
- it('does not include bslib script if already there from ropm', () => {
571
- program.setFile('source/roku_modules/bslib/bslib.brs', ``);
572
- program.setFile('source/lib.bs', ``);
573
- //include a bs file to force transpile for the xml file
574
- testTranspile(testHelpers_spec_1.trim `
575
- <?xml version="1.0" encoding="utf-8" ?>
576
- <component name="Comp" extends="Group">
577
- <script type="text/brightscript" uri="pkg:/source/lib.bs" />
578
- <script type="text/brightscript" uri="pkg:/source/roku_modules/bslib/bslib.brs" />
579
- </component>
580
- `, testHelpers_spec_1.trim `
581
- <?xml version="1.0" encoding="utf-8" ?>
582
- <component name="Comp" extends="Group">
583
- <script type="text/brightscript" uri="pkg:/source/lib.brs" />
584
- <script type="text/brightscript" uri="pkg:/source/roku_modules/bslib/bslib.brs" />
585
- </component>
586
- `, 'none', 'components/child.xml');
587
- });
588
- it('does not transpile xml file when bslib script is already present', () => {
589
- const file = program.setFile('components/comp.xml', testHelpers_spec_1.trim `
590
- <?xml version="1.0" encoding="utf-8" ?>
591
- <component name="Comp" extends="Group">
592
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
593
- </component>
594
- `);
595
- program.validate();
596
- testHelpers_spec_1.expectZeroDiagnostics(program);
597
- chai_1.expect(file.needsTranspiled).to.be.false;
598
- });
599
- /**
600
- * There was a bug that would incorrectly replace one of the script paths on the second or third transpile, so this test verifies it doesn't do that anymore
601
- */
602
- it('does not mangle scripts on multiple transpile', async () => {
603
- program.setFile('components/SimpleScene.bs', ``);
604
- program.setFile(`components/SimpleScene.xml`, testHelpers_spec_1.trim `
605
- <?xml version="1.0" encoding="utf-8" ?>
606
- <component name="SimpleScene" extends="Scene">
607
- <script type="text/brightscript" uri="SimpleScene.bs" />
608
- </component>
609
- `);
610
- const expected = testHelpers_spec_1.trim `
611
- <?xml version="1.0" encoding="utf-8" ?>
612
- <component name="SimpleScene" extends="Scene">
613
- <script type="text/brightscript" uri="SimpleScene.brs" />
614
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
615
- </component>
616
- `;
617
- await program.transpile([], stagingDir);
618
- chai_1.expect(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
619
- //clear the output folder
620
- fsExtra.emptyDirSync(stagingDir);
621
- await program.transpile([], stagingDir);
622
- chai_1.expect(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
623
- });
624
- it('keeps all content of the XML', () => {
625
- program.setFile(`components/SimpleScene.bs`, `
626
- sub b()
627
- end sub
628
- `);
629
- testTranspile(testHelpers_spec_1.trim `
630
- <?xml version="1.0" encoding="utf-8" ?>
631
- <component
632
- name="SimpleScene" extends="Scene"
633
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
634
- xsi:noNamespaceSchemaLocation="https://devtools.web.roku.com/schema/RokuSceneGraph.xsd"
635
- >
636
- <interface>
637
- <field id="a" type="string" />
638
- <function name="b" />
639
- </interface>
640
- <script type="text/brightscript" uri="SimpleScene.bs"/>
641
- <children>
642
- <aa id="aa">
643
- <bb id="bb" />
644
- </aa>
645
- </children>
646
- </component>
647
- `, testHelpers_spec_1.trim `
648
- <?xml version="1.0" encoding="utf-8" ?>
649
- <component name="SimpleScene" extends="Scene" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://devtools.web.roku.com/schema/RokuSceneGraph.xsd">
650
- <interface>
651
- <field id="a" type="string" />
652
- <function name="b" />
653
- </interface>
654
- <script type="text/brightscript" uri="SimpleScene.brs" />
655
- <children>
656
- <aa id="aa">
657
- <bb id="bb" />
658
- </aa>
659
- </children>
660
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
661
- </component>
662
- `, 'none', 'components/SimpleScene.xml');
663
- });
664
- it('changes file extensions from bs to brs', () => {
665
- program.setFile(`components/SimpleScene.bs`, `
666
- import "pkg:/source/lib.bs"
667
- `);
668
- program.setFile('source/lib.bs', ``);
669
- testTranspile(testHelpers_spec_1.trim `
670
- <?xml version="1.0" encoding="utf-8" ?>
671
- <component name="SimpleScene" extends="Scene">
672
- <script type="text/brighterscript" uri="SimpleScene.bs"/>
673
- </component>
674
- `, testHelpers_spec_1.trim `
675
- <?xml version="1.0" encoding="utf-8" ?>
676
- <component name="SimpleScene" extends="Scene">
677
- <script type="text/brightscript" uri="SimpleScene.brs" />
678
- <script type="text/brightscript" uri="pkg:/source/lib.brs" />
679
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
680
- </component>
681
- `, 'none', 'components/SimpleScene.xml');
682
- });
683
- it('does not fail on missing script type', () => {
684
- program.setFile('components/SimpleScene.brs', '');
685
- testTranspile(testHelpers_spec_1.trim `
686
- <?xml version="1.0" encoding="utf-8" ?>
687
- <component name="SimpleScene" extends="Scene">
688
- <script uri="SimpleScene.brs"/>
689
- </component>
690
- `, testHelpers_spec_1.trim `
691
- <?xml version="1.0" encoding="utf-8" ?>
692
- <component name="SimpleScene" extends="Scene">
693
- <script uri="SimpleScene.brs" type="text/brightscript" />
694
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
695
- </component>
696
- `, null, 'components/comp.xml');
697
- });
698
- it('returns the XML unmodified if needsTranspiled is false', () => {
699
- let file = program.setFile('components/SimpleScene.xml', testHelpers_spec_1.trim `
700
- <?xml version="1.0" encoding="utf-8" ?>
701
- <!-- should stay as-is -->
702
- <component name="SimpleScene" extends="Scene" >
703
- <script type="text/brightscript" uri="SimpleScene.brs"/>
704
- </component>
705
- `);
706
- //prevent the default auto-imports to ensure no transpilation from AST
707
- file.getMissingImportsForTranspile = () => [];
708
- chai_1.expect(testHelpers_spec_1.trimMap(file.transpile().code)).to.equal(testHelpers_spec_1.trim `
709
- <?xml version="1.0" encoding="utf-8" ?>
710
- <!-- should stay as-is -->
711
- <component name="SimpleScene" extends="Scene" >
712
- <script type="text/brightscript" uri="SimpleScene.brs"/>
713
- </component>
714
- `);
715
- });
716
- it('needsTranspiled is false by default', () => {
717
- let file = program.setFile('components/SimpleScene.xml', testHelpers_spec_1.trim `
718
- <?xml version="1.0" encoding="utf-8" ?>
719
- <component name="SimpleScene" extends="Scene" >
720
- </component>
721
- `);
722
- chai_1.expect(file.needsTranspiled).to.be.false;
723
- });
724
- it('needsTranspiled is true if an import is brighterscript', () => {
725
- let file = program.setFile('components/SimpleScene.xml', testHelpers_spec_1.trim `
726
- <?xml version="1.0" encoding="utf-8" ?>
727
- <component name="SimpleScene" extends="Scene" >
728
- <script type="text/brightscript" uri="SimpleScene.bs"/>
729
- </component>
730
- `);
731
- program.validate();
732
- chai_1.expect(file.needsTranspiled).to.be.true;
733
- });
734
- it('simple source mapping includes sourcemap reference', () => {
735
- program.options.sourceMap = true;
736
- let file = program.setFile('components/SimpleScene.xml', testHelpers_spec_1.trim `
737
- <?xml version="1.0" encoding="utf-8" ?>
738
- <component name="SimpleScene" extends="Scene">
739
- </component>
740
- `);
741
- //prevent the default auto-imports to ensure no transpilation from AST
742
- file.getMissingImportsForTranspile = () => [];
743
- const code = file.transpile().code;
744
- chai_1.expect(code.endsWith(`<!--//# sourceMappingURL=./SimpleScene.xml.map -->`)).to.be.true;
745
- });
746
- it('AST-based source mapping includes sourcemap reference', () => {
747
- program.options.sourceMap = true;
748
- let file = program.setFile('components/SimpleScene.xml', testHelpers_spec_1.trim `
749
- <?xml version="1.0" encoding="utf-8" ?>
750
- <component name="SimpleScene" extends="Scene">
751
- </component>
752
- `);
753
- file.needsTranspiled = true;
754
- const code = file.transpile().code;
755
- chai_1.expect(code.endsWith(`<!--//# sourceMappingURL=./SimpleScene.xml.map -->`)).to.be.true;
756
- });
757
- });
758
- describe('Transform plugins', () => {
759
- function parseFileWithPlugins(validateXml) {
760
- const rootDir = process.cwd();
761
- const program = new Program_1.Program({
762
- rootDir: rootDir
763
- });
764
- program.plugins.add({
765
- name: 'Transform plugins',
766
- afterFileParse: (event) => validateXml(event.file)
767
- });
768
- return program.setFile('components/Cmp1.xml', testHelpers_spec_1.trim `
769
- <?xml version="1.0" encoding="utf-8" ?>
770
- <component name="Cmp1" extends="Scene">
771
- </component>
772
- `);
773
- }
774
- it('Calls XML file validation plugins', () => {
775
- const validateXml = sinon.spy();
776
- const file = parseFileWithPlugins(validateXml);
777
- chai_1.expect(validateXml.callCount).to.equal(1);
778
- chai_1.expect(validateXml.calledWith(file)).to.be.true;
779
- });
780
- });
781
- it('plugin diagnostics work for xml files', () => {
782
- program.plugins.add({
783
- name: 'Xml diagnostic test',
784
- afterFileParse: ({ file }) => {
785
- if (file.srcPath.endsWith('.xml')) {
786
- file.addDiagnostics([{
787
- file: file,
788
- message: 'Test diagnostic',
789
- range: vscode_languageserver_1.Range.create(0, 0, 0, 0),
790
- code: 9999
791
- }]);
792
- }
793
- }
794
- });
795
- program.setFile('components/comp.xml', testHelpers_spec_1.trim `
796
- <?xml version="1.0" encoding="utf-8" ?>
797
- <component name="Cmp1" extends="Scene">
798
- </component>
799
- `);
800
- program.validate();
801
- chai_1.expect(program.getDiagnostics().map(x => ({ message: x.message, code: x.code }))).to.eql([{
802
- message: 'Test diagnostic',
803
- code: 9999
804
- }]);
805
- });
806
- describe('typedef', () => {
807
- it('loads d.bs files from parent scope', () => {
808
- var _a;
809
- program.setFile('components/ParentComponent.xml', testHelpers_spec_1.trim `
810
- <?xml version="1.0" encoding="utf-8" ?>
811
- <component name="ParentComponent" extends="Scene">
812
- <script uri="ParentComponent.brs" />
813
- </component>
814
- `);
815
- program.setFile('components/ParentComponent.d.bs', `
816
- import "Lib.brs"
817
- namespace Parent
818
- sub log()
819
- end sub
820
- end namespace
821
- `);
822
- program.setFile('components/ParentComponent.brs', `
823
- sub Parent_log()
824
- end sub
825
- `);
826
- program.setFile('components/Lib.d.bs', `
827
- namespace Lib
828
- sub log()
829
- end sub
830
- end namespace
831
- `);
832
- program.setFile('components/Lib.brs', `
833
- sub Lib_log()
834
- end sub
835
- `);
836
- program.setFile('components/ChildComponent.xml', testHelpers_spec_1.trim `
837
- <?xml version="1.0" encoding="utf-8" ?>
838
- <component name="ChildComponent" extends="ParentComponent">
839
- <script uri="ChildComponent.bs" />
840
- </component>
841
- `);
842
- program.setFile('components/ChildComponent.bs', `
843
- sub init()
844
- Parent.log()
845
- Lib.log()
846
- end sub
847
- `);
848
- program.validate();
849
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
850
- const scope = program.getComponentScope('ChildComponent');
851
- chai_1.expect(Object.keys(scope.namespaceLookup).sort()).to.eql([
852
- 'lib',
853
- 'parent'
854
- ]);
855
- });
856
- it('loads `d.bs` files into scope', () => {
857
- const xmlFile = program.setFile('components/Component1.xml', testHelpers_spec_1.trim `
858
- <?xml version="1.0" encoding="utf-8" ?>
859
- <component name="Component1" extends="Scene">
860
- <script uri="Component1.brs" />
861
- </component>
862
- `);
863
- program.setFile('components/Component1.d.bs', `
864
- sub logInfo()
865
- end sub
866
- `);
867
- chai_1.expect(program.getScopesForFile(xmlFile)[0].getAllCallables().map(x => x.callable.name)).to.include('logInfo');
868
- });
869
- it('does not include `d.bs` script during transpile', () => {
870
- program.setFile('source/logger.d.bs', `
871
- sub logInfo()
872
- end sub
873
- `);
874
- program.setFile('source/logger.brs', `
875
- sub logInfo()
876
- end sub
877
- `);
878
- program.setFile('components/Component1.bs', `
879
- import "pkg:/source/logger.brs"
880
- sub init()
881
- end sub
882
- `);
883
- testTranspile(testHelpers_spec_1.trim `
884
- <?xml version="1.0" encoding="utf-8" ?>
885
- <component name="Component1" extends="Scene">
886
- <script type="text/brighterscript" uri="Component1.bs" />
887
- </component>
888
- `, testHelpers_spec_1.trim `
889
- <?xml version="1.0" encoding="utf-8" ?>
890
- <component name="Component1" extends="Scene">
891
- <script type="text/brightscript" uri="Component1.brs" />
892
- <script type="text/brightscript" uri="pkg:/source/logger.brs" />
893
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
894
- </component>
895
- `, 'none', 'components/Component1.xml');
896
- });
897
- it('does not load .brs information into scope if related d.bs is in scope', () => {
898
- const xmlFile = program.setFile('components/Component1.xml', testHelpers_spec_1.trim `
899
- <?xml version="1.0" encoding="utf-8" ?>
900
- <component name="Component1" extends="Scene">
901
- <script uri="Component1.brs" />
902
- </component>
903
- `);
904
- const scope = program.getScopesForFile(xmlFile)[0];
905
- //load brs file
906
- program.setFile('components/Component1.brs', `
907
- sub logInfo()
908
- end sub
909
- sub logWarning()
910
- end sub
911
- `);
912
- let functionNames = scope.getAllCallables().map(x => x.callable.name);
913
- chai_1.expect(functionNames).to.include('logInfo');
914
- chai_1.expect(functionNames).to.include('logWarning');
915
- //load d.bs file, which should shadow out the .brs file
916
- program.setFile('components/Component1.d.bs', `
917
- sub logError()
918
- end sub
919
- `);
920
- functionNames = scope.getAllCallables().map(x => x.callable.name);
921
- chai_1.expect(functionNames).to.include('logError');
922
- chai_1.expect(functionNames).not.to.include('logInfo');
923
- chai_1.expect(functionNames).not.to.include('logWarning');
924
- });
925
- it('updates xml scope when typedef disappears', () => {
926
- const xmlFile = program.setFile('components/Component1.xml', testHelpers_spec_1.trim `
927
- <?xml version="1.0" encoding="utf-8" ?>
928
- <component name="Component1" extends="Scene">
929
- <script uri="Component1.brs" />
930
- </component>
931
- `);
932
- const scope = program.getScopesForFile(xmlFile)[0];
933
- //load brs file
934
- program.setFile('components/Component1.brs', `
935
- sub logBrs()
936
- end sub
937
- `);
938
- //load d.bs file, which should shadow out the .brs file
939
- const typedef = program.setFile('components/Component1.d.bs', `
940
- sub logTypedef()
941
- end sub
942
- `);
943
- program.validate();
944
- let functionNames = scope.getOwnCallables().map(x => x.callable.name);
945
- chai_1.expect(functionNames).to.include('logTypedef');
946
- chai_1.expect(functionNames).not.to.include('logBrs');
947
- //remove the typdef file
948
- program.removeFile(typedef.srcPath);
949
- program.validate();
950
- functionNames = scope.getOwnCallables().map(x => x.callable.name);
951
- chai_1.expect(functionNames).not.to.include('logTypedef');
952
- chai_1.expect(functionNames).to.include('logBrs');
953
- });
954
- });
955
- it('finds script imports for single-quoted script tags', () => {
956
- var _a;
957
- const file = program.setFile('components/file.xml', testHelpers_spec_1.trim `
958
- <?xml version="1.0" encoding="utf-8" ?>
959
- <component name="Cmp1" extends="Scene">
960
- <script uri='SingleQuotedFile.brs' />
961
- </component>
962
- `);
963
- chai_1.expect((_a = file.scriptTagImports[0]) === null || _a === void 0 ? void 0 : _a.text).to.eql('SingleQuotedFile.brs');
964
- });
965
- describe('commentFlags', () => {
966
- it('ignores warning from previous line comment', () => {
967
- //component without a name attribute
968
- program.setFile('components/file.xml', testHelpers_spec_1.trim `
969
- <?xml version="1.0" encoding="utf-8" ?>
970
- <!--bs:disable-next-line-->
971
- <component>
972
- </component>
973
- `);
974
- program.validate();
975
- testHelpers_spec_1.expectZeroDiagnostics(program);
976
- });
977
- it('ignores warning from previous line just for the specified code', () => {
978
- //component without a name attribute
979
- program.setFile('components/file.xml', testHelpers_spec_1.trim `
980
- <?xml version="1.0" encoding="utf-8" ?>
981
- <!--bs:disable-next-line 1006-->
982
- <component>
983
- </component>
984
- `);
985
- program.validate();
986
- chai_1.expect(program.getDiagnostics().map(x => x.message)).to.eql([
987
- DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute().message
988
- ]);
989
- });
990
- it('ignores warning from previous line comment', () => {
991
- //component without a name attribute
992
- program.setFile('components/file.xml', testHelpers_spec_1.trim `
993
- <?xml version="1.0" encoding="utf-8" ?>
994
- <component> <!--bs:disable-line-->
995
- </component>
996
- `);
997
- program.validate();
998
- testHelpers_spec_1.expectZeroDiagnostics(program);
999
- });
1000
- it('ignores warning from previous line just for the specified code', () => {
1001
- //component without a name attribute
1002
- program.setFile('components/file.xml', testHelpers_spec_1.trim `
1003
- <?xml version="1.0" encoding="utf-8" ?>
1004
- <component> <!--bs:disable-line 1006-->
1005
- </component>
1006
- `);
1007
- program.validate();
1008
- chai_1.expect(program.getDiagnostics().map(x => x.message)).to.eql([
1009
- DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute().message
1010
- ]);
1011
- });
1012
- });
1013
- describe('duplicate components', () => {
1014
- it('more gracefully handles multiple components with the same name', () => {
1015
- program.setFile('components/comp1.brs', ``);
1016
- program.setFile('components/comp1.xml', testHelpers_spec_1.trim `
1017
- <?xml version="1.0" encoding="utf-8" ?>
1018
- <component name="comp1" extends="Group">
1019
- <script uri="comp1.brs" />
1020
- </component>
1021
- `);
1022
- //add another component with the same name
1023
- program.setFile('components/comp2.brs', ``);
1024
- program.setFile('components/comp2.xml', testHelpers_spec_1.trim `
1025
- <?xml version="1.0" encoding="utf-8" ?>
1026
- <component name="comp1" extends="Group">
1027
- <script uri="comp2.brs" />
1028
- </component>
1029
- `);
1030
- program.validate();
1031
- chai_1.expect(program.getDiagnostics().map(x => x.message).sort()).to.eql([
1032
- DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1').message,
1033
- DiagnosticMessages_1.DiagnosticMessages.duplicateComponentName('comp1').message
1034
- ]);
1035
- });
1036
- it('maintains consistent component selection', () => {
1037
- //add comp2 first
1038
- const comp2 = program.setFile('components/comp2.xml', testHelpers_spec_1.trim `
1039
- <?xml version="1.0" encoding="utf-8" ?>
1040
- <component name="comp1">
1041
- </component>
1042
- `);
1043
- chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
1044
- //add comp1. it should become the main component with this name
1045
- const comp1 = program.setFile('components/comp1.xml', testHelpers_spec_1.trim `
1046
- <?xml version="1.0" encoding="utf-8" ?>
1047
- <component name="comp1" extends="Group">
1048
- </component>
1049
- `);
1050
- chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp1.pkgPath);
1051
- //remove comp1, comp2 should be the primary again
1052
- program.removeFile(util_1.standardizePath `${rootDir}/components/comp1.xml`);
1053
- chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
1054
- //add comp3
1055
- program.setFile('components/comp3.xml', testHelpers_spec_1.trim `
1056
- <?xml version="1.0" encoding="utf-8" ?>
1057
- <component name="comp1">
1058
- </component>
1059
- `);
1060
- //...the 2nd file should still be main
1061
- chai_1.expect(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
1062
- });
1063
- });
1064
- });
1065
- //# sourceMappingURL=XmlFile.spec.js.map