brighterscript 0.66.0-alpha.8 → 0.67.0

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 (472) hide show
  1. package/CHANGELOG.md +120 -71
  2. package/README.md +14 -418
  3. package/dist/BsConfig.d.ts +25 -2
  4. package/dist/Cache.js +3 -3
  5. package/dist/Cache.js.map +1 -1
  6. package/dist/CodeActionUtil.d.ts +3 -3
  7. package/dist/CodeActionUtil.js.map +1 -1
  8. package/dist/CommentFlagProcessor.d.ts +3 -4
  9. package/dist/CommentFlagProcessor.js +4 -3
  10. package/dist/CommentFlagProcessor.js.map +1 -1
  11. package/dist/DependencyGraph.js +8 -8
  12. package/dist/DependencyGraph.js.map +1 -1
  13. package/dist/DiagnosticFilterer.d.ts +8 -4
  14. package/dist/DiagnosticFilterer.js +71 -38
  15. package/dist/DiagnosticFilterer.js.map +1 -1
  16. package/dist/DiagnosticMessages.d.ts +15 -36
  17. package/dist/DiagnosticMessages.js +15 -61
  18. package/dist/DiagnosticMessages.js.map +1 -1
  19. package/dist/DiagnosticSeverityAdjuster.js +3 -0
  20. package/dist/DiagnosticSeverityAdjuster.js.map +1 -1
  21. package/dist/FunctionScope.d.ts +2 -3
  22. package/dist/FunctionScope.js +0 -3
  23. package/dist/FunctionScope.js.map +1 -1
  24. package/dist/LanguageServer.d.ts +1 -2
  25. package/dist/LanguageServer.js +29 -35
  26. package/dist/LanguageServer.js.map +1 -1
  27. package/dist/Logger.d.ts +5 -9
  28. package/dist/Logger.js +18 -22
  29. package/dist/Logger.js.map +1 -1
  30. package/dist/PluginInterface.d.ts +13 -15
  31. package/dist/PluginInterface.js +16 -70
  32. package/dist/PluginInterface.js.map +1 -1
  33. package/dist/Program.d.ts +105 -138
  34. package/dist/Program.js +479 -702
  35. package/dist/Program.js.map +1 -1
  36. package/dist/ProgramBuilder.d.ts +8 -19
  37. package/dist/ProgramBuilder.js +82 -87
  38. package/dist/ProgramBuilder.js.map +1 -1
  39. package/dist/Scope.d.ts +56 -46
  40. package/dist/Scope.js +281 -217
  41. package/dist/Scope.js.map +1 -1
  42. package/dist/Stopwatch.js +1 -1
  43. package/dist/Stopwatch.js.map +1 -1
  44. package/dist/SymbolTable.d.ts +12 -68
  45. package/dist/SymbolTable.js +28 -213
  46. package/dist/SymbolTable.js.map +1 -1
  47. package/dist/XmlScope.d.ts +5 -7
  48. package/dist/XmlScope.js +36 -76
  49. package/dist/XmlScope.js.map +1 -1
  50. package/dist/astUtils/{Editor.d.ts → AstEditor.d.ts} +1 -6
  51. package/dist/astUtils/{Editor.js → AstEditor.js} +3 -9
  52. package/dist/astUtils/AstEditor.js.map +1 -0
  53. package/dist/astUtils/{Editor.spec.js → AstEditor.spec.js} +6 -10
  54. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  55. package/dist/astUtils/creators.d.ts +8 -19
  56. package/dist/astUtils/creators.js +22 -54
  57. package/dist/astUtils/creators.js.map +1 -1
  58. package/dist/astUtils/creators.spec.js +0 -10
  59. package/dist/astUtils/creators.spec.js.map +1 -1
  60. package/dist/astUtils/reflection.d.ts +45 -81
  61. package/dist/astUtils/reflection.js +157 -220
  62. package/dist/astUtils/reflection.js.map +1 -1
  63. package/dist/astUtils/reflection.spec.js +19 -96
  64. package/dist/astUtils/reflection.spec.js.map +1 -1
  65. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  66. package/dist/astUtils/visitors.d.ts +14 -18
  67. package/dist/astUtils/visitors.js +9 -22
  68. package/dist/astUtils/visitors.js.map +1 -1
  69. package/dist/astUtils/visitors.spec.js +9 -62
  70. package/dist/astUtils/visitors.spec.js.map +1 -1
  71. package/dist/astUtils/xml.d.ts +9 -9
  72. package/dist/astUtils/xml.js +6 -6
  73. package/dist/astUtils/xml.js.map +1 -1
  74. package/dist/bscPlugin/BscPlugin.d.ts +8 -11
  75. package/dist/bscPlugin/BscPlugin.js +21 -29
  76. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  77. package/dist/bscPlugin/CallExpressionInfo.d.ts +6 -5
  78. package/dist/bscPlugin/CallExpressionInfo.js +2 -2
  79. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  80. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +11 -11
  81. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  82. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
  83. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  84. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +1 -49
  85. package/dist/bscPlugin/completions/CompletionsProcessor.js +23 -424
  86. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  87. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  88. package/dist/bscPlugin/definition/DefinitionProvider.js +200 -0
  89. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  90. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  91. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  92. package/dist/bscPlugin/hover/HoverProcessor.d.ts +3 -7
  93. package/dist/bscPlugin/hover/HoverProcessor.js +88 -128
  94. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  95. package/dist/bscPlugin/hover/HoverProcessor.spec.js +24 -336
  96. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  97. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  98. package/dist/bscPlugin/references/ReferencesProvider.js +56 -0
  99. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  100. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  101. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  102. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +0 -1
  103. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +5 -49
  104. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  105. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -22
  106. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  107. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  108. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  109. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  110. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +290 -0
  111. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  112. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  113. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  114. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  115. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  116. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  117. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  118. package/dist/bscPlugin/symbols/symbolUtils.js +140 -0
  119. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  120. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.d.ts → BrsFilePreTranspileProcessor.d.ts} +2 -4
  121. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.js → BrsFilePreTranspileProcessor.js} +15 -36
  122. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
  123. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +46 -0
  124. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -0
  125. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +1 -0
  126. package/dist/bscPlugin/validation/BrsFileValidator.js +30 -41
  127. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  128. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +2 -2
  129. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  130. package/dist/bscPlugin/validation/ProgramValidator.d.ts +3 -3
  131. package/dist/bscPlugin/validation/ProgramValidator.js +6 -6
  132. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -1
  133. package/dist/bscPlugin/validation/ScopeValidator.d.ts +6 -28
  134. package/dist/bscPlugin/validation/ScopeValidator.js +166 -387
  135. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  136. package/dist/bscPlugin/validation/XmlFileValidator.js +9 -9
  137. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  138. package/dist/diagnosticUtils.d.ts +2 -3
  139. package/dist/diagnosticUtils.js +5 -5
  140. package/dist/diagnosticUtils.js.map +1 -1
  141. package/dist/examples/plugins/removePrint.js +1 -1
  142. package/dist/examples/plugins/removePrint.js.map +1 -1
  143. package/dist/files/BrsFile.Class.spec.js +143 -114
  144. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  145. package/dist/files/BrsFile.d.ts +61 -83
  146. package/dist/files/BrsFile.js +552 -607
  147. package/dist/files/BrsFile.js.map +1 -1
  148. package/dist/files/BrsFile.spec.js +1365 -1201
  149. package/dist/files/BrsFile.spec.js.map +1 -1
  150. package/dist/files/XmlFile.d.ts +28 -56
  151. package/dist/files/XmlFile.js +103 -89
  152. package/dist/files/XmlFile.js.map +1 -1
  153. package/dist/files/XmlFile.spec.js +179 -122
  154. package/dist/files/XmlFile.spec.js.map +1 -1
  155. package/dist/files/tests/imports.spec.js +19 -29
  156. package/dist/files/tests/imports.spec.js.map +1 -1
  157. package/dist/files/tests/optionalChaning.spec.js +14 -14
  158. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  159. package/dist/globalCallables.js +83 -88
  160. package/dist/globalCallables.js.map +1 -1
  161. package/dist/index.d.ts +1 -9
  162. package/dist/index.js +1 -9
  163. package/dist/index.js.map +1 -1
  164. package/dist/interfaces.d.ts +173 -423
  165. package/dist/interfaces.js +0 -24
  166. package/dist/interfaces.js.map +1 -1
  167. package/dist/lexer/Lexer.d.ts +9 -15
  168. package/dist/lexer/Lexer.js +35 -46
  169. package/dist/lexer/Lexer.js.map +1 -1
  170. package/dist/lexer/Lexer.spec.js +48 -40
  171. package/dist/lexer/Lexer.spec.js.map +1 -1
  172. package/dist/lexer/Token.d.ts +1 -5
  173. package/dist/lexer/Token.js +1 -1
  174. package/dist/lexer/Token.js.map +1 -1
  175. package/dist/lexer/TokenKind.d.ts +0 -6
  176. package/dist/lexer/TokenKind.js +2 -14
  177. package/dist/lexer/TokenKind.js.map +1 -1
  178. package/dist/logging.d.ts +9 -0
  179. package/dist/logging.js +16 -0
  180. package/dist/logging.js.map +1 -0
  181. package/dist/parser/AstNode.d.ts +6 -90
  182. package/dist/parser/AstNode.js +5 -96
  183. package/dist/parser/AstNode.js.map +1 -1
  184. package/dist/parser/AstNode.spec.js.map +1 -1
  185. package/dist/parser/BrsTranspileState.d.ts +3 -4
  186. package/dist/parser/BrsTranspileState.js +2 -3
  187. package/dist/parser/BrsTranspileState.js.map +1 -1
  188. package/dist/parser/Expression.d.ts +114 -137
  189. package/dist/parser/Expression.js +244 -373
  190. package/dist/parser/Expression.js.map +1 -1
  191. package/dist/parser/Parser.Class.spec.js +19 -46
  192. package/dist/parser/Parser.Class.spec.js.map +1 -1
  193. package/dist/parser/Parser.d.ts +18 -14
  194. package/dist/parser/Parser.js +196 -175
  195. package/dist/parser/Parser.js.map +1 -1
  196. package/dist/parser/Parser.spec.d.ts +0 -2
  197. package/dist/parser/Parser.spec.js +10 -674
  198. package/dist/parser/Parser.spec.js.map +1 -1
  199. package/dist/parser/SGParser.d.ts +6 -44
  200. package/dist/parser/SGParser.js +198 -194
  201. package/dist/parser/SGParser.js.map +1 -1
  202. package/dist/parser/SGParser.spec.js +11 -14
  203. package/dist/parser/SGParser.spec.js.map +1 -1
  204. package/dist/parser/SGTypes.d.ts +52 -280
  205. package/dist/parser/SGTypes.js +185 -562
  206. package/dist/parser/SGTypes.js.map +1 -1
  207. package/dist/parser/Statement.d.ts +140 -172
  208. package/dist/parser/Statement.js +201 -337
  209. package/dist/parser/Statement.js.map +1 -1
  210. package/dist/parser/Statement.spec.js.map +1 -1
  211. package/dist/parser/TranspileState.d.ts +3 -2
  212. package/dist/parser/TranspileState.js +8 -10
  213. package/dist/parser/TranspileState.js.map +1 -1
  214. package/dist/parser/tests/Parser.spec.js +3 -5
  215. package/dist/parser/tests/Parser.spec.js.map +1 -1
  216. package/dist/parser/tests/controlFlow/For.spec.js +8 -16
  217. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  218. package/dist/parser/tests/controlFlow/ForEach.spec.js +6 -12
  219. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  220. package/dist/parser/tests/controlFlow/While.spec.js +4 -8
  221. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  222. package/dist/parser/tests/expression/Call.spec.js +4 -4
  223. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  224. package/dist/parser/tests/expression/Indexing.spec.js +25 -0
  225. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  226. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +73 -29
  227. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  228. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
  229. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  230. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
  231. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  232. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +47 -35
  233. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  234. package/dist/parser/tests/expression/TernaryExpression.spec.js +83 -36
  235. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  236. package/dist/parser/tests/expression/UnaryExpression.spec.js +2 -2
  237. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -1
  238. package/dist/parser/tests/statement/ConstStatement.spec.js +26 -27
  239. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  240. package/dist/parser/tests/statement/Continue.spec.js +2 -2
  241. package/dist/parser/tests/statement/Continue.spec.js.map +1 -1
  242. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  243. package/dist/parser/tests/statement/Enum.spec.js +393 -90
  244. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  245. package/dist/parser/tests/statement/For.spec.js +6 -6
  246. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  247. package/dist/parser/tests/statement/ForEach.spec.js +4 -4
  248. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  249. package/dist/parser/tests/statement/Function.spec.js +1 -1
  250. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  251. package/dist/parser/tests/statement/InterfaceStatement.spec.js +18 -18
  252. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  253. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  254. package/dist/parser/tests/statement/PrintStatement.spec.js +13 -16
  255. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  256. package/dist/parser/tests/statement/ReturnStatement.spec.js +3 -5
  257. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  258. package/dist/parser/tests/statement/Set.spec.js +13 -26
  259. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  260. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  261. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  262. package/dist/preprocessor/Chunk.js +1 -2
  263. package/dist/preprocessor/Chunk.js.map +1 -1
  264. package/dist/preprocessor/Preprocessor.d.ts +3 -4
  265. package/dist/preprocessor/Preprocessor.js +3 -3
  266. package/dist/preprocessor/Preprocessor.js.map +1 -1
  267. package/dist/preprocessor/PreprocessorParser.js +8 -1
  268. package/dist/preprocessor/PreprocessorParser.js.map +1 -1
  269. package/dist/roku-types/data.json +293 -243
  270. package/dist/roku-types/index.d.ts +38 -17
  271. package/dist/types/ArrayType.d.ts +4 -9
  272. package/dist/types/ArrayType.js +24 -72
  273. package/dist/types/ArrayType.js.map +1 -1
  274. package/dist/types/ArrayType.spec.js +10 -39
  275. package/dist/types/ArrayType.spec.js.map +1 -1
  276. package/dist/types/BooleanType.d.ts +4 -8
  277. package/dist/types/BooleanType.js +8 -19
  278. package/dist/types/BooleanType.js.map +1 -1
  279. package/dist/types/BooleanType.spec.js +3 -9
  280. package/dist/types/BooleanType.spec.js.map +1 -1
  281. package/dist/types/BscType.d.ts +2 -29
  282. package/dist/types/BscType.js +0 -113
  283. package/dist/types/BscType.js.map +1 -1
  284. package/dist/types/CustomType.d.ts +9 -0
  285. package/dist/types/CustomType.js +32 -0
  286. package/dist/types/CustomType.js.map +1 -0
  287. package/dist/types/DoubleType.d.ts +4 -8
  288. package/dist/types/DoubleType.js +20 -23
  289. package/dist/types/DoubleType.js.map +1 -1
  290. package/dist/types/DoubleType.spec.js +3 -11
  291. package/dist/types/DoubleType.spec.js.map +1 -1
  292. package/dist/types/DynamicType.d.ts +3 -9
  293. package/dist/types/DynamicType.js +2 -18
  294. package/dist/types/DynamicType.js.map +1 -1
  295. package/dist/types/DynamicType.spec.js +4 -15
  296. package/dist/types/DynamicType.spec.js.map +1 -1
  297. package/dist/types/FloatType.d.ts +4 -8
  298. package/dist/types/FloatType.js +20 -23
  299. package/dist/types/FloatType.js.map +1 -1
  300. package/dist/types/FloatType.spec.js +3 -3
  301. package/dist/types/FloatType.spec.js.map +1 -1
  302. package/dist/types/FunctionType.d.ts +20 -10
  303. package/dist/types/FunctionType.js +52 -27
  304. package/dist/types/FunctionType.js.map +1 -1
  305. package/dist/types/FunctionType.spec.js +23 -0
  306. package/dist/types/FunctionType.spec.js.map +1 -0
  307. package/dist/types/IntegerType.d.ts +4 -8
  308. package/dist/types/IntegerType.js +20 -23
  309. package/dist/types/IntegerType.js.map +1 -1
  310. package/dist/types/IntegerType.spec.js +3 -7
  311. package/dist/types/IntegerType.spec.js.map +1 -1
  312. package/dist/types/InterfaceType.d.ts +10 -12
  313. package/dist/types/InterfaceType.js +48 -23
  314. package/dist/types/InterfaceType.js.map +1 -1
  315. package/dist/types/InterfaceType.spec.js +45 -82
  316. package/dist/types/InterfaceType.spec.js.map +1 -1
  317. package/dist/types/InvalidType.d.ts +4 -7
  318. package/dist/types/InvalidType.js +8 -18
  319. package/dist/types/InvalidType.js.map +1 -1
  320. package/dist/types/InvalidType.spec.js +3 -7
  321. package/dist/types/InvalidType.spec.js.map +1 -1
  322. package/dist/types/LongIntegerType.d.ts +4 -8
  323. package/dist/types/LongIntegerType.js +20 -23
  324. package/dist/types/LongIntegerType.js.map +1 -1
  325. package/dist/types/LongIntegerType.spec.js +3 -9
  326. package/dist/types/LongIntegerType.spec.js.map +1 -1
  327. package/dist/types/ObjectType.d.ts +4 -8
  328. package/dist/types/ObjectType.js +7 -21
  329. package/dist/types/ObjectType.js.map +1 -1
  330. package/dist/types/ObjectType.spec.js +2 -2
  331. package/dist/types/ObjectType.spec.js.map +1 -1
  332. package/dist/types/StringType.d.ts +4 -11
  333. package/dist/types/StringType.js +8 -23
  334. package/dist/types/StringType.js.map +1 -1
  335. package/dist/types/StringType.spec.js +2 -2
  336. package/dist/types/StringType.spec.js.map +1 -1
  337. package/dist/types/UninitializedType.d.ts +3 -7
  338. package/dist/types/UninitializedType.js +3 -14
  339. package/dist/types/UninitializedType.js.map +1 -1
  340. package/dist/types/VoidType.d.ts +4 -8
  341. package/dist/types/VoidType.js +8 -18
  342. package/dist/types/VoidType.js.map +1 -1
  343. package/dist/types/VoidType.spec.js +2 -2
  344. package/dist/types/VoidType.spec.js.map +1 -1
  345. package/dist/util.d.ts +43 -104
  346. package/dist/util.js +243 -640
  347. package/dist/util.js.map +1 -1
  348. package/dist/validators/ClassValidator.d.ts +6 -1
  349. package/dist/validators/ClassValidator.js +61 -20
  350. package/dist/validators/ClassValidator.js.map +1 -1
  351. package/package.json +13 -12
  352. package/dist/ActionPipeline.d.ts +0 -10
  353. package/dist/ActionPipeline.js +0 -40
  354. package/dist/ActionPipeline.js.map +0 -1
  355. package/dist/AstValidationSegmenter.d.ts +0 -25
  356. package/dist/AstValidationSegmenter.js +0 -150
  357. package/dist/AstValidationSegmenter.js.map +0 -1
  358. package/dist/CacheVerifier.d.ts +0 -7
  359. package/dist/CacheVerifier.js +0 -20
  360. package/dist/CacheVerifier.js.map +0 -1
  361. package/dist/astUtils/Editor.js.map +0 -1
  362. package/dist/astUtils/Editor.spec.js.map +0 -1
  363. package/dist/bscPlugin/FileWriter.d.ts +0 -6
  364. package/dist/bscPlugin/FileWriter.js +0 -24
  365. package/dist/bscPlugin/FileWriter.js.map +0 -1
  366. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +0 -1658
  367. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +0 -1
  368. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +0 -9
  369. package/dist/bscPlugin/fileProviders/FileProvider.js +0 -51
  370. package/dist/bscPlugin/fileProviders/FileProvider.js.map +0 -1
  371. package/dist/bscPlugin/serialize/BslibInjector.spec.js +0 -19
  372. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +0 -1
  373. package/dist/bscPlugin/serialize/BslibManager.d.ts +0 -9
  374. package/dist/bscPlugin/serialize/BslibManager.js +0 -40
  375. package/dist/bscPlugin/serialize/BslibManager.js.map +0 -1
  376. package/dist/bscPlugin/serialize/FileSerializer.d.ts +0 -9
  377. package/dist/bscPlugin/serialize/FileSerializer.js +0 -72
  378. package/dist/bscPlugin/serialize/FileSerializer.js.map +0 -1
  379. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +0 -1
  380. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +0 -41
  381. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +0 -1
  382. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +0 -11
  383. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +0 -53
  384. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +0 -1
  385. package/dist/bscPlugin/validation/ScopeValidator.spec.js +0 -2004
  386. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +0 -1
  387. package/dist/files/AssetFile.d.ts +0 -26
  388. package/dist/files/AssetFile.js +0 -26
  389. package/dist/files/AssetFile.js.map +0 -1
  390. package/dist/files/Factory.d.ts +0 -25
  391. package/dist/files/Factory.js +0 -22
  392. package/dist/files/Factory.js.map +0 -1
  393. package/dist/files/File.d.ts +0 -106
  394. package/dist/files/File.js +0 -16
  395. package/dist/files/File.js.map +0 -1
  396. package/dist/files/LazyFileData.d.ts +0 -20
  397. package/dist/files/LazyFileData.js +0 -54
  398. package/dist/files/LazyFileData.js.map +0 -1
  399. package/dist/files/LazyFileData.spec.js +0 -27
  400. package/dist/files/LazyFileData.spec.js.map +0 -1
  401. package/dist/parser/tests/expression/TypeExpression.spec.js +0 -127
  402. package/dist/parser/tests/expression/TypeExpression.spec.js.map +0 -1
  403. package/dist/types/AssociativeArrayType.d.ts +0 -11
  404. package/dist/types/AssociativeArrayType.js +0 -52
  405. package/dist/types/AssociativeArrayType.js.map +0 -1
  406. package/dist/types/BaseFunctionType.d.ts +0 -9
  407. package/dist/types/BaseFunctionType.js +0 -25
  408. package/dist/types/BaseFunctionType.js.map +0 -1
  409. package/dist/types/BscTypeKind.d.ts +0 -25
  410. package/dist/types/BscTypeKind.js +0 -30
  411. package/dist/types/BscTypeKind.js.map +0 -1
  412. package/dist/types/BuiltInInterfaceAdder.d.ts +0 -23
  413. package/dist/types/BuiltInInterfaceAdder.js +0 -160
  414. package/dist/types/BuiltInInterfaceAdder.js.map +0 -1
  415. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +0 -1
  416. package/dist/types/BuiltInInterfaceAdder.spec.js +0 -116
  417. package/dist/types/BuiltInInterfaceAdder.spec.js.map +0 -1
  418. package/dist/types/ClassType.d.ts +0 -17
  419. package/dist/types/ClassType.js +0 -58
  420. package/dist/types/ClassType.js.map +0 -1
  421. package/dist/types/ClassType.spec.d.ts +0 -1
  422. package/dist/types/ClassType.spec.js +0 -77
  423. package/dist/types/ClassType.spec.js.map +0 -1
  424. package/dist/types/ComponentType.d.ts +0 -26
  425. package/dist/types/ComponentType.js +0 -83
  426. package/dist/types/ComponentType.js.map +0 -1
  427. package/dist/types/EnumType.d.ts +0 -40
  428. package/dist/types/EnumType.js +0 -81
  429. package/dist/types/EnumType.js.map +0 -1
  430. package/dist/types/EnumType.spec.d.ts +0 -1
  431. package/dist/types/EnumType.spec.js +0 -33
  432. package/dist/types/EnumType.spec.js.map +0 -1
  433. package/dist/types/InheritableType.d.ts +0 -28
  434. package/dist/types/InheritableType.js +0 -152
  435. package/dist/types/InheritableType.js.map +0 -1
  436. package/dist/types/NamespaceType.d.ts +0 -12
  437. package/dist/types/NamespaceType.js +0 -28
  438. package/dist/types/NamespaceType.js.map +0 -1
  439. package/dist/types/ReferenceType.d.ts +0 -63
  440. package/dist/types/ReferenceType.js +0 -423
  441. package/dist/types/ReferenceType.js.map +0 -1
  442. package/dist/types/ReferenceType.spec.d.ts +0 -1
  443. package/dist/types/ReferenceType.spec.js +0 -137
  444. package/dist/types/ReferenceType.spec.js.map +0 -1
  445. package/dist/types/TypedFunctionType.d.ts +0 -33
  446. package/dist/types/TypedFunctionType.js +0 -106
  447. package/dist/types/TypedFunctionType.js.map +0 -1
  448. package/dist/types/TypedFunctionType.spec.d.ts +0 -1
  449. package/dist/types/TypedFunctionType.spec.js +0 -122
  450. package/dist/types/TypedFunctionType.spec.js.map +0 -1
  451. package/dist/types/UnionType.d.ts +0 -20
  452. package/dist/types/UnionType.js +0 -123
  453. package/dist/types/UnionType.js.map +0 -1
  454. package/dist/types/UnionType.spec.d.ts +0 -1
  455. package/dist/types/UnionType.spec.js +0 -130
  456. package/dist/types/UnionType.spec.js.map +0 -1
  457. package/dist/types/helper.spec.d.ts +0 -1
  458. package/dist/types/helper.spec.js +0 -145
  459. package/dist/types/helper.spec.js.map +0 -1
  460. package/dist/types/helpers.d.ts +0 -24
  461. package/dist/types/helpers.js +0 -178
  462. package/dist/types/helpers.js.map +0 -1
  463. package/dist/types/index.d.ts +0 -22
  464. package/dist/types/index.js +0 -39
  465. package/dist/types/index.js.map +0 -1
  466. /package/dist/astUtils/{Editor.spec.d.ts → AstEditor.spec.d.ts} +0 -0
  467. /package/dist/bscPlugin/{completions/CompletionsProcessor.spec.d.ts → definition/DefinitionProvider.spec.d.ts} +0 -0
  468. /package/dist/bscPlugin/{serialize/BslibInjector.spec.d.ts → references/ReferencesProvider.spec.d.ts} +0 -0
  469. /package/dist/bscPlugin/{transpile/BrsFileTranspileProcessor.spec.d.ts → symbols/DocumentSymbolProcessor.spec.d.ts} +0 -0
  470. /package/dist/bscPlugin/{validation/ScopeValidator.spec.d.ts → symbols/WorkspaceSymbolProcessor.spec.d.ts} +0 -0
  471. /package/dist/{files/LazyFileData.spec.d.ts → bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts} +0 -0
  472. /package/dist/{parser/tests/expression/TypeExpression.spec.d.ts → types/FunctionType.spec.d.ts} +0 -0
