brighterscript 1.0.0-alpha.10 → 1.0.0-alpha.14

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 (299) hide show
  1. package/CHANGELOG.md +247 -267
  2. package/README.md +2 -2
  3. package/dist/Cache.d.ts +3 -3
  4. package/dist/Cache.js +10 -6
  5. package/dist/Cache.js.map +1 -1
  6. package/dist/CodeActionUtil.js.map +1 -1
  7. package/dist/CommentFlagProcessor.d.ts +4 -4
  8. package/dist/CommentFlagProcessor.js +5 -3
  9. package/dist/CommentFlagProcessor.js.map +1 -1
  10. package/dist/DependencyGraph.js.map +1 -1
  11. package/dist/DiagnosticFilterer.js +1 -1
  12. package/dist/DiagnosticFilterer.js.map +1 -1
  13. package/dist/LanguageServer.d.ts +1 -6
  14. package/dist/LanguageServer.js +5 -14
  15. package/dist/LanguageServer.js.map +1 -1
  16. package/dist/Logger.js.map +1 -1
  17. package/dist/PluginInterface.d.ts +3 -3
  18. package/dist/PluginInterface.js +3 -0
  19. package/dist/PluginInterface.js.map +1 -1
  20. package/dist/Program.d.ts +35 -20
  21. package/dist/Program.js +132 -67
  22. package/dist/Program.js.map +1 -1
  23. package/dist/ProgramBuilder.js +4 -4
  24. package/dist/ProgramBuilder.js.map +1 -1
  25. package/dist/Scope.d.ts +22 -13
  26. package/dist/Scope.js +85 -70
  27. package/dist/Scope.js.map +1 -1
  28. package/dist/SymbolTable.d.ts +1 -1
  29. package/dist/SymbolTable.js +2 -2
  30. package/dist/SymbolTable.js.map +1 -1
  31. package/dist/XmlScope.d.ts +2 -2
  32. package/dist/XmlScope.js +5 -5
  33. package/dist/XmlScope.js.map +1 -1
  34. package/dist/astUtils/AstEditor.d.ts +27 -0
  35. package/dist/astUtils/AstEditor.js +97 -0
  36. package/dist/astUtils/AstEditor.js.map +1 -0
  37. package/dist/{bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts → astUtils/AstEditor.spec.d.ts} +0 -0
  38. package/dist/astUtils/AstEditor.spec.js +133 -0
  39. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  40. package/dist/astUtils/creators.spec.js +4 -4
  41. package/dist/astUtils/creators.spec.js.map +1 -1
  42. package/dist/astUtils/reflection.d.ts +4 -2
  43. package/dist/astUtils/reflection.js +10 -1
  44. package/dist/astUtils/reflection.js.map +1 -1
  45. package/dist/astUtils/reflection.spec.js +116 -116
  46. package/dist/astUtils/reflection.spec.js.map +1 -1
  47. package/dist/astUtils/stackedVisitor.js.map +1 -1
  48. package/dist/astUtils/stackedVisitor.spec.js +13 -13
  49. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  50. package/dist/astUtils/visitors.js +1 -1
  51. package/dist/astUtils/visitors.js.map +1 -1
  52. package/dist/astUtils/visitors.spec.js +26 -26
  53. package/dist/astUtils/visitors.spec.js.map +1 -1
  54. package/dist/astUtils/xml.d.ts +1 -0
  55. package/dist/astUtils/xml.js +6 -1
  56. package/dist/astUtils/xml.js.map +1 -1
  57. package/dist/bscPlugin/BscPlugin.js +5 -2
  58. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  59. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +3 -3
  60. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  61. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +17 -17
  62. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  63. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +8 -0
  64. package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.js → BrsFileSemanticTokensProcessor.js} +13 -15
  65. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  66. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  67. package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.js → BrsFileSemanticTokensProcessor.spec.js} +5 -5
  68. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  69. package/dist/diagnosticUtils.d.ts +1 -0
  70. package/dist/diagnosticUtils.js +14 -7
  71. package/dist/diagnosticUtils.js.map +1 -1
  72. package/dist/examples/plugins/removePrint.js +2 -2
  73. package/dist/examples/plugins/removePrint.js.map +1 -1
  74. package/dist/files/BrsFile.Class.spec.js +444 -269
  75. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  76. package/dist/files/BrsFile.d.ts +17 -11
  77. package/dist/files/BrsFile.js +220 -153
  78. package/dist/files/BrsFile.js.map +1 -1
  79. package/dist/files/BrsFile.spec.js +620 -272
  80. package/dist/files/BrsFile.spec.js.map +1 -1
  81. package/dist/files/XmlFile.d.ts +6 -5
  82. package/dist/files/XmlFile.js +14 -9
  83. package/dist/files/XmlFile.js.map +1 -1
  84. package/dist/files/XmlFile.spec.js +238 -191
  85. package/dist/files/XmlFile.spec.js.map +1 -1
  86. package/dist/files/tests/imports.spec.js +29 -27
  87. package/dist/files/tests/imports.spec.js.map +1 -1
  88. package/dist/globalCallables.d.ts +3 -1
  89. package/dist/globalCallables.js +198 -99
  90. package/dist/globalCallables.js.map +1 -1
  91. package/dist/index.d.ts +12 -3
  92. package/dist/index.js +22 -4
  93. package/dist/index.js.map +1 -1
  94. package/dist/interfaces.d.ts +71 -10
  95. package/dist/lexer/Lexer.d.ts +5 -1
  96. package/dist/lexer/Lexer.js +52 -35
  97. package/dist/lexer/Lexer.js.map +1 -1
  98. package/dist/lexer/Lexer.spec.js +564 -534
  99. package/dist/lexer/Lexer.spec.js.map +1 -1
  100. package/dist/lexer/TokenKind.d.ts +4 -0
  101. package/dist/lexer/TokenKind.js +44 -1
  102. package/dist/lexer/TokenKind.js.map +1 -1
  103. package/dist/parser/Expression.d.ts +1 -1
  104. package/dist/parser/Expression.js +66 -66
  105. package/dist/parser/Expression.js.map +1 -1
  106. package/dist/parser/Parser.Class.spec.js +107 -106
  107. package/dist/parser/Parser.Class.spec.js.map +1 -1
  108. package/dist/parser/Parser.d.ts +17 -5
  109. package/dist/parser/Parser.js +431 -315
  110. package/dist/parser/Parser.js.map +1 -1
  111. package/dist/parser/Parser.spec.js +418 -296
  112. package/dist/parser/Parser.spec.js.map +1 -1
  113. package/dist/parser/SGParser.js +2 -2
  114. package/dist/parser/SGParser.js.map +1 -1
  115. package/dist/parser/SGParser.spec.js +22 -22
  116. package/dist/parser/SGParser.spec.js.map +1 -1
  117. package/dist/parser/SGTypes.d.ts +3 -0
  118. package/dist/parser/SGTypes.js +12 -7
  119. package/dist/parser/SGTypes.js.map +1 -1
  120. package/dist/parser/SGTypes.spec.js +84 -84
  121. package/dist/parser/SGTypes.spec.js.map +1 -1
  122. package/dist/parser/Statement.d.ts +3 -3
  123. package/dist/parser/Statement.js +61 -61
  124. package/dist/parser/Statement.js.map +1 -1
  125. package/dist/parser/Statement.spec.js +10 -10
  126. package/dist/parser/Statement.spec.js.map +1 -1
  127. package/dist/parser/tests/Parser.spec.d.ts +3 -3
  128. package/dist/parser/tests/Parser.spec.js +4 -4
  129. package/dist/parser/tests/Parser.spec.js.map +1 -1
  130. package/dist/parser/tests/controlFlow/For.spec.js +58 -58
  131. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  132. package/dist/parser/tests/controlFlow/ForEach.spec.js +40 -39
  133. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  134. package/dist/parser/tests/controlFlow/If.spec.js +201 -200
  135. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  136. package/dist/parser/tests/controlFlow/While.spec.js +37 -37
  137. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  138. package/dist/parser/tests/expression/Additive.spec.js +30 -30
  139. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  140. package/dist/parser/tests/expression/ArrayLiterals.spec.js +119 -119
  141. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  142. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +141 -141
  143. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  144. package/dist/parser/tests/expression/Boolean.spec.js +24 -24
  145. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  146. package/dist/parser/tests/expression/Call.spec.js +41 -40
  147. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  148. package/dist/parser/tests/expression/Exponential.spec.js +17 -17
  149. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  150. package/dist/parser/tests/expression/Function.spec.js +256 -256
  151. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  152. package/dist/parser/tests/expression/Indexing.spec.js +87 -87
  153. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  154. package/dist/parser/tests/expression/Multiplicative.spec.js +37 -37
  155. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  156. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +74 -62
  157. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  158. package/dist/parser/tests/expression/PrefixUnary.spec.js +41 -41
  159. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  160. package/dist/parser/tests/expression/Primary.spec.js +41 -41
  161. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  162. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +110 -2
  163. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  164. package/dist/parser/tests/expression/Relational.spec.js +43 -43
  165. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  166. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +6 -6
  167. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  168. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +18 -18
  169. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  170. package/dist/parser/tests/expression/TernaryExpression.spec.js +100 -100
  171. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  172. package/dist/parser/tests/statement/AssignmentOperators.spec.js +36 -36
  173. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  174. package/dist/parser/tests/statement/Declaration.spec.js +44 -44
  175. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  176. package/dist/parser/tests/statement/Dim.spec.js +21 -21
  177. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  178. package/dist/parser/tests/statement/Function.spec.js +198 -197
  179. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  180. package/dist/parser/tests/statement/Goto.spec.js +15 -14
  181. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  182. package/dist/parser/tests/statement/Increment.spec.js +50 -50
  183. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  184. package/dist/parser/tests/statement/InterfaceStatement.spec.js +14 -2
  185. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  186. package/dist/parser/tests/statement/LibraryStatement.spec.js +17 -17
  187. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  188. package/dist/parser/tests/statement/Misc.spec.js +91 -90
  189. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  190. package/dist/parser/tests/statement/PrintStatement.spec.js +34 -34
  191. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  192. package/dist/parser/tests/statement/ReturnStatement.spec.js +46 -46
  193. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  194. package/dist/parser/tests/statement/Set.spec.js +83 -83
  195. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  196. package/dist/parser/tests/statement/Stop.spec.js +12 -11
  197. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  198. package/dist/parser/tests/statement/Throw.spec.js +5 -5
  199. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  200. package/dist/parser/tests/statement/TryCatch.spec.js +13 -13
  201. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  202. package/dist/preprocessor/Chunk.d.ts +1 -1
  203. package/dist/preprocessor/Chunk.js.map +1 -1
  204. package/dist/preprocessor/Manifest.d.ts +1 -1
  205. package/dist/preprocessor/Preprocessor.d.ts +1 -1
  206. package/dist/preprocessor/Preprocessor.js +8 -8
  207. package/dist/preprocessor/Preprocessor.js.map +1 -1
  208. package/dist/preprocessor/Preprocessor.spec.js +49 -49
  209. package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
  210. package/dist/preprocessor/PreprocessorParser.spec.js +72 -72
  211. package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
  212. package/dist/types/ArrayType.d.ts +8 -5
  213. package/dist/types/ArrayType.js +48 -12
  214. package/dist/types/ArrayType.js.map +1 -1
  215. package/dist/types/ArrayType.spec.js +69 -10
  216. package/dist/types/ArrayType.spec.js.map +1 -1
  217. package/dist/types/BooleanType.js +3 -3
  218. package/dist/types/BooleanType.js.map +1 -1
  219. package/dist/types/BooleanType.spec.js +2 -2
  220. package/dist/types/BooleanType.spec.js.map +1 -1
  221. package/dist/types/BscType.d.ts +1 -1
  222. package/dist/types/BscType.js +1 -1
  223. package/dist/types/BscType.js.map +1 -1
  224. package/dist/types/CustomType.d.ts +1 -1
  225. package/dist/types/CustomType.js +6 -4
  226. package/dist/types/CustomType.js.map +1 -1
  227. package/dist/types/DoubleType.js +7 -7
  228. package/dist/types/DoubleType.js.map +1 -1
  229. package/dist/types/DoubleType.spec.js +2 -2
  230. package/dist/types/DoubleType.spec.js.map +1 -1
  231. package/dist/types/DynamicType.js +1 -1
  232. package/dist/types/DynamicType.js.map +1 -1
  233. package/dist/types/DynamicType.spec.js +2 -2
  234. package/dist/types/DynamicType.spec.js.map +1 -1
  235. package/dist/types/FloatType.js +7 -7
  236. package/dist/types/FloatType.js.map +1 -1
  237. package/dist/types/FloatType.spec.js +2 -2
  238. package/dist/types/FloatType.spec.js.map +1 -1
  239. package/dist/types/FunctionType.d.ts +5 -5
  240. package/dist/types/FunctionType.js +13 -13
  241. package/dist/types/FunctionType.js.map +1 -1
  242. package/dist/types/FunctionType.spec.js +7 -7
  243. package/dist/types/FunctionType.spec.js.map +1 -1
  244. package/dist/types/IntegerType.js +7 -7
  245. package/dist/types/IntegerType.js.map +1 -1
  246. package/dist/types/IntegerType.spec.js +2 -2
  247. package/dist/types/IntegerType.spec.js.map +1 -1
  248. package/dist/types/InterfaceType.js +3 -3
  249. package/dist/types/InterfaceType.js.map +1 -1
  250. package/dist/types/InterfaceType.spec.js +7 -7
  251. package/dist/types/InterfaceType.spec.js.map +1 -1
  252. package/dist/types/InvalidType.js +4 -4
  253. package/dist/types/InvalidType.js.map +1 -1
  254. package/dist/types/InvalidType.spec.js +2 -2
  255. package/dist/types/InvalidType.spec.js.map +1 -1
  256. package/dist/types/LazyType.d.ts +1 -2
  257. package/dist/types/LazyType.js +1 -5
  258. package/dist/types/LazyType.js.map +1 -1
  259. package/dist/types/LongIntegerType.js +8 -8
  260. package/dist/types/LongIntegerType.js.map +1 -1
  261. package/dist/types/LongIntegerType.spec.js +2 -2
  262. package/dist/types/LongIntegerType.spec.js.map +1 -1
  263. package/dist/types/ObjectType.js +3 -3
  264. package/dist/types/ObjectType.js.map +1 -1
  265. package/dist/types/ObjectType.spec.js +2 -2
  266. package/dist/types/ObjectType.spec.js.map +1 -1
  267. package/dist/types/StringType.js +3 -3
  268. package/dist/types/StringType.js.map +1 -1
  269. package/dist/types/StringType.spec.js +2 -2
  270. package/dist/types/StringType.spec.js.map +1 -1
  271. package/dist/types/UninitializedType.js +3 -3
  272. package/dist/types/UninitializedType.js.map +1 -1
  273. package/dist/types/VoidType.js +3 -3
  274. package/dist/types/VoidType.js.map +1 -1
  275. package/dist/types/VoidType.spec.js +2 -2
  276. package/dist/types/VoidType.spec.js.map +1 -1
  277. package/dist/types/helpers.js +6 -6
  278. package/dist/types/helpers.js.map +1 -1
  279. package/dist/util.d.ts +15 -9
  280. package/dist/util.js +104 -57
  281. package/dist/util.js.map +1 -1
  282. package/dist/validators/ClassValidator.js +40 -40
  283. package/dist/validators/ClassValidator.js.map +1 -1
  284. package/package.json +10 -9
  285. package/dist/astUtils/index.d.ts +0 -7
  286. package/dist/astUtils/index.js +0 -26
  287. package/dist/astUtils/index.js.map +0 -1
  288. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  289. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  290. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  291. package/dist/lexer/index.d.ts +0 -3
  292. package/dist/lexer/index.js +0 -17
  293. package/dist/lexer/index.js.map +0 -1
  294. package/dist/parser/index.d.ts +0 -3
  295. package/dist/parser/index.js +0 -16
  296. package/dist/parser/index.js.map +0 -1
  297. package/dist/preprocessor/index.d.ts +0 -3
  298. package/dist/preprocessor/index.js +0 -16
  299. package/dist/preprocessor/index.js.map +0 -1
