brighterscript 1.0.0-alpha.1 → 1.0.0-alpha.13

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 (316) hide show
  1. package/CHANGELOG.md +362 -248
  2. package/README.md +2 -2
  3. package/bsconfig.schema.json +1 -1
  4. package/dist/CodeActionUtil.d.ts +11 -2
  5. package/dist/CodeActionUtil.js +17 -3
  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/DiagnosticCollection.js +2 -2
  12. package/dist/DiagnosticCollection.js.map +1 -1
  13. package/dist/DiagnosticFilterer.js +3 -3
  14. package/dist/DiagnosticFilterer.js.map +1 -1
  15. package/dist/DiagnosticMessages.d.ts +15 -5
  16. package/dist/DiagnosticMessages.js +19 -9
  17. package/dist/DiagnosticMessages.js.map +1 -1
  18. package/dist/LanguageServer.d.ts +11 -10
  19. package/dist/LanguageServer.js +87 -58
  20. package/dist/LanguageServer.js.map +1 -1
  21. package/dist/Logger.d.ts +2 -0
  22. package/dist/Logger.js +5 -3
  23. package/dist/Logger.js.map +1 -1
  24. package/dist/Program.d.ts +76 -46
  25. package/dist/Program.js +254 -180
  26. package/dist/Program.js.map +1 -1
  27. package/dist/ProgramBuilder.d.ts +7 -7
  28. package/dist/ProgramBuilder.js +37 -43
  29. package/dist/ProgramBuilder.js.map +1 -1
  30. package/dist/Scope.d.ts +33 -23
  31. package/dist/Scope.js +222 -147
  32. package/dist/Scope.js.map +1 -1
  33. package/dist/SemanticTokenUtils.d.ts +14 -0
  34. package/dist/SemanticTokenUtils.js +81 -0
  35. package/dist/SemanticTokenUtils.js.map +1 -0
  36. package/dist/SymbolTable.d.ts +9 -3
  37. package/dist/SymbolTable.js +40 -13
  38. package/dist/SymbolTable.js.map +1 -1
  39. package/dist/XmlScope.d.ts +7 -2
  40. package/dist/XmlScope.js +67 -29
  41. package/dist/XmlScope.js.map +1 -1
  42. package/dist/astUtils/AstEditor.d.ts +27 -0
  43. package/dist/astUtils/AstEditor.js +97 -0
  44. package/dist/astUtils/AstEditor.js.map +1 -0
  45. package/dist/astUtils/AstEditor.spec.d.ts +1 -0
  46. package/dist/astUtils/AstEditor.spec.js +133 -0
  47. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  48. package/dist/astUtils/creators.d.ts +15 -1
  49. package/dist/astUtils/creators.js +39 -9
  50. package/dist/astUtils/creators.js.map +1 -1
  51. package/dist/astUtils/creators.spec.js +4 -4
  52. package/dist/astUtils/creators.spec.js.map +1 -1
  53. package/dist/astUtils/index.js +1 -1
  54. package/dist/astUtils/reflection.d.ts +20 -8
  55. package/dist/astUtils/reflection.js +42 -1
  56. package/dist/astUtils/reflection.js.map +1 -1
  57. package/dist/astUtils/reflection.spec.js +115 -115
  58. package/dist/astUtils/reflection.spec.js.map +1 -1
  59. package/dist/astUtils/stackedVisitor.js.map +1 -1
  60. package/dist/astUtils/stackedVisitor.spec.js +13 -13
  61. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  62. package/dist/astUtils/visitors.js +1 -1
  63. package/dist/astUtils/visitors.js.map +1 -1
  64. package/dist/astUtils/visitors.spec.js +28 -28
  65. package/dist/astUtils/visitors.spec.js.map +1 -1
  66. package/dist/astUtils/xml.d.ts +4 -3
  67. package/dist/astUtils/xml.js +8 -3
  68. package/dist/astUtils/xml.js.map +1 -1
  69. package/dist/bscPlugin/BscPlugin.d.ts +2 -1
  70. package/dist/bscPlugin/BscPlugin.js +4 -0
  71. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  72. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +5 -6
  73. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  74. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +30 -30
  75. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  76. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +7 -0
  77. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +63 -0
  78. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +1 -0
  79. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +1 -0
  80. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +45 -0
  81. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +1 -0
  82. package/dist/diagnosticUtils.d.ts +1 -0
  83. package/dist/diagnosticUtils.js +14 -7
  84. package/dist/diagnosticUtils.js.map +1 -1
  85. package/dist/examples/plugins/removePrint.js +2 -2
  86. package/dist/examples/plugins/removePrint.js.map +1 -1
  87. package/dist/files/BrsFile.Class.spec.js +486 -71
  88. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  89. package/dist/files/BrsFile.d.ts +48 -23
  90. package/dist/files/BrsFile.js +403 -233
  91. package/dist/files/BrsFile.js.map +1 -1
  92. package/dist/files/BrsFile.spec.js +367 -316
  93. package/dist/files/BrsFile.spec.js.map +1 -1
  94. package/dist/files/XmlFile.d.ts +13 -6
  95. package/dist/files/XmlFile.js +27 -21
  96. package/dist/files/XmlFile.js.map +1 -1
  97. package/dist/files/XmlFile.spec.js +274 -228
  98. package/dist/files/XmlFile.spec.js.map +1 -1
  99. package/dist/files/tests/imports.spec.js +49 -49
  100. package/dist/files/tests/imports.spec.js.map +1 -1
  101. package/dist/globalCallables.d.ts +3 -1
  102. package/dist/globalCallables.js +359 -87
  103. package/dist/globalCallables.js.map +1 -1
  104. package/dist/index.js +2 -1
  105. package/dist/index.js.map +1 -1
  106. package/dist/interfaces.d.ts +51 -14
  107. package/dist/lexer/Lexer.d.ts +14 -1
  108. package/dist/lexer/Lexer.js +91 -21
  109. package/dist/lexer/Lexer.js.map +1 -1
  110. package/dist/lexer/Lexer.spec.js +187 -132
  111. package/dist/lexer/Lexer.spec.js.map +1 -1
  112. package/dist/lexer/Token.d.ts +2 -2
  113. package/dist/lexer/TokenKind.d.ts +7 -1
  114. package/dist/lexer/TokenKind.js +51 -3
  115. package/dist/lexer/TokenKind.js.map +1 -1
  116. package/dist/lexer/index.js +2 -1
  117. package/dist/lexer/index.js.map +1 -1
  118. package/dist/parser/BrsTranspileState.d.ts +7 -0
  119. package/dist/parser/BrsTranspileState.js +10 -1
  120. package/dist/parser/BrsTranspileState.js.map +1 -1
  121. package/dist/parser/Expression.d.ts +23 -5
  122. package/dist/parser/Expression.js +124 -75
  123. package/dist/parser/Expression.js.map +1 -1
  124. package/dist/parser/Parser.Class.spec.js +159 -60
  125. package/dist/parser/Parser.Class.spec.js.map +1 -1
  126. package/dist/parser/Parser.d.ts +114 -26
  127. package/dist/parser/Parser.js +471 -126
  128. package/dist/parser/Parser.js.map +1 -1
  129. package/dist/parser/Parser.spec.js +396 -235
  130. package/dist/parser/Parser.spec.js.map +1 -1
  131. package/dist/parser/SGParser.d.ts +41 -4
  132. package/dist/parser/SGParser.js +186 -175
  133. package/dist/parser/SGParser.js.map +1 -1
  134. package/dist/parser/SGParser.spec.js +35 -22
  135. package/dist/parser/SGParser.spec.js.map +1 -1
  136. package/dist/parser/SGTypes.d.ts +206 -38
  137. package/dist/parser/SGTypes.js +470 -161
  138. package/dist/parser/SGTypes.js.map +1 -1
  139. package/dist/parser/SGTypes.spec.d.ts +1 -0
  140. package/dist/parser/SGTypes.spec.js +351 -0
  141. package/dist/parser/SGTypes.spec.js.map +1 -0
  142. package/dist/parser/Statement.d.ts +92 -18
  143. package/dist/parser/Statement.js +287 -58
  144. package/dist/parser/Statement.js.map +1 -1
  145. package/dist/parser/Statement.spec.js +11 -11
  146. package/dist/parser/Statement.spec.js.map +1 -1
  147. package/dist/parser/TranspileState.d.ts +1 -1
  148. package/dist/parser/TranspileState.js +15 -7
  149. package/dist/parser/TranspileState.js.map +1 -1
  150. package/dist/parser/index.js +1 -1
  151. package/dist/parser/tests/Parser.spec.d.ts +8 -7
  152. package/dist/parser/tests/Parser.spec.js +12 -8
  153. package/dist/parser/tests/Parser.spec.js.map +1 -1
  154. package/dist/parser/tests/controlFlow/For.spec.js +50 -50
  155. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  156. package/dist/parser/tests/controlFlow/ForEach.spec.js +31 -31
  157. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  158. package/dist/parser/tests/controlFlow/If.spec.js +174 -156
  159. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  160. package/dist/parser/tests/controlFlow/While.spec.js +32 -32
  161. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  162. package/dist/parser/tests/expression/Additive.spec.js +21 -21
  163. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  164. package/dist/parser/tests/expression/ArrayLiterals.spec.js +105 -105
  165. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  166. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +148 -124
  167. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  168. package/dist/parser/tests/expression/Boolean.spec.js +17 -17
  169. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  170. package/dist/parser/tests/expression/Call.spec.js +30 -30
  171. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  172. package/dist/parser/tests/expression/Exponential.spec.js +16 -16
  173. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  174. package/dist/parser/tests/expression/Function.spec.js +247 -247
  175. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  176. package/dist/parser/tests/expression/Indexing.spec.js +73 -73
  177. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  178. package/dist/parser/tests/expression/Multiplicative.spec.js +36 -36
  179. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  180. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -47
  181. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  182. package/dist/parser/tests/expression/PrefixUnary.spec.js +35 -35
  183. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  184. package/dist/parser/tests/expression/Primary.spec.js +26 -26
  185. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  186. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  187. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +170 -0
  188. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  189. package/dist/parser/tests/expression/Relational.spec.js +42 -42
  190. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  191. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +8 -8
  192. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  193. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +12 -12
  194. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  195. package/dist/parser/tests/expression/TernaryExpression.spec.js +100 -100
  196. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  197. package/dist/parser/tests/statement/AssignmentOperators.spec.js +35 -35
  198. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  199. package/dist/parser/tests/statement/Declaration.spec.js +39 -39
  200. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  201. package/dist/parser/tests/statement/Dim.spec.js +21 -21
  202. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  203. package/dist/parser/tests/statement/Function.spec.js +192 -192
  204. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  205. package/dist/parser/tests/statement/Goto.spec.js +11 -11
  206. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  207. package/dist/parser/tests/statement/Increment.spec.js +46 -46
  208. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  209. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  210. package/dist/parser/tests/statement/InterfaceStatement.spec.js +61 -0
  211. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  212. package/dist/parser/tests/statement/LibraryStatement.spec.js +10 -10
  213. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  214. package/dist/parser/tests/statement/Misc.spec.js +37 -36
  215. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  216. package/dist/parser/tests/statement/PrintStatement.spec.js +30 -30
  217. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  218. package/dist/parser/tests/statement/ReturnStatement.spec.js +43 -43
  219. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  220. package/dist/parser/tests/statement/Set.spec.js +69 -69
  221. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  222. package/dist/parser/tests/statement/Stop.spec.js +9 -9
  223. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  224. package/dist/parser/tests/statement/Throw.spec.js +5 -5
  225. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  226. package/dist/parser/tests/statement/TryCatch.spec.js +13 -13
  227. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  228. package/dist/preprocessor/Chunk.js.map +1 -1
  229. package/dist/preprocessor/Manifest.d.ts +1 -1
  230. package/dist/preprocessor/Preprocessor.js +1 -1
  231. package/dist/preprocessor/Preprocessor.js.map +1 -1
  232. package/dist/preprocessor/Preprocessor.spec.js +49 -49
  233. package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
  234. package/dist/preprocessor/PreprocessorParser.spec.js +72 -72
  235. package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
  236. package/dist/preprocessor/index.js +1 -1
  237. package/dist/types/ArrayType.js +5 -4
  238. package/dist/types/ArrayType.js.map +1 -1
  239. package/dist/types/ArrayType.spec.js +8 -8
  240. package/dist/types/ArrayType.spec.js.map +1 -1
  241. package/dist/types/BooleanType.js +3 -3
  242. package/dist/types/BooleanType.js.map +1 -1
  243. package/dist/types/BooleanType.spec.js +2 -2
  244. package/dist/types/BooleanType.spec.js.map +1 -1
  245. package/dist/types/BscType.d.ts +19 -5
  246. package/dist/types/BscType.js +9 -0
  247. package/dist/types/BscType.js.map +1 -1
  248. package/dist/types/CustomType.d.ts +8 -5
  249. package/dist/types/CustomType.js +17 -6
  250. package/dist/types/CustomType.js.map +1 -1
  251. package/dist/types/DoubleType.js +8 -8
  252. package/dist/types/DoubleType.js.map +1 -1
  253. package/dist/types/DoubleType.spec.js +2 -2
  254. package/dist/types/DoubleType.spec.js.map +1 -1
  255. package/dist/types/DynamicType.js +1 -1
  256. package/dist/types/DynamicType.js.map +1 -1
  257. package/dist/types/DynamicType.spec.js +2 -2
  258. package/dist/types/DynamicType.spec.js.map +1 -1
  259. package/dist/types/FloatType.d.ts +1 -1
  260. package/dist/types/FloatType.js +8 -8
  261. package/dist/types/FloatType.js.map +1 -1
  262. package/dist/types/FloatType.spec.js +2 -2
  263. package/dist/types/FloatType.spec.js.map +1 -1
  264. package/dist/types/FunctionType.d.ts +5 -11
  265. package/dist/types/FunctionType.js +24 -13
  266. package/dist/types/FunctionType.js.map +1 -1
  267. package/dist/types/FunctionType.spec.js +11 -5
  268. package/dist/types/FunctionType.spec.js.map +1 -1
  269. package/dist/types/IntegerType.d.ts +1 -1
  270. package/dist/types/IntegerType.js +8 -8
  271. package/dist/types/IntegerType.js.map +1 -1
  272. package/dist/types/IntegerType.spec.js +2 -2
  273. package/dist/types/IntegerType.spec.js.map +1 -1
  274. package/dist/types/InterfaceType.d.ts +8 -2
  275. package/dist/types/InterfaceType.js +42 -6
  276. package/dist/types/InterfaceType.js.map +1 -1
  277. package/dist/types/InterfaceType.spec.d.ts +1 -0
  278. package/dist/types/InterfaceType.spec.js +174 -0
  279. package/dist/types/InterfaceType.spec.js.map +1 -0
  280. package/dist/types/InvalidType.js +4 -4
  281. package/dist/types/InvalidType.js.map +1 -1
  282. package/dist/types/InvalidType.spec.js +2 -2
  283. package/dist/types/InvalidType.spec.js.map +1 -1
  284. package/dist/types/LazyType.d.ts +9 -7
  285. package/dist/types/LazyType.js +22 -10
  286. package/dist/types/LazyType.js.map +1 -1
  287. package/dist/types/LongIntegerType.d.ts +1 -1
  288. package/dist/types/LongIntegerType.js +8 -8
  289. package/dist/types/LongIntegerType.js.map +1 -1
  290. package/dist/types/LongIntegerType.spec.js +2 -2
  291. package/dist/types/LongIntegerType.spec.js.map +1 -1
  292. package/dist/types/ObjectType.d.ts +7 -4
  293. package/dist/types/ObjectType.js +6 -3
  294. package/dist/types/ObjectType.js.map +1 -1
  295. package/dist/types/ObjectType.spec.js +2 -2
  296. package/dist/types/ObjectType.spec.js.map +1 -1
  297. package/dist/types/StringType.js +3 -3
  298. package/dist/types/StringType.js.map +1 -1
  299. package/dist/types/StringType.spec.js +2 -2
  300. package/dist/types/StringType.spec.js.map +1 -1
  301. package/dist/types/UninitializedType.js +3 -3
  302. package/dist/types/UninitializedType.js.map +1 -1
  303. package/dist/types/VoidType.js +3 -3
  304. package/dist/types/VoidType.js.map +1 -1
  305. package/dist/types/VoidType.spec.js +2 -2
  306. package/dist/types/VoidType.spec.js.map +1 -1
  307. package/dist/types/helpers.d.ts +42 -0
  308. package/dist/types/helpers.js +113 -0
  309. package/dist/types/helpers.js.map +1 -0
  310. package/dist/util.d.ts +77 -17
  311. package/dist/util.js +247 -59
  312. package/dist/util.js.map +1 -1
  313. package/dist/validators/ClassValidator.d.ts +5 -1
  314. package/dist/validators/ClassValidator.js +59 -24
  315. package/dist/validators/ClassValidator.js.map +1 -1
  316. package/package.json +13 -13