@@ -7,11 +7,12 @@ const vscode_languageserver_1 = require("vscode-languageserver");
7
7
  const fsExtra = require("fs-extra");
8
8
  const DiagnosticMessages_1 = require("../DiagnosticMessages");
9
9
  const Program_1 = require("../Program");
10
+ const BrsFile_1 = require("./BrsFile");
10
11
  const XmlFile_1 = require("./XmlFile");
11
12
  const util_1 = require("../util");
12
13
  const testHelpers_spec_1 = require("../testHelpers.spec");
13
14
  const ProgramBuilder_1 = require("../ProgramBuilder");
14
- const Logger_1 = require("../Logger");
15
+ const logging_1 = require("../logging");
15
16
  const reflection_1 = require("../astUtils/reflection");
16
17
  const testHelpers_spec_2 = require("../testHelpers.spec");
17
18
  describe('XmlFile', () => {
@@ -23,12 +24,8 @@ describe('XmlFile', () => {
23
24
  fsExtra.emptyDirSync(testHelpers_spec_2.tempDir);
24
25
  fsExtra.ensureDirSync(testHelpers_spec_2.rootDir);
25
26
  fsExtra.ensureDirSync(testHelpers_spec_2.stagingDir);
26
- program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, stagingDir: testHelpers_spec_2.stagingDir });
27
- file = new XmlFile_1.XmlFile({
28
- srcPath: `${testHelpers_spec_2.rootDir}/components/MainComponent.xml`,
29
- destPath: 'components/MainComponent.xml',
30
- program: program
31
- });
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);
32
29
  });
