brighterscript 0.72.1 → 0.72.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/package.json +17 -14
  2. package/dist/astUtils/AstEditor.spec.d.ts +0 -1
  3. package/dist/astUtils/AstEditor.spec.js +0 -254
  4. package/dist/astUtils/AstEditor.spec.js.map +0 -1
  5. package/dist/astUtils/creators.spec.d.ts +0 -1
  6. package/dist/astUtils/creators.spec.js +0 -21
  7. package/dist/astUtils/creators.spec.js.map +0 -1
  8. package/dist/astUtils/reflection.spec.d.ts +0 -1
  9. package/dist/astUtils/reflection.spec.js +0 -308
  10. package/dist/astUtils/reflection.spec.js.map +0 -1
  11. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  12. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  13. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  14. package/dist/astUtils/visitors.spec.d.ts +0 -1
  15. package/dist/astUtils/visitors.spec.js +0 -1197
  16. package/dist/astUtils/visitors.spec.js.map +0 -1
  17. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  18. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -1237
  19. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  20. package/dist/bscPlugin/definition/DefinitionProvider.spec.d.ts +0 -1
  21. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +0 -171
  22. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +0 -1
  23. package/dist/bscPlugin/hover/HoverProcessor.spec.d.ts +0 -1
  24. package/dist/bscPlugin/hover/HoverProcessor.spec.js +0 -201
  25. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +0 -1
  26. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +0 -1
  27. package/dist/bscPlugin/references/ReferencesProvider.spec.js +0 -51
  28. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +0 -1
  29. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.d.ts +0 -1
  30. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js +0 -298
  31. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.spec.js.map +0 -1
  32. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +0 -1
  33. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -399
  34. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +0 -1
  35. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +0 -1
  36. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +0 -290
  37. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +0 -1
  38. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +0 -1
  39. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +0 -245
  40. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +0 -1
  41. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts +0 -1
  42. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -46
  43. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
  44. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +0 -1
  45. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +0 -702
  46. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +0 -1
  47. package/dist/common/Sequencer.spec.d.ts +0 -1
  48. package/dist/common/Sequencer.spec.js +0 -75
  49. package/dist/common/Sequencer.spec.js.map +0 -1
  50. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  51. package/dist/files/BrsFile.Class.spec.js +0 -1805
  52. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  53. package/dist/files/BrsFile.spec.d.ts +0 -1
  54. package/dist/files/BrsFile.spec.js +0 -4611
  55. package/dist/files/BrsFile.spec.js.map +0 -1
  56. package/dist/files/XmlFile.spec.d.ts +0 -1
  57. package/dist/files/XmlFile.spec.js +0 -1219
  58. package/dist/files/XmlFile.spec.js.map +0 -1
  59. package/dist/files/tests/imports.spec.d.ts +0 -1
  60. package/dist/files/tests/imports.spec.js +0 -241
  61. package/dist/files/tests/imports.spec.js.map +0 -1
  62. package/dist/files/tests/optionalChaning.spec.d.ts +0 -1
  63. package/dist/files/tests/optionalChaning.spec.js +0 -152
  64. package/dist/files/tests/optionalChaning.spec.js.map +0 -1
  65. package/dist/lexer/Character.spec.d.ts +0 -1
  66. package/dist/lexer/Character.spec.js +0 -27
  67. package/dist/lexer/Character.spec.js.map +0 -1
  68. package/dist/lexer/Lexer.spec.d.ts +0 -1
  69. package/dist/lexer/Lexer.spec.js +0 -1300
  70. package/dist/lexer/Lexer.spec.js.map +0 -1
  71. package/dist/lsp/ActionQueue.spec.d.ts +0 -1
  72. package/dist/lsp/ActionQueue.spec.js +0 -80
  73. package/dist/lsp/ActionQueue.spec.js.map +0 -1
  74. package/dist/lsp/DocumentManager.spec.d.ts +0 -1
  75. package/dist/lsp/DocumentManager.spec.js +0 -103
  76. package/dist/lsp/DocumentManager.spec.js.map +0 -1
  77. package/dist/lsp/PathFilterer.spec.d.ts +0 -1
  78. package/dist/lsp/PathFilterer.spec.js +0 -182
  79. package/dist/lsp/PathFilterer.spec.js.map +0 -1
  80. package/dist/lsp/Project.spec.d.ts +0 -1
  81. package/dist/lsp/Project.spec.js +0 -400
  82. package/dist/lsp/Project.spec.js.map +0 -1
  83. package/dist/lsp/ProjectManager.spec.d.ts +0 -1
  84. package/dist/lsp/ProjectManager.spec.js +0 -1183
  85. package/dist/lsp/ProjectManager.spec.js.map +0 -1
  86. package/dist/lsp/worker/MessageHandler.spec.d.ts +0 -1
  87. package/dist/lsp/worker/MessageHandler.spec.js +0 -64
  88. package/dist/lsp/worker/MessageHandler.spec.js.map +0 -1
  89. package/dist/lsp/worker/WorkerPool.spec.d.ts +0 -1
  90. package/dist/lsp/worker/WorkerPool.spec.js +0 -59
  91. package/dist/lsp/worker/WorkerPool.spec.js.map +0 -1
  92. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +0 -2
  93. package/dist/lsp/worker/WorkerThreadProject.spec.js +0 -72
  94. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +0 -1
  95. package/dist/parser/AstNode.spec.d.ts +0 -1
  96. package/dist/parser/AstNode.spec.js +0 -1452
  97. package/dist/parser/AstNode.spec.js.map +0 -1
  98. package/dist/parser/Expression.spec.d.ts +0 -1
  99. package/dist/parser/Expression.spec.js +0 -40
  100. package/dist/parser/Expression.spec.js.map +0 -1
  101. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  102. package/dist/parser/Parser.Class.spec.js +0 -495
  103. package/dist/parser/Parser.Class.spec.js.map +0 -1
  104. package/dist/parser/Parser.spec.d.ts +0 -4
  105. package/dist/parser/Parser.spec.js +0 -1985
  106. package/dist/parser/Parser.spec.js.map +0 -1
  107. package/dist/parser/SGParser.spec.d.ts +0 -1
  108. package/dist/parser/SGParser.spec.js +0 -131
  109. package/dist/parser/SGParser.spec.js.map +0 -1
  110. package/dist/parser/Statement.spec.d.ts +0 -1
  111. package/dist/parser/Statement.spec.js +0 -118
  112. package/dist/parser/Statement.spec.js.map +0 -1
  113. package/dist/parser/tests/Parser.spec.d.ts +0 -19
  114. package/dist/parser/tests/Parser.spec.js +0 -38
  115. package/dist/parser/tests/Parser.spec.js.map +0 -1
  116. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  117. package/dist/parser/tests/controlFlow/For.spec.js +0 -208
  118. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  119. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  120. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -143
  121. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  122. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  123. package/dist/parser/tests/controlFlow/If.spec.js +0 -570
  124. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  125. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  126. package/dist/parser/tests/controlFlow/While.spec.js +0 -156
  127. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  128. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  129. package/dist/parser/tests/expression/Additive.spec.js +0 -99
  130. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  131. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  132. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -291
  133. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  134. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  135. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -401
  136. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  137. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  138. package/dist/parser/tests/expression/Boolean.spec.js +0 -83
  139. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  140. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  141. package/dist/parser/tests/expression/Call.spec.js +0 -242
  142. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  143. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  144. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  145. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  146. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  147. package/dist/parser/tests/expression/Function.spec.js +0 -403
  148. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  149. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  150. package/dist/parser/tests/expression/Indexing.spec.js +0 -289
  151. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  152. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  153. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  154. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  155. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  156. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -346
  157. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  158. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  159. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
  160. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  161. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  162. package/dist/parser/tests/expression/Primary.spec.js +0 -149
  163. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  164. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +0 -1
  165. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +0 -171
  166. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +0 -1
  167. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  168. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  169. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  170. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  171. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  172. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  173. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  174. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -389
  175. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  176. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  177. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -876
  178. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  179. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +0 -1
  180. package/dist/parser/tests/expression/UnaryExpression.spec.js +0 -52
  181. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +0 -1
  182. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  183. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  184. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  185. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +0 -1
  186. package/dist/parser/tests/statement/ConstStatement.spec.js +0 -708
  187. package/dist/parser/tests/statement/ConstStatement.spec.js.map +0 -1
  188. package/dist/parser/tests/statement/Continue.spec.d.ts +0 -1
  189. package/dist/parser/tests/statement/Continue.spec.js +0 -119
  190. package/dist/parser/tests/statement/Continue.spec.js.map +0 -1
  191. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  192. package/dist/parser/tests/statement/Declaration.spec.js +0 -108
  193. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  194. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  195. package/dist/parser/tests/statement/Dim.spec.js +0 -73
  196. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  197. package/dist/parser/tests/statement/Enum.spec.d.ts +0 -1
  198. package/dist/parser/tests/statement/Enum.spec.js +0 -1307
  199. package/dist/parser/tests/statement/Enum.spec.js.map +0 -1
  200. package/dist/parser/tests/statement/For.spec.d.ts +0 -1
  201. package/dist/parser/tests/statement/For.spec.js +0 -45
  202. package/dist/parser/tests/statement/For.spec.js.map +0 -1
  203. package/dist/parser/tests/statement/ForEach.spec.d.ts +0 -1
  204. package/dist/parser/tests/statement/ForEach.spec.js +0 -36
  205. package/dist/parser/tests/statement/ForEach.spec.js.map +0 -1
  206. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  207. package/dist/parser/tests/statement/Function.spec.js +0 -342
  208. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  209. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  210. package/dist/parser/tests/statement/Goto.spec.js +0 -51
  211. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  212. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  213. package/dist/parser/tests/statement/Increment.spec.js +0 -117
  214. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  215. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +0 -1
  216. package/dist/parser/tests/statement/InterfaceStatement.spec.js +0 -102
  217. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +0 -1
  218. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  219. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  220. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  221. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  222. package/dist/parser/tests/statement/Misc.spec.js +0 -335
  223. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  224. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  225. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -195
  226. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  227. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  228. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
  229. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  230. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  231. package/dist/parser/tests/statement/Set.spec.js +0 -218
  232. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  233. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  234. package/dist/parser/tests/statement/Stop.spec.js +0 -38
  235. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  236. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  237. package/dist/parser/tests/statement/Throw.spec.js +0 -35
  238. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  239. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  240. package/dist/parser/tests/statement/TryCatch.spec.js +0 -142
  241. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  242. package/dist/preprocessor/Manifest.spec.d.ts +0 -1
  243. package/dist/preprocessor/Manifest.spec.js +0 -80
  244. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  245. package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
  246. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  247. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  248. package/dist/preprocessor/PreprocessorParser.spec.d.ts +0 -1
  249. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  250. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  251. package/dist/types/ArrayType.spec.d.ts +0 -1
  252. package/dist/types/ArrayType.spec.js +0 -30
  253. package/dist/types/ArrayType.spec.js.map +0 -1
  254. package/dist/types/BooleanType.spec.d.ts +0 -1
  255. package/dist/types/BooleanType.spec.js +0 -12
  256. package/dist/types/BooleanType.spec.js.map +0 -1
  257. package/dist/types/DoubleType.spec.d.ts +0 -1
  258. package/dist/types/DoubleType.spec.js +0 -12
  259. package/dist/types/DoubleType.spec.js.map +0 -1
  260. package/dist/types/DynamicType.spec.d.ts +0 -1
  261. package/dist/types/DynamicType.spec.js +0 -12
  262. package/dist/types/DynamicType.spec.js.map +0 -1
  263. package/dist/types/FloatType.spec.d.ts +0 -1
  264. package/dist/types/FloatType.spec.js +0 -12
  265. package/dist/types/FloatType.spec.js.map +0 -1
  266. package/dist/types/FunctionType.spec.d.ts +0 -1
  267. package/dist/types/FunctionType.spec.js +0 -23
  268. package/dist/types/FunctionType.spec.js.map +0 -1
  269. package/dist/types/IntegerType.spec.d.ts +0 -1
  270. package/dist/types/IntegerType.spec.js +0 -12
  271. package/dist/types/IntegerType.spec.js.map +0 -1
  272. package/dist/types/InterfaceType.spec.d.ts +0 -1
  273. package/dist/types/InterfaceType.spec.js +0 -175
  274. package/dist/types/InterfaceType.spec.js.map +0 -1
  275. package/dist/types/InvalidType.spec.d.ts +0 -1
  276. package/dist/types/InvalidType.spec.js +0 -12
  277. package/dist/types/InvalidType.spec.js.map +0 -1
  278. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  279. package/dist/types/LongIntegerType.spec.js +0 -12
  280. package/dist/types/LongIntegerType.spec.js.map +0 -1
  281. package/dist/types/ObjectType.spec.d.ts +0 -1
  282. package/dist/types/ObjectType.spec.js +0 -12
  283. package/dist/types/ObjectType.spec.js.map +0 -1
  284. package/dist/types/StringType.spec.d.ts +0 -1
  285. package/dist/types/StringType.spec.js +0 -12
  286. package/dist/types/StringType.spec.js.map +0 -1
  287. package/dist/types/VoidType.spec.d.ts +0 -1
  288. package/dist/types/VoidType.spec.js +0 -12
  289. package/dist/types/VoidType.spec.js.map +0 -1