@@ -16,13 +16,13 @@ const StringType_1 = require("../types/StringType");
16
16
  const CustomType_1 = require("../types/CustomType");
17
17
  const IntegerType_1 = require("../types/IntegerType");
18
18
  const ObjectType_1 = require("../types/ObjectType");
19
- const LazyType_1 = require("../types/LazyType");
20
19
  const SymbolTable_1 = require("../SymbolTable");
21
20
  const DynamicType_1 = require("../types/DynamicType");
22
21
  const util_1 = require("../util");
22
+ const LazyType_1 = require("../types/LazyType");
23
23
  describe('parser', () => {
24
24
  it('emits empty object when empty token list is provided', () => {
25
- chai_1.expect(Parser_1.Parser.parse([])).to.deep.include({
25
+ (0, chai_1.expect)(Parser_1.Parser.parse([])).to.deep.include({
26
26
  statements: [],
27
27
  diagnostics: []
28
28
  });
@@ -40,7 +40,7 @@ describe('parser', () => {
40
40
  humansAreAlive = false
41
41
  end sub
42
42
  `);
43
- chai_1.expect(parser.references.functionExpressions[0].symbolTable.ownSymbols.map(x => x.name).sort()).to.eql([
43
+ (0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
44
44
  'herd',
45
45
  'humansAreAlive',
46
46
  'i',
@@ -49,7 +49,7 @@ describe('parser', () => {
49
49
  'zombie'
50
50
  ]);
51
51
  parser.invalidateReferences();
52
- chai_1.expect(parser.references.functionExpressions[0].symbolTable.ownSymbols.map(x => x.name).sort()).to.eql([
52
+ (0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name).sort()).to.eql([
53
53
  'herd',
54
54
  'humansAreAlive',
55
55
  'i',
@@ -69,12 +69,12 @@ describe('parser', () => {
69
69
  end sub
70
70
  `);
71
71
  parser.invalidateReferences();
72
- chai_1.expect(parser.references.functionExpressions[0].symbolTable.ownSymbols.map(x => x.name)).to.eql([
72
+ (0, chai_1.expect)(parser.references.functionExpressions[0].symbolTable.getOwnSymbols().map(x => x.name)).to.eql([
73
73
  'outerName',
74
74
  'speak',
75
75
  'age'
76
76
  ]);
77
- chai_1.expect(parser.references.functionExpressions[1].symbolTable.ownSymbols.map(x => x.name)).to.eql([
77
+ (0, chai_1.expect)(parser.references.functionExpressions[1].symbolTable.getOwnSymbols().map(x => x.name)).to.eql([
78
78
  'innerName'
79
79
  ]);
80
80
  });
@@ -86,7 +86,7 @@ describe('parser', () => {
86
86
  sub UnusedFunction()
87
87
  end sub
88
88
  `);
89
- chai_1.expect(parser.references.functionStatements.map(x => x.name.text)).to.eql([
89
+ (0, chai_1.expect)(parser.references.functionStatements.map(x => x.name.text)).to.eql([
90
90
  'main',
91
91
  'UnusedFunction'
92
92
  ]);
@@ -94,9 +94,9 @@ describe('parser', () => {
94
94
  parser.ast.statements.splice(1);
95
95
  //tell the parser we modified the AST and need to regenerate references
96
96
  parser.invalidateReferences();
97
- chai_1.expect(parser['_references']).not.to.exist;
97
+ (0, chai_1.expect)(parser['_references']).not.to.exist;
98
98
  //calling `references` automatically regenerates the references
99
- 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([
100
100
  'main'
101
101
  ]);
102
102
  });
@@ -109,7 +109,7 @@ describe('parser', () => {
109
109
  node@.doSomething(1, 2)
110
110
  end sub
111
111
  `, 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);
112
+ (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
113
  });
114
114
  it('does not cause parse errors', () => {
115
115
  var _a, _b, _c, _d, _e;
@@ -118,13 +118,13 @@ describe('parser', () => {
118
118
  node@.doSomething(1, 2)
119
119
  end sub
120
120
  `, 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);
121
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
122
+ (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
123
  });
124
124
  });
125
125
  describe('diagnostic locations', () => {
126
126
  it('tracks basic diagnostic locations', () => {
127
- chai_1.expect(parse(`
127
+ (0, chai_1.expect)(parse(`
128
128
  sub main()
129
129
  call()a
130
130
  end sub
@@ -140,8 +140,8 @@ describe('parser', () => {
140
140
  return "6c5cdf1"
141
141
  end functionasdf
142
142
  `).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));
143
+ (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);
144
+ (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
145
  });
146
146
  });
147
147
  describe('parse', () => {
@@ -154,7 +154,7 @@ describe('parser', () => {
154
154
  end function()
155
155
  end sub
156
156
  `);
157
- testHelpers_spec_1.expectZeroDiagnostics(parser);
157
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
158
158
  });
159
159
  it('supports grouped iife in assignment', () => {
160
160
  const parser = parse(`
@@ -165,7 +165,7 @@ describe('parser', () => {
165
165
  end function)()
166
166
  end sub
167
167
  `);
168
- testHelpers_spec_1.expectZeroDiagnostics(parser);
168
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
169
169
  });
170
170
  it('supports returning iife call', () => {
171
171
  const parser = parse(`
@@ -174,11 +174,11 @@ describe('parser', () => {
174
174
  end sub)()
175
175
  end sub
176
176
  `);
177
- testHelpers_spec_1.expectZeroDiagnostics(parser);
177
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
178
178
  });
179
179
  it('supports using "interface" as parameter name', () => {
180
180
  var _a;
181
- chai_1.expect((_a = parse(`
181
+ (0, chai_1.expect)((_a = parse(`
182
182
  sub main(interface as object)
183
183
  end sub
184
184
  `, Parser_1.ParseMode.BrighterScript).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
@@ -186,7 +186,7 @@ describe('parser', () => {
186
186
  describe('namespace', () => {
187
187
  it('catches namespaces declared not at root level', () => {
188
188
  var _a;
189
- chai_1.expect((_a = parse(`
189
+ (0, chai_1.expect)((_a = parse(`
190
190
  sub main()
191
191
  namespace Name.Space
192
192
  end namespace
@@ -199,8 +199,8 @@ describe('parser', () => {
199
199
  namespace Name.Space
200
200
  end namespace
201
201
  `, 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);
202
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
203
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
204
204
  });
205
205
  it('includes body', () => {
206
206
  var _a;
@@ -210,9 +210,9 @@ describe('parser', () => {
210
210
  end sub
211
211
  end namespace
212
212
  `, 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);
213
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
214
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
215
+ (0, chai_1.expect)(statements[0].body.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
216
216
  });
217
217
  it('supports comments and newlines', () => {
218
218
  var _a;
@@ -228,7 +228,7 @@ describe('parser', () => {
228
228
  'comment
229
229
  end namespace 'comment
230
230
  `, Parser_1.ParseMode.BrighterScript);
231
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
231
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
232
232
  });
233
233
  it('catches missing name', () => {
234
234
  var _a;
@@ -236,7 +236,7 @@ describe('parser', () => {
236
236
  namespace
237
237
  end namespace
238
238
  `, 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);
239
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifierAfterKeyword('namespace').message);
240
240
  });
241
241
  it('recovers after missing `end namespace`', () => {
242
242
  var _a, _b, _c;
@@ -245,9 +245,9 @@ describe('parser', () => {
245
245
  sub main()
246
246
  end sub
247
247
  `, 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);
248
+ (0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
249
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.couldNotFindMatchingEndKeyword('namespace').message);
250
+ (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
251
  });
252
252
  it('adds diagnostic when encountering namespace in brightscript mode', () => {
253
253
  var _a;
@@ -255,7 +255,7 @@ describe('parser', () => {
255
255
  namespace Name.Space
256
256
  end namespace
257
257
  `);
258
- chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('namespace').message);
258
+ (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
259
  });
260
260
  it('declares a symbol table for the namespace', () => {
261
261
  let parser = parse(`
@@ -269,13 +269,13 @@ describe('parser', () => {
269
269
  end function
270
270
  end namespace
271
271
  `, Parser_1.ParseMode.BrighterScript);
272
- chai_1.expect(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
272
+ (0, chai_1.expect)(parser.ast.statements[0]).to.be.instanceof(Statement_1.NamespaceStatement);
273
273
  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);
274
+ (0, chai_1.expect)(namespaceStmt.symbolTable).to.be.instanceof(SymbolTable_1.SymbolTable);
275
+ (0, chai_1.expect)(namespaceStmt.symbolTable.getSymbolType('funcInt').toString()).to.equal('function funcInt() as integer');
276
+ (0, chai_1.expect)(namespaceStmt.symbolTable.getSymbolType('funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
277
277
  const strFunctionType = namespaceStmt.symbolTable.getSymbolType('funcStr');
278
- chai_1.expect(strFunctionType.returnType.toString()).to.equal('string');
278
+ (0, chai_1.expect)(strFunctionType.returnType.toString()).to.equal('string');
279
279
  });
280
280
  it('adds a fully qualified name of a function in a namespace to the parsers symbol table', () => {
281
281
  let parser = parse(`
@@ -289,13 +289,13 @@ describe('parser', () => {
289
289
  end function
290
290
  end namespace
291
291
  `, 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);
292
+ (0, chai_1.expect)(parser.symbolTable.getSymbolType('Name.Space.funcInt')).to.be.instanceof(FunctionType_1.FunctionType);
293
+ (0, chai_1.expect)(parser.symbolTable.getSymbolType('Name.Space.funcStr')).to.be.instanceof(FunctionType_1.FunctionType);
294
294
  });
295
295
  });
296
296
  it('supports << operator', () => {
297
297
  var _a;
298
- chai_1.expect((_a = parse(`
298
+ (0, chai_1.expect)((_a = parse(`
299
299
  sub main()
300
300
  print ((r << 24) + (g << 16) + (b << 8) + a)
301
301
  end sub
@@ -303,7 +303,7 @@ describe('parser', () => {
303
303
  });
304
304
  it('supports >> operator', () => {
305
305
  var _a;
306
- chai_1.expect((_a = parse(`
306
+ (0, chai_1.expect)((_a = parse(`
307
307
  sub main()
308
308
  print ((r >> 24) + (g >> 16) + (b >> 8) + a)
309
309
  end sub
@@ -311,7 +311,7 @@ describe('parser', () => {
311
311
  });
312
312
  it('allows global function names with same as token to be called', () => {
313
313
  var _a;
314
- chai_1.expect((_a = parse(`
314
+ (0, chai_1.expect)((_a = parse(`
315
315
  sub main()
316
316
  print string(123)
317
317
  end sub
@@ -325,18 +325,18 @@ describe('parser', () => {
325
325
  age = personXml.firstChild@age
326
326
  end sub
327
327
  `);
328
- chai_1.expect((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
328
+ (0, chai_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
329
329
  let statements = parser.statements[0].func.body.statements;
330
330
  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');
331
+ (0, chai_1.expect)(first).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
332
+ (0, chai_1.expect)(first.name.text).to.equal('firstName');
333
+ (0, chai_1.expect)(first.at.text).to.equal('@');
334
+ (0, chai_1.expect)(first.obj.name.text).to.equal('personXml');
335
335
  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');
336
+ (0, chai_1.expect)(second).to.be.instanceof(Expression_1.XmlAttributeGetExpression);
337
+ (0, chai_1.expect)(second.name.text).to.equal('age');
338
+ (0, chai_1.expect)(second.at.text).to.equal('@');
339
+ (0, chai_1.expect)(second.obj.name.text).to.equal('firstChild');
340
340
  });
341
341
  it('does not allow chaining of @ symbols', () => {
342
342
  let parser = parse(`
@@ -345,58 +345,58 @@ describe('parser', () => {
345
345
  name = personXml@name@age@shoeSize
346
346
  end sub
347
347
  `);
348
- chai_1.expect(parser.diagnostics).not.to.be.empty;
348
+ (0, chai_1.expect)(parser.diagnostics).not.to.be.empty;
349
349
  });
350
350
  it('unknown function type does not invalidate rest of function', () => {
351
351
  let { statements, diagnostics } = parse(`
352
352
  function log() as UNKNOWN_TYPE
353
353
  end function
354
354
  `, Parser_1.ParseMode.BrightScript);
355
- chai_1.expect(diagnostics.length).to.be.greaterThan(0);
356
- chai_1.expect(statements[0]).to.exist;
355
+ (0, chai_1.expect)(diagnostics.length).to.be.greaterThan(0);
356
+ (0, chai_1.expect)(statements[0]).to.exist;
357
357
  });
358
358
  it('unknown function type is not a problem in Brighterscript mode', () => {
359
359
  let { statements, diagnostics } = parse(`
360
360
  function log() as UNKNOWN_TYPE
361
361
  end function
362
362
  `, Parser_1.ParseMode.BrighterScript);
363
- chai_1.expect(diagnostics.length).to.equal(0);
364
- chai_1.expect(statements[0]).to.exist;
363
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
364
+ (0, chai_1.expect)(statements[0]).to.exist;
365
365
  });
366
366
  it('allows namespaced function type in Brighterscript mode', () => {
367
367
  let { statements, diagnostics } = parse(`
368
368
  function log() as SOME_NAMESPACE.UNKNOWN_TYPE
369
369
  end function
370
370
  `, Parser_1.ParseMode.BrighterScript);
371
- chai_1.expect(diagnostics.length).to.equal(0);
372
- chai_1.expect(statements[0]).to.exist;
371
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
372
+ (0, chai_1.expect)(statements[0]).to.exist;
373
373
  });
374
374
  it('allows custom parameter types in BrighterscriptMode', () => {
375
375
  let { statements, diagnostics } = parse(`
376
376
  sub foo(value as UNKNOWN_TYPE)
377
377
  end sub
378
378
  `, Parser_1.ParseMode.BrighterScript);
379
- chai_1.expect(diagnostics.length).to.equal(0);
380
- chai_1.expect(statements[0]).to.exist;
379
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
380
+ (0, chai_1.expect)(statements[0]).to.exist;
381
381
  });
382
382
  it('does not allow custom parameter types in Brightscript Mode', () => {
383
383
  let { diagnostics } = parse(`
384
384
  sub foo(value as UNKNOWN_TYPE)
385
385
  end sub
386
386
  `, Parser_1.ParseMode.BrightScript);
387
- chai_1.expect(diagnostics.length).not.to.equal(0);
387
+ (0, chai_1.expect)(diagnostics.length).not.to.equal(0);
388
388
  });
389
389
  it('allows custom namespaced parameter types in BrighterscriptMode', () => {
390
390
  let { statements, diagnostics } = parse(`
391
391
  sub foo(value as SOME_NAMESPACE.UNKNOWN_TYPE)
392
392
  end sub
393
393
  `, Parser_1.ParseMode.BrighterScript);
394
- chai_1.expect(diagnostics.length).to.equal(0);
395
- chai_1.expect(statements[0]).to.exist;
394
+ (0, chai_1.expect)(diagnostics.length).to.equal(0);
395
+ (0, chai_1.expect)(statements[0]).to.exist;
396
396
  });
397
397
  it('works with conditionals', () => {
398
398
  var _a;
399
- chai_1.expect((_a = parse(`
399
+ (0, chai_1.expect)((_a = parse(`
400
400
  function printNumber()
401
401
  if true then
402
402
  print 1
@@ -408,7 +408,7 @@ describe('parser', () => {
408
408
  });
409
409
  it('supports single-line if statements', () => {
410
410
  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;
411
+ (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
412
  });
413
413
  it('works with excess newlines', () => {
414
414
  var _a;
@@ -421,7 +421,7 @@ describe('parser', () => {
421
421
  ' print 1\n\n' +
422
422
  ' end if\n\n' +
423
423
  '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;
424
+ (0, chai_1.expect)((_a = Parser_1.Parser.parse(tokens).diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.not.exist;
425
425
  });
426
426
  it('does not invalidate entire file when line ends with a period', () => {
427
427
  let { tokens } = lexer_1.Lexer.scan(`
@@ -431,15 +431,15 @@ describe('parser', () => {
431
431
 
432
432
  `);
433
433
  let { diagnostics } = Parser_1.Parser.parse(tokens);
434
- chai_1.expect(diagnostics).to.be.lengthOf(1, 'Error count should be 0');
434
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1, 'Error count should be 0');
435
435
  });
436
436
  it.skip('allows printing object with trailing period', () => {
437
437
  let { tokens } = lexer_1.Lexer.scan(`print a.`);
438
438
  let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
439
439
  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);
440
+ (0, chai_1.expect)(diagnostics).to.be.empty;
441
+ (0, chai_1.expect)(printStatement).to.be.instanceof(Statement_1.PrintStatement);
442
+ (0, chai_1.expect)(printStatement.expressions[0]).to.be.instanceof(Expression_1.DottedGetExpression);
443
443
  });
444
444
  describe('comments', () => {
445
445
  it('combines multi-line comments', () => {
@@ -449,8 +449,8 @@ describe('parser', () => {
449
449
  'line 3
450
450
  `);
451
451
  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`);
452
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
453
+ (0, chai_1.expect)(statements[0].text).to.equal(`'line 1\n'line 2\n'line 3`);
454
454
  });
455
455
  it('does not combile comments separated by newlines', () => {
456
456
  let { tokens } = lexer_1.Lexer.scan(`
@@ -461,11 +461,11 @@ describe('parser', () => {
461
461
  'line 3
462
462
  `);
463
463
  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`);
464
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
465
+ (0, chai_1.expect)(statements).to.be.lengthOf(3);
466
+ (0, chai_1.expect)(statements[0].text).to.equal(`'line 1`);
467
+ (0, chai_1.expect)(statements[1].text).to.equal(`'line 2`);
468
+ (0, chai_1.expect)(statements[2].text).to.equal(`'line 3`);
469
469
  });
470
470
  it('works after print statement', () => {
471
471
  let { tokens } = lexer_1.Lexer.scan(`
@@ -474,8 +474,8 @@ describe('parser', () => {
474
474
  end sub
475
475
  `);
476
476
  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`);
477
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
478
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 1`);
479
479
  });
480
480
  it('declaration-level', () => {
481
481
  let { tokens } = lexer_1.Lexer.scan(`
@@ -485,9 +485,9 @@ describe('parser', () => {
485
485
  'comment 2
486
486
  `);
487
487
  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`);
488
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
489
+ (0, chai_1.expect)(statements[0].text).to.equal(`'comment 1`);
490
+ (0, chai_1.expect)(statements[2].text).to.equal(`'comment 2`);
491
491
  });
492
492
  it('works in aa literal as its own statement', () => {
493
493
  let { tokens } = lexer_1.Lexer.scan(`
@@ -497,7 +497,7 @@ describe('parser', () => {
497
497
  }
498
498
  `);
499
499
  let { diagnostics } = Parser_1.Parser.parse(tokens);
500
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
500
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be 0');
501
501
  });
502
502
  it('parses after function call', () => {
503
503
  let { tokens } = lexer_1.Lexer.scan(`
@@ -507,8 +507,8 @@ describe('parser', () => {
507
507
  end sub
508
508
  `);
509
509
  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`);
510
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
511
+ (0, chai_1.expect)(statements[0].func.body.statements[2].text).to.equal(`'comment 1`);
512
512
  });
513
513
  it('function', () => {
514
514
  let { tokens } = lexer_1.Lexer.scan(`
@@ -519,11 +519,11 @@ describe('parser', () => {
519
519
  end function 'comment 4
520
520
  `);
521
521
  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`);
522
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
523
+ (0, chai_1.expect)(statements[0].func.body.statements[0].text).to.equal(`'comment 1`);
524
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 2`);
525
+ (0, chai_1.expect)(statements[0].func.body.statements[3].text).to.equal(`'comment 3`);
526
+ (0, chai_1.expect)(statements[1].text).to.equal(`'comment 4`);
527
527
  });
528
528
  it('if statement`', () => {
529
529
  let { tokens } = lexer_1.Lexer.scan(`
@@ -544,21 +544,21 @@ describe('parser', () => {
544
544
  end function
545
545
  `);
546
546
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
547
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
547
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Should have zero diagnostics');
548
548
  let fnSmt = statements[0];
549
- if (reflection_1.isFunctionStatement(fnSmt)) {
549
+ if ((0, reflection_1.isFunctionStatement)(fnSmt)) {
550
550
  let ifStmt = fnSmt.func.body.statements[0];
551
- if (reflection_1.isIfStatement(ifStmt)) {
551
+ if ((0, reflection_1.isIfStatement)(ifStmt)) {
552
552
  expectCommentWithText(ifStmt.thenBranch.statements[0], `'comment 1`);
553
553
  expectCommentWithText(ifStmt.thenBranch.statements[1], `'comment 2`);
554
554
  expectCommentWithText(ifStmt.thenBranch.statements[3], `'comment 3`);
555
555
  let elseIfBranch = ifStmt.elseBranch;
556
- if (reflection_1.isIfStatement(elseIfBranch)) {
556
+ if ((0, reflection_1.isIfStatement)(elseIfBranch)) {
557
557
  expectCommentWithText(elseIfBranch.thenBranch.statements[0], `'comment 4`);
558
558
  expectCommentWithText(elseIfBranch.thenBranch.statements[1], `'comment 5`);
559
559
  expectCommentWithText(elseIfBranch.thenBranch.statements[3], `'comment 6`);
560
560
  let elseBranch = elseIfBranch.elseBranch;
561
- if (reflection_1.isBlock(elseBranch)) {
561
+ if ((0, reflection_1.isBlock)(elseBranch)) {
562
562
  expectCommentWithText(elseBranch.statements[0], `'comment 7`);
563
563
  expectCommentWithText(elseBranch.statements[1], `'comment 8`);
564
564
  expectCommentWithText(elseBranch.statements[3], `'comment 9`);
@@ -591,12 +591,12 @@ describe('parser', () => {
591
591
  end function
592
592
  `);
593
593
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
594
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
594
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
595
595
  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`);
596
+ (0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
597
+ (0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
598
+ (0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
599
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
600
600
  });
601
601
  it('for', () => {
602
602
  let { tokens } = lexer_1.Lexer.scan(`
@@ -609,12 +609,12 @@ describe('parser', () => {
609
609
  end function
610
610
  `);
611
611
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
612
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
612
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
613
613
  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`);
614
+ (0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
615
+ (0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
616
+ (0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
617
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
618
618
  });
619
619
  it('for each', () => {
620
620
  let { tokens } = lexer_1.Lexer.scan(`
@@ -627,12 +627,12 @@ describe('parser', () => {
627
627
  end function
628
628
  `);
629
629
  let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
630
- chai_1.expect(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
630
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(0, 'Error count should be zero');
631
631
  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`);
632
+ (0, chai_1.expect)(stmt.body.statements[0].text).to.equal(`'comment 1`);
633
+ (0, chai_1.expect)(stmt.body.statements[1].text).to.equal(`'comment 2`);
634
+ (0, chai_1.expect)(stmt.body.statements[3].text).to.equal(`'comment 3`);
635
+ (0, chai_1.expect)(statements[0].func.body.statements[1].text).to.equal(`'comment 4`);
636
636
  });
637
637
  });
638
638
  });
@@ -644,7 +644,7 @@ describe('parser', () => {
644
644
  then = true
645
645
  end sub
646
646
  `);
647
- chai_1.expect(diagnostics).to.be.lengthOf(1);
647
+ (0, chai_1.expect)(diagnostics).to.be.lengthOf(1);
648
648
  });
649
649
  it('is allowed as an AA property name', () => {
650
650
  var _a;
@@ -657,7 +657,7 @@ describe('parser', () => {
657
657
  print person.then
658
658
  end sub
659
659
  `);
660
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
660
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
661
661
  });
662
662
  });
663
663
  it('"end" is not allowed as a local identifier', () => {
@@ -666,7 +666,7 @@ describe('parser', () => {
666
666
  end = true
667
667
  end sub
668
668
  `);
669
- chai_1.expect(diagnostics).to.be.length.greaterThan(0);
669
+ (0, chai_1.expect)(diagnostics).to.be.length.greaterThan(0);
670
670
  });
671
671
  it('none of them can be used as local variables', () => {
672
672
  let reservedWords = new Set(lexer_1.ReservedWords);
@@ -679,7 +679,7 @@ describe('parser', () => {
679
679
  end sub
680
680
  `);
681
681
  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);
682
+ (0, chai_1.expect)(diagnostics, `assigning to reserved word "${reservedWord}" should have been an error`).to.be.length.greaterThan(0);
683
683
  }
684
684
  });
685
685
  });
@@ -689,24 +689,24 @@ describe('parser', () => {
689
689
  let { statements, diagnostics } = parse(`
690
690
  import "somePath"
691
691
  `, 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);
692
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
693
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
694
694
  });
695
695
  it('catches import statements used in brightscript files', () => {
696
696
  var _a;
697
697
  let { statements, diagnostics } = parse(`
698
698
  import "somePath"
699
699
  `, 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);
700
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('import statements').message);
701
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
702
702
  });
703
- it('catchs missing file path', () => {
703
+ it('catches missing file path', () => {
704
704
  var _a;
705
705
  let { statements, diagnostics } = parse(`
706
706
  import
707
707
  `, 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);
708
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedStringLiteralAfterKeyword('import').message);
709
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.ImportStatement);
710
710
  });
711
711
  });
712
712
  describe('Annotations', () => {
@@ -717,7 +717,7 @@ describe('parser', () => {
717
717
  sub main()
718
718
  end sub
719
719
  `, Parser_1.ParseMode.BrighterScript);
720
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.foundUnexpectedToken('@').message);
720
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unexpectedToken('@').message);
721
721
  });
722
722
  it('properly handles empty annotation above class method', () => {
723
723
  var _a;
@@ -729,7 +729,7 @@ describe('parser', () => {
729
729
  end sub
730
730
  end class
731
731
  `, 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);
732
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier().message);
733
733
  });
734
734
  it('parses with error if annotation is not followed by a statement', () => {
735
735
  var _a, _b, _c, _d;
@@ -743,11 +743,11 @@ describe('parser', () => {
743
743
  end class
744
744
  @meta1
745
745
  `, 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);
746
+ (0, chai_1.expect)(diagnostics.length).to.equal(4);
747
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
748
+ (0, chai_1.expect)((_b = diagnostics[1]) === null || _b === void 0 ? void 0 : _b.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
749
+ (0, chai_1.expect)((_c = diagnostics[2]) === null || _c === void 0 ? void 0 : _c.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
750
+ (0, chai_1.expect)((_d = diagnostics[3]) === null || _d === void 0 ? void 0 : _d.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.unusedAnnotation().message);
751
751
  });
752
752
  it('attaches an annotation to next statement', () => {
753
753
  var _a;
@@ -759,18 +759,18 @@ describe('parser', () => {
759
759
  @meta2 sub init()
760
760
  end sub
761
761
  `, 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);
762
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
763
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
764
764
  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);
765
+ (0, chai_1.expect)(fn.annotations).to.exist;
766
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
767
+ (0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta1');
768
+ (0, chai_1.expect)(fn.annotations[0].name).to.equal('meta1');
769
+ (0, chai_1.expect)(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
770
770
  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');
771
+ (0, chai_1.expect)(fn.annotations).to.exist;
772
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
773
+ (0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta2');
774
774
  });
775
775
  it('attaches annotations inside a function body', () => {
776
776
  var _a, _b;
@@ -780,13 +780,13 @@ describe('parser', () => {
780
780
  print "hello"
781
781
  end function
782
782
  `, Parser_1.ParseMode.BrighterScript);
783
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
783
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
784
784
  let fn = statements[0];
785
785
  let fnStatements = fn.func.body.statements;
786
786
  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);
787
+ (0, chai_1.expect)(stat).to.exist;
788
+ (0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
789
+ (0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
790
790
  });
791
791
  it('attaches multiple annotations to next statement', () => {
792
792
  var _a;
@@ -796,14 +796,14 @@ describe('parser', () => {
796
796
  function main()
797
797
  end function
798
798
  `, 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);
799
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
800
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
801
801
  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);
802
+ (0, chai_1.expect)(fn.annotations).to.exist;
803
+ (0, chai_1.expect)(fn.annotations.length).to.equal(3);
804
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
805
+ (0, chai_1.expect)(fn.annotations[1]).to.be.instanceof(Expression_1.AnnotationExpression);
806
+ (0, chai_1.expect)(fn.annotations[2]).to.be.instanceof(Expression_1.AnnotationExpression);
807
807
  });
808
808
  it('allows annotations with parameters', () => {
809
809
  var _a;
@@ -812,12 +812,12 @@ describe('parser', () => {
812
812
  function main()
813
813
  end function
814
814
  `, Parser_1.ParseMode.BrighterScript);
815
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
815
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
816
816
  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);
817
+ (0, chai_1.expect)(fn.annotations).to.exist;
818
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
819
+ (0, chai_1.expect)(fn.annotations[0].nameToken.text).to.equal('meta1');
820
+ (0, chai_1.expect)(fn.annotations[0].call).to.be.instanceof(Expression_1.CallExpression);
821
821
  });
822
822
  it('attaches annotations to a class', () => {
823
823
  var _a, _b;
@@ -829,10 +829,10 @@ describe('parser', () => {
829
829
  end function
830
830
  end class
831
831
  `, Parser_1.ParseMode.BrighterScript);
832
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
832
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
833
833
  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);
834
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
835
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
836
836
  });
837
837
  it('attaches annotations to multiple clases', () => {
838
838
  var _a, _b, _c;
@@ -850,15 +850,15 @@ describe('parser', () => {
850
850
  end function
851
851
  end class
852
852
  `, Parser_1.ParseMode.BrighterScript);
853
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
853
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
854
854
  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');
855
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
856
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
857
+ (0, chai_1.expect)(cs.annotations[0].name).to.equal('meta1');
858
858
  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');
859
+ (0, chai_1.expect)((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
860
+ (0, chai_1.expect)(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
861
+ (0, chai_1.expect)(cs2.annotations[0].name).to.equal('meta2');
862
862
  });
863
863
  it('attaches annotations to a namespaced class', () => {
864
864
  var _a, _b;
@@ -872,11 +872,11 @@ describe('parser', () => {
872
872
  end class
873
873
  end namespace
874
874
  `, Parser_1.ParseMode.BrighterScript);
875
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
875
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
876
876
  let ns = statements[0];
877
877
  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);
878
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
879
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
880
880
  });
881
881
  it('attaches annotations to a namespaced class - multiple', () => {
882
882
  var _a, _b, _c;
@@ -896,16 +896,16 @@ describe('parser', () => {
896
896
  end class
897
897
  end namespace
898
898
  `, Parser_1.ParseMode.BrighterScript);
899
- 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;
900
900
  let ns = statements[0];
901
901
  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');
902
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
903
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
904
+ (0, chai_1.expect)(cs.annotations[0].name).to.equal('meta1');
905
905
  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');
906
+ (0, chai_1.expect)((_c = cs2.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(1);
907
+ (0, chai_1.expect)(cs2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
908
+ (0, chai_1.expect)(cs2.annotations[0].name).to.equal('meta2');
909
909
  });
910
910
  it('attaches annotations to a class constructor', () => {
911
911
  var _a, _b;
@@ -920,11 +920,11 @@ describe('parser', () => {
920
920
  end function
921
921
  end class
922
922
  `, Parser_1.ParseMode.BrighterScript);
923
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
923
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
924
924
  let cs = statements[0];
925
925
  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);
926
+ (0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
927
+ (0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
928
928
  });
929
929
  it('attaches annotations to a class methods', () => {
930
930
  var _a, _b;
@@ -939,11 +939,11 @@ describe('parser', () => {
939
939
  end function
940
940
  end class
941
941
  `, Parser_1.ParseMode.BrighterScript);
942
- 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;
943
943
  let cs = statements[0];
944
944
  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);
945
+ (0, chai_1.expect)((_b = stat.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(1);
946
+ (0, chai_1.expect)(stat.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
947
947
  });
948
948
  it('attaches annotations to a class methods, fields and constructor', () => {
949
949
  var _a, _b, _c, _d, _e;
@@ -967,19 +967,19 @@ describe('parser', () => {
967
967
  public foo="bar"
968
968
  end class
969
969
  `, Parser_1.ParseMode.BrighterScript);
970
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
970
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
971
971
  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);
972
+ (0, chai_1.expect)((_b = cs.annotations) === null || _b === void 0 ? void 0 : _b.length).to.equal(2);
973
+ (0, chai_1.expect)(cs.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
974
974
  let stat1 = cs.body[0];
975
975
  let stat2 = cs.body[1];
976
976
  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);
977
+ (0, chai_1.expect)((_c = stat1.annotations) === null || _c === void 0 ? void 0 : _c.length).to.equal(2);
978
+ (0, chai_1.expect)(stat1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
979
+ (0, chai_1.expect)((_d = stat2.annotations) === null || _d === void 0 ? void 0 : _d.length).to.equal(2);
980
+ (0, chai_1.expect)(stat2.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
981
+ (0, chai_1.expect)((_e = f1.annotations) === null || _e === void 0 ? void 0 : _e.length).to.equal(2);
982
+ (0, chai_1.expect)(f1.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
983
983
  });
984
984
  it('ignores annotations on commented out lines', () => {
985
985
  var _a;
@@ -990,9 +990,9 @@ describe('parser', () => {
990
990
  print "hello"
991
991
  end function
992
992
  `, Parser_1.ParseMode.BrighterScript);
993
- chai_1.expect((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
993
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
994
994
  let cs = statements[0];
995
- chai_1.expect(cs.annotations).to.be.undefined;
995
+ (0, chai_1.expect)(cs.annotations).to.be.undefined;
996
996
  });
997
997
  it('can convert argument of an annotation to JS types', () => {
998
998
  var _a;
@@ -1010,22 +1010,22 @@ describe('parser', () => {
1010
1010
  sub init()
1011
1011
  end sub
1012
1012
  `, 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);
1013
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1014
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1015
1015
  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);
1016
+ (0, chai_1.expect)(fn.annotations).to.exist;
1017
+ (0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([]);
1018
+ (0, chai_1.expect)(statements[1]).to.be.instanceof(Statement_1.FunctionStatement);
1019
1019
  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([
1020
+ (0, chai_1.expect)(fn.annotations).to.exist;
1021
+ (0, chai_1.expect)(fn.annotations[0]).to.be.instanceof(Expression_1.AnnotationExpression);
1022
+ (0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([
1023
1023
  'arg', 2, true,
1024
1024
  { prop: 'value' }, [1, 2],
1025
1025
  null
1026
1026
  ]);
1027
1027
  let allArgs = fn.annotations[0].getArguments(false);
1028
- chai_1.expect(allArgs.pop()).to.be.instanceOf(Expression_1.FunctionExpression);
1028
+ (0, chai_1.expect)(allArgs.pop()).to.be.instanceOf(Expression_1.FunctionExpression);
1029
1029
  });
1030
1030
  it('can handle negative numbers', () => {
1031
1031
  var _a;
@@ -1037,11 +1037,11 @@ describe('parser', () => {
1037
1037
  sub init()
1038
1038
  end sub
1039
1039
  `, 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);
1040
+ (0, chai_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1041
+ (0, chai_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1042
1042
  let fn = statements[0];
1043
- chai_1.expect(fn.annotations).to.exist;
1044
- chai_1.expect(fn.annotations[0].getArguments()).to.deep.equal([-100]);
1043
+ (0, chai_1.expect)(fn.annotations).to.exist;
1044
+ (0, chai_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([-100]);
1045
1045
  });
1046
1046
  });
1047
1047
  describe('getBscTypeFromExpression', () => {
@@ -1054,8 +1054,8 @@ describe('parser', () => {
1054
1054
  end sub
1055
1055
  `);
1056
1056
  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);
1057
+ const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
1058
+ (0, chai_1.expect)(type.returnType).to.be.instanceof(VoidType_1.VoidType);
1059
1059
  });
1060
1060
  it('computes return type for sub with explicit return type', () => {
1061
1061
  const parser = parse(`
@@ -1066,8 +1066,8 @@ describe('parser', () => {
1066
1066
  end sub
1067
1067
  `);
1068
1068
  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);
1069
+ const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
1070
+ (0, chai_1.expect)(type.returnType).to.be.instanceof(StringType_1.StringType);
1071
1071
  });
1072
1072
  it('supports sub with custom return type', () => {
1073
1073
  const parser = parse(`
@@ -1080,10 +1080,11 @@ describe('parser', () => {
1080
1080
  class Person
1081
1081
  end class
1082
1082
  `, Parser_1.ParseMode.BrighterScript);
1083
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1083
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1084
1084
  const func = parser.ast.statements[0].func;
1085
- const type = Parser_1.getBscTypeFromExpression(func.body.statements[0].value, func);
1086
- chai_1.expect(type.returnType).to.be.instanceof(CustomType_1.CustomType);
1085
+ const type = (0, Parser_1.getBscTypeFromExpression)(func.body.statements[0].value, func);
1086
+ // Return type is LazyType, because "Person" is not fully known yet
1087
+ (0, chai_1.expect)(type.returnType).to.be.instanceof(LazyType_1.LazyType);
1087
1088
  });
1088
1089
  });
1089
1090
  describe('symbolTable', () => {
@@ -1099,39 +1100,39 @@ describe('parser', () => {
1099
1100
  class CustomKlass
1100
1101
  end class
1101
1102
  `, Parser_1.ParseMode.BrighterScript);
1102
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1103
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1103
1104
  const mainSymbolTable = parser.references.functionExpressions[0].symbolTable;
1104
- chai_1.expect(mainSymbolTable.getSymbolType('someNum')).to.be.instanceof(IntegerType_1.IntegerType);
1105
- chai_1.expect(mainSymbolTable.getSymbolType('someString')).to.be.instanceof(StringType_1.StringType);
1106
- chai_1.expect(mainSymbolTable.getSymbolType('someObj')).to.be.instanceof(ObjectType_1.ObjectType);
1107
- chai_1.expect(mainSymbolTable.getSymbolType('someCustom')).to.be.instanceof(CustomType_1.CustomType);
1105
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someNum')).to.be.instanceof(IntegerType_1.IntegerType);
1106
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someString')).to.be.instanceof(StringType_1.StringType);
1107
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someObj')).to.be.instanceof(ObjectType_1.ObjectType);
1108
+ (0, chai_1.expect)(mainSymbolTable.getSymbolType('someCustom')).to.be.instanceof(CustomType_1.CustomType);
1108
1109
  });
1109
1110
  it('stores typed parameters in functions', () => {
1110
1111
  const parser = parse(`
1111
1112
  sub someFunc(param1 as string, param2 as integer)
1112
- temp = param2
1113
+ temp = param2
1113
1114
  end sub
1114
1115
  `, Parser_1.ParseMode.BrighterScript);
1115
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1116
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1116
1117
  const someFuncSymbolTable = parser.references.functionExpressions[0].symbolTable;
1117
- chai_1.expect(someFuncSymbolTable.getSymbolType('param1')).to.be.instanceof(StringType_1.StringType);
1118
- chai_1.expect(someFuncSymbolTable.getSymbolType('param2')).to.be.instanceof(IntegerType_1.IntegerType);
1119
- chai_1.expect(someFuncSymbolTable.getSymbolType('temp')).to.be.instanceof(IntegerType_1.IntegerType);
1118
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('param1')).to.be.instanceof(StringType_1.StringType);
1119
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('param2')).to.be.instanceof(IntegerType_1.IntegerType);
1120
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('temp')).to.be.instanceof(IntegerType_1.IntegerType);
1120
1121
  });
1121
1122
  it('properly defers typing lazy types', () => {
1122
1123
  const parser = parse(`
1123
1124
  sub someFunc()
1124
- temp = foo()
1125
+ temp = foo()
1125
1126
  end sub
1126
1127
 
1127
1128
  function foo() as string
1128
- return "foo"
1129
+ return "foo"
1129
1130
  end function
1130
1131
  `, Parser_1.ParseMode.BrighterScript);
1131
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1132
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1132
1133
  const someFuncSymbolTable = parser.references.functionExpressions[0].symbolTable;
1133
- chai_1.expect(someFuncSymbolTable.getSymbolType('temp')).to.be.instanceof(LazyType_1.LazyType);
1134
- chai_1.expect(someFuncSymbolTable.getSymbolType('temp').toTypeString()).to.eq('string');
1134
+ (0, chai_1.expect)((0, reflection_1.isLazyType)(someFuncSymbolTable.getSymbol('temp')[0].type)).to.be.true;
1135
+ (0, chai_1.expect)(someFuncSymbolTable.getSymbolType('temp').toTypeString()).to.eq('string');
1135
1136
  });
1136
1137
  it('does not know about symbols declared in parent functions', () => {
1137
1138
  const parser = parse(`
@@ -1142,17 +1143,17 @@ describe('parser', () => {
1142
1143
  end sub
1143
1144
  end sub
1144
1145
  `, Parser_1.ParseMode.BrighterScript);
1145
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1146
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1146
1147
  const addOneSymbolTable = parser.references.functionExpressions[0].childFunctionExpressions[0].symbolTable;
1147
- chai_1.expect(addOneSymbolTable.getSymbolType('oldVal').toString()).to.eq('uninitialized');
1148
+ (0, chai_1.expect)((0, reflection_1.isUninitializedType)(addOneSymbolTable.getSymbolType('oldVal'))).to.be.true;
1148
1149
  });
1149
1150
  it('finds params', () => {
1150
1151
  const parser = parse(`
1151
1152
  sub alert(p1, p2 as string, p3 = 1)
1152
1153
  end sub
1153
1154
  `, Parser_1.ParseMode.BrighterScript);
1154
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1155
- testHelpers_spec_1.expectSymbolTableEquals(parser.references.functionExpressions[0].symbolTable, [
1155
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1156
+ (0, testHelpers_spec_1.expectSymbolTableEquals)(parser.references.functionExpressions[0].symbolTable, [
1156
1157
  ['p1', new DynamicType_1.DynamicType(), util_1.default.createRange(1, 26, 1, 28)],
1157
1158
  ['p2', new StringType_1.StringType(), util_1.default.createRange(1, 30, 1, 32)],
1158
1159
  ['p3', new IntegerType_1.IntegerType(), util_1.default.createRange(1, 44, 1, 46)]
@@ -1167,9 +1168,9 @@ describe('parser', () => {
1167
1168
  end for
1168
1169
  end sub
1169
1170
  `, Parser_1.ParseMode.BrighterScript);
1170
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1171
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1171
1172
  const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
1172
- chai_1.expect(currentSymbolTable.getSymbolType('i').toString()).to.eq('integer');
1173
+ (0, chai_1.expect)(currentSymbolTable.getSymbolType('i').toString()).to.eq('integer');
1173
1174
  });
1174
1175
  it('stores the loop variable in a for each loop', () => {
1175
1176
  const parser = parse(`
@@ -1179,12 +1180,172 @@ describe('parser', () => {
1179
1180
  end for
1180
1181
  end sub
1181
1182
  `, Parser_1.ParseMode.BrighterScript);
1182
- testHelpers_spec_1.expectZeroDiagnostics(parser.diagnostics);
1183
+ (0, testHelpers_spec_1.expectZeroDiagnostics)(parser.diagnostics);
1183
1184
  const currentSymbolTable = parser.references.functionExpressions[0].symbolTable;
1184
- chai_1.expect(currentSymbolTable.getSymbolType('datum').toString()).to.eq('dynamic');
1185
+ (0, chai_1.expect)(currentSymbolTable.getSymbolType('datum').toString()).to.eq('dynamic');
1185
1186
  });
1186
1187
  });
1187
1188
  });
1189
+ describe('tokenChain', () => {
1190
+ it('can find a chain of tokens', () => {
1191
+ const parser = parse(`
1192
+ sub someFunc()
1193
+ print m.field.childField
1194
+ end sub
1195
+ `, Parser_1.ParseMode.BrighterScript);
1196
+ const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 38));
1197
+ const tokenChain = parser.getTokenChain(childFieldToken).chain;
1198
+ const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1199
+ (0, chai_1.expect)(tokenChain.length).to.equal(3);
1200
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['m', 'field', 'childField']);
1201
+ (0, chai_1.expect)(tokenChain.map(tcm => tcm.usage)).to.eql([Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct, Parser_1.TokenUsage.Direct]);
1202
+ });
1203
+ it('can find a chain of tokens with function call with no args in the middle', () => {
1204
+ const parser = parse(`
1205
+ sub someFunc()
1206
+ print var.field.funcCall().childField
1207
+ end sub
1208
+ `, Parser_1.ParseMode.BrighterScript);
1209
+ const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 49));
1210
+ const tokenChain = parser.getTokenChain(childFieldToken).chain;
1211
+ const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1212
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1213
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1214
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1215
+ });
1216
+ it('can find a chain of tokens with function call with multiple args in the middle', () => {
1217
+ const parser = parse(`
1218
+ sub someFunc()
1219
+ print var.field.funcCall(1, "string", {key: value}).childField
1220
+ end sub
1221
+ `, Parser_1.ParseMode.BrighterScript);
1222
+ const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 75));
1223
+ const tokenChain = parser.getTokenChain(childFieldToken).chain;
1224
+ const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1225
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1226
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1227
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1228
+ });
1229
+ it('can find a chain of tokens with function call with function call inside', () => {
1230
+ const parser = parse(`
1231
+ sub someFunc()
1232
+ print var.field.funcCall(a(), b(), otherFunc2(c(), {d: func3(e)})).childField
1233
+ end sub
1234
+ `, Parser_1.ParseMode.BrighterScript);
1235
+ const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 90));
1236
+ const tokenChain = parser.getTokenChain(childFieldToken).chain;
1237
+ const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1238
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1239
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'funcCall', 'childField']);
1240
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.Call);
1241
+ });
1242
+ it('can find a chain of tokens with array references inside', () => {
1243
+ const parser = parse(`
1244
+ sub someFunc()
1245
+ print var.field.myArray[0].childField
1246
+ end sub
1247
+ `, Parser_1.ParseMode.BrighterScript);
1248
+ const childFieldToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 50));
1249
+ const tokenChain = parser.getTokenChain(childFieldToken).chain;
1250
+ const tokenChainTokens = tokenChain.map(tcm => tcm.token);
1251
+ (0, chai_1.expect)(tokenChain.length).to.equal(4);
1252
+ (0, chai_1.expect)(tokenChainTokens.map(token => token.text)).to.eql(['var', 'field', 'myArray', 'childField']);
1253
+ (0, chai_1.expect)(tokenChain[2].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
1254
+ });
1255
+ it('includes unknown when an expression in brackets is part of the chain', () => {
1256
+ const parser = parse(`
1257
+ sub someFunc()
1258
+ print (1 + 1).toStr()
1259
+ end sub
1260
+ `, Parser_1.ParseMode.BrighterScript);
1261
+ const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 34));
1262
+ const tokenChainResponse = parser.getTokenChain(toStrToken);
1263
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1264
+ });
1265
+ it('includes unknown when an expression in double brackets is part of the chain', () => {
1266
+ const parser = parse(`
1267
+ sub someFunc()
1268
+ print ((2 + 1)*3).toStr()
1269
+ end sub
1270
+ `, Parser_1.ParseMode.BrighterScript);
1271
+ const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 38));
1272
+ const tokenChainResponse = parser.getTokenChain(toStrToken);
1273
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1274
+ });
1275
+ it('includes unknown when a complicated expression in brackets is part of the chain', () => {
1276
+ const parser = parse(`
1277
+ sub someFunc(currentDate, lastUpdate)
1278
+ print (INT((currentDate.asSeconds() - lastUpdate) / 86400)).toStr()
1279
+ end sub
1280
+ `, Parser_1.ParseMode.BrighterScript);
1281
+ const toStrToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 81));
1282
+ const tokenChainResponse = parser.getTokenChain(toStrToken);
1283
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1284
+ });
1285
+ });
1286
+ it('includes unknown when property is referenced via brackets', () => {
1287
+ const parser = parse(`
1288
+ sub someFunc()
1289
+ complexObj = {prop: "hello", subObj: {prop: "foo", grandChildObj:{prop:"bar"}}}
1290
+ print complexObj.subObj.prop
1291
+ print complexObj["subObj"].prop
1292
+ print complexObj["subObj"]["grandChildObj"].prop
1293
+ end sub
1294
+ `, Parser_1.ParseMode.BrighterScript);
1295
+ const propAsChainToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 44)); // complexObj.subObj.prop
1296
+ const propAsAsBracketToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 47)); // complexObj["subObj"].prop
1297
+ const propAsAsDoubleBracketToken = parser.getTokenAt(vscode_languageserver_1.Position.create(5, 64)); // complexObj["subObj"]["grandChildObj"].prop
1298
+ let tokenChainResponse = parser.getTokenChain(propAsChainToken);
1299
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1300
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['complexObj', 'subObj', 'prop']);
1301
+ tokenChainResponse = parser.getTokenChain(propAsAsBracketToken);
1302
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1303
+ (0, chai_1.expect)(tokenChainResponse.chain[0].usage).to.eql(Parser_1.TokenUsage.ArrayReference);
1304
+ tokenChainResponse = parser.getTokenChain(propAsAsDoubleBracketToken);
1305
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.true;
1306
+ });
1307
+ it('allows token kinds from AllowedLocalIdentifiers as start of a chain', () => {
1308
+ const parser = parse(`
1309
+ sub testLocalIdentifiers(override, string, float)
1310
+ override.someProp.someFunc()
1311
+ string.someProp.someFunc()
1312
+ float.someProp.someFunc()
1313
+ end sub
1314
+ `, Parser_1.ParseMode.BrightScript);
1315
+ const overrideFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 40)); // override.someProp.someFunc()
1316
+ const stringFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 40)); // string.someProp.someFunc()
1317
+ const floatFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 38)); // float.someProp.someFunc()
1318
+ let tokenChainResponse = parser.getTokenChain(overrideFuncToken);
1319
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1320
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['override', 'someProp', 'someFunc']);
1321
+ tokenChainResponse = parser.getTokenChain(stringFuncToken);
1322
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1323
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['string', 'someProp', 'someFunc']);
1324
+ tokenChainResponse = parser.getTokenChain(floatFuncToken);
1325
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1326
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['float', 'someProp', 'someFunc']);
1327
+ });
1328
+ it('allows token kinds from AllowedProperties in middle of a chain', () => {
1329
+ const parser = parse(`
1330
+ sub testAllowedProperties(someObj)
1331
+ someObj.override.someFunc()
1332
+ someObj.string.someFunc()
1333
+ someObj.float.someFunc()
1334
+ end sub
1335
+ `, Parser_1.ParseMode.BrightScript);
1336
+ const overrideFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(2, 36)); // someObj.override.someFunc()
1337
+ const stringFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(3, 36)); // someObj.string.someFunc()
1338
+ const floatFuncToken = parser.getTokenAt(vscode_languageserver_1.Position.create(4, 36)); // someObj.float.someFunc()
1339
+ let tokenChainResponse = parser.getTokenChain(overrideFuncToken);
1340
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1341
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'override', 'someFunc']);
1342
+ tokenChainResponse = parser.getTokenChain(stringFuncToken);
1343
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1344
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'string', 'someFunc']);
1345
+ tokenChainResponse = parser.getTokenChain(floatFuncToken);
1346
+ (0, chai_1.expect)(tokenChainResponse.includesUnknowableTokenType).to.be.false;
1347
+ (0, chai_1.expect)(tokenChainResponse.chain.map(tcm => tcm.token).map(token => token.text)).to.eql(['someObj', 'float', 'someFunc']);
1348
+ });
1188
1349
  });
1189
1350
  function parse(text, mode) {
1190
1351
  let { tokens } = lexer_1.Lexer.scan(text);
@@ -1202,8 +1363,8 @@ function rangeToArray(range) {
1202
1363
  }
1203
1364
  exports.rangeToArray = rangeToArray;
1204
1365
  function expectCommentWithText(stat, text) {
1205
- if (reflection_1.isCommentStatement(stat)) {
1206
- chai_1.expect(stat.text).to.equal(text);
1366
+ if ((0, reflection_1.isCommentStatement)(stat)) {
1367
+ (0, chai_1.expect)(stat.text).to.equal(text);
1207
1368
  }
1208
1369
  else {
1209
1370
  failStatementType(stat, 'Comment');