33
30
  afterEach(() => {
34
31
  sinon.restore();
@@ -39,11 +36,10 @@ describe('XmlFile', () => {
39
36
  const expected = 'OtherName';
40
37
  program.plugins.add({
41
38
  name: 'allows modifying the parsed XML model',
42
- afterProvideFile: (event) => {
39
+ afterFileParse: (file) => {
43
40
  var _a, _b, _c;
44
- const file = event.files[0];
45
- if ((0, reflection_1.isXmlFile)(file) && ((_c = (_b = (_a = file.parser.ast.rootElement) === null || _a === void 0 ? void 0 : _a.attributes) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.value)) {
46
- file.parser.ast.rootElement.attributes[0].value = expected;
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;
47
43
  }
48
44
  }
49
45
  });
@@ -55,17 +51,17 @@ describe('XmlFile', () => {
55
51
  (0, chai_config_spec_1.expect)(file.componentName.text).to.equal(expected);
56
52
  });
57
53
  it('only removes specified attribute when calling setAttribute', () => {
58
- const file = new XmlFile_1.XmlFile({ srcPath: 'abs', destPath: 'rel', program: program });
54
+ file = new XmlFile_1.XmlFile('abs', 'rel', program);
59
55
  program.plugins.add({
60
56
  name: 'allows modifying the parsed XML model',
61
57
  afterFileParse: () => {
62
- let child = file.parser.ast.componentElement.childrenElement.elements[0];
58
+ let child = file.parser.ast.component.children.children[0];
63
59
  (0, chai_config_spec_1.expect)(child.attributes).to.have.lengthOf(4);
64
- child.setAttributeValue('text', undefined);
65
- (0, chai_config_spec_1.expect)(child.getAttribute('id').value).to.equal('one');
60
+ child.setAttribute('text', undefined);
61
+ (0, chai_config_spec_1.expect)(child.getAttribute('id').value.text).to.equal('one');
66
62
  (0, chai_config_spec_1.expect)(child.attributes).to.have.lengthOf(3);
67
- child.setAttributeValue('text3', undefined);
68
- (0, chai_config_spec_1.expect)(child.getAttribute('id').value).to.equal('one');
63
+ child.setAttribute('text3', undefined);
64
+ (0, chai_config_spec_1.expect)(child.getAttribute('id').value.text).to.equal('one');
69
65
  (0, chai_config_spec_1.expect)(child.attributes).to.have.lengthOf(2);
70
66
  }
71
67
  });
@@ -90,7 +86,7 @@ describe('XmlFile', () => {
90
86
  <script type="text/brightscript" uri="ChildScene.bs" />
91
87
  </component>
92
88
  `);
93
- (0, chai_config_spec_1.expect)(file.scriptTagImports.map(x => x.destPath)[0]).to.equal((0, util_1.standardizePath) `components/ChildScene.bs`);
89
+ (0, chai_config_spec_1.expect)(file.scriptTagImports.map(x => x.pkgPath)[0]).to.equal((0, util_1.standardizePath) `components/ChildScene.bs`);
94
90
  });
95
91
  it('does not include commented-out script imports', () => {
96
92
  var _a, _b;
@@ -103,10 +99,10 @@ describe('XmlFile', () => {
103
99
  -->
104
100
  </component>
105
101
  `);
106
- (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.destPath).to.eql((0, util_1.standardizePath) `components/ChildScene.brs`);
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`);
107
103
  });
108
104
  it('finds scripts when more than one per line', () => {
109
- file = new XmlFile_1.XmlFile({ srcPath: 'abs', destPath: 'rel', program: program });
105
+ file = new XmlFile_1.XmlFile('abs', 'rel', program);
110
106
  file.parse((0, testHelpers_spec_1.trim) `
111
107
  <?xml version="1.0" encoding="utf-8" ?>
112
108
  <component name="ChildScene" extends="Scene">
@@ -128,7 +124,7 @@ describe('XmlFile', () => {
128
124
  });
129
125
  });
130
126
  it('finds component names', () => {
131
- file = new XmlFile_1.XmlFile({ srcPath: 'abs', destPath: 'rel', program: program });
127
+ file = new XmlFile_1.XmlFile('abs', 'rel', program);
132
128
  file.parse((0, testHelpers_spec_1.trim) `
133
129
  <?xml version="1.0" encoding="utf-8" ?>
134
130
  <component name="ChildScene" extends="ParentScene">
@@ -139,7 +135,7 @@ describe('XmlFile', () => {
139
135
  (0, chai_config_spec_1.expect)(file.componentName.text).to.equal('ChildScene');
140
136
  });
141
137
  it('Adds error when whitespace appears before the prolog', () => {
142
- file = new XmlFile_1.XmlFile({ srcPath: 'abs', destPath: 'rel', program: program });
138
+ file = new XmlFile_1.XmlFile('abs', 'rel', program);
143
139
  file.parse(/* not trimmed */ `
144
140
  <?xml version="1.0" encoding="utf-8" ?>
145
141
  <component name="ChildScene" extends="ParentScene">
@@ -153,7 +149,7 @@ describe('XmlFile', () => {
153
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) }));
154
150
  });
155
151
  it('Adds error when an unknown tag is found in xml', () => {
156
- file = new XmlFile_1.XmlFile({ srcPath: 'abs', destPath: 'rel', program: program });
152
+ file = new XmlFile_1.XmlFile('abs', 'rel', program);
157
153
  file.parse((0, testHelpers_spec_1.trim) `
158
154
  <?xml version="1.0" encoding="utf-8" ?>
159
155
  <component name="ChildScene" extends="ParentScene">
@@ -204,7 +200,7 @@ describe('XmlFile', () => {
204
200
  });
205
201
  });
206
202
  it('finds script imports', () => {
207
- file = new XmlFile_1.XmlFile({ srcPath: 'abspath/components/cmp1.xml', destPath: 'components/cmp1.xml', program: program });
203
+ file = new XmlFile_1.XmlFile('abspath/components/cmp1.xml', 'components/cmp1.xml', program);
208
204
  file.parse((0, testHelpers_spec_1.trim) `
209
205
  <?xml version="1.0" encoding="utf-8" ?>
210
206
  <component name="Cmp1" extends="Scene">
@@ -215,12 +211,12 @@ describe('XmlFile', () => {
215
211
  (0, chai_config_spec_1.expect)(file.scriptTagImports[0]).to.deep.include({
216
212
  sourceFile: file,
217
213
  text: 'pkg:/components/cmp1.brs',
218
- destPath: `components${path.sep}cmp1.brs`,
214
+ pkgPath: `components${path.sep}cmp1.brs`,
219
215
  filePathRange: vscode_languageserver_1.Range.create(2, 42, 2, 66)
220
216
  });
221
217
  });
222
218
  it('throws an error if the file has already been parsed', () => {
223
- file = new XmlFile_1.XmlFile({ srcPath: 'abspath', destPath: 'relpath', program: program });
219
+ file = new XmlFile_1.XmlFile('abspath', 'relpath', program);
224
220
  file.parse('a comment');
225
221
  try {
226
222
  file.parse(`'a new comment`);
@@ -240,7 +236,7 @@ describe('XmlFile', () => {
240
236
  (0, chai_config_spec_1.expect)(file.scriptTagImports.length).to.equal(1);
241
237
  (0, chai_config_spec_1.expect)(file.scriptTagImports[0]).to.deep.include({
242
238
  text: 'cmp1.brs',
243
- destPath: `components${path.sep}cmp1.brs`
239
+ pkgPath: `components${path.sep}cmp1.brs`
244
240
  });
245
241
  });
246
242
  it('finds correct position for empty uri in script tag', () => {
@@ -314,6 +310,41 @@ describe('XmlFile', () => {
314
310
  (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
315
311
  });
316
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
+ });
317
348
  describe('getAllDependencies', () => {
318
349
  it('returns own imports', () => {
319
350
  file = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
@@ -469,8 +500,8 @@ describe('XmlFile', () => {
469
500
  ]);
470
501
  });
471
502
  describe('transpile', () => {
472
- it('handles single quotes properly', async () => {
473
- await testTranspile((0, testHelpers_spec_1.trim) `
503
+ it('handles single quotes properly', () => {
504
+ testTranspile((0, testHelpers_spec_1.trim) `
474
505
  <?xml version="1.0" encoding="utf-8" ?>
475
506
  <component name="AnimationExample" extends="Scene">
476
507
  <children>
@@ -504,28 +535,27 @@ describe('XmlFile', () => {
504
535
  await builder.run({
505
536
  cwd: testHelpers_spec_2.rootDir,
506
537
  retainStagingDir: true,
507
- createPackage: false,
508
538
  stagingDir: testHelpers_spec_2.stagingDir,
509
- logLevel: Logger_1.LogLevel.off
539
+ logLevel: logging_1.LogLevel.off
510
540
  });
511
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) `
512
542
  <?xml version="1.0" encoding="utf-8" ?>
513
543
  <component name="MainScene" extends="Scene">
514
544
  <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
515
- <customization resumehandler="customResume" />
516
- <customization suspendhandler="customSuspend" />
517
545
  <children>
518
546
  <Rectangle width="1920" height="1080" />
519
547
  </children>
548
+ <customization resumehandler="customResume" />
549
+ <customization suspendhandler="customSuspend" />
520
550
  </component>
521
551
  `);
522
552
  });
523
553
  it(`honors the 'needsTranspiled' flag when set in 'afterFileParse'`, () => {
524
554
  program.plugins.add({
525
555
  name: 'test',
526
- afterProvideFile: (event) => {
556
+ afterFileParse: (file) => {
527
557
  //enable transpile for every file
528
- event.files[0].needsTranspiled = true;
558
+ file.needsTranspiled = true;
529
559
  }
530
560
  });
531
561
  const file = program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
@@ -533,10 +563,10 @@ describe('XmlFile', () => {
533
563
  <component name="Comp" extends="Group">
534
564
  </component>
535
565
  `);
536
- (0, chai_config_spec_1.expect)(file['needsTranspiled']).to.be.true;
566
+ (0, chai_config_spec_1.expect)(file.needsTranspiled).to.be.true;
537
567
  });
538
- it('includes bslib script', async () => {
539
- await testTranspile((0, testHelpers_spec_1.trim) `
568
+ it('includes bslib script', () => {
569
+ testTranspile((0, testHelpers_spec_1.trim) `
540
570
  <?xml version="1.0" encoding="utf-8" ?>
541
571
  <component name="Comp" extends="Group">
542
572
  </component>
@@ -547,8 +577,8 @@ describe('XmlFile', () => {
547
577
  </component>
548
578
  `, 'none', 'components/Comp.xml');
549
579
  });
550
- it('does not include additional bslib script if already there ', async () => {
551
- await testTranspile((0, testHelpers_spec_1.trim) `
580
+ it('does not include additional bslib script if already there ', () => {
581
+ testTranspile((0, testHelpers_spec_1.trim) `
552
582
  <?xml version="1.0" encoding="utf-8" ?>
553
583
  <component name="Comp" extends="Group">
554
584
  <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
@@ -560,11 +590,11 @@ describe('XmlFile', () => {
560
590
  </component>
561
591
  `, 'none', 'components/child.xml');
562
592
  });
563
- it('does not include bslib script if already there from ropm', async () => {
593
+ it('does not include bslib script if already there from ropm', () => {
564
594
  program.setFile('source/roku_modules/bslib/bslib.brs', ``);
565
595
  program.setFile('source/lib.bs', ``);
566
596
  //include a bs file to force transpile for the xml file
567
- await testTranspile((0, testHelpers_spec_1.trim) `
597
+ testTranspile((0, testHelpers_spec_1.trim) `
568
598
  <?xml version="1.0" encoding="utf-8" ?>
569
599
  <component name="Comp" extends="Group">
570
600
  <script type="text/brightscript" uri="pkg:/source/lib.bs" />
@@ -587,7 +617,7 @@ describe('XmlFile', () => {
587
617
  `);
588
618
  program.validate();
589
619
  (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
590
- (0, chai_config_spec_1.expect)(file['needsTranspiled']).to.be.false;
620
+ (0, chai_config_spec_1.expect)(file.needsTranspiled).to.be.false;
591
621
  });
592
622
  /**
593
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
@@ -607,71 +637,19 @@ describe('XmlFile', () => {
607
637
  <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
608
638
  </component>
609
639
  `;
610
- await program.build();
640
+ await program.transpile([], testHelpers_spec_2.stagingDir);
611
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);
612
642
  //clear the output folder
613
643
  fsExtra.emptyDirSync(testHelpers_spec_2.stagingDir);
614
- await program.build();
644
+ await program.transpile([], testHelpers_spec_2.stagingDir);
615
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);
616
646
  });
617
- it('injects new scripts near existing scripts', async () => {
647
+ it('keeps all content of the XML', () => {
618
648
  program.setFile(`components/SimpleScene.bs`, `
619
649
  sub b()
620
650
  end sub
621
651
  `);
622
- await testTranspile((0, testHelpers_spec_1.trim) `
623
- <component name="SimpleScene" extends="group">
624
- <script type="text/brightscript" uri="SimpleScene.bs"/>
625
- <children>
626
- <aa id="aa">
627
- <bb id="bb" />
628
- </aa>
629
- </children>
630
- </component>
631
- `, (0, testHelpers_spec_1.trim) `
632
- <component name="SimpleScene" extends="group">
633
- <script type="text/brightscript" uri="SimpleScene.brs" />
634
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
635
- <children>
636
- <aa id="aa">
637
- <bb id="bb" />
638
- </aa>
639
- </children>
640
- </component>
641
- `, 'none', 'components/SimpleScene.xml');
642
- });
643
- it('injects new scripts at top of component when no scripts were present', async () => {
644
- program.setFile(`components/SimpleScene.bs`, `
645
- sub b()
646
- end sub
647
- `);
648
- program.options.autoImportComponentScript = true;
649
- await testTranspile((0, testHelpers_spec_1.trim) `
650
- <component name="SimpleScene" extends="group">
651
- <children>
652
- <aa id="aa">
653
- <bb id="bb" />
654
- </aa>
655
- </children>
656
- </component>
657
- `, (0, testHelpers_spec_1.trim) `
658
- <component name="SimpleScene" extends="group">
659
- <script type="text/brightscript" uri="pkg:/components/SimpleScene.brs" />
660
- <script type="text/brightscript" uri="pkg:/source/bslib.brs" />
661
- <children>
662
- <aa id="aa">
663
- <bb id="bb" />
664
- </aa>
665
- </children>
666
- </component>
667
- `, 'none', 'components/SimpleScene.xml');
668
- });
669
- it('keeps all content of the XML', async () => {
670
- program.setFile(`components/SimpleScene.bs`, `
671
- sub b()
672
- end sub
673
- `);
674
- await testTranspile((0, testHelpers_spec_1.trim) `
652
+ testTranspile((0, testHelpers_spec_1.trim) `
675
653
  <?xml version="1.0" encoding="utf-8" ?>
676
654
  <component
677
655
  name="SimpleScene" extends="Scene"
@@ -706,12 +684,12 @@ describe('XmlFile', () => {
706
684
  </component>
707
685
  `, 'none', 'components/SimpleScene.xml');
708
686
  });
709
- it('changes file extensions from bs to brs', async () => {
687
+ it('changes file extensions from bs to brs', () => {
710
688
  program.setFile(`components/SimpleScene.bs`, `
711
689
  import "pkg:/source/lib.bs"
712
690
  `);
713
691
  program.setFile('source/lib.bs', ``);
714
- await testTranspile((0, testHelpers_spec_1.trim) `
692
+ testTranspile((0, testHelpers_spec_1.trim) `
715
693
  <?xml version="1.0" encoding="utf-8" ?>
716
694
  <component name="SimpleScene" extends="Scene">
717
695
  <script type="text/brighterscript" uri="SimpleScene.bs"/>
@@ -725,9 +703,9 @@ describe('XmlFile', () => {
725
703
  </component>
726
704
  `, 'none', 'components/SimpleScene.xml');
727
705
  });
728
- it('does not fail on missing script type', async () => {
706
+ it('does not fail on missing script type', () => {
729
707
  program.setFile('components/SimpleScene.brs', '');
730
- await testTranspile((0, testHelpers_spec_1.trim) `
708
+ testTranspile((0, testHelpers_spec_1.trim) `
731
709
  <?xml version="1.0" encoding="utf-8" ?>
732
710
  <component name="SimpleScene" extends="Scene">
733
711
  <script uri="SimpleScene.brs"/>
@@ -764,7 +742,7 @@ describe('XmlFile', () => {
764
742
  <component name="SimpleScene" extends="Scene" >
765
743
  </component>
766
744
  `);
767
- (0, chai_config_spec_1.expect)(file['needsTranspiled']).to.be.false;
745
+ (0, chai_config_spec_1.expect)(file.needsTranspiled).to.be.false;
768
746
  });
769
747
  it('needsTranspiled is true if an import is brighterscript', () => {
770
748
  let file = program.setFile('components/SimpleScene.xml', (0, testHelpers_spec_1.trim) `
@@ -773,7 +751,7 @@ describe('XmlFile', () => {
773
751
  <script type="text/brightscript" uri="SimpleScene.bs"/>
774
752
  </component>
775
753
  `);
776
- (0, chai_config_spec_1.expect)(file['needsTranspiled']).to.be.true;
754
+ (0, chai_config_spec_1.expect)(file.needsTranspiled).to.be.true;
777
755
  });
778
756
  it('simple source mapping includes sourcemap reference', () => {
779
757
  program.options.sourceMap = true;
@@ -794,10 +772,91 @@ describe('XmlFile', () => {
794
772
  <component name="SimpleScene" extends="Scene">
795
773
  </component>
796
774
  `);
797
- file['needsTranspiled'] = true;
775
+ file.needsTranspiled = true;
798
776
  const code = file.transpile().code;
799
777
  (0, chai_config_spec_1.expect)(code.endsWith(`<!--//# sourceMappingURL=./SimpleScene.xml.map -->`)).to.be.true;
800
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
+ });
801
860
  });
802
861
  describe('Transform plugins', () => {
803
862
  function parseFileWithPlugins(validateXml) {
@@ -807,7 +866,7 @@ describe('XmlFile', () => {
807
866
  });
808
867
  program.plugins.add({
809
868
  name: 'Transform plugins',
810
- onFileValidate: event => validateXml(event.file)
869
+ afterFileParse: file => validateXml(file)
811
870
  });
812
871
  file = program.setFile('components/component.xml', (0, testHelpers_spec_1.trim) `
813
872
  <?xml version="1.0" encoding="utf-8" ?>
@@ -827,16 +886,14 @@ describe('XmlFile', () => {
827
886
  it('plugin diagnostics work for xml files', () => {
828
887
  program.plugins.add({
829
888
  name: 'Xml diagnostic test',
830
- afterProvideFile: (event) => {
831
- for (const file of event.files) {
832
- if (file.srcPath.endsWith('.xml')) {
833
- file.diagnostics.push({
889
+ afterFileParse: (file) => {
890
+ if (file.srcPath.endsWith('.xml')) {
891
+ file.addDiagnostics([{
834
892
  file: file,
835
893
  message: 'Test diagnostic',
836
894
  range: vscode_languageserver_1.Range.create(0, 0, 0, 0),
837
895
  code: 9999
838
- });
839
- }
896
+ }]);
840
897
  }
841
898
  }
842
899
  });
@@ -913,7 +970,7 @@ describe('XmlFile', () => {
913
970
  `);
914
971
  (0, chai_config_spec_1.expect)(program.getScopesForFile(xmlFile)[0].getAllCallables().map(x => x.callable.name)).to.include('logInfo');
915
972
  });
916
- it('does not include `d.bs` script during transpile', async () => {
973
+ it('does not include `d.bs` script during transpile', () => {
917
974
  program.setFile('source/logger.d.bs', `
918
975
  sub logInfo()
919
976
  end sub
@@ -927,7 +984,7 @@ describe('XmlFile', () => {
927
984
  sub init()
928
985
  end sub
929
986
  `);
930
- await testTranspile((0, testHelpers_spec_1.trim) `
987
+ testTranspile((0, testHelpers_spec_1.trim) `
931
988
  <?xml version="1.0" encoding="utf-8" ?>
932
989
  <component name="Component1" extends="Scene">
933
990
  <script type="text/brighterscript" uri="Component1.bs" />
@@ -1021,7 +1078,7 @@ describe('XmlFile', () => {
1021
1078
  program.validate();
1022
1079
  (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
1023
1080
  });
1024
- it('ignores a specific diagnostic on next line', () => {
1081
+ it('ignores warning from previous line just for the specified code', () => {
1025
1082
  //component without a name attribute
1026
1083
  program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
1027
1084
  <?xml version="1.0" encoding="utf-8" ?>
@@ -1034,7 +1091,7 @@ describe('XmlFile', () => {
1034
1091
  DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()
1035
1092
  ]);
1036
1093
  });
1037
- it('ignores all warnings from previous line comment', () => {
1094
+ it('ignores warning from previous line comment', () => {
1038
1095
  //component without a name attribute
1039
1096
  program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
1040
1097
  <?xml version="1.0" encoding="utf-8" ?>
@@ -1048,7 +1105,7 @@ describe('XmlFile', () => {
1048
1105
  //component without a name attribute
1049
1106
  program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
1050
1107
  <?xml version="1.0" encoding="utf-8" ?>
1051
- <component name="ButtonCustom"> <!--bs:disable-line 1006-->
1108
+ <component> <!--bs:disable-line 1006-->
1052
1109
  </component>
1053
1110
  `);
1054
1111
  program.validate();
@@ -1087,17 +1144,17 @@ describe('XmlFile', () => {
1087
1144
  <component name="comp1">
1088
1145
  </component>
1089
1146
  `);
1090
- (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.destPath).to.equal(comp2.destPath);
1147
+ (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
1091
1148
  //add comp1. it should become the main component with this name
1092
1149
  const comp1 = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
1093
1150
  <?xml version="1.0" encoding="utf-8" ?>
1094
1151
  <component name="comp1" extends="Group">
1095
1152
  </component>
1096
1153
  `);
1097
- (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.destPath).to.equal(comp1.destPath);
1154
+ (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp1.pkgPath);
1098
1155
  //remove comp1, comp2 should be the primary again
1099
1156
  program.removeFile((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/components/comp1.xml`);
1100
- (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.destPath).to.equal(comp2.destPath);
1157
+ (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
1101
1158
  //add comp3
1102
1159
  program.setFile('components/comp3.xml', (0, testHelpers_spec_1.trim) `
1103
1160
  <?xml version="1.0" encoding="utf-8" ?>
@@ -1105,7 +1162,7 @@ describe('XmlFile', () => {
1105
1162
  </component>
1106
1163
  `);
1107
1164
  //...the 2nd file should still be main
1108
- (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.destPath).to.equal(comp2.destPath);
1165
+ (0, chai_config_spec_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
1109
1166
  });
1110
1167
  });
1111
1168
  });