@@ -2,7 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.failStatementType = exports.rangeToArray = void 0;
4
4
  const chai_1 = require("chai");
5
- const lexer_1 = require("../lexer");
5
+ const Lexer_1 = require("../lexer/Lexer");
6
+ const TokenKind_1 = require("../lexer/TokenKind");
6
7
  const Expression_1 = require("./Expression");
7
8
  const Parser_1 = require("./Parser");
8
9
  const Statement_1 = require("./Statement");
@@ -10,19 +11,24 @@ const vscode_languageserver_1 = require("vscode-languageserver");
10
11
  const DiagnosticMessages_1 = require("../DiagnosticMessages");
11
12
  const reflection_1 = require("../astUtils/reflection");
12
13
  const testHelpers_spec_1 = require("../testHelpers.spec");
13
- const VoidType_1 = require("../types/VoidType");
14
+ const BrsTranspileState_1 = require("./BrsTranspileState");
15
+ const source_map_1 = require("source-map");
16
+ const BrsFile_1 = require("../files/BrsFile");
17
+ const Program_1 = require("../Program");
18
+ const SymbolTable_1 = require("../SymbolTable");
14
19
  const FunctionType_1 = require("../types/FunctionType");
15
- const StringType_1 = require("../types/StringType");
16
- const CustomType_1 = require("../types/CustomType");
20
+ const LazyType_1 = require("../types/LazyType");
17
21
  const IntegerType_1 = require("../types/IntegerType");
22
+ const StringType_1 = require("../types/StringType");
18
23
  const ObjectType_1 = require("../types/ObjectType");
19
- const SymbolTable_1 = require("../SymbolTable");
24
+ const CustomType_1 = require("../types/CustomType");
25
+ const VoidType_1 = require("../types/VoidType");
20
26
  const DynamicType_1 = require("../types/DynamicType");
21
27
  const util_1 = require("../util");
