brighterscript 1.0.0-alpha.24 → 1.0.0-alpha.26

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 (536) hide show
  1. package/CHANGELOG.md +521 -233
  2. package/README.md +45 -139
  3. package/bsconfig.schema.json +46 -0
  4. package/dist/ActionPipeline.d.ts +10 -0
  5. package/dist/ActionPipeline.js +40 -0
  6. package/dist/ActionPipeline.js.map +1 -0
  7. package/dist/AstValidationSegmenter.d.ts +25 -0
  8. package/dist/AstValidationSegmenter.js +152 -0
  9. package/dist/AstValidationSegmenter.js.map +1 -0
  10. package/dist/BsConfig.d.ts +40 -4
  11. package/dist/BusyStatusTracker.d.ts +31 -0
  12. package/dist/BusyStatusTracker.js +83 -0
  13. package/dist/BusyStatusTracker.js.map +1 -0
  14. package/dist/Cache.js +3 -3
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +3 -3
  20. package/dist/CodeActionUtil.js.map +1 -1
  21. package/dist/CommentFlagProcessor.d.ts +3 -2
  22. package/dist/CommentFlagProcessor.js +5 -4
  23. package/dist/CommentFlagProcessor.js.map +1 -1
  24. package/dist/DependencyGraph.d.ts +3 -2
  25. package/dist/DependencyGraph.js +11 -10
  26. package/dist/DependencyGraph.js.map +1 -1
  27. package/dist/DiagnosticCollection.js +9 -5
  28. package/dist/DiagnosticCollection.js.map +1 -1
  29. package/dist/DiagnosticFilterer.d.ts +1 -0
  30. package/dist/DiagnosticFilterer.js +5 -3
  31. package/dist/DiagnosticFilterer.js.map +1 -1
  32. package/dist/DiagnosticMessages.d.ts +61 -13
  33. package/dist/DiagnosticMessages.js +116 -19
  34. package/dist/DiagnosticMessages.js.map +1 -1
  35. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  36. package/dist/DiagnosticSeverityAdjuster.js +41 -0
  37. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  38. package/dist/FunctionScope.d.ts +28 -0
  39. package/dist/FunctionScope.js +52 -0
  40. package/dist/FunctionScope.js.map +1 -0
  41. package/dist/KeyedThrottler.d.ts +3 -3
  42. package/dist/KeyedThrottler.js +3 -3
  43. package/dist/KeyedThrottler.js.map +1 -1
  44. package/dist/LanguageServer.d.ts +23 -11
  45. package/dist/LanguageServer.js +150 -69
  46. package/dist/LanguageServer.js.map +1 -1
  47. package/dist/Logger.d.ts +3 -2
  48. package/dist/Logger.js +11 -3
  49. package/dist/Logger.js.map +1 -1
  50. package/dist/PluginInterface.d.ts +21 -3
  51. package/dist/PluginInterface.js +74 -6
  52. package/dist/PluginInterface.js.map +1 -1
  53. package/dist/Program.d.ts +158 -79
  54. package/dist/Program.js +841 -706
  55. package/dist/Program.js.map +1 -1
  56. package/dist/ProgramBuilder.d.ts +22 -12
  57. package/dist/ProgramBuilder.js +130 -103
  58. package/dist/ProgramBuilder.js.map +1 -1
  59. package/dist/Scope.d.ts +86 -137
  60. package/dist/Scope.js +453 -519
  61. package/dist/Scope.js.map +1 -1
  62. package/dist/Stopwatch.js +1 -1
  63. package/dist/Stopwatch.js.map +1 -1
  64. package/dist/SymbolTable.d.ts +89 -34
  65. package/dist/SymbolTable.js +239 -114
  66. package/dist/SymbolTable.js.map +1 -1
  67. package/dist/Throttler.d.ts +12 -0
  68. package/dist/Throttler.js +39 -0
  69. package/dist/Throttler.js.map +1 -1
  70. package/dist/Watcher.d.ts +0 -3
  71. package/dist/Watcher.js +0 -3
  72. package/dist/Watcher.js.map +1 -1
  73. package/dist/XmlScope.d.ts +4 -11
  74. package/dist/XmlScope.js +75 -88
  75. package/dist/XmlScope.js.map +1 -1
  76. package/dist/astUtils/CachedLookups.d.ts +48 -0
  77. package/dist/astUtils/CachedLookups.js +323 -0
  78. package/dist/astUtils/CachedLookups.js.map +1 -0
  79. package/dist/astUtils/{AstEditor.d.ts → Editor.d.ts} +9 -5
  80. package/dist/astUtils/{AstEditor.js → Editor.js} +10 -4
  81. package/dist/astUtils/Editor.js.map +1 -0
  82. package/dist/astUtils/{AstEditor.spec.js → Editor.spec.js} +69 -65
  83. package/dist/astUtils/Editor.spec.js.map +1 -0
  84. package/dist/astUtils/creators.d.ts +10 -10
  85. package/dist/astUtils/creators.js +54 -24
  86. package/dist/astUtils/creators.js.map +1 -1
  87. package/dist/astUtils/creators.spec.js +5 -5
  88. package/dist/astUtils/creators.spec.js.map +1 -1
  89. package/dist/astUtils/reflection.d.ts +132 -104
  90. package/dist/astUtils/reflection.js +220 -174
  91. package/dist/astUtils/reflection.js.map +1 -1
  92. package/dist/astUtils/reflection.spec.js +256 -157
  93. package/dist/astUtils/reflection.spec.js.map +1 -1
  94. package/dist/astUtils/stackedVisitor.spec.js +12 -12
  95. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  96. package/dist/astUtils/visitors.d.ts +53 -35
  97. package/dist/astUtils/visitors.js +29 -3
  98. package/dist/astUtils/visitors.js.map +1 -1
  99. package/dist/astUtils/visitors.spec.js +208 -52
  100. package/dist/astUtils/visitors.spec.js.map +1 -1
  101. package/dist/astUtils/xml.d.ts +9 -9
  102. package/dist/astUtils/xml.js +9 -9
  103. package/dist/astUtils/xml.js.map +1 -1
  104. package/dist/bscPlugin/BscPlugin.d.ts +11 -2
  105. package/dist/bscPlugin/BscPlugin.js +37 -3
  106. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  107. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  108. package/dist/bscPlugin/CallExpressionInfo.js +131 -0
  109. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  110. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  111. package/dist/bscPlugin/FileWriter.js +24 -0
  112. package/dist/bscPlugin/FileWriter.js.map +1 -0
  113. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  114. package/dist/bscPlugin/SignatureHelpUtil.js +136 -0
  115. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  116. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +16 -13
  117. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  118. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +16 -16
  119. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  120. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +52 -1
  121. package/dist/bscPlugin/completions/CompletionsProcessor.js +517 -26
  122. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  123. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1909 -0
  124. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  125. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  126. package/dist/bscPlugin/definition/DefinitionProvider.js +210 -0
  127. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  128. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +88 -0
  129. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  130. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  131. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  132. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  133. package/dist/bscPlugin/hover/HoverProcessor.d.ts +7 -7
  134. package/dist/bscPlugin/hover/HoverProcessor.js +123 -125
  135. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  136. package/dist/bscPlugin/hover/HoverProcessor.spec.js +371 -53
  137. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  138. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +2 -1
  139. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +83 -23
  140. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  141. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +83 -6
  142. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  143. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  144. package/dist/bscPlugin/serialize/BslibInjector.spec.js +19 -0
  145. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  146. package/dist/bscPlugin/serialize/BslibManager.d.ts +9 -0
  147. package/dist/bscPlugin/serialize/BslibManager.js +40 -0
  148. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  149. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  150. package/dist/bscPlugin/serialize/FileSerializer.js +72 -0
  151. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  152. package/dist/bscPlugin/transpile/{BrsFilePreTranspileProcessor.d.ts → BrsFileTranspileProcessor.d.ts} +4 -2
  153. package/dist/bscPlugin/transpile/{BrsFilePreTranspileProcessor.js → BrsFileTranspileProcessor.js} +38 -12
  154. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  155. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  156. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +41 -0
  157. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  158. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  159. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  160. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  161. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +13 -5
  162. package/dist/bscPlugin/validation/BrsFileValidator.js +262 -52
  163. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  164. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +230 -14
  165. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  166. package/dist/bscPlugin/validation/ProgramValidator.d.ts +10 -0
  167. package/dist/bscPlugin/validation/ProgramValidator.js +32 -0
  168. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  169. package/dist/bscPlugin/validation/ScopeValidator.d.ts +58 -27
  170. package/dist/bscPlugin/validation/ScopeValidator.js +514 -286
  171. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  172. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  173. package/dist/bscPlugin/validation/ScopeValidator.spec.js +2527 -0
  174. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  175. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  176. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  177. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  178. package/dist/cli.js +104 -13
  179. package/dist/cli.js.map +1 -1
  180. package/dist/deferred.d.ts +3 -3
  181. package/dist/deferred.js.map +1 -1
  182. package/dist/diagnosticUtils.d.ts +8 -2
  183. package/dist/diagnosticUtils.js +47 -17
  184. package/dist/diagnosticUtils.js.map +1 -1
  185. package/dist/examples/plugins/removePrint.js +8 -10
  186. package/dist/examples/plugins/removePrint.js.map +1 -1
  187. package/dist/files/AssetFile.d.ts +26 -0
  188. package/dist/files/AssetFile.js +26 -0
  189. package/dist/files/AssetFile.js.map +1 -0
  190. package/dist/files/BrsFile.Class.spec.js +523 -493
  191. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  192. package/dist/files/BrsFile.d.ts +111 -117
  193. package/dist/files/BrsFile.js +684 -1142
  194. package/dist/files/BrsFile.js.map +1 -1
  195. package/dist/files/BrsFile.spec.js +1783 -1233
  196. package/dist/files/BrsFile.spec.js.map +1 -1
  197. package/dist/files/BscFile.d.ts +104 -0
  198. package/dist/files/BscFile.js +16 -0
  199. package/dist/files/BscFile.js.map +1 -0
  200. package/dist/files/Factory.d.ts +25 -0
  201. package/dist/files/Factory.js +22 -0
  202. package/dist/files/Factory.js.map +1 -0
  203. package/dist/files/LazyFileData.d.ts +20 -0
  204. package/dist/files/LazyFileData.js +54 -0
  205. package/dist/files/LazyFileData.js.map +1 -0
  206. package/dist/files/LazyFileData.spec.d.ts +1 -0
  207. package/dist/files/LazyFileData.spec.js +27 -0
  208. package/dist/files/LazyFileData.spec.js.map +1 -0
  209. package/dist/files/XmlFile.d.ts +70 -32
  210. package/dist/files/XmlFile.js +106 -118
  211. package/dist/files/XmlFile.js.map +1 -1
  212. package/dist/files/XmlFile.spec.js +325 -262
  213. package/dist/files/XmlFile.spec.js.map +1 -1
  214. package/dist/files/tests/imports.spec.js +48 -40
  215. package/dist/files/tests/imports.spec.js.map +1 -1
  216. package/dist/files/tests/optionalChaning.spec.js +84 -24
  217. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  218. package/dist/globalCallables.js +16 -21
  219. package/dist/globalCallables.js.map +1 -1
  220. package/dist/index.d.ts +12 -1
  221. package/dist/index.js +12 -1
  222. package/dist/index.js.map +1 -1
  223. package/dist/interfaces.d.ts +421 -162
  224. package/dist/interfaces.js +27 -0
  225. package/dist/interfaces.js.map +1 -1
  226. package/dist/lexer/Character.spec.js +5 -5
  227. package/dist/lexer/Character.spec.js.map +1 -1
  228. package/dist/lexer/Lexer.d.ts +12 -5
  229. package/dist/lexer/Lexer.js +28 -13
  230. package/dist/lexer/Lexer.js.map +1 -1
  231. package/dist/lexer/Lexer.spec.js +181 -135
  232. package/dist/lexer/Lexer.spec.js.map +1 -1
  233. package/dist/lexer/Token.d.ts +9 -1
  234. package/dist/lexer/Token.js +9 -1
  235. package/dist/lexer/Token.js.map +1 -1
  236. package/dist/lexer/TokenKind.d.ts +8 -0
  237. package/dist/lexer/TokenKind.js +24 -4
  238. package/dist/lexer/TokenKind.js.map +1 -1
  239. package/dist/parser/AstNode.d.ts +162 -0
  240. package/dist/parser/AstNode.js +225 -0
  241. package/dist/parser/AstNode.js.map +1 -0
  242. package/dist/parser/AstNode.spec.d.ts +1 -0
  243. package/dist/parser/AstNode.spec.js +165 -0
  244. package/dist/parser/AstNode.spec.js.map +1 -0
  245. package/dist/parser/BrsTranspileState.d.ts +4 -7
  246. package/dist/parser/BrsTranspileState.js +4 -12
  247. package/dist/parser/BrsTranspileState.js.map +1 -1
  248. package/dist/parser/Expression.d.ts +376 -283
  249. package/dist/parser/Expression.js +742 -585
  250. package/dist/parser/Expression.js.map +1 -1
  251. package/dist/parser/Parser.Class.spec.js +151 -145
  252. package/dist/parser/Parser.Class.spec.js.map +1 -1
  253. package/dist/parser/Parser.d.ts +48 -201
  254. package/dist/parser/Parser.js +705 -1026
  255. package/dist/parser/Parser.js.map +1 -1
  256. package/dist/parser/Parser.spec.d.ts +3 -1
  257. package/dist/parser/Parser.spec.js +861 -848
  258. package/dist/parser/Parser.spec.js.map +1 -1
  259. package/dist/parser/SGParser.d.ts +9 -8
  260. package/dist/parser/SGParser.js +10 -8
  261. package/dist/parser/SGParser.js.map +1 -1
  262. package/dist/parser/SGParser.spec.js +27 -38
  263. package/dist/parser/SGParser.spec.js.map +1 -1
  264. package/dist/parser/SGTypes.d.ts +98 -35
  265. package/dist/parser/SGTypes.js +169 -99
  266. package/dist/parser/SGTypes.js.map +1 -1
  267. package/dist/parser/Statement.d.ts +468 -272
  268. package/dist/parser/Statement.js +904 -631
  269. package/dist/parser/Statement.js.map +1 -1
  270. package/dist/parser/Statement.spec.js +47 -23
  271. package/dist/parser/Statement.spec.js.map +1 -1
  272. package/dist/parser/TranspileState.d.ts +1 -1
  273. package/dist/parser/TranspileState.js +7 -12
  274. package/dist/parser/TranspileState.js.map +1 -1
  275. package/dist/parser/tests/Parser.spec.js +3 -2
  276. package/dist/parser/tests/Parser.spec.js.map +1 -1
  277. package/dist/parser/tests/controlFlow/For.spec.js +33 -23
  278. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  279. package/dist/parser/tests/controlFlow/ForEach.spec.js +25 -20
  280. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  281. package/dist/parser/tests/controlFlow/If.spec.js +96 -94
  282. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  283. package/dist/parser/tests/controlFlow/While.spec.js +22 -16
  284. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  285. package/dist/parser/tests/expression/Additive.spec.js +8 -8
  286. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  287. package/dist/parser/tests/expression/ArrayLiterals.spec.js +58 -21
  288. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  289. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +62 -21
  290. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  291. package/dist/parser/tests/expression/Boolean.spec.js +8 -8
  292. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  293. package/dist/parser/tests/expression/Call.spec.js +129 -21
  294. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  295. package/dist/parser/tests/expression/Exponential.spec.js +5 -5
  296. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  297. package/dist/parser/tests/expression/Function.spec.js +36 -36
  298. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  299. package/dist/parser/tests/expression/Indexing.spec.js +92 -22
  300. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  301. package/dist/parser/tests/expression/Multiplicative.spec.js +9 -9
  302. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  303. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -59
  304. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  305. package/dist/parser/tests/expression/PrefixUnary.spec.js +12 -12
  306. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  307. package/dist/parser/tests/expression/Primary.spec.js +12 -12
  308. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  309. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
  310. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  311. package/dist/parser/tests/expression/Relational.spec.js +13 -13
  312. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  313. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
  314. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  315. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +96 -57
  316. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  317. package/dist/parser/tests/expression/TernaryExpression.spec.js +89 -89
  318. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  319. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  320. package/dist/parser/tests/expression/TypeExpression.spec.js +127 -0
  321. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  322. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  323. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  324. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  325. package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
  326. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  327. package/dist/parser/tests/statement/ConstStatement.spec.js +82 -33
  328. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  329. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  330. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  331. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  332. package/dist/parser/tests/statement/Declaration.spec.js +19 -19
  333. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  334. package/dist/parser/tests/statement/Dim.spec.js +22 -22
  335. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  336. package/dist/parser/tests/statement/Enum.spec.js +98 -302
  337. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  338. package/dist/parser/tests/statement/For.spec.js +9 -10
  339. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  340. package/dist/parser/tests/statement/ForEach.spec.js +8 -9
  341. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  342. package/dist/parser/tests/statement/Function.spec.js +44 -35
  343. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  344. package/dist/parser/tests/statement/Goto.spec.js +5 -5
  345. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  346. package/dist/parser/tests/statement/Increment.spec.js +20 -20
  347. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  348. package/dist/parser/tests/statement/InterfaceStatement.spec.js +30 -196
  349. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  350. package/dist/parser/tests/statement/LibraryStatement.spec.js +11 -11
  351. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  352. package/dist/parser/tests/statement/Misc.spec.js +16 -78
  353. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  354. package/dist/parser/tests/statement/PrintStatement.spec.js +36 -34
  355. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  356. package/dist/parser/tests/statement/ReturnStatement.spec.js +14 -12
  357. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  358. package/dist/parser/tests/statement/Set.spec.js +48 -35
  359. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  360. package/dist/parser/tests/statement/Stop.spec.js +6 -6
  361. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  362. package/dist/parser/tests/statement/Throw.spec.js +6 -6
  363. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  364. package/dist/parser/tests/statement/TryCatch.spec.js +18 -16
  365. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  366. package/dist/preprocessor/Manifest.d.ts +1 -1
  367. package/dist/preprocessor/Manifest.js +2 -2
  368. package/dist/preprocessor/Manifest.js.map +1 -1
  369. package/dist/preprocessor/Manifest.spec.js +8 -8
  370. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  371. package/dist/preprocessor/Preprocessor.d.ts +5 -6
  372. package/dist/preprocessor/Preprocessor.js +5 -5
  373. package/dist/preprocessor/Preprocessor.js.map +1 -1
  374. package/dist/preprocessor/Preprocessor.spec.js +25 -25
  375. package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
  376. package/dist/preprocessor/PreprocessorParser.d.ts +1 -1
  377. package/dist/preprocessor/PreprocessorParser.js +7 -1
  378. package/dist/preprocessor/PreprocessorParser.js.map +1 -1
  379. package/dist/preprocessor/PreprocessorParser.spec.js +13 -13
  380. package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
  381. package/dist/roku-types/data.json +5892 -10081
  382. package/dist/roku-types/index.d.ts +622 -1719
  383. package/dist/types/ArrayType.d.ts +10 -9
  384. package/dist/types/ArrayType.js +65 -60
  385. package/dist/types/ArrayType.js.map +1 -1
  386. package/dist/types/ArrayType.spec.js +36 -68
  387. package/dist/types/ArrayType.spec.js.map +1 -1
  388. package/dist/types/AssociativeArrayType.d.ts +11 -0
  389. package/dist/types/AssociativeArrayType.js +52 -0
  390. package/dist/types/AssociativeArrayType.js.map +1 -0
  391. package/dist/types/BaseFunctionType.d.ts +9 -0
  392. package/dist/types/BaseFunctionType.js +25 -0
  393. package/dist/types/BaseFunctionType.js.map +1 -0
  394. package/dist/types/BooleanType.d.ts +8 -5
  395. package/dist/types/BooleanType.js +14 -7
  396. package/dist/types/BooleanType.js.map +1 -1
  397. package/dist/types/BooleanType.spec.js +10 -6
  398. package/dist/types/BooleanType.spec.js.map +1 -1
  399. package/dist/types/BscType.d.ts +32 -21
  400. package/dist/types/BscType.js +118 -21
  401. package/dist/types/BscType.js.map +1 -1
  402. package/dist/types/BscTypeKind.d.ts +25 -0
  403. package/dist/types/BscTypeKind.js +30 -0
  404. package/dist/types/BscTypeKind.js.map +1 -0
  405. package/dist/types/BuiltInInterfaceAdder.d.ts +23 -0
  406. package/dist/types/BuiltInInterfaceAdder.js +171 -0
  407. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  408. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  409. package/dist/types/BuiltInInterfaceAdder.spec.js +116 -0
  410. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  411. package/dist/types/ClassType.d.ts +17 -0
  412. package/dist/types/ClassType.js +58 -0
  413. package/dist/types/ClassType.js.map +1 -0
  414. package/dist/types/ClassType.spec.d.ts +1 -0
  415. package/dist/types/ClassType.spec.js +77 -0
  416. package/dist/types/ClassType.spec.js.map +1 -0
  417. package/dist/types/ComponentType.d.ts +26 -0
  418. package/dist/types/ComponentType.js +83 -0
  419. package/dist/types/ComponentType.js.map +1 -0
  420. package/dist/types/DoubleType.d.ts +8 -5
  421. package/dist/types/DoubleType.js +18 -16
  422. package/dist/types/DoubleType.js.map +1 -1
  423. package/dist/types/DoubleType.spec.js +12 -6
  424. package/dist/types/DoubleType.spec.js.map +1 -1
  425. package/dist/types/DynamicType.d.ts +9 -5
  426. package/dist/types/DynamicType.js +15 -4
  427. package/dist/types/DynamicType.js.map +1 -1
  428. package/dist/types/DynamicType.spec.js +16 -5
  429. package/dist/types/DynamicType.spec.js.map +1 -1
  430. package/dist/types/EnumType.d.ts +30 -12
  431. package/dist/types/EnumType.js +43 -17
  432. package/dist/types/EnumType.js.map +1 -1
  433. package/dist/types/EnumType.spec.d.ts +1 -0
  434. package/dist/types/EnumType.spec.js +33 -0
  435. package/dist/types/EnumType.spec.js.map +1 -0
  436. package/dist/types/FloatType.d.ts +8 -5
  437. package/dist/types/FloatType.js +18 -16
  438. package/dist/types/FloatType.js.map +1 -1
  439. package/dist/types/FloatType.spec.js +4 -6
  440. package/dist/types/FloatType.spec.js.map +1 -1
  441. package/dist/types/FunctionType.d.ts +13 -8
  442. package/dist/types/FunctionType.js +30 -14
  443. package/dist/types/FunctionType.js.map +1 -1
  444. package/dist/types/InheritableType.d.ts +28 -0
  445. package/dist/types/InheritableType.js +152 -0
  446. package/dist/types/InheritableType.js.map +1 -0
  447. package/dist/types/IntegerType.d.ts +8 -5
  448. package/dist/types/IntegerType.js +18 -16
  449. package/dist/types/IntegerType.js.map +1 -1
  450. package/dist/types/IntegerType.spec.js +8 -6
  451. package/dist/types/IntegerType.spec.js.map +1 -1
  452. package/dist/types/InterfaceType.d.ts +12 -13
  453. package/dist/types/InterfaceType.js +20 -48
  454. package/dist/types/InterfaceType.js.map +1 -1
  455. package/dist/types/InterfaceType.spec.js +90 -56
  456. package/dist/types/InterfaceType.spec.js.map +1 -1
  457. package/dist/types/InvalidType.d.ts +7 -5
  458. package/dist/types/InvalidType.js +13 -7
  459. package/dist/types/InvalidType.js.map +1 -1
  460. package/dist/types/InvalidType.spec.js +8 -6
  461. package/dist/types/InvalidType.spec.js.map +1 -1
  462. package/dist/types/LongIntegerType.d.ts +8 -5
  463. package/dist/types/LongIntegerType.js +17 -15
  464. package/dist/types/LongIntegerType.js.map +1 -1
  465. package/dist/types/LongIntegerType.spec.js +10 -6
  466. package/dist/types/LongIntegerType.spec.js.map +1 -1
  467. package/dist/types/NamespaceType.d.ts +12 -0
  468. package/dist/types/NamespaceType.js +28 -0
  469. package/dist/types/NamespaceType.js.map +1 -0
  470. package/dist/types/ObjectType.d.ts +9 -8
  471. package/dist/types/ObjectType.js +21 -11
  472. package/dist/types/ObjectType.js.map +1 -1
  473. package/dist/types/ObjectType.spec.js +3 -3
  474. package/dist/types/ObjectType.spec.js.map +1 -1
  475. package/dist/types/ReferenceType.d.ts +63 -0
  476. package/dist/types/ReferenceType.js +423 -0
  477. package/dist/types/ReferenceType.js.map +1 -0
  478. package/dist/types/ReferenceType.spec.d.ts +1 -0
  479. package/dist/types/ReferenceType.spec.js +137 -0
  480. package/dist/types/ReferenceType.spec.js.map +1 -0
  481. package/dist/types/StringType.d.ts +11 -5
  482. package/dist/types/StringType.js +18 -7
  483. package/dist/types/StringType.js.map +1 -1
  484. package/dist/types/StringType.spec.js +3 -5
  485. package/dist/types/StringType.spec.js.map +1 -1
  486. package/dist/types/TypedFunctionType.d.ts +22 -17
  487. package/dist/types/TypedFunctionType.js +78 -60
  488. package/dist/types/TypedFunctionType.js.map +1 -1
  489. package/dist/types/TypedFunctionType.spec.js +105 -20
  490. package/dist/types/TypedFunctionType.spec.js.map +1 -1
  491. package/dist/types/UninitializedType.d.ts +8 -6
  492. package/dist/types/UninitializedType.js +13 -7
  493. package/dist/types/UninitializedType.js.map +1 -1
  494. package/dist/types/UnionType.d.ts +20 -0
  495. package/dist/types/UnionType.js +123 -0
  496. package/dist/types/UnionType.js.map +1 -0
  497. package/dist/types/UnionType.spec.d.ts +1 -0
  498. package/dist/types/UnionType.spec.js +130 -0
  499. package/dist/types/UnionType.spec.js.map +1 -0
  500. package/dist/types/VoidType.d.ts +8 -5
  501. package/dist/types/VoidType.js +14 -7
  502. package/dist/types/VoidType.js.map +1 -1
  503. package/dist/types/VoidType.spec.js +3 -3
  504. package/dist/types/VoidType.spec.js.map +1 -1
  505. package/dist/types/helper.spec.d.ts +1 -0
  506. package/dist/types/helper.spec.js +145 -0
  507. package/dist/types/helper.spec.js.map +1 -0
  508. package/dist/types/helpers.d.ts +19 -37
  509. package/dist/types/helpers.js +159 -99
  510. package/dist/types/helpers.js.map +1 -1
  511. package/dist/types/index.d.ts +22 -0
  512. package/dist/types/index.js +39 -0
  513. package/dist/types/index.js.map +1 -0
  514. package/dist/util.d.ts +143 -139
  515. package/dist/util.js +864 -385
  516. package/dist/util.js.map +1 -1
  517. package/dist/validators/ClassValidator.d.ts +8 -25
  518. package/dist/validators/ClassValidator.js +99 -179
  519. package/dist/validators/ClassValidator.js.map +1 -1
  520. package/package.json +165 -152
  521. package/dist/astUtils/AstEditor.js.map +0 -1
  522. package/dist/astUtils/AstEditor.spec.js.map +0 -1
  523. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +0 -1
  524. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -32
  525. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
  526. package/dist/parser/SGTypes.spec.js +0 -351
  527. package/dist/parser/SGTypes.spec.js.map +0 -1
  528. package/dist/types/CustomType.d.ts +0 -12
  529. package/dist/types/CustomType.js +0 -44
  530. package/dist/types/CustomType.js.map +0 -1
  531. package/dist/types/LazyType.d.ts +0 -16
  532. package/dist/types/LazyType.js +0 -44
  533. package/dist/types/LazyType.js.map +0 -1
  534. /package/dist/astUtils/{AstEditor.spec.d.ts → Editor.spec.d.ts} +0 -0
  535. /package/dist/bscPlugin/{transpile/BrsFilePreTranspileProcessor.spec.d.ts → completions/CompletionsProcessor.spec.d.ts} +0 -0
  536. /package/dist/{parser/SGTypes.spec.d.ts → bscPlugin/definition/DefinitionProvider.spec.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const chai_1 = require("chai");
3
+ const chai_config_spec_1 = require("../../../chai-config.spec");
4
4
  const Expression_1 = require("../../Expression");
5
5
  const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
6
6
  const testHelpers_spec_1 = require("../../../testHelpers.spec");
@@ -13,13 +13,13 @@ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol
13
13
  const visitors_1 = require("../../../astUtils/visitors");
14
14
  const reflection_1 = require("../../../astUtils/reflection");
15
15
  const vscode_uri_1 = require("vscode-uri");
16
+ const testHelpers_spec_2 = require("../../../testHelpers.spec");
16
17
  const sinon = (0, sinon_1.createSandbox)();
17
18
  describe('EnumStatement', () => {
18
- let rootDir = (0, util_1.standardizePath) `${process.cwd()}/.tmp/rootDir`;
19
19
  let program;
20
- let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, rootDir]);
20
+ let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, testHelpers_spec_2.rootDir]);
21
21
  beforeEach(() => {
22
- program = new Program_1.Program({ rootDir: rootDir, sourceMap: true });
22
+ program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, sourceMap: true });
23
23
  });