@@ -1,1307 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const chai_config_spec_1 = require("../../../chai-config.spec");
4
- const Expression_1 = require("../../Expression");
5
- const DiagnosticMessages_1 = require("../../../DiagnosticMessages");
6
- const testHelpers_spec_1 = require("../../../testHelpers.spec");
7
- const Parser_1 = require("../../Parser");
8
- const util_1 = require("../../../util");
9
- const Statement_1 = require("../../Statement");
10
- const Program_1 = require("../../../Program");
11
- const sinon_1 = require("sinon");
12
- const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
13
- const visitors_1 = require("../../../astUtils/visitors");
14
- const reflection_1 = require("../../../astUtils/reflection");
15
- const vscode_uri_1 = require("vscode-uri");
16
- const testHelpers_spec_2 = require("../../../testHelpers.spec");
17
- const sinon = (0, sinon_1.createSandbox)();
18
- describe('EnumStatement', () => {
19
- let program;
20
- let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, testHelpers_spec_2.rootDir]);
21
- beforeEach(() => {
22
- program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, sourceMap: true });
23
- });
24
- afterEach(() => {
25
- sinon.restore();
26
- program.dispose();
27
- });
28
- it('parses empty enum statement', () => {
29
- const parser = Parser_1.Parser.parse(`
30
- enum SomeEnum
31
- end enum
32
- `, { mode: Parser_1.ParseMode.BrighterScript });
33
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
34
- (0, chai_config_spec_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
35
- });
36
- it('supports annotations above', () => {
37
- const parser = Parser_1.Parser.parse(`
38
- @someAnnotation
39
- enum SomeEnum
40
- end enum
41
- `, { mode: Parser_1.ParseMode.BrighterScript });
42
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
43
- (0, chai_config_spec_1.expect)(parser.ast.statements[0].annotations[0].name).to.eql('someAnnotation');
44
- });
45
- it('constructs when missing enum name', () => {
46
- const parser = Parser_1.Parser.parse(`
47
- enum
48
- end enum
49
- `, { mode: Parser_1.ParseMode.BrighterScript });
50
- (0, testHelpers_spec_1.expectDiagnostics)(parser, [
51
- DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier()
52
- ]);
53
- (0, chai_config_spec_1.expect)(parser.ast.statements[0]).to.be.instanceOf(Statement_1.EnumStatement);
54
- });
55
- it('collects uninitialized members', () => {
56
- const parser = Parser_1.Parser.parse(`
57
- enum Direction
58
- up
59
- down
60
- left
61
- right
62
- end enum
63
- `, { mode: Parser_1.ParseMode.BrighterScript });
64
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
65
- (0, chai_config_spec_1.expect)(parser.ast.statements[0].getMembers().map(x => x.tokens.name.text)).to.eql([
66
- 'up',
67
- 'down',
68
- 'left',
69
- 'right'
70
- ]);
71
- });
72
- it('collects int-initialized members', () => {
73
- const parser = Parser_1.Parser.parse(`
74
- enum Direction
75
- up = 1
76
- down = 2
77
- left = 3
78
- right = 4
79
- end enum
80
- `, { mode: Parser_1.ParseMode.BrighterScript });
81
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
82
- const values = parser.ast.statements[0].getMembers().map(x => x.value);
83
- (0, testHelpers_spec_1.expectInstanceOf)(values, [
84
- Expression_1.LiteralExpression,
85
- Expression_1.LiteralExpression,
86
- Expression_1.LiteralExpression,
87
- Expression_1.LiteralExpression
88
- ]);
89
- (0, chai_config_spec_1.expect)(values.map(x => x.token.text)).to.eql([
90
- '1',
91
- '2',
92
- '3',
93
- '4'
94
- ]);
95
- });
96
- it('collects string-initialized members', () => {
97
- const parser = Parser_1.Parser.parse(`
98
- enum Direction
99
- up = "u"
100
- down = "d"
101
- left = "l"
102
- right = "r"
103
- end enum
104
- `, { mode: Parser_1.ParseMode.BrighterScript });
105
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
106
- const values = parser.ast.statements[0].getMembers().map(x => x.value);
107
- (0, testHelpers_spec_1.expectInstanceOf)(values, [
108
- Expression_1.LiteralExpression,
109
- Expression_1.LiteralExpression,
110
- Expression_1.LiteralExpression,
111
- Expression_1.LiteralExpression
112
- ]);
113
- (0, chai_config_spec_1.expect)(values.map(x => x.token.text)).to.eql([
114
- '"u"',
115
- '"d"',
116
- '"l"',
117
- '"r"'
118
- ]);
119
- });
120
- it('flags when used in brs mode', () => {
121
- const parser = Parser_1.Parser.parse(`
122
- enum Direction
123
- up = "u"
124
- down = "d"
125
- left = "l"
126
- right = "r"
127
- end enum
128
- `, { mode: Parser_1.ParseMode.BrightScript });
129
- (0, testHelpers_spec_1.expectDiagnostics)(parser, [
130
- DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('enum declarations')
131
- ]);
132
- });
133
- it('allows enum at top of file', () => {
134
- const parser = Parser_1.Parser.parse(`
135
- enum Direction
136
- value1
137
- end enum
138
-
139
- interface Person
140
- name as string
141
- end interface
142
- `, { mode: Parser_1.ParseMode.BrighterScript });
143
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
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
- });
147
- it('allows enum at bottom of file', () => {
148
- const parser = Parser_1.Parser.parse(`
149
- interface Person
150
- name as string
151
- end interface
152
-
153
- enum Direction
154
- value1
155
- end enum
156
- `, { mode: Parser_1.ParseMode.BrighterScript });
157
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
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
- });
161
- it('allows enum in namespace', () => {
162
- const file = program.setFile('source/types.bs', `
163
- namespace entities
164
- enum Person
165
- name
166
- end enum
167
- end namespace
168
-
169
- enum Direction
170
- up
171
- end enum
172
- `);
173
- program.validate();
174
- (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
175
- (0, chai_config_spec_1.expect)(file.parser.references.enumStatements.map(x => x.fullName)).to.eql([
176
- 'entities.Person',
177
- 'Direction'
178
- ]);
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
- });
190
- it('catches duplicate enums from same file', () => {
191
- program.setFile('source/main.bs', `
192
- enum Direction
193
- up
194
- end enum
195
-
196
- enum Direction
197
- up
198
- end enum
199
- `);
200
- program.validate();
201
- (0, testHelpers_spec_1.expectDiagnostics)(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)),
203
- message: 'Enum declared here'
204
- }] })]);
205
- });
206
- it('catches duplicate enums from different files in same scope', () => {
207
- program.setFile('source/main.bs', `
208
- enum Direction
209
- up
210
- end enum
211
- `);
212
- program.setFile('source/lib.bs', `
213
- enum Direction
214
- up
215
- end enum
216
- `);
217
- program.validate();
218
- (0, testHelpers_spec_1.expectDiagnostics)(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)),
220
- message: 'Enum declared here'
221
- }] })]);
222
- });
223
- it('allows duplicate enums across different scopes', () => {
224
- program.setFile('source/main.bs', `
225
- enum Direction
226
- up
227
- end enum
228
- `);
229
- program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
230
- <?xml version="1.0" encoding="utf-8" ?>
231
- <component name="Comp1" extends="Scene">
232
- <script uri="comp1.bs" />
233
- </component>
234
- `);
235
- program.setFile('components/comp1.bs', `
236
- enum Direction
237
- up
238
- end enum
239
- `);
240
- program.validate();
241
- (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
242
- });
243
- it('flags duplicate members', () => {
244
- program.setFile('source/main.bs', `
245
- enum Direction
246
- name
247
- name
248
- end enum
249
- `);
250
- program.validate();
251
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: util_1.util.createRange(3, 20, 3, 24) })]);
252
- });
253
- it('flags mixed enum value types with int first', () => {
254
- program.setFile('source/main.bs', `
255
- enum Direction
256
- a = 1
257
- b = "c"
258
- end enum
259
- `);
260
- program.validate();
261
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType('integer')), { range: util_1.util.createRange(3, 24, 3, 27) })]);
262
- });
263
- it('flags mixed enum value types with string first', () => {
264
- program.setFile('source/main.bs', `
265
- enum Direction
266
- a = "a"
267
- b = 1
268
- end enum
269
- `);
270
- program.validate();
271
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueMustBeType('string')), { range: util_1.util.createRange(3, 24, 3, 25) })]);
272
- });
273
- it('flags missing value for string enum when string is first item', () => {
274
- program.setFile('source/main.bs', `
275
- enum Direction
276
- a = "a"
277
- b
278
- end enum
279
- `);
280
- program.validate();
281
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueIsRequired('string')), { range: util_1.util.createRange(3, 20, 3, 21) })]);
282
- });
283
- it('allows mixing-and-matching int and hex int', () => {
284
- program.setFile('source/main.bs', `
285
- enum Direction
286
- a = 1
287
- b = &HFF
288
- end enum
289
- `);
290
- program.validate();
291
- (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
292
- });
293
- it('allows floats', () => {
294
- program.setFile('source/main.bs', `
295
- enum Direction
296
- a = 1.2
297
- b = 5.2345
298
- end enum
299
- `);
300
- program.validate();
301
- (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
302
- });
303
- it('only support non-object literals', () => {
304
- program.setFile('source/main.bs', `
305
- enum AppConfig
306
- serverInfo = {}
307
- end enum
308
- `);
309
- program.validate();
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) })]);
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
- });
322
- it('flags missing value for string enum where string is not first item', () => {
323
- program.setFile('source/main.bs', `
324
- enum Direction
325
- a
326
- b = "b" 'since this is the only value present, this is a string enum
327
- end enum
328
- `);
329
- program.validate();
330
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.enumValueIsRequired('string')), { range: util_1.util.createRange(2, 20, 2, 21) })]);
331
- });
332
- it('catches unknown non-namespaced enum members', () => {
333
- program.setFile('source/main.bs', `
334
- enum Direction
335
- up
336
- end enum
337
-
338
- sub main()
339
- print Direction.up
340
- print Direction.DOWN
341
- print Direction.down
342
- end sub
343
- `);
344
- program.validate();
345
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('DOWN', 'Direction')), { range: util_1.util.createRange(7, 36, 7, 40) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('down', 'Direction')), { range: util_1.util.createRange(8, 36, 8, 40) })]);
346
- });
347
- it('catches unknown namespaced enum members', () => {
348
- program.setFile('source/main.bs', `
349
- sub main()
350
- print Enums.Direction.DOWN
351
- print Enums.Direction.down
352
- print Enums.Direction.up
353
- end sub
354
- namespace Enums
355
- enum Direction
356
- up
357
- end enum
358
- end namespace
359
-
360
- `);
361
- program.validate();
362
- (0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('DOWN', 'Enums.Direction')), { range: util_1.util.createRange(2, 42, 2, 46) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownEnumValue('down', 'Enums.Direction')), { range: util_1.util.createRange(3, 42, 3, 46) })]);
363
- });
364
- });
365
- describe('getMemberValueMap', () => {
366
- function expectMemberValueMap(code, expected) {
367
- const file = program.setFile('source/lib.brs', code);
368
- const cancel = new vscode_languageserver_protocol_1.CancellationTokenSource();
369
- let firstEnum;
370
- file.ast.walk(statement => {
371
- if ((0, reflection_1.isEnumStatement)(statement)) {
372
- firstEnum = statement;
373
- cancel.cancel();
374
- }
375
- }, {
376
- walkMode: visitors_1.WalkMode.visitStatements,
377
- cancel: cancel.token
378
- });
379
- (0, chai_config_spec_1.expect)(firstEnum).to.exist;
380
- const values = firstEnum.getMemberValueMap();
381
- (0, chai_config_spec_1.expect)([...values].reduce((prev, [key, value]) => {
382
- prev[key] = value;
383
- return prev;
384
- }, {})).to.eql(expected);
385
- }
386
- it('defaults first enum value to 0', () => {
387
- expectMemberValueMap(`
388
- enum Direction
389
- up
390
- down
391
- left
392
- right
393
- end enum
394
- `, {
395
- up: '0',
396
- down: '1',
397
- left: '2',
398
- right: '3'
399
- });
400
- });
401
- it('continues incrementing after defined int value', () => {
402
- expectMemberValueMap(`
403
- enum Direction
404
- up
405
- down = 9
406
- left
407
- right = 20
408
- other
409
- end enum
410
- `, {
411
- up: '0',
412
- down: '9',
413
- left: '10',
414
- right: '20',
415
- other: '21'
416
- });
417
- });
418
- it('returns string values when defined', () => {
419
- expectMemberValueMap(`
420
- enum Direction
421
- up = "up"
422
- down = "DOWN"
423
- left = "LeFt"
424
- right = "righT"
425
- end enum
426
- `, {
427
- up: '"up"',
428
- down: '"DOWN"',
429
- left: '"LeFt"',
430
- right: '"righT"'
431
- });
432
- });
433
- });
434
- describe('transpile', () => {
435
- it('supports non-namespaced enum from within a namespace', () => {
436
- program.options.autoImportComponentScript = true;
437
- testTranspile(`
438
- namespace alpha
439
- sub test()
440
- print Direction.up
441
- end sub
442
- end namespace
443
- enum Direction
444
- up = "up"
445
- end enum
446
- `, `
447
- sub alpha_test()
448
- print "up"
449
- end sub
450
- `);
451
- });
452
- it('transpiles negative number', () => {
453
- testTranspile(`
454
- sub main()
455
- print Direction.up
456
- end sub
457
- enum Direction
458
- up = -1
459
- end enum
460
- `, `
461
- sub main()
462
- print -1
463
- end sub
464
- `, undefined, undefined, false);
465
- });
466
- it('includes original value when no value could be computed', () => {
467
- testTranspile(`
468
- sub main()
469
- print Direction.up
470
- end sub
471
- enum Direction
472
- up = {}
473
- end enum
474
- `, `
475
- sub main()
476
- print invalid
477
- end sub
478
- `, undefined, undefined, false);
479
- });
480
- it('writes all literal values as-is (even if there are errors)', () => {
481
- testTranspile(`
482
- sub main()
483
- print Direction.up
484
- print Direction.down
485
- print Direction.left
486
- print Direction.right
487
- print Direction.upRight
488
- end sub
489
- enum Direction
490
- up = 1
491
- down = "asdf"
492
- left = 3.14
493
- right = &HFF '255
494
- upRight ' will be 256 since hex ints are parsed as ints
495
- end enum
496
- `, `
497
- sub main()
498
- print 1
499
- print "asdf"
500
- print 3.14
501
- print &HFF
502
- print 256
503
- end sub
504
- `, 'trim', undefined, false);
505
- });
506
- it('supports default-as-integer', () => {
507
- testTranspile(`
508
- enum Direction
509
- up
510
- down
511
- left
512
- right
513
- end enum
514
- sub main()
515
- print Direction.up, Direction.down, Direction.left, Direction.right
516
- end sub
517
- `, `
518
- sub main()
519
- print 0, 1, 2, 3
520
- end sub
521
- `);
522
- });
523
- it('supports string enums', () => {
524
- testTranspile(`
525
- enum Direction
526
- up = "up"
527
- down = "down"
528
- left = "left"
529
- right = "right"
530
- end enum
531
- sub main()
532
- print Direction.up, Direction.down, Direction.left, Direction.right
533
- end sub
534
- `, `
535
- sub main()
536
- print "up", "down", "left", "right"
537
- end sub
538
- `);
539
- });
540
- it('recognizes namespace-relative enums', () => {
541
- program.setFile('source/main.bs', `
542
- namespace MyNamespace
543
- enum MyEnum
544
- val1
545
- val2
546
- end enum
547
-
548
- function foo() as integer
549
- return MyEnum.val1
550
- end function
551
- end namespace
552
- `);
553
- program.validate();
554
- (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
555
- });
556
- it('replaces enum values from separate file with literals', () => {
557
- program.setFile('source/enum.bs', `
558
- enum CharacterType
559
- Human = "Human"
560
- Zombie = "Zombie"
561
- end enum
562
- namespace Locations
563
- enum Houses
564
- TownHouse
565
- FarmHouse
566
- end enum
567
- end namespace
568
- `);
569
- testTranspile(`
570
- sub test()
571
- print CharacterType.Human
572
- print CharacterType.Zombie
573
- print Locations.Houses.TownHouse
574
- print Locations.Houses.FarmHouse
575
- end sub
576
- `, `
577
- sub test()
578
- print "Human"
579
- print "Zombie"
580
- print 0
581
- print 1
582
- end sub
583
- `);
584
- });
585
- it('replaces enums in if statements', () => {
586
- testTranspile(`
587
- enum CharacterType
588
- zombie = "zombie"
589
- end enum
590
- sub main()
591
- if "one" = CharacterType.zombie or "two" = CharacterType.zombie and "three" = CharacterType.zombie
592
- print true
593
- end if
594
- end sub
595
- `, `
596
- sub main()
597
- if "one" = "zombie" or "two" = "zombie" and "three" = "zombie"
598
- print true
599
- end if
600
- end sub
601
- `);
602
- });
603
- });
604
- describe('completions', () => {
605
- it('does not crash when completing enum members with unsupported values', () => {
606
- program.setFile('source/main.bs', `
607
- sub Main()
608
- direction.obj
609
- end sub
610
- enum Direction
611
- up
612
- down
613
- obj = {}
614
- end enum
615
- `);
616
- // direction.|obj
617
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
618
- label: 'up',
619
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
620
- }, {
621
- label: 'down',
622
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
623
- }, {
624
- label: 'obj',
625
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
626
- }]);
627
- });
628
- it('gets enum statement completions from global enum', () => {
629
- program.setFile('source/main.bs', `
630
- sub Main()
631
- direction.down
632
- end sub
633
- enum Direction
634
- up
635
- down
636
- end enum
637
- `);
638
- // |direction.down
639
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 20)), [{
640
- label: 'Direction',
641
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
642
- }]);
643
- // dire|ction.down
644
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 24)), [{
645
- label: 'Direction',
646
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
647
- }]);
648
- // direction|.down
649
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 29)), [{
650
- label: 'Direction',
651
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
652
- }]);
653
- });
654
- it('gets enum member completions from global enum', () => {
655
- program.setFile('source/main.bs', `
656
- sub Main()
657
- direction.down
658
- end sub
659
- enum Direction
660
- up
661
- down
662
- end enum
663
- `);
664
- // direction.|down
665
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
666
- label: 'up',
667
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
668
- }, {
669
- label: 'down',
670
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
671
- }]);
672
- // direction.do|wn
673
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 32)), [{
674
- label: 'up',
675
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
676
- }, {
677
- label: 'down',
678
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
679
- }]);
680
- // direction.down|
681
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 34)), [{
682
- label: 'up',
683
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
684
- }, {
685
- label: 'down',
686
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
687
- }]);
688
- });
689
- it('gets enum statement completions from namespaced enum', () => {
690
- program.setFile('source/main.bs', `
691
- sub Main()
692
- enums.direction.down
693
- end sub
694
- namespace enums
695
- enum Direction
696
- up
697
- down
698
- end enum
699
- end namespace
700
- `);
701
- // enums.|direction.down
702
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 26)), [{
703
- label: 'Direction',
704
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
705
- }]);
706
- // enums.dire|ction.down
707
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 30)), [{
708
- label: 'Direction',
709
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
710
- }]);
711
- // enums.direction|.down
712
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 35)), [{
713
- label: 'Direction',
714
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
715
- }]);
716
- });
717
- it('gets enum member completions from namespaced enum', () => {
718
- program.setFile('source/main.bs', `
719
- sub Main()
720
- enums.direction.down
721
- end sub
722
- namespace enums
723
- enum Direction
724
- up
725
- down
726
- end enum
727
- end namespace
728
- `);
729
- program.validate();
730
- // enums.direction.|down
731
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 36)), [{
732
- label: 'up',
733
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
734
- }, {
735
- label: 'down',
736
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
737
- }]);
738
- // enums.direction.do|wn
739
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 38)), [{
740
- label: 'up',
741
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
742
- }, {
743
- label: 'down',
744
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
745
- }]);
746
- // enums.direction.down|
747
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 40)), [{
748
- label: 'up',
749
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
750
- }, {
751
- label: 'down',
752
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
753
- }]);
754
- });
755
- it('excludes enum member completions from namespace enum', () => {
756
- program.setFile('source/main.bs', `
757
- sub Main()
758
- direction.ba
759
- end sub
760
- namespace enums
761
- enum Direction
762
- up
763
- down
764
- end enum
765
- end namespace
766
- `);
767
- program.validate();
768
- //should NOT find Direction because it's not directly available at the top level (you need to go through `enums.` to get at it)
769
- // dire|ction.down
770
- (0, testHelpers_spec_1.expectCompletionsExcludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(2, 24)), [{
771
- label: 'Direction',
772
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
773
- }]);
774
- });
775
- it('infers namespace for enum statement completions', () => {
776
- program.setFile('source/main.bs', `
777
- namespace enums
778
- sub Main()
779
- direction.down
780
- end sub
781
- enum Direction
782
- up
783
- down
784
- end enum
785
- end namespace
786
- enum Logic
787
- yes
788
- no
789
- end enum
790
- `);
791
- // dire|ction.down
792
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 33)), [{
793
- label: 'Direction',
794
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
795
- }, {
796
- label: 'Logic',
797
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
798
- }]);
799
- });
800
- it('infers namespace for enum member completions', () => {
801
- program.setFile('source/main.bs', `
802
- namespace enums
803
- sub Main()
804
- direction.down
805
- end sub
806
- enum Direction
807
- up
808
- down
809
- end enum
810
- end namespace
811
- `);
812
- // direction.do|wn
813
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 36)), [{
814
- label: 'up',
815
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
816
- }, {
817
- label: 'down',
818
- kind: vscode_languageserver_protocol_1.CompletionItemKind.EnumMember
819
- }]);
820
- });
821
- it('supports explicit namespace for enum statement completions', () => {
822
- program.setFile('source/main.bs', `
823
- namespace enums
824
- sub Main()
825
- enums.direction.down
826
- end sub
827
- enum Direction
828
- up
829
- down
830
- end enum
831
- end namespace
832
- `);
833
- // enums.dire|ction.down
834
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 38)), [{
835
- label: 'Direction',
836
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
837
- }]);
838
- });
839
- it('supports explicit namespace for enum statement completions', () => {
840
- program.setFile('source/main.bs', `
841
- namespace logger
842
- sub log()
843
- enums.direction.down
844
- end sub
845
- end namespace
846
- namespace enums
847
- enum Direction
848
- up
849
- down
850
- end enum
851
- end namespace
852
- `);
853
- // enums.dire|ction.down
854
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.util.createPosition(3, 38)), [{
855
- label: 'Direction',
856
- kind: vscode_languageserver_protocol_1.CompletionItemKind.Enum
857
- }]);
858
- });
859
- });
860
- it('transpiles simple enum in a unary expression', () => {
861
- testTranspile(`
862
- enum SomeEnum
863
- foo = 1
864
- end enum
865
- sub main()
866
- bar = -SomeEnum.foo
867
- end sub
868
- `, `
869
- sub main()
870
- bar = - 1
871
- end sub
872
- `, undefined, 'source/main.bs');
873
- });
874
- it('transpiles comples enum in a unary expression', () => {
875
- testTranspile(`
876
- namespace name.space
877
- enum SomeEnum
878
- foo = 1
879
- end enum
880
- end namespace
881
- sub main()
882
- bar = -name.space.SomeEnum.foo
883
- end sub
884
- `, `
885
- sub main()
886
- bar = - 1
887
- end sub
888
- `, undefined, 'source/main.bs');
889
- });
890
- it('handles both sides of a logical expression', () => {
891
- testTranspile(`
892
- sub main()
893
- dir = m.direction = Direction.up
894
- dir = Direction.up = m.direction
895
- end sub
896
- enum Direction
897
- up = "up"
898
- down = "down"
899
- end enum
900
- `, `
901
- sub main()
902
- dir = m.direction = "up"
903
- dir = "up" = m.direction
904
- end sub
905
- `);
906
- });
907
- it('handles when found in boolean expressions', () => {
908
- testTranspile(`
909
- sub main()
910
- result = Direction.up = "up" or Direction.down = "down" and Direction.up = Direction.down
911
- end sub
912
- enum Direction
913
- up = "up"
914
- down = "down"
915
- end enum
916
- `, `
917
- sub main()
918
- result = "up" = "up" or "down" = "down" and "up" = "down"
919
- end sub
920
- `);
921
- });
922
- it('replaces enum values in if statements', () => {
923
- testTranspile(`
924
- sub main()
925
- if m.direction = Direction.up
926
- print Direction.up
927
- end if
928
- end sub
929
- enum Direction
930
- up = "up"
931
- down = "down"
932
- end enum
933
- `, `
934
- sub main()
935
- if m.direction = "up"
936
- print "up"
937
- end if
938
- end sub
939
- `);
940
- });
941
- it('replaces enum values in function default parameter value expressions', () => {
942
- testTranspile(`
943
- sub speak(dir = Direction.up)
944
- end sub
945
- enum Direction
946
- up = "up"
947
- end enum
948
- `, `
949
- sub speak(dir = "up")
950
- end sub
951
- `);
952
- });
953
- it('replaces enum values in for loops', () => {
954
- testTranspile(`
955
- sub main()
956
- for i = Loop.start to Loop.end step Loop.step
957
- end for
958
- end sub
959
- enum Loop
960
- start = 0
961
- end = 10
962
- step = 1
963
- end enum
964
- `, `
965
- sub main()
966
- for i = 0 to 10 step 1
967
- end for
968
- end sub
969
- `);
970
- });
971
- it('transpiles enum values when used in complex expressions', () => {
972
- testTranspile(`
973
- sub main()
974
- print Direction.up.toStr()
975
- end sub
976
- enum Direction
977
- up = "up"
978
- down = "down"
979
- end enum
980
- `, `
981
- sub main()
982
- print "up".toStr()
983
- end sub
984
- `);
985
- });
986
- describe('computed AA keys', () => {
987
- it('transpiles enum member as AA key', () => {
988
- testTranspile(`
989
- enum MyKey
990
- first = "key1"
991
- end enum
992
- sub main()
993
- myAA = {
994
- [MyKey.first]: "value1"
995
- }
996
- end sub
997
- `, `
998
- sub main()
999
- myAA = {
1000
- "key1": "value1"
1001
- }
1002
- end sub
1003
- `);
1004
- });
1005
- it('emits diagnostic for integer enum member used as AA key', () => {
1006
- program.setFile('source/main.bs', `
1007
- enum MyKey
1008
- first = 1
1009
- end enum
1010
- sub main()
1011
- myAA = {
1012
- [MyKey.first]: "value1"
1013
- }
1014
- end sub
1015
- `);
1016
- program.validate();
1017
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1018
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1019
- ]);
1020
- });
1021
- it('transpiles const as AA key', () => {
1022
- testTranspile(`
1023
- const MY_KEY = "myKey"
1024
- sub main()
1025
- myAA = {
1026
- [MY_KEY]: "value1"
1027
- }
1028
- end sub
1029
- `, `
1030
- sub main()
1031
- myAA = {
1032
- "myKey": "value1"
1033
- }
1034
- end sub
1035
- `);
1036
- });
1037
- it('transpiles namespaced enum member as AA key', () => {
1038
- testTranspile(`
1039
- namespace Keys
1040
- enum MyKey
1041
- first = "key1"
1042
- end enum
1043
- end namespace
1044
- sub main()
1045
- myAA = {
1046
- [Keys.MyKey.first]: "value1"
1047
- }
1048
- end sub
1049
- `, `
1050
- sub main()
1051
- myAA = {
1052
- "key1": "value1"
1053
- }
1054
- end sub
1055
- `);
1056
- });
1057
- it('transpiles literal string as AA key', () => {
1058
- testTranspile(`
1059
- sub main()
1060
- myAA = {
1061
- ["my-hyphenated-key"]: "value1"
1062
- }
1063
- end sub
1064
- `, `
1065
- sub main()
1066
- myAA = {
1067
- "my-hyphenated-key": "value1"
1068
- }
1069
- end sub
1070
- `);
1071
- });
1072
- it('transpiles multiple computed keys in one AA', () => {
1073
- testTranspile(`
1074
- enum Keys
1075
- a = "keyA"
1076
- b = "keyB"
1077
- end enum
1078
- sub main()
1079
- myAA = {
1080
- [Keys.a]: 1,
1081
- [Keys.b]: 2
1082
- }
1083
- end sub
1084
- `, `
1085
- sub main()
1086
- myAA = {
1087
- "keyA": 1
1088
- "keyB": 2
1089
- }
1090
- end sub
1091
- `);
1092
- });
1093
- it('transpiles mixed computed and normal keys', () => {
1094
- testTranspile(`
1095
- enum Keys
1096
- first = "key1"
1097
- end enum
1098
- sub main()
1099
- myAA = {
1100
- normalKey: 1,
1101
- [Keys.first]: 2
1102
- }
1103
- end sub
1104
- `, `
1105
- sub main()
1106
- myAA = {
1107
- normalKey: 1
1108
- "key1": 2
1109
- }
1110
- end sub
1111
- `);
1112
- });
1113
- it('transpiles const from enum', () => {
1114
- testTranspile(`
1115
- enum Keys
1116
- first = "key1"
1117
- end enum
1118
- const MY_KEY = Keys.first
1119
- sub main()
1120
- myAA = {
1121
- [MY_KEY]: 2
1122
- }
1123
- end sub
1124
- `, `
1125
- sub main()
1126
- myAA = {
1127
- "key1": 2
1128
- }
1129
- end sub
1130
- `);
1131
- });
1132
- it('emits diagnostic for non-constant computed key', () => {
1133
- program.setFile('source/main.bs', `
1134
- sub main()
1135
- someVar = "key"
1136
- myAA = {
1137
- [someVar]: "value"
1138
- }
1139
- end sub
1140
- `);
1141
- program.validate();
1142
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1143
- DiagnosticMessages_1.DiagnosticMessages.computedPropertyKeyMustBeConstantExpression()
1144
- ]);
1145
- });
1146
- it('emits diagnostic for non-string literal used as computed key', () => {
1147
- program.setFile('source/main.bs', `
1148
- sub main()
1149
- myAA = {
1150
- [42]: "value"
1151
- }
1152
- end sub
1153
- `);
1154
- program.validate();
1155
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1156
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1157
- ]);
1158
- });
1159
- it('emits diagnostic for non-string const used as computed key', () => {
1160
- program.setFile('source/main.bs', `
1161
- const MY_INT_KEY = 42
1162
- sub main()
1163
- myAA = {
1164
- [MY_INT_KEY]: "value"
1165
- }
1166
- end sub
1167
- `);
1168
- program.validate();
1169
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1170
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1171
- ]);
1172
- });
1173
- it('accepts a const that chains to a string const', () => {
1174
- program.setFile('source/main.bs', `
1175
- const BASE_KEY = "myKey"
1176
- const ALIAS_KEY = BASE_KEY
1177
- sub main()
1178
- myAA = {
1179
- [ALIAS_KEY]: "value"
1180
- }
1181
- end sub
1182
- `);
1183
- program.validate();
1184
- (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
1185
- });
1186
- it('emits diagnostic when a const chain resolves to a non-string', () => {
1187
- program.setFile('source/main.bs', `
1188
- const INT_KEY = 99
1189
- const ALIAS_KEY = INT_KEY
1190
- sub main()
1191
- myAA = {
1192
- [ALIAS_KEY]: "value"
1193
- }
1194
- end sub
1195
- `);
1196
- program.validate();
1197
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1198
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1199
- ]);
1200
- });
1201
- it('emits diagnostic for circular const reference', () => {
1202
- program.setFile('source/main.bs', `
1203
- const A = B
1204
- const B = A
1205
- sub main()
1206
- myAA = {
1207
- [A]: "value"
1208
- }
1209
- end sub
1210
- `);
1211
- program.validate();
1212
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1213
- DiagnosticMessages_1.DiagnosticMessages.circularReferenceDetected(['A', 'B', 'A'], 'source').message,
1214
- DiagnosticMessages_1.DiagnosticMessages.circularReferenceDetected(['B', 'A', 'B'], 'source').message,
1215
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1216
- ]);
1217
- });
1218
- it('emits diagnostic for boolean literal used as computed key', () => {
1219
- program.setFile('source/main.bs', `
1220
- sub main()
1221
- myAA = {
1222
- [true]: "value"
1223
- }
1224
- end sub
1225
- `);
1226
- program.validate();
1227
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1228
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1229
- ]);
1230
- });
1231
- it('emits diagnostic for float literal used as computed key', () => {
1232
- program.setFile('source/main.bs', `
1233
- sub main()
1234
- myAA = {
1235
- [3.14]: "value"
1236
- }
1237
- end sub
1238
- `);
1239
- program.validate();
1240
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1241
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1242
- ]);
1243
- });
1244
- it('emits diagnostic for function call used as computed key', () => {
1245
- program.setFile('source/main.bs', `
1246
- sub getKey() as string
1247
- return "key"
1248
- end sub
1249
- sub main()
1250
- myAA = {
1251
- [getKey()]: "value"
1252
- }
1253
- end sub
1254
- `);
1255
- program.validate();
1256
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1257
- DiagnosticMessages_1.DiagnosticMessages.computedPropertyKeyMustBeConstantExpression()
1258
- ]);
1259
- });
1260
- it('emits diagnostic for arithmetic expression used as computed key', () => {
1261
- program.setFile('source/main.bs', `
1262
- sub main()
1263
- myAA = {
1264
- [1 + 2]: "value"
1265
- }
1266
- end sub
1267
- `);
1268
- program.validate();
1269
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1270
- DiagnosticMessages_1.DiagnosticMessages.computedPropertyKeyMustBeConstantExpression()
1271
- ]);
1272
- });
1273
- it('emits diagnostic for non-string default enum member used as computed key', () => {
1274
- program.setFile('source/main.bs', `
1275
- enum MyKey
1276
- first
1277
- end enum
1278
- sub main()
1279
- myAA = {
1280
- [MyKey.first]: "value"
1281
- }
1282
- end sub
1283
- `);
1284
- program.validate();
1285
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1286
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1287
- ]);
1288
- });
1289
- it('emits diagnostic for non-string namespaced const used as computed key', () => {
1290
- program.setFile('source/main.bs', `
1291
- namespace Keys
1292
- const MY_KEY = 42
1293
- end namespace
1294
- sub main()
1295
- myAA = {
1296
- [Keys.MY_KEY]: "value"
1297
- }
1298
- end sub
1299
- `);
1300
- program.validate();
1301
- (0, testHelpers_spec_1.expectDiagnostics)(program, [
1302
- DiagnosticMessages_1.DiagnosticMessages.computedAAKeyMustBeStringExpression()
1303
- ]);
1304
- });
1305
- });
1306
- });
1307
- //# sourceMappingURL=Enum.spec.js.map