22
- const LazyType_1 = require("../types/LazyType");
28
+ const ArrayType_1 = require("../types/ArrayType");
23
29
  describe('parser', () => {
24
30
  it('emits empty object when empty token list is provided', () => {
25
- chai_1.expect(Parser_1.Parser.parse([])).to.deep.include({
31
+ (0, chai_1.expect)(Parser_1.Parser.parse([])).to.deep.include({
26
32
  statements: [],
27
33
  diagnostics: []
28
34
  });
@@ -40,7 +46,7 @@ describe('parser', () => {
40
46
  humansAreAlive = false
41
47
  end sub
42
48
  `);
43
- chai_1.expect(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
49
+ (0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
44
50
  'herd',
45
51
  'humansAreAlive',
46
52
  'i',
@@ -49,7 +55,7 @@ describe('parser', () => {
49
55
  'zombie'
50
56
  ]);
51
57
  parser.invalidateReferences();
52
- chai_1.expect(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
58
+ (0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
53
59
  'herd',
54
60
  'humansAreAlive',
55
61
  'i',
@@ -69,13 +75,17 @@ describe('parser', () => {
69
75
  end sub
70
76
  `);
71
77
  parser.invalidateReferences();
72
- chai_1.expect(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name)).to.eql([
73
- 'outerName',
74
- 'speak',
75
- 'age'
76
- ]);
77
- chai_1.expect(parser.references.functionExpressions[1].symbolTable.getOwnSymbols().map(x => x.name)).to.eql([
78
- 'innerName'
78
+ (0, chai_1.expect)(parser.references.functionExpressions.map(x => {
79
+ return x.symbolTable.getOwnSymbols().map(x => x.name);
80
+ })).to.eql([
81
+ [
82
+ 'outerName',
83
+ 'speak',
84
+ 'age'
85
+ ],
86
+ [
87
+ 'innerName'
88
+ ]
79
89
  ]);
80
90
  });
81
91
  it('gets called if references are missing', () => {
@@ -86,7 +96,7 @@ describe('parser', () => {
86
96
  sub UnusedFunction()
87
97
  end sub
88
98
  `);
89
- chai_1.expect(parser.references.functionStatements.map(x => x.name.text)).to.eql([
99
+ (0, chai_1.expect)(parser.references.functionStatements.map(x => x.name.text)).to.eql([
90
100
  'main',
91
101
  'UnusedFunction'
92
102
  ]);
@@ -94,12 +104,69 @@ describe('parser', () => {
94
104
  parser.ast.statements.splice(1);
95
105
  //tell the parser we modified the AST and need to regenerate references
96
106
  parser.invalidateReferences();
97
- chai_1.expect(parser['_references']).not.to.exist;
107
+ (0, chai_1.expect)(parser['_references']).not.to.exist;
98
108
  //calling `references` automatically regenerates the references
99
- chai_1.expect(parser.references.functionStatements.map(x => x.name.text)).to.eql([
109
+ (0, chai_1.expect)(parser.references.functionStatements.map(x => x.name.text)).to.eql([
100
110
  'main'
101
111
  ]);
102
112
  });
113
+ function expressionsToStrings(expressions) {
114
+ return [...expressions.values()].map(x => {
115
+ const file = new BrsFile_1.BrsFile('', '', new Program_1.Program({}));
116
+ const state = new BrsTranspileState_1.BrsTranspileState(file);
117
+ return new source_map_1.SourceNode(null, null, null, x.transpile(state)).toString();
118
+ });
119
+ }
120
+ it('works for references.expressions', () => {
121
+ const parser = Parser_1.Parser.parse(`
122
+ a += 1 + 2
123
+ a++
124
+ a--
125
+ some.node@.doCallfunc()
126
+ bravo(3 + 4).jump(callMe())
127
+ obj = {
128
+ val1: someValue
129
+ }
130
+ arr = [
131
+ one
132
+ ]
133
+ thing = alpha.bravo
134
+ alpha.charlie()
135
+ delta(alpha.delta)
136
+ call1().a.b.call2()
137
+ class Person
138
+ name as string = "bob"
139
+ end class
140
+ function thing(p1 = name.space.getSomething())
141
+
142
+ end function
143
+ `);
144
+ const expected = [
145
+ 'a += 1 + 2',
146
+ 'a++',
147
+ 'a--',
148
+ //currently the "toString" does a transpile, so that's why this is different.
149
+ 'some.node.callfunc("doCallfunc", invalid)',
150
+ '3 + 4',
151
+ 'callMe()',
152
+ 'bravo(3 + 4).jump(callMe())',
153
+ 'someValue',
154
+ '{\n val1: someValue\n}',
155
+ 'one',
156
+ '[\n one\n]',
157
+ 'alpha.bravo',
158
+ 'alpha.charlie()',
159
+ 'alpha.delta',
160
+ 'delta(alpha.delta)',
161
+ 'call1().a.b.call2()',
162
+ '"bob"',
163
+ 'name.space.getSomething()'
164
+ ].sort();
165
+ (0, chai_1.expect)(expressionsToStrings(parser.references.expressions).sort()).to.eql(expected);
166
+ //tell the parser we modified the AST and need to regenerate references
167
+ parser.invalidateReferences();
168
+ (0, chai_1.expect)(expressionsToStrings(parser.references.expressions).sort()).to.eql(expected);
169
+ });
103
170
  });
104
171
  describe('callfunc operator', () => {
105
172
  it('is not allowed in brightscript mode', () => {
@@ -109,7 +176,7 @@ describe('parser', () => {
109
176
  node@.doSomething(1, 2)
110
177
  end sub
111
178
  `, Parser_1.ParseMode.BrightScript);
112
- chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('callfunc operator').message);
179
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('callfunc operator').message);
113
180
  });
114
181
  it('does not cause parse errors', () => {
115
182
  var _a, _b, _c, _d, _e;
@@ -118,13 +185,13 @@ describe('parser', () => {
118
185
  node@.doSomething(1, 2)
119
186
  end sub
120
187
  `, Parser_1.ParseMode.BrighterScript);
121
- chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
122
- chai_1.expect((_e = (_d = (_c = (_b = parser.statements[0]) === null || _b === void 0 ? void 0 : _b.func) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.statements[0]) === null || _e === void 0 ? void 0 : _e.expression).to.be.instanceof(Expression_1.CallfuncExpression);
188
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
189
+ (0, chai_1.expect)((_e = (_d = (_c = (_b = parser.statements[0]) === null || _b === void 0 ? void 0 : _b.func) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.statements[0]) === null || _e === void 0 ? void 0 : _e.expression).to.be.instanceof(Expression_1.CallfuncExpression);
123
190
  });
124
191
  });
125
192
  describe('diagnostic locations', () => {
126
193
  it('tracks basic diagnostic locations', () => {
127
- chai_1.expect(parse(`
194
+ (0, chai_1.expect)(parse(`
128
195
  sub main()
129
196
  call()a
130
197
  end sub
@@ -140,8 +207,8 @@ describe('parser', () => {
140
207
  return "6c5cdf1"
141
208
  end functionasdf
142
209
  `).diagnostics;
143
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist.and.to.eql(DiagnosticMessages_1.DiagnosticMessages.expectedStatementOrFunctionCallButReceivedExpression().message);
144
- chai_1.expect((_b = diagnostics[0]) === null || _b === void 0 ? void 0 : _b.range).to.eql(vscode_languageserver_1.Range.create(3, 20, 3, 32));
210
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist.and.to.eql(DiagnosticMessages_1.DiagnosticMessages.expectedStatementOrFunctionCallButReceivedExpression().message);
211
+ (0, chai_1.expect)((_b = diagnostics[0]) === null || _b === void 0 ? void 0 : _b.range).to.eql(vscode_languageserver_1.Range.create(3, 20, 3, 32));
145
212
  });
146
213
  });
147
214
  describe('parse', () => {
@@ -154,7 +221,7 @@ describe('parser', () => {
154
221
  end function()
155
222
  end sub
156
223
  `);
157
- testHelpers_spec_1.expectZeroDiagnostics(parser);
224
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
158
225
  });
159
226
  it('supports grouped iife in assignment', () => {
160
227
  const parser = parse(`
@@ -165,7 +232,7 @@ describe('parser', () => {
165
232
  end function)()
166
233
  end sub
167
234
  `);
168
- testHelpers_spec_1.expectZeroDiagnostics(parser);
235
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
169
236
  });
170
237
  it('supports returning iife call', () => {
171
238
  const parser = parse(`
@@ -174,11 +241,11 @@ describe('parser', () => {
174
241
  end sub)()
175
242
  end sub
176
243
  `);
177
- testHelpers_spec_1.expectZeroDiagnostics(parser);
244
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
178
245
  });
179
246
  it('supports using "interface" as parameter name', () => {
180
247
  var _a;
181
- chai_1.expect((_a = parse(`
248
+ (0, chai_1.expect)((_a = parse(`
182
249
  sub main(interface as object)
183
250
  end sub
184
251
  `, Parser_1.ParseMode.BrighterScript).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
@@ -186,7 +253,7 @@ describe('parser', () => {
186
253
  describe('namespace', () => {
187
254
  it('catches namespaces declared not at root level', () => {
188
255
  var _a;
189
- chai_1.expect((_a = parse(`
256
+ (0, chai_1.expect)((_a = parse(`
190
257
  sub main()
191
258
  namespace Name.Space
192
259
  end namespace
@@ -199,8 +266,8 @@ describe('parser', () => {
199
266
  namespace Name.Space
200
267
  end namespace
201
268
  `, Parser_1.ParseMode.BrighterScript);
202
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
203
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
269
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
270
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
204
271
  });
205
272
  it('includes body', () => {
206
273
  var _a;
@@ -210,9 +277,9 @@ describe('parser', () => {
210
277
  end sub
211
278
  end namespace
212
279
  `, Parser_1.ParseMode.BrighterScript);
213
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
214
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
215
- chai_1.expect(statements[0].body.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
280
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
281
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
282
+ (0, chai_1.expect)(statements[0].body.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
216
283
  });
217
284
  it('supports comments and newlines', () => {
218
285
  var _a;
@@ -228,7 +295,7 @@ describe('parser', () => {
228
295
  'comment
229
296
  end namespace 'comment
230
297
  `, Parser_1.ParseMode.BrighterScript);
231
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
298
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
232
299
  });
233
300
  it('catches missing name', () => {
234
301
  var _a;
@@ -236,7 +303,7 @@ describe('parser', () => {
236
303
  namespace
237
304
  end namespace
238
305
  `, Parser_1.ParseMode.BrighterScript);
239
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifierAfterKeyword('namespace').message);
306
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifierAfterKeyword('namespace').message);
240
307
  });
241
308
  it('recovers after missing `end namespace`', () => {
242
309
  var _a, _b, _c;
@@ -245,9 +312,9 @@ describe('parser', () => {
245
312
  sub main()
246
313
  end sub
247
314
  `, Parser_1.ParseMode.BrighterScript);
248
- chai_1.expect(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
249
- chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.couldNotFindMatchingEndKeyword('namespace').message);
250
- chai_1.expect((_c = (_b = parser.ast.statements[0]) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
315
+ (0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
316
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.couldNotFindMatchingEndKeyword('namespace').message);
317
+ (0, chai_1.expect)((_c = (_b = parser.ast.statements[0]) === null || _b === void 0 ? void 0 : _b.body) === null || _c === void 0 ? void 0 : _c.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
251
318
  });
252
319
  it('adds diagnostic when encountering namespace in brightscript mode', () => {
253
320
  var _a;
@@ -255,7 +322,7 @@ describe('parser', () => {
255
322
  namespace Name.Space
256
323
  end namespace
257
324
  `);
258
- chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('namespace').message);
325
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('namespace').message);
259
326
  });
260
327
  it('declares a symbol table for the namespace', () => {
261
328
  let parser = parse(`
@@ -269,13 +336,13 @@ describe('parser', () => {
269
336
  end function
270
337
  end namespace
271
338
  `, Parser_1.ParseMode.BrighterScript);
272
- chai_1.expect(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
339
+ (0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
273
340
  const namespaceStmt = parser.ast.statements[0];
274
- chai_1.expect(namespaceStmt.symbolTable).to.be.instanceof(SymbolTable_1.SymbolTable);
275
- chai_1.expect(namespaceStmt.symbolTable.getSymbolType('funcInt').toString()).to.equal('function funcInt() as integer');
276
- chai_1.expect(namespaceStmt.symbolTable.getSymbolType('funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
341
+ (0, chai_1.expect)(namespaceStmt.symbolTable).to.be.instanceof(SymbolTable_1.SymbolTable);
342
+ (0, chai_1.expect)(namespaceStmt.symbolTable.getSymbolType('funcInt').toString()).to.equal('function funcInt() as integer');
343
+ (0, chai_1.expect)(namespaceStmt.symbolTable.getSymbolType('funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
277
344
  const strFunctionType = namespaceStmt.symbolTable.getSymbolType('funcStr');
278
- chai_1.expect(strFunctionType.returnType.toString()).to.equal('string');
345
+ (0, chai_1.expect)(strFunctionType.returnType.toString()).to.equal('string');
279
346
  });
280
347
  it('adds a fully qualified name of a function in a namespace to the parsers symbol table', () => {
281
348
  let parser = parse(`
@@ -289,13 +356,13 @@ describe('parser', () => {
289
356
  end function
290
357
  end namespace
291
358
  `, Parser_1.ParseMode.BrighterScript);
292
- chai_1.expect(parser.symbolTable.getSymbolType('Name.Space.funcInt')).to.be.instanceof(FunctionType_1.FunctionType);
293
- chai_1.expect(parser.symbolTable.getSymbolType('Name.Space.funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
359
+ (0, chai_1.expect)(parser.symbolTable.getSymbolType('Name.Space.funcInt')).to.be.instanceof(FunctionType_1.FunctionType);
360
+ (0, chai_1.expect)(parser.symbolTable.getSymbolType('Name.Space.funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
294
361
  });
295
362
  });
296
363
  it('supports << operator', () => {
297
364
  var _a;
298
- chai_1.expect((_a = parse(`
365
+ (0, chai_1.expect)((_a = parse(`
299
366
  sub main()
300
367
  print ((r << 24) + (g << 16) + (b << 8) + a)
301
368
  end sub
@@ -303,7 +370,7 @@ describe('parser', () => {
303
370
  });
304
371
  it('supports >> operator', () => {
305
372
  var _a;
306
- chai_1.expect((_a = parse(`
373
+ (0, chai_1.expect)((_a = parse(`
307
374
  sub main()
308
375
  print ((r >> 24) + (g >> 16) + (b >> 8) + a)
309
376
  end sub
@@ -311,7 +378,7 @@ describe('parser', () => {
311
378
  });
312
379
  it('allows global function names with same as token to be called', () => {
313
380
  var _a;
314
- chai_1.expect((_a = parse(`
381
+ (0, chai_1.expect)((_a = parse(`
315
382
  sub main()
316
383
  print string(123)
317
384
  end sub
@@ -325,18 +392,18 @@ describe('parser', () => {
325
392
  age = personXml.firstChild@age
326
393
  end sub
327
394
  `);
328
- chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
395
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
329
396
  let statements = parser.statements[0].func.body.statements;
330
397
  let first = statements[0].value;
331
- chai_1.expect(first).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
332
- chai_1.expect(first.name.text).to.equal('firstName');
333
- chai_1.expect(first.at.text).to.equal('@');
334
- chai_1.expect(first.obj.name.text).to.equal('personXml');
398
+ (0, chai_1.expect)(first).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
399
+ (0, chai_1.expect)(first.name.text).to.equal('firstName');
400
+ (0, chai_1.expect)(first.at.text).to.equal('@');
401
+ (0, chai_1.expect)(first.obj.name.text).to.equal('personXml');
335
402
  let second = statements[1].value;
336
- chai_1.expect(second).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
337
- chai_1.expect(second.name.text).to.equal('age');
338
- chai_1.expect(second.at.text).to.equal('@');
339
- chai_1.expect(second.obj.name.text).to.equal('firstChild');
403
+ (0, chai_1.expect)(second).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
404
+ (0, chai_1.expect)(second.name.text).to.equal('age');
405
+ (0, chai_1.expect)(second.at.text).to.equal('@');
406
+ (0, chai_1.expect)(second.obj.name.text).to.equal('firstChild');
340
407
  });
341
408
  it('does not allow chaining of @ symbols', () => {
342
409
  let parser = parse(`
@@ -345,58 +412,58 @@ describe('parser', () => {
345
412
  name = personXml@name@age@shoeSize
346
413
  end sub
347
414
  `);
348
- chai_1.expect(parser.diagnostics).not.to.be.empty;
415
+ (0, chai_1.expect)(parser.diagnostics).not.to.be.empty;
349
416
  });
350
417
  it('unknown function type does not invalidate rest of function', () => {
351
418
  let { statements, diagnostics } = parse(`
352
419
  function log() as UNKNOWN_TYPE
353
420
  end function
354
421
  `, Parser_1.ParseMode.BrightScript);
355
- chai_1.expect(diagnostics.length).to.be.greaterThan(0);
356
- chai_1.expect(statements[0]).to.exist;
422
+ (0, chai_1.expect)(diagnostics.length).to.be.greaterThan(0);
423
+ (0, chai_1.expect)(statements[0]).to.exist;
357
424
  });
358
425
  it('unknown function type is not a problem in Brighterscript mode', () => {
359
426
  let { statements, diagnostics } = parse(`
360
427
  function log() as UNKNOWN_TYPE
361
428
  end function
362
429
  `, Parser_1.ParseMode.BrighterScript);
363
- chai_1.expect(diagnostics.length).to.equal(0);
364
- chai_1.expect(statements[0]).to.exist;
430
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
431
+ (0, chai_1.expect)(statements[0]).to.exist;
365
432
  });
366
433
  it('allows namespaced function type in Brighterscript mode', () => {
367
434
  let { statements, diagnostics } = parse(`
368
435
  function log() as SOME_NAMESPACE.UNKNOWN_TYPE
369
436
  end function
370
437
  `, Parser_1.ParseMode.BrighterScript);
371
- chai_1.expect(diagnostics.length).to.equal(0);
372
- chai_1.expect(statements[0]).to.exist;
438
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
439
+ (0, chai_1.expect)(statements[0]).to.exist;
373
440
  });
374
441
  it('allows custom parameter types in BrighterscriptMode', () => {
375
442
  let { statements, diagnostics } = parse(`
376
443
  sub foo(value as UNKNOWN_TYPE)
377
444
  end sub
378
445
  `, Parser_1.ParseMode.BrighterScript);
379
- chai_1.expect(diagnostics.length).to.equal(0);
380
- chai_1.expect(statements[0]).to.exist;
446
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
447
+ (0, chai_1.expect)(statements[0]).to.exist;
381
448
  });
382
449
  it('does not allow custom parameter types in Brightscript Mode', () => {
383
450
  let { diagnostics } = parse(`
384
451
  sub foo(value as UNKNOWN_TYPE)
385
452
  end sub
386
453
  `, Parser_1.ParseMode.BrightScript);
387
- chai_1.expect(diagnostics.length).not.to.equal(0);
454
+ (0, chai_1.expect)(diagnostics.length).not.to.equal(0);
388
455
  });
389
456
  it('allows custom namespaced parameter types in BrighterscriptMode', () => {
390
457
  let { statements, diagnostics } = parse(`
391
458
  sub foo(value as SOME_NAMESPACE.UNKNOWN_TYPE)
392
459
  end sub
393
460
  `, Parser_1.ParseMode.BrighterScript);
394
- chai_1.expect(diagnostics.length).to.equal(0);
395
- chai_1.expect(statements[0]).to.exist;
461
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
462
+ (0, chai_1.expect)(statements[0]).to.exist;
396
463
  });
397
464
  it('works with conditionals', () => {
398
465
  var _a;
399
- chai_1.expect((_a = parse(`
466
+ (0, chai_1.expect)((_a = parse(`
400
467
  function printNumber()
401
468
  if true then
402
469
  print 1
@@ -408,11 +475,11 @@ describe('parser', () => {
408
475
  });
409
476
  it('supports single-line if statements', () => {
410
477
  var _a;
411
- chai_1.expect((_a = parse(`If true Then print "error" : Stop`).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
478
+ (0, chai_1.expect)((_a = parse(`If true Then print "error" : Stop`).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
412
479
  });
413
480
  it('works with excess newlines', () => {
414
481
  var _a;
415
- let { tokens } = lexer_1.Lexer.scan('function boolToNumber() as string\n\n' +
482
+ let { tokens } = Lexer_1.Lexer.scan('function boolToNumber() as string\n\n' +
416
483
  ' if true then\n\n' +
417
484
  ' print 1\n\n' +
418
485
  ' elseif true then\n\n' +
@@ -421,39 +488,39 @@ describe('parser', () => {
421
488
  ' print 1\n\n' +
422
489
  ' end if\n\n' +
423
490
  'end function\n\n');
424
- chai_1.expect((_a = Parser_1.Parser.parse(tokens).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
491
+ (0, chai_1.expect)((_a = Parser_1.Parser.parse(tokens).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
425
492
  });
426
493
  it('does not invalidate entire file when line ends with a period', () => {
427
- let { tokens } = lexer_1.Lexer.scan(`
494
+ let { tokens } = Lexer_1.Lexer.scan(`
428
495
  sub main()
429
496
  person.a
430
497
  end sub
431
498
 
432
499
  `);
433
500
  let { diagnostics } = Parser_1.Parser.parse(tokens);
434
- chai_1.expect(diagnostics).to.be.lengthOf(1, 'Error count should be 0');
501
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1, 'Error count should be 0');
435
502
  });
436
503
  it.skip('allows printing object with trailing period', () => {
437
- let { tokens } = lexer_1.Lexer.scan(`print a.`);
504
+ let { tokens } = Lexer_1.Lexer.scan(`print a.`);
438
505
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
439
506
  let printStatement = statements[0];
440
- chai_1.expect(diagnostics).to.be.empty;
441
- chai_1.expect(printStatement).to.be.instanceof(Statement_1.PrintStatement);
442
- chai_1.expect(printStatement.expressions[0]).to.be.instanceof(Expression_1.DottedGetExpression);
507
+ (0, chai_1.expect)(diagnostics).to.be.empty;
508
+ (0, chai_1.expect)(printStatement).to.be.instanceof(Statement_1.PrintStatement);
509
+ (0, chai_1.expect)(printStatement.expressions[0]).to.be.instanceof(Expression_1.DottedGetExpression);
443
510
  });
444
511
  describe('comments', () => {
445
512
  it('combines multi-line comments', () => {
446
- let { tokens } = lexer_1.Lexer.scan(`
513
+ let { tokens } = Lexer_1.Lexer.scan(`
447
514
  'line 1
448
515
  'line 2
449
516
  'line 3
450
517
  `);
451
518
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
452
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
453
- chai_1.expect(statements[0].text).to.equal(`'line 1\n'line 2\n'line 3`);
519
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
520
+ (0, chai_1.expect)(statements[0].text).to.equal(`'line 1\n'line 2\n'line 3`);
454
521
  });
455
522
  it('does not combile comments separated by newlines', () => {
456
- let { tokens } = lexer_1.Lexer.scan(`
523
+ let { tokens } = Lexer_1.Lexer.scan(`
457
524
  'line 1
458
525
 
459
526
  'line 2
@@ -461,57 +528,57 @@ describe('parser', () => {
461
528
  'line 3
462
529
  `);
463
530
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
464
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
465
- chai_1.expect(statements).to.be.lengthOf(3);
466
- chai_1.expect(statements[0].text).to.equal(`'line 1`);
467
- chai_1.expect(statements[1].text).to.equal(`'line 2`);
468
- chai_1.expect(statements[2].text).to.equal(`'line 3`);
531
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
532
+ (0, chai_1.expect)(statements).to.be.lengthOf(3);
533
+ (0, chai_1.expect)(statements[0].text).to.equal(`'line 1`);
534
+ (0, chai_1.expect)(statements[1].text).to.equal(`'line 2`);
535
+ (0, chai_1.expect)(statements[2].text).to.equal(`'line 3`);
469
536
  });
470
537
  it('works after print statement', () => {
471
- let { tokens } = lexer_1.Lexer.scan(`
538
+ let { tokens } = Lexer_1.Lexer.scan(`
472
539
  sub main()
473
540
  print "hi" 'comment 1
474
541
  end sub
475
542
  `);
476
543
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
477
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
478
- chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 1`);
544
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
545
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 1`);
479
546
  });
480
547
  it('declaration-level', () => {
481
- let { tokens } = lexer_1.Lexer.scan(`
548
+ let { tokens } = Lexer_1.Lexer.scan(`
482
549
  'comment 1
483
550
  function a()
484
551
  end function
485
552
  'comment 2
486
553
  `);
487
554
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
488
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
489
- chai_1.expect(statements[0].text).to.equal(`'comment 1`);
490
- chai_1.expect(statements[2].text).to.equal(`'comment 2`);
555
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
556
+ (0, chai_1.expect)(statements[0].text).to.equal(`'comment 1`);
557
+ (0, chai_1.expect)(statements[2].text).to.equal(`'comment 2`);
491
558
  });
492
559
  it('works in aa literal as its own statement', () => {
493
- let { tokens } = lexer_1.Lexer.scan(`
560
+ let { tokens } = Lexer_1.Lexer.scan(`
494
561
  obj = {
495
562
  "name": true,
496
563
  'comment
497
564
  }
498
565
  `);
499
566
  let { diagnostics } = Parser_1.Parser.parse(tokens);
500
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
567
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
501
568
  });
502
569
  it('parses after function call', () => {
503
- let { tokens } = lexer_1.Lexer.scan(`
570
+ let { tokens } = Lexer_1.Lexer.scan(`
504
571
  sub Main()
505
572
  name = "Hello"
506
573
  DoSomething(name) 'comment 1
507
574
  end sub
508
575
  `);
509
576
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
510
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
511
- chai_1.expect(statements[0].func.body.statements[2].text).to.equal(`'comment 1`);
577
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
578
+ (0, chai_1.expect)(statements[0].func.body.statements[2].text).to.equal(`'comment 1`);
512
579
  });
513
580
  it('function', () => {
514
- let { tokens } = lexer_1.Lexer.scan(`
581
+ let { tokens } = Lexer_1.Lexer.scan(`
515
582
  function a() 'comment 1
516
583
  'comment 2
517
584
  num = 1
@@ -519,14 +586,14 @@ describe('parser', () => {
519
586
  end function 'comment 4
520
587
  `);
521
588
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
522
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
523
- chai_1.expect(statements[0].func.body.statements[0].text).to.equal(`'comment 1`);
524
- chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 2`);
525
- chai_1.expect(statements[0].func.body.statements[3].text).to.equal(`'comment 3`);
526
- chai_1.expect(statements[1].text).to.equal(`'comment 4`);
589
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
590
+ (0, chai_1.expect)(statements[0].func.body.statements[0].text).to.equal(`'comment 1`);
591
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 2`);
592
+ (0, chai_1.expect)(statements[0].func.body.statements[3].text).to.equal(`'comment 3`);
593
+ (0, chai_1.expect)(statements[1].text).to.equal(`'comment 4`);
527
594
  });
528
595
  it('if statement`', () => {
529
- let { tokens } = lexer_1.Lexer.scan(`
596
+ let { tokens } = Lexer_1.Lexer.scan(`
530
597
  function a()
531
598
  if true then 'comment 1
532
599
  'comment 2
@@ -544,21 +611,21 @@ describe('parser', () => {
544
611
  end function
545
612
  `);
546
613
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
547
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
614
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
548
615
  let fnSmt = statements[0];
549
- if (reflection_1.isFunctionStatement(fnSmt)) {
616
+ if ((0, reflection_1.isFunctionStatement)(fnSmt)) {
550
617
  let ifStmt = fnSmt.func.body.statements[0];
551
- if (reflection_1.isIfStatement(ifStmt)) {
618
+ if ((0, reflection_1.isIfStatement)(ifStmt)) {
552
619
  expectCommentWithText(ifStmt.thenBranch.statements[0], `'comment 1`);
553
620
  expectCommentWithText(ifStmt.thenBranch.statements[1], `'comment 2`);
554
621
  expectCommentWithText(ifStmt.thenBranch.statements[3], `'comment 3`);
555
622
  let elseIfBranch = ifStmt.elseBranch;
556
- if (reflection_1.isIfStatement(elseIfBranch)) {
623
+ if ((0, reflection_1.isIfStatement)(elseIfBranch)) {
557
624
  expectCommentWithText(elseIfBranch.thenBranch.statements[0], `'comment 4`);
558
625
  expectCommentWithText(elseIfBranch.thenBranch.statements[1], `'comment 5`);
559
626
  expectCommentWithText(elseIfBranch.thenBranch.statements[3], `'comment 6`);
560
627
  let elseBranch = elseIfBranch.elseBranch;
561
- if (reflection_1.isBlock(elseBranch)) {
628
+ if ((0, reflection_1.isBlock)(elseBranch)) {
562
629
  expectCommentWithText(elseBranch.statements[0], `'comment 7`);
563
630
  expectCommentWithText(elseBranch.statements[1], `'comment 8`);
564
631
  expectCommentWithText(elseBranch.statements[3], `'comment 9`);
@@ -581,7 +648,7 @@ describe('parser', () => {
581
648
  }
582
649
  });
583
650
  it('while', () => {
584
- let { tokens } = lexer_1.Lexer.scan(`
651
+ let { tokens } = Lexer_1.Lexer.scan(`
585
652
  function a()
586
653
  while true 'comment 1
587
654
  'comment 2
@@ -591,15 +658,15 @@ describe('parser', () => {
591
658
  end function
592
659
  `);
593
660
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
594
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
661
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
595
662
  let stmt = statements[0].func.body.statements[0];
596
- chai_1.expect(stmt.body.statements[0].text).to.equal(`'comment 1`);
597
- chai_1.expect(stmt.body.statements[1].text).to.equal(`'comment 2`);
598
- chai_1.expect(stmt.body.statements[3].text).to.equal(`'comment 3`);
599
- chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
663
+ (0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
664
+ (0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
665
+ (0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
666
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
600
667
  });
601
668
  it('for', () => {
602
- let { tokens } = lexer_1.Lexer.scan(`
669
+ let { tokens } = Lexer_1.Lexer.scan(`
603
670
  function a()
604
671
  for i = 0 to 10 step 1 'comment 1
605
672
  'comment 2
@@ -609,15 +676,15 @@ describe('parser', () => {
609
676
  end function
610
677
  `);
611
678
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
612
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
679
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
613
680
  let stmt = statements[0].func.body.statements[0];
614
- chai_1.expect(stmt.body.statements[0].text).to.equal(`'comment 1`);
615
- chai_1.expect(stmt.body.statements[1].text).to.equal(`'comment 2`);
616
- chai_1.expect(stmt.body.statements[3].text).to.equal(`'comment 3`);
617
- chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
681
+ (0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
682
+ (0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
683
+ (0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
684
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
618
685
  });
619
686
  it('for each', () => {
620
- let { tokens } = lexer_1.Lexer.scan(`
687
+ let { tokens } = Lexer_1.Lexer.scan(`
621
688
  function a()
622
689
  for each val in [1,2,3] 'comment 1
623
690
  'comment 2
@@ -627,12 +694,12 @@ describe('parser', () => {
627
694
  end function
628
695
  `);
629
696
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
630
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
697
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
631
698
  let stmt = statements[0].func.body.statements[0];
632
- chai_1.expect(stmt.body.statements[0].text).to.equal(`'comment 1`);
633
- chai_1.expect(stmt.body.statements[1].text).to.equal(`'comment 2`);
634
- chai_1.expect(stmt.body.statements[3].text).to.equal(`'comment 3`);
635
- chai_1.expect(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
699
+ (0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
700
+ (0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
701
+ (0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
702
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
636
703
  });
637
704
  });
638
705
  });
@@ -644,7 +711,7 @@ describe('parser', () => {
644
711
  then = true
645
712
  end sub
646
713
  `);
647
- chai_1.expect(diagnostics).to.be.lengthOf(1);
714
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
648
715
  });
649
716
  it('is allowed as an AA property name', () => {
650
717
  var _a;
@@ -657,7 +724,7 @@ describe('parser', () => {
657
724
  print person.then
658
725
  end sub
659
726
  `);
660
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
727
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
661
728
  });
662
729
  });
663
730
  it('"end" is not allowed as a local identifier', () => {
@@ -666,20 +733,20 @@ describe('parser', () => {
666
733
  end = true
667
734
  end sub
668
735
  `);
669
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
736
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
670
737
  });
671
738
  it('none of them can be used as local variables', () => {
672
- let reservedWords = new Set(lexer_1.ReservedWords);
739
+ let reservedWords = new Set(TokenKind_1.ReservedWords);
673
740
  //remove the rem keyword because it's a comment...won't cause error
674
741
  reservedWords.delete('rem');
675
742
  for (let reservedWord of reservedWords) {
676
- let { tokens } = lexer_1.Lexer.scan(`
743
+ let { tokens } = Lexer_1.Lexer.scan(`
677
744
  sub main()
678
745
  ${reservedWord} = true
679
746
  end sub
680
747
  `);
681
748
  let { diagnostics } = Parser_1.Parser.parse(tokens);
682
- chai_1.expect(diagnostics, `assigning to reserved word "${reservedWord}" should have been an error`).to.be.length.greaterThan(0);
749
+ (0, chai_1.expect)(diagnostics, `assigning to reserved word "${reservedWord}" should have been an error`).to.be.length.greaterThan(0);
683
750
  }
684
751
  });
685
752
  });
@@ -689,24 +756,24 @@ describe('parser', () => {
689
756
  let { statements, diagnostics } = parse(`
690
757
  import "somePath"
691
758
  `, Parser_1.ParseMode.BrighterScript);
692
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
693
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
759
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
760
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
694
761
  });
695
762
  it('catches import statements used in brightscript files', () => {
696
763
  var _a;
697
764
  let { statements, diagnostics } = parse(`
698
765
  import "somePath"
699
766
  `, Parser_1.ParseMode.BrightScript);
700
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('import statements').message);
701
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
767
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('import statements').message);
768
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
702
769
  });
703
770
  it('catches missing file path', () => {
704
771
  var _a;
705
772
  let { statements, diagnostics } = parse(`
706
773
  import
707
774
  `, Parser_1.ParseMode.BrighterScript);
708
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedStringLiteralAfterKeyword('import').message);
709
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
775
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedStringLiteralAfterKeyword('import').message);
776
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
710
777
  });
711
778
  });
712
779
  describe('Annotations', () => {
@@ -717,7 +784,7 @@ describe('parser', () => {
717
784
  sub main()
718
785
  end sub
719
786
  `, Parser_1.ParseMode.BrighterScript);
720
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unexpectedToken('@').message);
787
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unexpectedToken('@').message);
721
788
  });
722
789
  it('properly handles empty annotation above class method', () => {
723
790
  var _a;
@@ -729,7 +796,7 @@ describe('parser', () => {
729
796
  end sub
730
797
  end class
731
798
  `, Parser_1.ParseMode.BrighterScript);
732
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier().message);
799
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier().message);
733
800
  });
734
801
  it('parses with error if annotation is not followed by a statement', () => {
735
802
  var _a, _b, _c, _d;
@@ -743,11 +810,11 @@ describe('parser', () => {
743
810
  end class
744
811
  @meta1
745
812
  `, Parser_1.ParseMode.BrighterScript);
746
- chai_1.expect(diagnostics.length).to.equal(4);
747
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
748
- chai_1.expect((_b = diagnostics[1]) === null || _b === void 0 ? void 0 : _b.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
749
- chai_1.expect((_c = diagnostics[2]) === null || _c === void 0 ? void 0 : _c.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
750
- chai_1.expect((_d = diagnostics[3]) === null || _d === void 0 ? void 0 : _d.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
813
+ (0, chai_1.expect)(diagnostics.length).to.equal(4);
814
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
815
+ (0, chai_1.expect)((_b = diagnostics[1]) === null || _b === void 0 ? void 0 : _b.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
816
+ (0, chai_1.expect)((_c = diagnostics[2]) === null || _c === void 0 ? void 0 : _c.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
817
+ (0, chai_1.expect)((_d = diagnostics[3]) === null || _d === void 0 ? void 0 : _d.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
751
818
  });
752
819
  it('attaches an annotation to next statement', () => {
753
820
  var _a;
@@ -759,18 +826,18 @@ describe('parser', () => {
759
826
  @meta2 sub init()
760
827
  end sub
761
828
  `, Parser_1.ParseMode.BrighterScript);
762
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
763
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
829
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
830
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
764
831
  let fn = statements[0];
765
- chai_1.expect(fn.annotations).to.exist;
766
- chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
767
- chai_1.expect(fn.annotations[0].nameToken.text).to.equal('meta1');
768
- chai_1.expect(fn.annotations[0].name).to.equal('meta1');
769
- chai_1.expect(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
832
+ (0, chai_1.expect)(fn.annotations).to.exist;
833
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
834
+ (0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta1');
835
+ (0, chai_1.expect)(fn.annotations[0].name).to.equal('meta1');
836
+ (0, chai_1.expect)(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
770
837
  fn = statements[1];
771
- chai_1.expect(fn.annotations).to.exist;
772
- chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
773
- chai_1.expect(fn.annotations[0].nameToken.text).to.equal('meta2');
838
+ (0, chai_1.expect)(fn.annotations).to.exist;
839
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
840
+ (0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta2');
774
841
  });
775
842
  it('attaches annotations inside a function body', () => {
776
843
  var _a, _b;
@@ -780,13 +847,13 @@ describe('parser', () => {
780
847
  print "hello"
781
848
  end function
782
849
  `, Parser_1.ParseMode.BrighterScript);
783
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
850
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
784
851
  let fn = statements[0];
785
852
  let fnStatements = fn.func.body.statements;
786
853
  let stat = fnStatements[0];
787
- chai_1.expect(stat).to.exist;
788
- chai_1.expect((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
789
- chai_1.expect(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
854
+ (0, chai_1.expect)(stat).to.exist;
855
+ (0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
856
+ (0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
790
857
  });
791
858
  it('attaches multiple annotations to next statement', () => {
792
859
  var _a;
@@ -796,14 +863,14 @@ describe('parser', () => {
796
863
  function main()
797
864
  end function
798
865
  `, Parser_1.ParseMode.BrighterScript);
799
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
800
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
866
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
867
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
801
868
  let fn = statements[0];
802
- chai_1.expect(fn.annotations).to.exist;
803
- chai_1.expect(fn.annotations.length).to.equal(3);
804
- chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
805
- chai_1.expect(fn.annotations[1]).to.be.instanceof(Expression_1.AnnotationExpression);
806
- chai_1.expect(fn.annotations[2]).to.be.instanceof(Expression_1.AnnotationExpression);
869
+ (0, chai_1.expect)(fn.annotations).to.exist;
870
+ (0, chai_1.expect)(fn.annotations.length).to.equal(3);
871
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
872
+ (0, chai_1.expect)(fn.annotations[1]).to.be.instanceof(Expression_1.AnnotationExpression);
873
+ (0, chai_1.expect)(fn.annotations[2]).to.be.instanceof(Expression_1.AnnotationExpression);
807
874
  });
808
875
  it('allows annotations with parameters', () => {
809
876
  var _a;
@@ -812,12 +879,12 @@ describe('parser', () => {
812
879
  function main()
813
880
  end function
814
881
  `, Parser_1.ParseMode.BrighterScript);
815
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
882
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
816
883
  let fn = statements[0];
817
- chai_1.expect(fn.annotations).to.exist;
818
- chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
819
- chai_1.expect(fn.annotations[0].nameToken.text).to.equal('meta1');
820
- chai_1.expect(fn.annotations[0].call).to.be.instanceof(Expression_1.CallExpression);
884
+ (0, chai_1.expect)(fn.annotations).to.exist;
885
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
886
+ (0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta1');
887
+ (0, chai_1.expect)(fn.annotations[0].call).to.be.instanceof(Expression_1.CallExpression);
821
888
  });
822
889
  it('attaches annotations to a class', () => {
823
890
  var _a, _b;
@@ -829,10 +896,10 @@ describe('parser', () => {
829
896
  end function
830
897
  end class
831
898
  `, Parser_1.ParseMode.BrighterScript);
832
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
899
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
833
900
  let cs = statements[0];
834
- chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
835
- chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
901
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
902
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
836
903
  });
837
904
  it('attaches annotations to multiple clases', () => {
838
905
  var _a, _b, _c;
@@ -850,15 +917,15 @@ describe('parser', () => {
850
917
  end function
851
918
  end class
852
919
  `, Parser_1.ParseMode.BrighterScript);
853
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
920
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
854
921
  let cs = statements[0];
855
- chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
856
- chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
857
- chai_1.expect(cs.annotations[0].name).to.equal('meta1');
922
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
923
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
924
+ (0, chai_1.expect)(cs.annotations[0].name).to.equal('meta1');
858
925
  let cs2 = statements[1];
859
- chai_1.expect((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
860
- chai_1.expect(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
861
- chai_1.expect(cs2.annotations[0].name).to.equal('meta2');
926
+ (0, chai_1.expect)((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
927
+ (0, chai_1.expect)(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
928
+ (0, chai_1.expect)(cs2.annotations[0].name).to.equal('meta2');
862
929
  });
863
930
  it('attaches annotations to a namespaced class', () => {
864
931
  var _a, _b;
@@ -872,11 +939,11 @@ describe('parser', () => {
872
939
  end class
873
940
  end namespace
874
941
  `, Parser_1.ParseMode.BrighterScript);
875
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
942
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
876
943
  let ns = statements[0];
877
944
  let cs = ns.body.statements[0];
878
- chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
879
- chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
945
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
946
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
880
947
  });
881
948
  it('attaches annotations to a namespaced class - multiple', () => {
882
949
  var _a, _b, _c;
@@ -896,16 +963,16 @@ describe('parser', () => {
896
963
  end class
897
964
  end namespace
898
965
  `, Parser_1.ParseMode.BrighterScript);
899
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
966
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
900
967
  let ns = statements[0];
901
968
  let cs = ns.body.statements[0];
902
- chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
903
- chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
904
- chai_1.expect(cs.annotations[0].name).to.equal('meta1');
969
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
970
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
971
+ (0, chai_1.expect)(cs.annotations[0].name).to.equal('meta1');
905
972
  let cs2 = ns.body.statements[1];
906
- chai_1.expect((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
907
- chai_1.expect(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
908
- chai_1.expect(cs2.annotations[0].name).to.equal('meta2');
973
+ (0, chai_1.expect)((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
974
+ (0, chai_1.expect)(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
975
+ (0, chai_1.expect)(cs2.annotations[0].name).to.equal('meta2');
909
976
  });
910
977
  it('attaches annotations to a class constructor', () => {
911
978
  var _a, _b;
@@ -920,11 +987,11 @@ describe('parser', () => {
920
987
  end function
921
988
  end class
922
989
  `, Parser_1.ParseMode.BrighterScript);
923
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
990
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
924
991
  let cs = statements[0];
925
992
  let stat = cs.body[0];
926
- chai_1.expect((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
927
- chai_1.expect(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
993
+ (0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
994
+ (0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
928
995
  });
929
996
  it('attaches annotations to a class methods', () => {
930
997
  var _a, _b;
@@ -939,11 +1006,11 @@ describe('parser', () => {
939
1006
  end function
940
1007
  end class
941
1008
  `, Parser_1.ParseMode.BrighterScript);
942
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1009
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
943
1010
  let cs = statements[0];
944
1011
  let stat = cs.body[1];
945
- chai_1.expect((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
946
- chai_1.expect(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1012
+ (0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
1013
+ (0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
947
1014
  });
948
1015
  it('attaches annotations to a class methods, fields and constructor', () => {
949
1016
  var _a, _b, _c, _d, _e;
@@ -967,19 +1034,19 @@ describe('parser', () => {
967
1034
  public foo="bar"
968
1035
  end class
969
1036
  `, Parser_1.ParseMode.BrighterScript);
970
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1037
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
971
1038
  let cs = statements[0];
972
- chai_1.expect((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(2);
973
- chai_1.expect(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1039
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(2);
1040
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
974
1041
  let stat1 = cs.body[0];
975
1042
  let stat2 = cs.body[1];
976
1043
  let f1 = cs.body[2];
977
- chai_1.expect((_c = stat1.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(2);
978
- chai_1.expect(stat1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
979
- chai_1.expect((_d = stat2.annotations) === null || _d === void 0 ? void 0 : _d.length).to.equal(2);
980
- chai_1.expect(stat2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
981
- chai_1.expect((_e = f1.annotations) === null || _e === void 0 ? void 0 : _e.length).to.equal(2);
982
- chai_1.expect(f1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1044
+ (0, chai_1.expect)((_c = stat1.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(2);
1045
+ (0, chai_1.expect)(stat1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1046
+ (0, chai_1.expect)((_d = stat2.annotations) === null || _d === void 0 ? void 0 : _d.length).to.equal(2);
1047
+ (0, chai_1.expect)(stat2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1048
+ (0, chai_1.expect)((_e = f1.annotations) === null || _e === void 0 ? void 0 : _e.length).to.equal(2);
1049
+ (0, chai_1.expect)(f1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
983
1050
  });
984
1051
  it('ignores annotations on commented out lines', () => {
985
1052
  var _a;
@@ -990,9 +1057,9 @@ describe('parser', () => {
990
1057
  print "hello"
991
1058
  end function
992
1059
  `, Parser_1.ParseMode.BrighterScript);
993
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1060
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
994
1061
  let cs = statements[0];
995
- chai_1.expect(cs.annotations).to.be.undefined;
1062
+ (0, chai_1.expect)(cs.annotations).to.be.undefined;
996
1063
  });
997
1064
  it('can convert argument of an annotation to JS types', () => {
998
1065
  var _a;
@@ -1010,22 +1077,22 @@ describe('parser', () => {
1010
1077
  sub init()
1011
1078
  end sub
1012
1079
  `, Parser_1.ParseMode.BrighterScript);
1013
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1014
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1080
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1081
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1015
1082
  let fn = statements[0];
1016
- chai_1.expect(fn.annotations).to.exist;
1017
- chai_1.expect(fn.annotations[0].getArguments()).to.deep.equal([]);
1018
- chai_1.expect(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
1083
+ (0, chai_1.expect)(fn.annotations).to.exist;
1084
+ (0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([]);
1085
+ (0, chai_1.expect)(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
1019
1086
  fn = statements[1];
1020
- chai_1.expect(fn.annotations).to.exist;
1021
- chai_1.expect(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1022
- chai_1.expect(fn.annotations[0].getArguments()).to.deep.equal([
1087
+ (0, chai_1.expect)(fn.annotations).to.exist;
1088
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1089
+ (0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([
1023
1090
  'arg', 2, true,
1024
1091
  { prop: 'value' }, [1, 2],
1025
1092
  null
1026
1093
  ]);
1027
1094
  let allArgs = fn.annotations[0].getArguments(false);
1028
- chai_1.expect(allArgs.pop()).to.be.instanceOf(Expression_1.FunctionExpression);
1095
+ (0, chai_1.expect)(allArgs.pop()).to.be.instanceOf(Expression_1.FunctionExpression);
1029
1096
  });
1030
1097
  it('can handle negative numbers', () => {
1031
1098
  var _a;
@@ -1037,11 +1104,11 @@ describe('parser', () => {
1037
1104
  sub init()
1038
1105
  end sub
1039
1106
  `, Parser_1.ParseMode.BrighterScript);
1040
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1041
- chai_1.expect(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1107
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1108
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1042
1109
  let fn = statements[0];
1043
- chai_1.expect(fn.annotations).to.exist;
1044
- chai_1.expect(fn.annotations[0].getArguments()).to.deep.equal([-100]);
1110
+ (0, chai_1.expect)(fn.annotations).to.exist;
1111
+ (0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([-100]);
1045
1112
  });
1046
1113
  });
1047
1114
  describe('getBscTypeFromExpression', () => {
@@ -1054,8 +1121,8 @@ describe('parser', () => {
1054
1121
  end sub
1055
1122
  `);
1056
1123
  const func = parser.ast.statements[0].func;
1057
- const type = Parser_1.getBscTypeFromExpression(func.body.statements[0].value, func);
1058
- chai_1.expect(type.returnType).to.be.instanceof(VoidType_1.VoidType);
1124
+ const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
1125
+ (0, chai_1.expect)(type.returnType).to.be.instanceof(VoidType_1.VoidType);
1059
1126
  });
1060
1127
  it('computes return type for sub with explicit return type', () => {
1061
1128
  const parser = parse(`
@@ -1066,8 +1133,8 @@ describe('parser', () => {
1066
1133
  end sub
1067
1134
  `);
1068
1135
  const func = parser.ast.statements[0].func;
1069
- const type = Parser_1.getBscTypeFromExpression(func.body.statements[0].value, func);
1070
- chai_1.expect(type.returnType).to.be.instanceof(StringType_1.StringType);
1136
+ const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
1137
+ (0, chai_1.expect)(type.returnType).to.be.instanceof(StringType_1.StringType);
1071
1138
  });
1072
1139
  it('supports sub with custom return type', () => {
1073
1140
  const parser = parse(`
@@ -1080,11 +1147,25 @@ describe('parser', () => {
1080
1147
  class Person
1081
1148
  end class
1082
1149
  `, Parser_1.ParseMode.BrighterScript);
1083
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1150
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1084
1151
  const func = parser.ast.statements[0].func;
1085
- const type = Parser_1.getBscTypeFromExpression(func.body.statements[0].value, func);
1152
+ const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
1086
1153
  // Return type is LazyType, because "Person" is not fully known yet
1087
- chai_1.expect(type.returnType).to.be.instanceof(LazyType_1.LazyType);
1154
+ (0, chai_1.expect)(type.returnType).to.be.instanceof(LazyType_1.LazyType);
1155
+ });
1156
+ it('supports function with array return type', () => {
1157
+ const parser = parse(`
1158
+ sub main()
1159
+ getNums = sub() as integer[]
1160
+ return [1,2,3]
1161
+ end sub
1162
+ end sub
1163
+ `, Parser_1.ParseMode.BrighterScript);
1164
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1165
+ const func = parser.ast.statements[0].func;
1166
+ const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
1167
+ (0, chai_1.expect)(type.returnType).to.be.instanceof(ArrayType_1.ArrayType);
1168
+ (0, chai_1.expect)(type.returnType.getDefaultType()).to.be.instanceof(IntegerType_1.IntegerType);
1088
1169
  });
1089
1170
  });
1090
1171
  describe('symbolTable', () => {
@@ -1100,12 +1181,12 @@ describe('parser', () => {
1100
1181
  class CustomKlass
1101
1182
  end class
1102
1183
  `, Parser_1.ParseMode.BrighterScript);
1103
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1184
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1104
1185
  const mainSymbolTable = parser.references.functionExpressions[0].symbolTable;
1105
- chai_1.expect(mainSymbolTable.getSymbolType('someNum')).to.be.instanceof(IntegerType_1.IntegerType);
1106
- chai_1.expect(mainSymbolTable.getSymbolType('someString')).to.be.instanceof(StringType_1.StringType);
1107
- chai_1.expect(mainSymbolTable.getSymbolType('someObj')).to.be.instanceof(ObjectType_1.ObjectType);
1108
- chai_1.expect(mainSymbolTable.getSymbolType('someCustom')).to.be.instanceof(CustomType_1.CustomType);
1186
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someNum')).to.be.instanceof(IntegerType_1.IntegerType);
1187
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someString')).to.be.instanceof(StringType_1.StringType);
1188
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someObj')).to.be.instanceof(ObjectType_1.ObjectType);
1189
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someCustom')).to.be.instanceof(CustomType_1.CustomType);
1109
1190
  });
1110
1191
  it('stores typed parameters in functions', () => {
1111
1192
  const parser = parse(`
@@ -1113,11 +1194,11 @@ describe('parser', () => {
1113
1194
  temp = param2
1114
1195
  end sub
1115
1196
  `, Parser_1.ParseMode.BrighterScript);
1116
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1197
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1117
1198
  const someFuncSymbolTable = parser.references.functionExpressions[0].symbolTable;
1118
- chai_1.expect(someFuncSymbolTable.getSymbolType('param1')).to.be.instanceof(StringType_1.StringType);
1119
- chai_1.expect(someFuncSymbolTable.getSymbolType('param2')).to.be.instanceof(IntegerType_1.IntegerType);
1120
- chai_1.expect(someFuncSymbolTable.getSymbolType('temp')).to.be.instanceof(IntegerType_1.IntegerType);
1199
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('param1')).to.be.instanceof(StringType_1.StringType);
1200
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('param2')).to.be.instanceof(IntegerType_1.IntegerType);
1201
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('temp')).to.be.instanceof(IntegerType_1.IntegerType);
1121
1202
  });
1122
1203
  it('properly defers typing lazy types', () => {
1123
1204
  const parser = parse(`
@@ -1129,10 +1210,10 @@ describe('parser', () => {
1129
1210
  return "foo"
1130
1211
  end function
1131
1212
  `, Parser_1.ParseMode.BrighterScript);
1132
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1213
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1133
1214
  const someFuncSymbolTable = parser.references.functionExpressions[0].symbolTable;
1134
- chai_1.expect(reflection_1.isLazyType(someFuncSymbolTable.getSymbol('temp')[0].type)).to.be.true;
1135
- chai_1.expect(someFuncSymbolTable.getSymbolType('temp').toTypeString()).to.eq('string');
1215
+ (0, chai_1.expect)((0, reflection_1.isLazyType)(someFuncSymbolTable.getSymbol('temp')[0].type)).to.be.true;
1216
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('temp').toTypeString()).to.eq('string');
1136
1217
  });
1137
1218
  it('does not know about symbols declared in parent functions', () => {
1138
1219
  const parser = parse(`
@@ -1143,20 +1224,20 @@ describe('parser', () => {
1143
1224
  end sub
1144
1225
  end sub
1145
1226
  `, Parser_1.ParseMode.BrighterScript);
1146
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1227
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1147
1228
  const addOneSymbolTable = parser.references.functionExpressions[0].childFunctionExpressions[0].symbolTable;
1148
- chai_1.expect(reflection_1.isUninitializedType(addOneSymbolTable.getSymbolType('oldVal'))).to.be.true;
1229
+ (0, chai_1.expect)((0, reflection_1.isUninitializedType)(addOneSymbolTable.getSymbolType('oldVal'))).to.be.true;
1149
1230
  });
1150
1231
  it('finds params', () => {
1151
1232
  const parser = parse(`
1152
1233
  sub alert(p1, p2 as string, p3 = 1)
1153
1234
  end sub
1154
1235
  `, Parser_1.ParseMode.BrighterScript);
1155
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1156
- testHelpers_spec_1.expectSymbolTableEquals(parser.references.functionExpressions[0].symbolTable, [
1157
- ['p1', new DynamicType_1.DynamicType(), util_1.default.createRange(1, 26, 1, 28)],
1158
- ['p2', new StringType_1.StringType(), util_1.default.createRange(1, 30, 1, 32)],
1159
- ['p3', new IntegerType_1.IntegerType(), util_1.default.createRange(1, 44, 1, 46)]
1236
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1237
+ (0, testHelpers_spec_1.expectSymbolTableEquals)(parser.references.functionExpressions[0].symbolTable, [
1238
+ ['p1', new DynamicType_1.DynamicType(), util_1.util.createRange(1, 26, 1, 28)],
1239
+ ['p2', new StringType_1.StringType(), util_1.util.createRange(1, 30, 1, 32)],
1240
+ ['p3', new IntegerType_1.IntegerType(), util_1.util.createRange(1, 44, 1, 46)]
1160
1241
  ]);
1161
1242
  });
1162
1243
  describe('loops', () => {
@@ -1168,9 +1249,9 @@ describe('parser', () => {
1168
1249
  end for
1169
1250
  end sub
1170
1251
  `, Parser_1.ParseMode.BrighterScript);
1171
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1252
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1172
1253
  const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
1173
- chai_1.expect(currentSymbolTable.getSymbolType('i').toString()).to.eq('integer');
1254
+ (0, chai_1.expect)((0, reflection_1.isIntegerType)(currentSymbolTable.getSymbolType('i'))).to.be.true;
1174
1255
  });
1175
1256
  it('stores the loop variable in a for each loop', () => {
1176
1257
  const parser = parse(`
@@ -1180,9 +1261,50 @@ describe('parser', () => {
1180
1261
  end for
1181
1262
  end sub
1182
1263
  `, Parser_1.ParseMode.BrighterScript);
1183
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1264
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1265
+ const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
1266
+ (0, chai_1.expect)((0, reflection_1.isDynamicType)(currentSymbolTable.getSymbolType('datum'))).to.be.true;
1267
+ });
1268
+ it('determines the type of the variable in a for each if the target is an array literal', () => {
1269
+ const parser = parse(`
1270
+ sub doLoop()
1271
+ someData = [1,2,3]
1272
+ for each datum in someData
1273
+ print datum
1274
+ end for
1275
+ end sub
1276
+ `, Parser_1.ParseMode.BrighterScript);
1277
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1278
+ const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
1279
+ (0, chai_1.expect)((0, reflection_1.isIntegerType)(currentSymbolTable.getSymbolType('datum'))).to.be.true;
1280
+ });
1281
+ it('determines the type of the variable in a for each if the target is an array', () => {
1282
+ const parser = parse(`
1283
+ sub doLoop(someData as integer[])
1284
+ for each datum in someData
1285
+ print datum
1286
+ end for
1287
+ end sub
1288
+ `, Parser_1.ParseMode.BrighterScript);
1289
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1290
+ const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
1291
+ (0, chai_1.expect)((0, reflection_1.isIntegerType)(currentSymbolTable.getSymbolType('datum'))).to.be.true;
1292
+ });
1293
+ it('determines the type of the variable in a for each if the target is an array of some custom type', () => {
1294
+ const parser = parse(`
1295
+ sub doLoop(someData as MyKlass[])
1296
+ for each datum in someData
1297
+ print datum.name
1298
+ end for
1299
+ end sub
1300
+
1301
+ class MyKlass
1302
+ name as string
1303
+ end class
1304
+ `, Parser_1.ParseMode.BrighterScript);
1305
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1184
1306
  const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
1185
- chai_1.expect(currentSymbolTable.getSymbolType('datum').toString()).to.eq('dynamic');
1307
+ (0, chai_1.expect)((0, reflection_1.isLazyType)(currentSymbolTable.getSymbol('datum')[0].type)).to.be.true;
1186
1308
  });
1187
1309
  });
1188
1310
  });
@@ -1196,9 +1318,9 @@ describe('parser', () => {
1196
1318
  const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 38));
1197
1319
  const tokenChain = parser.getTokenChain(childFieldToken).chain;
1198
1320
  const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1199
- chai_1.expect(tokenChain.length).to.equal(3);
1200
- chai_1.expect(tokenChainTokens.map(token => token.text)).to.eql(['m', 'field', 'childField']);
1201
- chai_1.expect(tokenChain.map(tcm => tcm.usage)).to.eql([Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct]);
1321
+ (0, chai_1.expect)(tokenChain.length).to.equal(3);
1322
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['m', 'field', 'childField']);
1323
+ (0, chai_1.expect)(tokenChain.map(tcm => tcm.usage)).to.eql([Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct]);
1202
1324
  });
1203
1325
  it('can find a chain of tokens with function call with no args in the middle', () => {
1204
1326
  const parser = parse(`
@@ -1209,9 +1331,9 @@ describe('parser', () => {
1209
1331
  const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 49));
1210
1332
  const tokenChain = parser.getTokenChain(childFieldToken).chain;
1211
1333
  const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1212
- chai_1.expect(tokenChain.length).to.equal(4);
1213
- chai_1.expect(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1214
- chai_1.expect(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1334
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1335
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1336
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1215
1337
  });
1216
1338
  it('can find a chain of tokens with function call with multiple args in the middle', () => {
1217
1339
  const parser = parse(`
@@ -1222,9 +1344,9 @@ describe('parser', () => {
1222
1344
  const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 75));
1223
1345
  const tokenChain = parser.getTokenChain(childFieldToken).chain;
1224
1346
  const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1225
- chai_1.expect(tokenChain.length).to.equal(4);
1226
- chai_1.expect(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1227
- chai_1.expect(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1347
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1348
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1349
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1228
1350
  });
1229
1351
  it('can find a chain of tokens with function call with function call inside', () => {
1230
1352
  const parser = parse(`
@@ -1235,9 +1357,9 @@ describe('parser', () => {
1235
1357
  const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 90));
1236
1358
  const tokenChain = parser.getTokenChain(childFieldToken).chain;
1237
1359
  const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1238
- chai_1.expect(tokenChain.length).to.equal(4);
1239
- chai_1.expect(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1240
- chai_1.expect(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1360
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1361
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1362
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1241
1363
  });
1242
1364
  it('can find a chain of tokens with array references inside', () => {
1243
1365
  const parser = parse(`
@@ -1248,9 +1370,9 @@ describe('parser', () => {
1248
1370
  const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 50));
1249
1371
  const tokenChain = parser.getTokenChain(childFieldToken).chain;
1250
1372
  const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1251
- chai_1.expect(tokenChain.length).to.equal(4);
1252
- chai_1.expect(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'myArray', 'childField']);
1253
- chai_1.expect(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
1373
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1374
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'myArray', 'childField']);
1375
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
1254
1376
  });
1255
1377
  it('includes unknown when an expression in brackets is part of the chain', () => {
1256
1378
  const parser = parse(`
@@ -1260,7 +1382,7 @@ describe('parser', () => {
1260
1382
  `, Parser_1.ParseMode.BrighterScript);
1261
1383
  const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 34));
1262
1384
  const tokenChainResponse = parser.getTokenChain(toStrToken);
1263
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1385
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1264
1386
  });
1265
1387
  it('includes unknown when an expression in double brackets is part of the chain', () => {
1266
1388
  const parser = parse(`
@@ -1270,7 +1392,7 @@ describe('parser', () => {
1270
1392
  `, Parser_1.ParseMode.BrighterScript);
1271
1393
  const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 38));
1272
1394
  const tokenChainResponse = parser.getTokenChain(toStrToken);
1273
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1395
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1274
1396
  });
1275
1397
  it('includes unknown when a complicated expression in brackets is part of the chain', () => {
1276
1398
  const parser = parse(`
@@ -1280,7 +1402,7 @@ describe('parser', () => {
1280
1402
  `, Parser_1.ParseMode.BrighterScript);
1281
1403
  const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 81));
1282
1404
  const tokenChainResponse = parser.getTokenChain(toStrToken);
1283
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1405
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1284
1406
  });
1285
1407
  });
1286
1408
  it('includes unknown when property is referenced via brackets', () => {
@@ -1296,13 +1418,13 @@ describe('parser', () => {
1296
1418
  const propAsAsBracketToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 47)); // complexObj["subObj"].prop
1297
1419
  const propAsAsDoubleBracketToken = parser.getTokenAt(vscode_languageserver_1.Position.create(5, 64)); // complexObj["subObj"]["grandChildObj"].prop
1298
1420
  let tokenChainResponse = parser.getTokenChain(propAsChainToken);
1299
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1300
- chai_1.expect(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['complexObj', 'subObj', 'prop']);
1421
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1422
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['complexObj', 'subObj', 'prop']);
1301
1423
  tokenChainResponse = parser.getTokenChain(propAsAsBracketToken);
1302
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1303
- chai_1.expect(tokenChainResponse.chain[0].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
1424
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1425
+ (0, chai_1.expect)(tokenChainResponse.chain[0].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
1304
1426
  tokenChainResponse = parser.getTokenChain(propAsAsDoubleBracketToken);
1305
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1427
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1306
1428
  });
1307
1429
  it('allows token kinds from AllowedLocalIdentifiers as start of a chain', () => {
1308
1430
  const parser = parse(`
@@ -1316,14 +1438,14 @@ describe('parser', () => {
1316
1438
  const stringFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 40)); // string.someProp.someFunc()
1317
1439
  const floatFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 38)); // float.someProp.someFunc()
1318
1440
  let tokenChainResponse = parser.getTokenChain(overrideFuncToken);
1319
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1320
- chai_1.expect(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['override', 'someProp', 'someFunc']);
1441
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1442
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['override', 'someProp', 'someFunc']);
1321
1443
  tokenChainResponse = parser.getTokenChain(stringFuncToken);
1322
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1323
- chai_1.expect(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['string', 'someProp', 'someFunc']);
1444
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1445
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['string', 'someProp', 'someFunc']);
1324
1446
  tokenChainResponse = parser.getTokenChain(floatFuncToken);
1325
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1326
- chai_1.expect(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['float', 'someProp', 'someFunc']);
1447
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1448
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['float', 'someProp', 'someFunc']);
1327
1449
  });
1328
1450
  it('allows token kinds from AllowedProperties in middle of a chain', () => {
1329
1451
  const parser = parse(`
@@ -1337,18 +1459,18 @@ describe('parser', () => {
1337
1459
  const stringFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 36)); // someObj.string.someFunc()
1338
1460
  const floatFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 36)); // someObj.float.someFunc()
1339
1461
  let tokenChainResponse = parser.getTokenChain(overrideFuncToken);
1340
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1341
- chai_1.expect(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'override', 'someFunc']);
1462
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1463
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'override', 'someFunc']);
1342
1464
  tokenChainResponse = parser.getTokenChain(stringFuncToken);
1343
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1344
- chai_1.expect(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'string', 'someFunc']);
1465
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1466
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'string', 'someFunc']);
1345
1467
  tokenChainResponse = parser.getTokenChain(floatFuncToken);
1346
- chai_1.expect(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1347
- chai_1.expect(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'float', 'someFunc']);
1468
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1469
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'float', 'someFunc']);
1348
1470
  });
1349
1471
  });
1350
1472
  function parse(text, mode) {
1351
- let { tokens } = lexer_1.Lexer.scan(text);
1473
+ let { tokens } = Lexer_1.Lexer.scan(text);
1352
1474
  return Parser_1.Parser.parse(tokens, {
1353
1475
  mode: mode
1354
1476
  });
@@ -1363,8 +1485,8 @@ function rangeToArray(range) {
1363
1485
  }
1364
1486
  exports.rangeToArray = rangeToArray;
1365
1487
  function expectCommentWithText(stat, text) {
1366
- if (reflection_1.isCommentStatement(stat)) {
1367
- chai_1.expect(stat.text).to.equal(text);
1488
+ if ((0, reflection_1.isCommentStatement)(stat)) {
1489
+ (0, chai_1.expect)(stat.text).to.equal(text);
1368
1490
  }
1369
1491
  else {
1370
1492
  failStatementType(stat, 'Comment');