24
24
  afterEach(() => {
25
25
  sinon.restore();
@@ -31,7 +31,7 @@ describe('EnumStatement', () => {
31
31
  end enum
32
32
  `, { mode: Parser_1.ParseMode.BrighterScript });
33
33
  (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
34
- (0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
34
+ (0, chai_config_spec_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
35
35
  });
36
36
  it('supports annotations above', () => {
37
37
  const parser = Parser_1.Parser.parse(`
@@ -40,7 +40,7 @@ describe('EnumStatement', () => {
40
40
  end enum
41
41
  `, { mode: Parser_1.ParseMode.BrighterScript });
42
42
  (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
43
- (0, chai_1.expect)(parser.ast.statements[0].annotations[0].name).to.eql('someAnnotation');
43
+ (0, chai_config_spec_1.expect)(parser.ast.statements[0].annotations[0].name).to.eql('someAnnotation');
44
44
  });
45
45
  it('constructs when missing enum name', () => {
46
46
  const parser = Parser_1.Parser.parse(`
@@ -50,7 +50,7 @@ describe('EnumStatement', () => {
50
50
  (0, testHelpers_spec_1.expectDiagnostics)(parser, [
51
51
  DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier()
52
52
  ]);
53
- (0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
53
+ (0, chai_config_spec_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
54
54
  });
55
55
  it('collects uninitialized members', () => {
56
56
  const parser = Parser_1.Parser.parse(`
@@ -62,7 +62,7 @@ describe('EnumStatement', () => {
62
62
  end enum
63
63
  `, { mode: Parser_1.ParseMode.BrighterScript });
64
64
  (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
65
- (0, chai_1.expect)(parser.ast.statements[0].getMembers().map(x => x.tokens.name.text)).to.eql([
65
+ (0, chai_config_spec_1.expect)(parser.ast.statements[0].getMembers().map(x => x.tokens.name.text)).to.eql([
66
66
  'up',
67
67
  'down',
68
68
  'left',
@@ -86,7 +86,7 @@ describe('EnumStatement', () => {
86
86
  Expression_1.LiteralExpression,
87
87
  Expression_1.LiteralExpression
88
88
  ]);
89
- (0, chai_1.expect)(values.map(x => x.token.text)).to.eql([
89
+ (0, chai_config_spec_1.expect)(values.map(x => x.tokens.value.text)).to.eql([
90
90
  '1',
91
91
  '2',
92
92
  '3',
@@ -110,7 +110,7 @@ describe('EnumStatement', () => {
110
110
  Expression_1.LiteralExpression,
111
111
  Expression_1.LiteralExpression
112
112
  ]);
113
- (0, chai_1.expect)(values.map(x => x.token.text)).to.eql([
113
+ (0, chai_config_spec_1.expect)(values.map(x => x.tokens.value.text)).to.eql([
114
114
  '"u"',
115
115
  '"d"',
116
116
  '"l"',
@@ -141,8 +141,8 @@ describe('EnumStatement', () => {
141
141
  end interface
142
142
  `, { mode: Parser_1.ParseMode.BrighterScript });
143
143
  (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
144
- (0, chai_1.expect)(parser.statements[0]).instanceof(Statement_1.EnumStatement);
145
- (0, chai_1.expect)(parser.statements[1]).instanceof(Statement_1.InterfaceStatement);
144
+ (0, chai_config_spec_1.expect)(parser.statements[0]).instanceof(Statement_1.EnumStatement);
145
+ (0, chai_config_spec_1.expect)(parser.statements[1]).instanceof(Statement_1.InterfaceStatement);
146
146
  });
147
147
  it('allows enum at bottom of file', () => {
148
148
  const parser = Parser_1.Parser.parse(`
@@ -155,11 +155,11 @@ describe('EnumStatement', () => {
155
155
  end enum
156
156
  `, { mode: Parser_1.ParseMode.BrighterScript });
157
157
  (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
158
- (0, chai_1.expect)(parser.statements[0]).instanceof(Statement_1.InterfaceStatement);
159
- (0, chai_1.expect)(parser.statements[1]).instanceof(Statement_1.EnumStatement);
158
+ (0, chai_config_spec_1.expect)(parser.statements[0]).instanceof(Statement_1.InterfaceStatement);
159
+ (0, chai_config_spec_1.expect)(parser.statements[1]).instanceof(Statement_1.EnumStatement);
160
160
  });
161
161
  it('allows enum in namespace', () => {
162
- const parser = Parser_1.Parser.parse(`
162
+ const file = program.setFile('source/types.bs', `
163
163
  namespace entities
164
164
  enum Person
165
165
  name
@@ -169,14 +169,24 @@ describe('EnumStatement', () => {
169
169
  enum Direction
170
170
  up
171
171
  end enum
172
- `, { mode: Parser_1.ParseMode.BrighterScript });
173
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
174
- (0, chai_1.expect)(parser.references.enumStatements.map(x => x.fullName)).to.eql([
172
+ `);
173
+ program.validate();
174
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
175
+ (0, chai_config_spec_1.expect)(file.ast.findChildren(reflection_1.isEnumStatement).map(x => x.fullName)).to.eql([
175
176
  'entities.Person',
176
177
  'Direction'
177
178
  ]);
178
179
  });
179
180
  describe('validation', () => {
181
+ it('allows enums named `optional`', () => {
182
+ program.setFile('source/main.bs', `
183
+ enum optional
184
+ thing = 1
185
+ end enum
186
+ `);
187
+ program.validate();
188
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
189
+ });
180
190
  it('catches duplicate enums from same file', () => {
181
191
  program.setFile('source/main.bs', `
182
192
  enum Direction
@@ -188,8 +198,8 @@ describe('EnumStatement', () => {
188
198
  end enum
189
199
  `);
190
200
  program.validate();
191
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
192
- location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${rootDir}/source/main.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
201
+ (0, testHelpers_spec_1.expectDiagnosticsIncludes)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
202
+ location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
193
203
  message: 'Enum declared here'
194
204
  }] })]);
195
205
  });
@@ -205,8 +215,8 @@ describe('EnumStatement', () => {
205
215
  end enum
206
216
  `);
207
217
  program.validate();
208
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
209
- location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${rootDir}/source/lib.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
218
+ (0, testHelpers_spec_1.expectDiagnosticsIncludes)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateEnumDeclaration('source', 'Direction')), { relatedInformation: [{
219
+ location: util_1.util.createLocation(vscode_uri_1.URI.file((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/lib.bs`).toString(), util_1.util.createRange(1, 21, 1, 30)),
210
220
  message: 'Enum declared here'
211
221
  }] })]);
212
222
  });
@@ -299,6 +309,16 @@ describe('EnumStatement', () => {
299
309
  program.validate();
300
310
  (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType('integer')), { range: util_1.util.createRange(2, 33, 2, 35) })]);
301
311
  });
312
+ it('considers -1 to be an integer', () => {
313
+ program.setFile('source/main.bs', `
314
+ enum AppConfig
315
+ alpha = 1
316
+ beta = -1
317
+ end enum
318
+ `);
319
+ program.validate();
320
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
321
+ });
302
322
  it('flags missing value for string enum where string is not first item', () => {
303
323
  program.setFile('source/main.bs', `
304
324
  enum Direction
@@ -356,9 +376,9 @@ describe('EnumStatement', () => {
356
376
  walkMode: visitors_1.WalkMode.visitStatements,
357
377
  cancel: cancel.token
358
378
  });
359
- (0, chai_1.expect)(firstEnum).to.exist;
379
+ (0, chai_config_spec_1.expect)(firstEnum).to.exist;
360
380
  const values = firstEnum.getMemberValueMap();
361
- (0, chai_1.expect)([...values].reduce((prev, [key, value]) => {
381
+ (0, chai_config_spec_1.expect)([...values].reduce((prev, [key, value]) => {
362
382
  prev[key] = value;
363
383
  return prev;
364
384
  }, {})).to.eql(expected);
@@ -412,8 +432,22 @@ describe('EnumStatement', () => {
412
432
  });
413
433
  });
414
434
  describe('transpile', () => {
415
- it('includes original value when no value could be computed', () => {
416
- testTranspile(`
435
+ it('transpiles negative number', async () => {
436
+ await testTranspile(`
437
+ sub main()
438
+ print Direction.up
439
+ end sub
440
+ enum Direction
441
+ up = -1
442
+ end enum
443
+ `, `
444
+ sub main()
445
+ print -1
446
+ end sub
447
+ `, undefined, undefined, false);
448
+ });
449
+ it('includes original value when no value could be computed', async () => {
450
+ await testTranspile(`
417
451
  sub main()
418
452
  print Direction.up
419
453
  end sub
@@ -426,8 +460,8 @@ describe('EnumStatement', () => {
426
460
  end sub
427
461
  `, undefined, undefined, false);
428
462
  });
429
- it('writes all literal values as-is (even if there are errors)', () => {
430
- testTranspile(`
463
+ it('writes all literal values as-is (even if there are errors)', async () => {
464
+ await testTranspile(`
431
465
  sub main()
432
466
  print Direction.up
433
467
  print Direction.down
@@ -452,8 +486,8 @@ describe('EnumStatement', () => {
452
486
  end sub
453
487
  `, 'trim', undefined, false);
454
488
  });
455
- it('supports default-as-integer', () => {
456
- testTranspile(`
489
+ it('supports default-as-integer', async () => {
490
+ await testTranspile(`
457
491
  enum Direction
458
492
  up
459
493
  down
@@ -469,8 +503,8 @@ describe('EnumStatement', () => {
469
503
  end sub
470
504
  `);
471
505
  });
472
- it('supports string enums', () => {
473
- testTranspile(`
506
+ it('supports string enums', async () => {
507
+ await testTranspile(`
474
508
  enum Direction
475
509
  up = "up"
476
510
  down = "down"
@@ -486,7 +520,23 @@ describe('EnumStatement', () => {
486
520
  end sub
487
521
  `);
488
522
  });
489
- it('replaces enum values from separate file with literals', () => {
523
+ it('recognizes namespace-relative enums', () => {
524
+ program.setFile('source/main.bs', `
525
+ namespace MyNamespace
526
+ enum MyEnum
527
+ val1
528
+ val2
529
+ end enum
530
+
531
+ function foo() as MyEnum
532
+ return MyEnum.val1
533
+ end function
534
+ end namespace
535
+ `);
536
+ program.validate();
537
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
538
+ });
539
+ it('replaces enum values from separate file with literals', async () => {
490
540
  program.setFile('source/enum.bs', `
491
541
  enum CharacterType
492
542
  Human = "Human"
@@ -499,7 +549,7 @@ describe('EnumStatement', () => {
499
549
  end enum
500
550
  end namespace
501
551
  `);
502
- testTranspile(`
552
+ await testTranspile(`
503
553
  sub test()
504
554
  print CharacterType.Human
505
555
  print CharacterType.Zombie
@@ -515,8 +565,8 @@ describe('EnumStatement', () => {
515
565
  end sub
516
566
  `);
517
567
  });
518
- it('replaces enums in if statements', () => {
519
- testTranspile(`
568
+ it('replaces enums in if statements', async () => {
569
+ await testTranspile(`
520
570
  enum CharacterType
521
571
  zombie = "zombie"
522
572
  end enum
@@ -533,262 +583,8 @@ describe('EnumStatement', () => {
533
583
  end sub
534
584
  `);
535
585
  });
536
- });
537
- describe('completions', () => {
538
- it('does not crash when completing enum members with unsupported values', () => {
539
- program.setFile('source/main.bs', `
540
- sub Main()
541
- direction.obj
542
- end sub
543
- enum Direction
544
- up
545
- down
546
- obj = {}
547
- end enum
548
- `);
549
- // direction.|obj
550
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
551
- label: 'up',
552
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
553
- }, {
554
- label: 'down',
555
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
556
- }, {
557
- label: 'obj',
558
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
559
- }]);
560
- });
561
- it('gets enum statement completions from global enum', () => {
562
- program.setFile('source/main.bs', `
563
- sub Main()
564
- direction.down
565
- end sub
566
- enum Direction
567
- up
568
- down
569
- end enum
570
- `);
571
- // |direction.down
572
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 20)), [{
573
- label: 'Direction',
574
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
575
- }]);
576
- // dire|ction.down
577
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 24)), [{
578
- label: 'Direction',
579
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
580
- }]);
581
- // direction|.down
582
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 29)), [{
583
- label: 'Direction',
584
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
585
- }]);
586
- });
587
- it('gets enum member completions from global enum', () => {
588
- program.setFile('source/main.bs', `
589
- sub Main()
590
- direction.down
591
- end sub
592
- enum Direction
593
- up
594
- down
595
- end enum
596
- `);
597
- // direction.|down
598
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
599
- label: 'up',
600
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
601
- }, {
602
- label: 'down',
603
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
604
- }]);
605
- // direction.do|wn
606
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 32)), [{
607
- label: 'up',
608
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
609
- }, {
610
- label: 'down',
611
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
612
- }]);
613
- // direction.down|
614
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 34)), [{
615
- label: 'up',
616
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
617
- }, {
618
- label: 'down',
619
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
620
- }]);
621
- });
622
- it('gets enum statement completions from namespaced enum', () => {
623
- program.setFile('source/main.bs', `
624
- sub Main()
625
- enums.direction.down
626
- end sub
627
- namespace enums
628
- enum Direction
629
- up
630
- down
631
- end enum
632
- end namespace
633
- `);
634
- // enums.|direction.down
635
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 26)), [{
636
- label: 'Direction',
637
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
638
- }]);
639
- // enums.dire|ction.down
640
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
641
- label: 'Direction',
642
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
643
- }]);
644
- // enums.direction|.down
645
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 35)), [{
646
- label: 'Direction',
647
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
648
- }]);
649
- });
650
- it('gets enum member completions from namespaced enum', () => {
651
- program.setFile('source/main.bs', `
652
- sub Main()
653
- enums.direction.down
654
- end sub
655
- namespace enums
656
- enum Direction
657
- up
658
- down
659
- end enum
660
- end namespace
661
- `);
662
- // enums.direction.|down
663
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 36)), [{
664
- label: 'up',
665
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
666
- }, {
667
- label: 'down',
668
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
669
- }]);
670
- // enums.direction.do|wn
671
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 38)), [{
672
- label: 'up',
673
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
674
- }, {
675
- label: 'down',
676
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
677
- }]);
678
- // enums.direction.down|
679
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 40)), [{
680
- label: 'up',
681
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
682
- }, {
683
- label: 'down',
684
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
685
- }]);
686
- });
687
- it('excludes enum member completions from namespace enum', () => {
688
- program.setFile('source/main.bs', `
689
- sub Main()
690
- direction.ba
691
- end sub
692
- namespace enums
693
- enum Direction
694
- up
695
- down
696
- end enum
697
- end namespace
698
- `);
699
- //should NOT find Direction because it's not directly available at the top level (you need to go through `enums.` to get at it)
700
- // dire|ction.down
701
- (0, testHelpers_spec_1.expectCompletionsExcludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 24)), [{
702
- label: 'Direction',
703
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
704
- }]);
705
- });
706
- it('infers namespace for enum statement completions', () => {
707
- program.setFile('source/main.bs', `
708
- namespace enums
709
- sub Main()
710
- direction.down
711
- end sub
712
- enum Direction
713
- up
714
- down
715
- end enum
716
- end namespace
717
- enum Logic
718
- yes
719
- no
720
- end enum
721
- `);
722
- // dire|ction.down
723
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 33)), [{
724
- label: 'Direction',
725
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
726
- }, {
727
- label: 'Logic',
728
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
729
- }]);
730
- });
731
- it('infers namespace for enum member completions', () => {
732
- program.setFile('source/main.bs', `
733
- namespace enums
734
- sub Main()
735
- direction.down
736
- end sub
737
- enum Direction
738
- up
739
- down
740
- end enum
741
- end namespace
742
- `);
743
- // direction.do|wn
744
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 36)), [{
745
- label: 'up',
746
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
747
- }, {
748
- label: 'down',
749
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
750
- }]);
751
- });
752
- it('supports explicit namespace for enum statement completions', () => {
753
- program.setFile('source/main.bs', `
754
- namespace enums
755
- sub Main()
756
- enums.direction.down
757
- end sub
758
- enum Direction
759
- up
760
- down
761
- end enum
762
- end namespace
763
- `);
764
- // enums.dire|ction.down
765
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 38)), [{
766
- label: 'Direction',
767
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
768
- }]);
769
- });
770
- it('supports explicit namespace for enum statement completions', () => {
771
- program.setFile('source/main.bs', `
772
- namespace logger
773
- sub log()
774
- enums.direction.down
775
- end sub
776
- end namespace
777
- namespace enums
778
- enum Direction
779
- up
780
- down
781
- end enum
782
- end namespace
783
- `);
784
- // enums.dire|ction.down
785
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 38)), [{
786
- label: 'Direction',
787
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
788
- }]);
789
- });
790
- it('handles both sides of a logical expression', () => {
791
- testTranspile(`
586
+ it('handles both sides of a logical expression', async () => {
587
+ await testTranspile(`
792
588
  sub main()
793
589
  dir = m.direction = Direction.up
794
590
  dir = Direction.up = m.direction
@@ -804,8 +600,8 @@ describe('EnumStatement', () => {
804
600
  end sub
805
601
  `);
806
602
  });
807
- it('handles when found in boolean expressions', () => {
808
- testTranspile(`
603
+ it('handles when found in boolean expressions', async () => {
604
+ await testTranspile(`
809
605
  sub main()
810
606
  result = Direction.up = "up" or Direction.down = "down" and Direction.up = Direction.down
811
607
  end sub
@@ -819,8 +615,8 @@ describe('EnumStatement', () => {
819
615
  end sub
820
616
  `);
821
617
  });
822
- it('replaces enum values in if statements', () => {
823
- testTranspile(`
618
+ it('replaces enum values in if statements', async () => {
619
+ await testTranspile(`
824
620
  sub main()
825
621
  if m.direction = Direction.up
826
622
  print Direction.up
@@ -838,8 +634,8 @@ describe('EnumStatement', () => {
838
634
  end sub
839
635
  `);
840
636
  });
841
- it('replaces enum values in function default parameter value expressions', () => {
842
- testTranspile(`
637
+ it('replaces enum values in function default parameter value expressions', async () => {
638
+ await testTranspile(`
843
639
  sub speak(dir = Direction.up)
844
640
  end sub
845
641
  enum Direction
@@ -850,8 +646,8 @@ describe('EnumStatement', () => {
850
646
  end sub
851
647
  `);
852
648
  });
853
- it('replaces enum values in for loops', () => {
854
- testTranspile(`
649
+ it('replaces enum values in for loops', async () => {
650
+ await testTranspile(`
855
651
  sub main()
856
652
  for i = Loop.start to Loop.end step Loop.step
857
653
  end for
@@ -868,8 +664,8 @@ describe('EnumStatement', () => {
868
664
  end sub
869
665
  `);
870
666
  });
871
- it('transpiles enum values when used in complex expressions', () => {
872
- testTranspile(`
667
+ it('transpiles enum values when used in complex expressions', async () => {
668
+ await testTranspile(`
873
669
  sub main()
874
670
  print Direction.up.toStr()
875
671
  end sub