brighterscript 0.72.0 → 0.72.2

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