brighterscript 0.66.0-alpha.8 → 0.67.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/CHANGELOG.md +120 -71
  2. package/README.md +14 -418
  3. package/dist/BsConfig.d.ts +25 -2
  4. package/dist/Cache.js +3 -3
  5. package/dist/Cache.js.map +1 -1
  6. package/dist/CodeActionUtil.d.ts +3 -3
  7. package/dist/CodeActionUtil.js.map +1 -1
  8. package/dist/CommentFlagProcessor.d.ts +3 -4
  9. package/dist/CommentFlagProcessor.js +4 -3
  10. package/dist/CommentFlagProcessor.js.map +1 -1
  11. package/dist/DependencyGraph.js +8 -8
  12. package/dist/DependencyGraph.js.map +1 -1
  13. package/dist/DiagnosticFilterer.d.ts +8 -4
  14. package/dist/DiagnosticFilterer.js +71 -38
  15. package/dist/DiagnosticFilterer.js.map +1 -1
  16. package/dist/DiagnosticMessages.d.ts +15 -36
  17. package/dist/DiagnosticMessages.js +15 -61
  18. package/dist/DiagnosticMessages.js.map +1 -1
  19. package/dist/DiagnosticSeverityAdjuster.js +3 -0
  20. package/dist/DiagnosticSeverityAdjuster.js.map +1 -1
  21. package/dist/FunctionScope.d.ts +2 -3
  22. package/dist/FunctionScope.js +0 -3
  23. package/dist/FunctionScope.js.map +1 -1
  24. package/dist/LanguageServer.d.ts +1 -2
  25. package/dist/LanguageServer.js +29 -35
  26. package/dist/LanguageServer.js.map +1 -1
  27. package/dist/Logger.d.ts +5 -9
  28. package/dist/Logger.js +18 -22
  29. package/dist/Logger.js.map +1 -1
  30. package/dist/PluginInterface.d.ts +13 -15
  31. package/dist/PluginInterface.js +16 -70
  32. package/dist/PluginInterface.js.map +1 -1
  33. package/dist/Program.d.ts +105 -138
  34. package/dist/Program.js +479 -702
  35. package/dist/Program.js.map +1 -1
  36. package/dist/ProgramBuilder.d.ts +8 -19
  37. package/dist/ProgramBuilder.js +82 -87
  38. package/dist/ProgramBuilder.js.map +1 -1
  39. package/dist/Scope.d.ts +56 -46
  40. package/dist/Scope.js +281 -217
  41. package/dist/Scope.js.map +1 -1
  42. package/dist/Stopwatch.js +1 -1
  43. package/dist/Stopwatch.js.map +1 -1
  44. package/dist/SymbolTable.d.ts +12 -68
  45. package/dist/SymbolTable.js +28 -213
  46. package/dist/SymbolTable.js.map +1 -1
  47. package/dist/XmlScope.d.ts +5 -7
  48. package/dist/XmlScope.js +36 -76
  49. package/dist/XmlScope.js.map +1 -1
  50. package/dist/astUtils/{Editor.d.ts → AstEditor.d.ts} +1 -6
  51. package/dist/astUtils/{Editor.js → AstEditor.js} +3 -9
  52. package/dist/astUtils/AstEditor.js.map +1 -0
  53. package/dist/astUtils/{Editor.spec.js → AstEditor.spec.js} +6 -10
  54. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  55. package/dist/astUtils/creators.d.ts +8 -19
  56. package/dist/astUtils/creators.js +22 -54
  57. package/dist/astUtils/creators.js.map +1 -1
  58. package/dist/astUtils/creators.spec.js +0 -10
  59. package/dist/astUtils/creators.spec.js.map +1 -1
  60. package/dist/astUtils/reflection.d.ts +45 -81
  61. package/dist/astUtils/reflection.js +157 -220
  62. package/dist/astUtils/reflection.js.map +1 -1
  63. package/dist/astUtils/reflection.spec.js +19 -96
  64. package/dist/astUtils/reflection.spec.js.map +1 -1
  65. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  66. package/dist/astUtils/visitors.d.ts +14 -18
  67. package/dist/astUtils/visitors.js +9 -22
  68. package/dist/astUtils/visitors.js.map +1 -1
  69. package/dist/astUtils/visitors.spec.js +9 -62
  70. package/dist/astUtils/visitors.spec.js.map +1 -1
  71. package/dist/astUtils/xml.d.ts +9 -9
  72. package/dist/astUtils/xml.js +6 -6
  73. package/dist/astUtils/xml.js.map +1 -1
  74. package/dist/bscPlugin/BscPlugin.d.ts +8 -11
  75. package/dist/bscPlugin/BscPlugin.js +21 -29
  76. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  77. package/dist/bscPlugin/CallExpressionInfo.d.ts +6 -5
  78. package/dist/bscPlugin/CallExpressionInfo.js +2 -2
  79. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  80. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +11 -11
  81. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  82. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
  83. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  84. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +1 -49
  85. package/dist/bscPlugin/completions/CompletionsProcessor.js +23 -424
  86. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  87. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  88. package/dist/bscPlugin/definition/DefinitionProvider.js +200 -0
  89. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  90. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  91. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  92. package/dist/bscPlugin/hover/HoverProcessor.d.ts +3 -7
  93. package/dist/bscPlugin/hover/HoverProcessor.js +88 -128
  94. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  95. package/dist/bscPlugin/hover/HoverProcessor.spec.js +24 -336
  96. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  97. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  98. package/dist/bscPlugin/references/ReferencesProvider.js +56 -0
  99. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  100. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  101. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  102. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +0 -1
  103. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +5 -49
  104. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  105. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -22
  106. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  107. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  108. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  109. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  110. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +290 -0
  111. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  112. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  113. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  114. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  115. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  116. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  117. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  118. package/dist/bscPlugin/symbols/symbolUtils.js +140 -0
  119. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  120. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.d.ts → BrsFilePreTranspileProcessor.d.ts} +2 -4
  121. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.js → BrsFilePreTranspileProcessor.js} +15 -36
  122. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
  123. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +46 -0
  124. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -0
  125. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +1 -0
  126. package/dist/bscPlugin/validation/BrsFileValidator.js +30 -41
  127. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  128. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +2 -2
  129. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  130. package/dist/bscPlugin/validation/ProgramValidator.d.ts +3 -3
  131. package/dist/bscPlugin/validation/ProgramValidator.js +6 -6
  132. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -1
  133. package/dist/bscPlugin/validation/ScopeValidator.d.ts +6 -28
  134. package/dist/bscPlugin/validation/ScopeValidator.js +166 -387
  135. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  136. package/dist/bscPlugin/validation/XmlFileValidator.js +9 -9
  137. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  138. package/dist/diagnosticUtils.d.ts +2 -3
  139. package/dist/diagnosticUtils.js +5 -5
  140. package/dist/diagnosticUtils.js.map +1 -1
  141. package/dist/examples/plugins/removePrint.js +1 -1
  142. package/dist/examples/plugins/removePrint.js.map +1 -1
  143. package/dist/files/BrsFile.Class.spec.js +143 -114
  144. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  145. package/dist/files/BrsFile.d.ts +61 -83
  146. package/dist/files/BrsFile.js +552 -607
  147. package/dist/files/BrsFile.js.map +1 -1
  148. package/dist/files/BrsFile.spec.js +1365 -1201
  149. package/dist/files/BrsFile.spec.js.map +1 -1
  150. package/dist/files/XmlFile.d.ts +28 -56
  151. package/dist/files/XmlFile.js +103 -89
  152. package/dist/files/XmlFile.js.map +1 -1
  153. package/dist/files/XmlFile.spec.js +179 -122
  154. package/dist/files/XmlFile.spec.js.map +1 -1
  155. package/dist/files/tests/imports.spec.js +19 -29
  156. package/dist/files/tests/imports.spec.js.map +1 -1
  157. package/dist/files/tests/optionalChaning.spec.js +14 -14
  158. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  159. package/dist/globalCallables.js +83 -88
  160. package/dist/globalCallables.js.map +1 -1
  161. package/dist/index.d.ts +1 -9
  162. package/dist/index.js +1 -9
  163. package/dist/index.js.map +1 -1
  164. package/dist/interfaces.d.ts +173 -423
  165. package/dist/interfaces.js +0 -24
  166. package/dist/interfaces.js.map +1 -1
  167. package/dist/lexer/Lexer.d.ts +9 -15
  168. package/dist/lexer/Lexer.js +35 -46
  169. package/dist/lexer/Lexer.js.map +1 -1
  170. package/dist/lexer/Lexer.spec.js +48 -40
  171. package/dist/lexer/Lexer.spec.js.map +1 -1
  172. package/dist/lexer/Token.d.ts +1 -5
  173. package/dist/lexer/Token.js +1 -1
  174. package/dist/lexer/Token.js.map +1 -1
  175. package/dist/lexer/TokenKind.d.ts +0 -6
  176. package/dist/lexer/TokenKind.js +2 -14
  177. package/dist/lexer/TokenKind.js.map +1 -1
  178. package/dist/logging.d.ts +9 -0
  179. package/dist/logging.js +16 -0
  180. package/dist/logging.js.map +1 -0
  181. package/dist/parser/AstNode.d.ts +6 -90
  182. package/dist/parser/AstNode.js +5 -96
  183. package/dist/parser/AstNode.js.map +1 -1
  184. package/dist/parser/AstNode.spec.js.map +1 -1
  185. package/dist/parser/BrsTranspileState.d.ts +3 -4
  186. package/dist/parser/BrsTranspileState.js +2 -3
  187. package/dist/parser/BrsTranspileState.js.map +1 -1
  188. package/dist/parser/Expression.d.ts +114 -137
  189. package/dist/parser/Expression.js +244 -373
  190. package/dist/parser/Expression.js.map +1 -1
  191. package/dist/parser/Parser.Class.spec.js +19 -46
  192. package/dist/parser/Parser.Class.spec.js.map +1 -1
  193. package/dist/parser/Parser.d.ts +18 -14
  194. package/dist/parser/Parser.js +196 -175
  195. package/dist/parser/Parser.js.map +1 -1
  196. package/dist/parser/Parser.spec.d.ts +0 -2
  197. package/dist/parser/Parser.spec.js +10 -674
  198. package/dist/parser/Parser.spec.js.map +1 -1
  199. package/dist/parser/SGParser.d.ts +6 -44
  200. package/dist/parser/SGParser.js +198 -194
  201. package/dist/parser/SGParser.js.map +1 -1
  202. package/dist/parser/SGParser.spec.js +11 -14
  203. package/dist/parser/SGParser.spec.js.map +1 -1
  204. package/dist/parser/SGTypes.d.ts +52 -280
  205. package/dist/parser/SGTypes.js +185 -562
  206. package/dist/parser/SGTypes.js.map +1 -1
  207. package/dist/parser/Statement.d.ts +140 -172
  208. package/dist/parser/Statement.js +201 -337
  209. package/dist/parser/Statement.js.map +1 -1
  210. package/dist/parser/Statement.spec.js.map +1 -1
  211. package/dist/parser/TranspileState.d.ts +3 -2
  212. package/dist/parser/TranspileState.js +8 -10
  213. package/dist/parser/TranspileState.js.map +1 -1
  214. package/dist/parser/tests/Parser.spec.js +3 -5
  215. package/dist/parser/tests/Parser.spec.js.map +1 -1
  216. package/dist/parser/tests/controlFlow/For.spec.js +8 -16
  217. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  218. package/dist/parser/tests/controlFlow/ForEach.spec.js +6 -12
  219. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  220. package/dist/parser/tests/controlFlow/While.spec.js +4 -8
  221. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  222. package/dist/parser/tests/expression/Call.spec.js +4 -4
  223. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  224. package/dist/parser/tests/expression/Indexing.spec.js +25 -0
  225. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  226. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +73 -29
  227. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  228. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
  229. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  230. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
  231. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  232. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +47 -35
  233. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  234. package/dist/parser/tests/expression/TernaryExpression.spec.js +83 -36
  235. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  236. package/dist/parser/tests/expression/UnaryExpression.spec.js +2 -2
  237. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -1
  238. package/dist/parser/tests/statement/ConstStatement.spec.js +26 -27
  239. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  240. package/dist/parser/tests/statement/Continue.spec.js +2 -2
  241. package/dist/parser/tests/statement/Continue.spec.js.map +1 -1
  242. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  243. package/dist/parser/tests/statement/Enum.spec.js +393 -90
  244. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  245. package/dist/parser/tests/statement/For.spec.js +6 -6
  246. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  247. package/dist/parser/tests/statement/ForEach.spec.js +4 -4
  248. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  249. package/dist/parser/tests/statement/Function.spec.js +1 -1
  250. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  251. package/dist/parser/tests/statement/InterfaceStatement.spec.js +18 -18
  252. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  253. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  254. package/dist/parser/tests/statement/PrintStatement.spec.js +13 -16
  255. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  256. package/dist/parser/tests/statement/ReturnStatement.spec.js +3 -5
  257. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  258. package/dist/parser/tests/statement/Set.spec.js +13 -26
  259. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  260. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  261. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  262. package/dist/preprocessor/Chunk.js +1 -2
  263. package/dist/preprocessor/Chunk.js.map +1 -1
  264. package/dist/preprocessor/Preprocessor.d.ts +3 -4
  265. package/dist/preprocessor/Preprocessor.js +3 -3
  266. package/dist/preprocessor/Preprocessor.js.map +1 -1
  267. package/dist/preprocessor/PreprocessorParser.js +8 -1
  268. package/dist/preprocessor/PreprocessorParser.js.map +1 -1
  269. package/dist/roku-types/data.json +293 -243
  270. package/dist/roku-types/index.d.ts +38 -17
  271. package/dist/types/ArrayType.d.ts +4 -9
  272. package/dist/types/ArrayType.js +24 -72
  273. package/dist/types/ArrayType.js.map +1 -1
  274. package/dist/types/ArrayType.spec.js +10 -39
  275. package/dist/types/ArrayType.spec.js.map +1 -1
  276. package/dist/types/BooleanType.d.ts +4 -8
  277. package/dist/types/BooleanType.js +8 -19
  278. package/dist/types/BooleanType.js.map +1 -1
  279. package/dist/types/BooleanType.spec.js +3 -9
  280. package/dist/types/BooleanType.spec.js.map +1 -1
  281. package/dist/types/BscType.d.ts +2 -29
  282. package/dist/types/BscType.js +0 -113
  283. package/dist/types/BscType.js.map +1 -1
  284. package/dist/types/CustomType.d.ts +9 -0
  285. package/dist/types/CustomType.js +32 -0
  286. package/dist/types/CustomType.js.map +1 -0
  287. package/dist/types/DoubleType.d.ts +4 -8
  288. package/dist/types/DoubleType.js +20 -23
  289. package/dist/types/DoubleType.js.map +1 -1
  290. package/dist/types/DoubleType.spec.js +3 -11
  291. package/dist/types/DoubleType.spec.js.map +1 -1
  292. package/dist/types/DynamicType.d.ts +3 -9
  293. package/dist/types/DynamicType.js +2 -18
  294. package/dist/types/DynamicType.js.map +1 -1
  295. package/dist/types/DynamicType.spec.js +4 -15
  296. package/dist/types/DynamicType.spec.js.map +1 -1
  297. package/dist/types/FloatType.d.ts +4 -8
  298. package/dist/types/FloatType.js +20 -23
  299. package/dist/types/FloatType.js.map +1 -1
  300. package/dist/types/FloatType.spec.js +3 -3
  301. package/dist/types/FloatType.spec.js.map +1 -1
  302. package/dist/types/FunctionType.d.ts +20 -10
  303. package/dist/types/FunctionType.js +52 -27
  304. package/dist/types/FunctionType.js.map +1 -1
  305. package/dist/types/FunctionType.spec.js +23 -0
  306. package/dist/types/FunctionType.spec.js.map +1 -0
  307. package/dist/types/IntegerType.d.ts +4 -8
  308. package/dist/types/IntegerType.js +20 -23
  309. package/dist/types/IntegerType.js.map +1 -1
  310. package/dist/types/IntegerType.spec.js +3 -7
  311. package/dist/types/IntegerType.spec.js.map +1 -1
  312. package/dist/types/InterfaceType.d.ts +10 -12
  313. package/dist/types/InterfaceType.js +48 -23
  314. package/dist/types/InterfaceType.js.map +1 -1
  315. package/dist/types/InterfaceType.spec.js +45 -82
  316. package/dist/types/InterfaceType.spec.js.map +1 -1
  317. package/dist/types/InvalidType.d.ts +4 -7
  318. package/dist/types/InvalidType.js +8 -18
  319. package/dist/types/InvalidType.js.map +1 -1
  320. package/dist/types/InvalidType.spec.js +3 -7
  321. package/dist/types/InvalidType.spec.js.map +1 -1
  322. package/dist/types/LongIntegerType.d.ts +4 -8
  323. package/dist/types/LongIntegerType.js +20 -23
  324. package/dist/types/LongIntegerType.js.map +1 -1
  325. package/dist/types/LongIntegerType.spec.js +3 -9
  326. package/dist/types/LongIntegerType.spec.js.map +1 -1
  327. package/dist/types/ObjectType.d.ts +4 -8
  328. package/dist/types/ObjectType.js +7 -21
  329. package/dist/types/ObjectType.js.map +1 -1
  330. package/dist/types/ObjectType.spec.js +2 -2
  331. package/dist/types/ObjectType.spec.js.map +1 -1
  332. package/dist/types/StringType.d.ts +4 -11
  333. package/dist/types/StringType.js +8 -23
  334. package/dist/types/StringType.js.map +1 -1
  335. package/dist/types/StringType.spec.js +2 -2
  336. package/dist/types/StringType.spec.js.map +1 -1
  337. package/dist/types/UninitializedType.d.ts +3 -7
  338. package/dist/types/UninitializedType.js +3 -14
  339. package/dist/types/UninitializedType.js.map +1 -1
  340. package/dist/types/VoidType.d.ts +4 -8
  341. package/dist/types/VoidType.js +8 -18
  342. package/dist/types/VoidType.js.map +1 -1
  343. package/dist/types/VoidType.spec.js +2 -2
  344. package/dist/types/VoidType.spec.js.map +1 -1
  345. package/dist/util.d.ts +43 -104
  346. package/dist/util.js +243 -640
  347. package/dist/util.js.map +1 -1
  348. package/dist/validators/ClassValidator.d.ts +6 -1
  349. package/dist/validators/ClassValidator.js +61 -20
  350. package/dist/validators/ClassValidator.js.map +1 -1
  351. package/package.json +13 -12
  352. package/dist/ActionPipeline.d.ts +0 -10
  353. package/dist/ActionPipeline.js +0 -40
  354. package/dist/ActionPipeline.js.map +0 -1
  355. package/dist/AstValidationSegmenter.d.ts +0 -25
  356. package/dist/AstValidationSegmenter.js +0 -150
  357. package/dist/AstValidationSegmenter.js.map +0 -1
  358. package/dist/CacheVerifier.d.ts +0 -7
  359. package/dist/CacheVerifier.js +0 -20
  360. package/dist/CacheVerifier.js.map +0 -1
  361. package/dist/astUtils/Editor.js.map +0 -1
  362. package/dist/astUtils/Editor.spec.js.map +0 -1
  363. package/dist/bscPlugin/FileWriter.d.ts +0 -6
  364. package/dist/bscPlugin/FileWriter.js +0 -24
  365. package/dist/bscPlugin/FileWriter.js.map +0 -1
  366. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +0 -1658
  367. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +0 -1
  368. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +0 -9
  369. package/dist/bscPlugin/fileProviders/FileProvider.js +0 -51
  370. package/dist/bscPlugin/fileProviders/FileProvider.js.map +0 -1
  371. package/dist/bscPlugin/serialize/BslibInjector.spec.js +0 -19
  372. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +0 -1
  373. package/dist/bscPlugin/serialize/BslibManager.d.ts +0 -9
  374. package/dist/bscPlugin/serialize/BslibManager.js +0 -40
  375. package/dist/bscPlugin/serialize/BslibManager.js.map +0 -1
  376. package/dist/bscPlugin/serialize/FileSerializer.d.ts +0 -9
  377. package/dist/bscPlugin/serialize/FileSerializer.js +0 -72
  378. package/dist/bscPlugin/serialize/FileSerializer.js.map +0 -1
  379. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +0 -1
  380. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +0 -41
  381. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +0 -1
  382. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +0 -11
  383. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +0 -53
  384. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +0 -1
  385. package/dist/bscPlugin/validation/ScopeValidator.spec.js +0 -2004
  386. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +0 -1
  387. package/dist/files/AssetFile.d.ts +0 -26
  388. package/dist/files/AssetFile.js +0 -26
  389. package/dist/files/AssetFile.js.map +0 -1
  390. package/dist/files/Factory.d.ts +0 -25
  391. package/dist/files/Factory.js +0 -22
  392. package/dist/files/Factory.js.map +0 -1
  393. package/dist/files/File.d.ts +0 -106
  394. package/dist/files/File.js +0 -16
  395. package/dist/files/File.js.map +0 -1
  396. package/dist/files/LazyFileData.d.ts +0 -20
  397. package/dist/files/LazyFileData.js +0 -54
  398. package/dist/files/LazyFileData.js.map +0 -1
  399. package/dist/files/LazyFileData.spec.js +0 -27
  400. package/dist/files/LazyFileData.spec.js.map +0 -1
  401. package/dist/parser/tests/expression/TypeExpression.spec.js +0 -127
  402. package/dist/parser/tests/expression/TypeExpression.spec.js.map +0 -1
  403. package/dist/types/AssociativeArrayType.d.ts +0 -11
  404. package/dist/types/AssociativeArrayType.js +0 -52
  405. package/dist/types/AssociativeArrayType.js.map +0 -1
  406. package/dist/types/BaseFunctionType.d.ts +0 -9
  407. package/dist/types/BaseFunctionType.js +0 -25
  408. package/dist/types/BaseFunctionType.js.map +0 -1
  409. package/dist/types/BscTypeKind.d.ts +0 -25
  410. package/dist/types/BscTypeKind.js +0 -30
  411. package/dist/types/BscTypeKind.js.map +0 -1
  412. package/dist/types/BuiltInInterfaceAdder.d.ts +0 -23
  413. package/dist/types/BuiltInInterfaceAdder.js +0 -160
  414. package/dist/types/BuiltInInterfaceAdder.js.map +0 -1
  415. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +0 -1
  416. package/dist/types/BuiltInInterfaceAdder.spec.js +0 -116
  417. package/dist/types/BuiltInInterfaceAdder.spec.js.map +0 -1
  418. package/dist/types/ClassType.d.ts +0 -17
  419. package/dist/types/ClassType.js +0 -58
  420. package/dist/types/ClassType.js.map +0 -1
  421. package/dist/types/ClassType.spec.d.ts +0 -1
  422. package/dist/types/ClassType.spec.js +0 -77
  423. package/dist/types/ClassType.spec.js.map +0 -1
  424. package/dist/types/ComponentType.d.ts +0 -26
  425. package/dist/types/ComponentType.js +0 -83
  426. package/dist/types/ComponentType.js.map +0 -1
  427. package/dist/types/EnumType.d.ts +0 -40
  428. package/dist/types/EnumType.js +0 -81
  429. package/dist/types/EnumType.js.map +0 -1
  430. package/dist/types/EnumType.spec.d.ts +0 -1
  431. package/dist/types/EnumType.spec.js +0 -33
  432. package/dist/types/EnumType.spec.js.map +0 -1
  433. package/dist/types/InheritableType.d.ts +0 -28
  434. package/dist/types/InheritableType.js +0 -152
  435. package/dist/types/InheritableType.js.map +0 -1
  436. package/dist/types/NamespaceType.d.ts +0 -12
  437. package/dist/types/NamespaceType.js +0 -28
  438. package/dist/types/NamespaceType.js.map +0 -1
  439. package/dist/types/ReferenceType.d.ts +0 -63
  440. package/dist/types/ReferenceType.js +0 -423
  441. package/dist/types/ReferenceType.js.map +0 -1
  442. package/dist/types/ReferenceType.spec.d.ts +0 -1
  443. package/dist/types/ReferenceType.spec.js +0 -137
  444. package/dist/types/ReferenceType.spec.js.map +0 -1
  445. package/dist/types/TypedFunctionType.d.ts +0 -33
  446. package/dist/types/TypedFunctionType.js +0 -106
  447. package/dist/types/TypedFunctionType.js.map +0 -1
  448. package/dist/types/TypedFunctionType.spec.d.ts +0 -1
  449. package/dist/types/TypedFunctionType.spec.js +0 -122
  450. package/dist/types/TypedFunctionType.spec.js.map +0 -1
  451. package/dist/types/UnionType.d.ts +0 -20
  452. package/dist/types/UnionType.js +0 -123
  453. package/dist/types/UnionType.js.map +0 -1
  454. package/dist/types/UnionType.spec.d.ts +0 -1
  455. package/dist/types/UnionType.spec.js +0 -130
  456. package/dist/types/UnionType.spec.js.map +0 -1
  457. package/dist/types/helper.spec.d.ts +0 -1
  458. package/dist/types/helper.spec.js +0 -145
  459. package/dist/types/helper.spec.js.map +0 -1
  460. package/dist/types/helpers.d.ts +0 -24
  461. package/dist/types/helpers.js +0 -178
  462. package/dist/types/helpers.js.map +0 -1
  463. package/dist/types/index.d.ts +0 -22
  464. package/dist/types/index.js +0 -39
  465. package/dist/types/index.js.map +0 -1
  466. /package/dist/astUtils/{Editor.spec.d.ts → AstEditor.spec.d.ts} +0 -0
  467. /package/dist/bscPlugin/{completions/CompletionsProcessor.spec.d.ts → definition/DefinitionProvider.spec.d.ts} +0 -0
  468. /package/dist/bscPlugin/{serialize/BslibInjector.spec.d.ts → references/ReferencesProvider.spec.d.ts} +0 -0
  469. /package/dist/bscPlugin/{transpile/BrsFileTranspileProcessor.spec.d.ts → symbols/DocumentSymbolProcessor.spec.d.ts} +0 -0
  470. /package/dist/bscPlugin/{validation/ScopeValidator.spec.d.ts → symbols/WorkspaceSymbolProcessor.spec.d.ts} +0 -0
  471. /package/dist/{files/LazyFileData.spec.d.ts → bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts} +0 -0
  472. /package/dist/{parser/tests/expression/TypeExpression.spec.d.ts → types/FunctionType.spec.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.failStatementType = exports.rangeToArray = exports.parse = void 0;
3
+ exports.failStatementType = exports.rangeToArray = void 0;
4
4
  const chai_config_spec_1 = require("../chai-config.spec");
5
5
  const Lexer_1 = require("../lexer/Lexer");
6
6
  const TokenKind_1 = require("../lexer/TokenKind");
@@ -16,11 +16,6 @@ const source_map_1 = require("source-map");
16
16
  const BrsFile_1 = require("../files/BrsFile");
17
17
  const Program_1 = require("../Program");
18
18
  const visitors_1 = require("../astUtils/visitors");
19
- const SymbolTable_1 = require("../SymbolTable");
20
- const IntegerType_1 = require("../types/IntegerType");
21
- const FloatType_1 = require("../types/FloatType");
22
- const StringType_1 = require("../types/StringType");
23
- const types_1 = require("../types");
24
19
  describe('parser', () => {
25
20
  it('emits empty object when empty token list is provided', () => {
26
21
  (0, chai_config_spec_1.expect)(Parser_1.Parser.parse([])).to.deep.include({
@@ -53,18 +48,12 @@ describe('parser', () => {
53
48
  });
54
49
  function expressionsToStrings(expressions) {
55
50
  return [...expressions.values()].map(x => {
56
- const file = new BrsFile_1.BrsFile({
57
- srcPath: '',
58
- destPath: '',
59
- program: new Program_1.Program({})
60
- });
51
+ const file = new BrsFile_1.BrsFile('', '', new Program_1.Program({}));
61
52
  const state = new BrsTranspileState_1.BrsTranspileState(file);
62
53
  return new source_map_1.SourceNode(null, null, null, x.transpile(state)).toString();
63
54
  });
64
55
  }
65
- // eslint-disable-next-line func-names, prefer-arrow-callback
66
- it('works for references.expressions', function () {
67
- this.timeout(5000); // this test takes a long time on github
56
+ it('works for references.expressions', () => {
68
57
  const parser = Parser_1.Parser.parse(`
69
58
  b += "plus-equal"
70
59
  a += 1 + 2
@@ -333,8 +322,7 @@ describe('parser', () => {
333
322
  sub test(param1 as unknownType)
334
323
  end sub
335
324
  `);
336
- // type validation happens at scope validation, not at the parser
337
- (0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
325
+ (0, testHelpers_spec_1.expectDiagnostics)(parser, [Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.functionParameterTypeIsInvalid('param1', 'unknownType'))]);
338
326
  (0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(parser.ast.statements[0])).to.be.true;
339
327
  });
340
328
  describe('namespace', () => {
@@ -478,7 +466,7 @@ describe('parser', () => {
478
466
  function log() as UNKNOWN_TYPE
479
467
  end function
480
468
  `, Parser_1.ParseMode.BrightScript);
481
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics); // type validation happens at scope validation step
469
+ (0, chai_config_spec_1.expect)(diagnostics.length).to.be.greaterThan(0);
482
470
  (0, chai_config_spec_1.expect)(statements[0]).to.exist;
483
471
  });
484
472
  it('unknown function type is not a problem in Brighterscript mode', () => {
@@ -505,12 +493,12 @@ describe('parser', () => {
505
493
  (0, chai_config_spec_1.expect)(diagnostics.length).to.equal(0);
506
494
  (0, chai_config_spec_1.expect)(statements[0]).to.exist;
507
495
  });
508
- it('does not cause any diagnostics when custom parameter types are used in Brightscript Mode', () => {
496
+ it('does not allow custom parameter types in Brightscript Mode', () => {
509
497
  let { diagnostics } = parse(`
510
498
  sub foo(value as UNKNOWN_TYPE)
511
499
  end sub
512
500
  `, Parser_1.ParseMode.BrightScript);
513
- (0, chai_config_spec_1.expect)(diagnostics.length).to.equal(0);
501
+ (0, chai_config_spec_1.expect)(diagnostics.length).not.to.equal(0);
514
502
  });
515
503
  it('allows custom namespaced parameter types in BrighterscriptMode', () => {
516
504
  let { statements, diagnostics } = parse(`
@@ -559,100 +547,14 @@ describe('parser', () => {
559
547
  let { diagnostics } = Parser_1.Parser.parse(tokens);
560
548
  (0, chai_config_spec_1.expect)(diagnostics).to.be.lengthOf(1, 'Error count should be 0');
561
549
  });
562
- it('allows printing object with trailing period', () => {
550
+ it.skip('allows printing object with trailing period', () => {
563
551
  let { tokens } = Lexer_1.Lexer.scan(`print a.`);
564
- let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
565
- let printStatement = statements[0];
566
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.expectedPropertyNameAfterPeriod());
567
- (0, chai_config_spec_1.expect)(printStatement).to.be.instanceof(Statement_1.PrintStatement);
568
- (0, chai_config_spec_1.expect)(printStatement.expressions[0]).to.be.instanceof(Expression_1.VariableExpression);
569
- });
570
- it('allows printing object with trailing period with multiple dotted gets', () => {
571
- let { tokens } = Lexer_1.Lexer.scan(`print a.b.`);
572
- let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
552
+ let { statements, diagnostics } = Parser_1.Parser.parse(tokens);
573
553
  let printStatement = statements[0];
574
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.expectedPropertyNameAfterPeriod());
554
+ (0, chai_config_spec_1.expect)(diagnostics).to.be.empty;
575
555
  (0, chai_config_spec_1.expect)(printStatement).to.be.instanceof(Statement_1.PrintStatement);
576
556
  (0, chai_config_spec_1.expect)(printStatement.expressions[0]).to.be.instanceof(Expression_1.DottedGetExpression);
577
557
  });
578
- describe('incomplete statements in the ast', () => {
579
- it('adds variable expressions to the ast', () => {
580
- let { tokens } = Lexer_1.Lexer.scan(`
581
- function a()
582
- NameA.
583
- end function
584
-
585
- namespace NameA
586
- sub noop()
587
- end sub
588
- end namespace
589
- `);
590
- let { diagnostics, statements } = Parser_1.Parser.parse(tokens);
591
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.expectedStatementOrFunctionCallButReceivedExpression());
592
- let stmt = statements[0].func.body.statements[0];
593
- (0, chai_config_spec_1.expect)((0, reflection_1.isExpressionStatement)(stmt)).to.be.true;
594
- (0, chai_config_spec_1.expect)((0, reflection_1.isVariableExpression)((stmt).expression)).to.be.true;
595
- (0, chai_config_spec_1.expect)(stmt.expression.name.text).to.equal('NameA');
596
- });
597
- it('adds unended call statements', () => {
598
- let { tokens } = Lexer_1.Lexer.scan(`
599
- function a()
600
- lcase(
601
- end function
602
- `);
603
- let { statements } = Parser_1.Parser.parse(tokens);
604
- let stmt = statements[0].func.body.statements[0];
605
- (0, chai_config_spec_1.expect)((0, reflection_1.isExpressionStatement)(stmt)).to.be.true;
606
- (0, chai_config_spec_1.expect)((0, reflection_1.isCallExpression)((stmt).expression)).to.be.true;
607
- (0, chai_config_spec_1.expect)(stmt.expression.callee.name.text).to.equal('lcase');
608
- });
609
- it('adds unended indexed get statements', () => {
610
- let { tokens } = Lexer_1.Lexer.scan(`
611
- function a()
612
- nums[
613
- end function
614
-
615
- const nums = [1, 2, 3]
616
- `);
617
- let { statements } = Parser_1.Parser.parse(tokens);
618
- let stmt = statements[0].func.body.statements[0];
619
- (0, chai_config_spec_1.expect)((0, reflection_1.isExpressionStatement)(stmt)).to.be.true;
620
- (0, chai_config_spec_1.expect)((0, reflection_1.isIndexedGetExpression)((stmt).expression)).to.be.true;
621
- (0, chai_config_spec_1.expect)(stmt.expression.obj.name.text).to.equal('nums');
622
- });
623
- it('adds dotted gets', () => {
624
- let { tokens } = Lexer_1.Lexer.scan(`
625
- function foo(a as KlassA)
626
- a.b.
627
- end function
628
-
629
- class KlassA
630
- b as KlassB
631
- end class
632
-
633
- class KlassB
634
- sub noop()
635
- end sub
636
- end class
637
- `);
638
- let { statements } = Parser_1.Parser.parse(tokens);
639
- let stmt = statements[0].func.body.statements[0];
640
- (0, chai_config_spec_1.expect)((0, reflection_1.isExpressionStatement)(stmt)).to.be.true;
641
- (0, chai_config_spec_1.expect)((0, reflection_1.isDottedGetExpression)((stmt).expression)).to.be.true;
642
- (0, chai_config_spec_1.expect)(stmt.expression.obj.name.text).to.equal('a');
643
- (0, chai_config_spec_1.expect)(stmt.expression.name.text).to.equal('b');
644
- });
645
- it('adds function statement with missing type after as', () => {
646
- var _a;
647
- let parser = parse(`
648
- sub foo(thing as )
649
- print thing
650
- end sub
651
- `, Parser_1.ParseMode.BrighterScript);
652
- (0, chai_config_spec_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist;
653
- (0, chai_config_spec_1.expect)(parser.ast.statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
654
- });
655
- });
656
558
  describe('comments', () => {
657
559
  it('combines multi-line comments', () => {
658
560
  let { tokens } = Lexer_1.Lexer.scan(`
@@ -1288,571 +1190,6 @@ describe('parser', () => {
1288
1190
  (0, chai_config_spec_1.expect)(fn.annotations[0].getArguments()).to.deep.equal([-100]);
1289
1191
  });
1290
1192
  });
1291
- describe('type casts', () => {
1292
- it('is not allowed in brightscript mode', () => {
1293
- var _a;
1294
- let parser = parse(`
1295
- sub main(node as dynamic)
1296
- print lcase((node as string))
1297
- end sub
1298
- `, Parser_1.ParseMode.BrightScript);
1299
- (0, chai_config_spec_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('type cast').message);
1300
- });
1301
- it('allows type casts after function calls', () => {
1302
- var _a;
1303
- let { statements, diagnostics } = parse(`
1304
- sub main()
1305
- value = getValue() as integer
1306
- end sub
1307
-
1308
- function getValue()
1309
- return 123
1310
- end function
1311
- `, Parser_1.ParseMode.BrighterScript);
1312
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1313
- (0, chai_config_spec_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1314
- let fn = statements[0];
1315
- (0, chai_config_spec_1.expect)(fn.func.body.statements).to.exist;
1316
- let assignment = fn.func.body.statements[0];
1317
- (0, chai_config_spec_1.expect)((0, reflection_1.isAssignmentStatement)(assignment)).to.be.true;
1318
- (0, chai_config_spec_1.expect)((0, reflection_1.isTypeCastExpression)(assignment.value)).to.be.true;
1319
- (0, chai_config_spec_1.expect)((0, reflection_1.isCallExpression)(assignment.value.obj)).to.be.true;
1320
- (0, testHelpers_spec_1.expectTypeToBe)(assignment.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime }), IntegerType_1.IntegerType);
1321
- });
1322
- it('allows type casts in the middle of expressions', () => {
1323
- var _a;
1324
- let { statements, diagnostics } = parse(`
1325
- sub main()
1326
- value = (getValue() as integer).toStr()
1327
- end sub
1328
-
1329
- function getValue()
1330
- return 123
1331
- end function
1332
- `, Parser_1.ParseMode.BrighterScript);
1333
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1334
- (0, chai_config_spec_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1335
- let fn = statements[0];
1336
- (0, chai_config_spec_1.expect)(fn.func.body.statements).to.exist;
1337
- let assignment = fn.func.body.statements[0];
1338
- (0, chai_config_spec_1.expect)((0, reflection_1.isAssignmentStatement)(assignment)).to.be.true;
1339
- (0, chai_config_spec_1.expect)((0, reflection_1.isCallExpression)(assignment.value)).to.be.true;
1340
- (0, chai_config_spec_1.expect)((0, reflection_1.isDottedGetExpression)(assignment.value.callee)).to.be.true;
1341
- (0, chai_config_spec_1.expect)((0, reflection_1.isGroupingExpression)(assignment.value.callee.obj)).to.be.true;
1342
- (0, chai_config_spec_1.expect)((0, reflection_1.isTypeCastExpression)(assignment.value.callee.obj.expression)).to.be.true;
1343
- //grouping expression is an integer
1344
- (0, testHelpers_spec_1.expectTypeToBe)(assignment.value.callee.obj.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime }), IntegerType_1.IntegerType);
1345
- });
1346
- it('allows type casts in a function call', () => {
1347
- var _a;
1348
- let { statements, diagnostics } = parse(`
1349
- sub main()
1350
- print cos(getAngle() as float)
1351
- end sub
1352
-
1353
- function getAngle()
1354
- return 123
1355
- end function
1356
- `, Parser_1.ParseMode.BrighterScript);
1357
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1358
- (0, chai_config_spec_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1359
- let fn = statements[0];
1360
- (0, chai_config_spec_1.expect)(fn.func.body.statements).to.exist;
1361
- let print = fn.func.body.statements[0];
1362
- (0, chai_config_spec_1.expect)((0, reflection_1.isPrintStatement)(print)).to.be.true;
1363
- (0, chai_config_spec_1.expect)((0, reflection_1.isCallExpression)(print.expressions[0])).to.be.true;
1364
- let fnCall = print.expressions[0];
1365
- (0, chai_config_spec_1.expect)((0, reflection_1.isTypeCastExpression)(fnCall.args[0])).to.be.true;
1366
- let arg = fnCall.args[0];
1367
- //argument type is float
1368
- (0, testHelpers_spec_1.expectTypeToBe)(arg.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime }), FloatType_1.FloatType);
1369
- });
1370
- it('allows multiple type casts', () => {
1371
- var _a;
1372
- let { statements, diagnostics } = parse(`
1373
- sub main()
1374
- print getData() as dynamic as float as string
1375
- end sub
1376
- `, Parser_1.ParseMode.BrighterScript);
1377
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
1378
- (0, chai_config_spec_1.expect)(statements[0]).to.be.instanceof(Statement_1.FunctionStatement);
1379
- let fn = statements[0];
1380
- (0, chai_config_spec_1.expect)(fn.func.body.statements).to.exist;
1381
- let print = fn.func.body.statements[0];
1382
- (0, chai_config_spec_1.expect)((0, reflection_1.isPrintStatement)(print)).to.be.true;
1383
- (0, chai_config_spec_1.expect)((0, reflection_1.isTypeCastExpression)(print.expressions[0])).to.be.true;
1384
- //argument type is float
1385
- (0, testHelpers_spec_1.expectTypeToBe)(print.expressions[0].getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime }), StringType_1.StringType);
1386
- });
1387
- it('flags invalid type cast syntax - multiple as', () => {
1388
- var _a;
1389
- let { diagnostics } = parse(`
1390
- sub foo(key)
1391
- getData(key as as string)
1392
- end sub
1393
- `, Parser_1.ParseMode.BrighterScript);
1394
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist;
1395
- });
1396
- it('flags invalid type cast syntax - no type after as', () => {
1397
- var _a;
1398
- let { diagnostics } = parse(`
1399
- sub foo(key)
1400
- getData(key as)
1401
- end sub
1402
- `, Parser_1.ParseMode.BrighterScript);
1403
- (0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist;
1404
- });
1405
- });
1406
- describe('union types', () => {
1407
- it('is not allowed in brightscript mode', () => {
1408
- let parser = parse(`
1409
- sub main(param as string or integer)
1410
- print param
1411
- end sub
1412
- `, Parser_1.ParseMode.BrightScript);
1413
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser.diagnostics, [DiagnosticMessages_1.DiagnosticMessages.expectedStatementOrFunctionCallButReceivedExpression()]);
1414
- });
1415
- it('allows union types in parameters', () => {
1416
- let { diagnostics } = parse(`
1417
- sub main(param as string or integer)
1418
- print param
1419
- end sub
1420
- `, Parser_1.ParseMode.BrighterScript);
1421
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1422
- });
1423
- it('allows union types in type casts', () => {
1424
- let { diagnostics } = parse(`
1425
- sub main(val)
1426
- printThing(val as string or integer)
1427
- end sub
1428
-
1429
- sub printThing(thing as string or integer)
1430
- print thing
1431
- end sub
1432
- `, Parser_1.ParseMode.BrighterScript);
1433
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1434
- });
1435
- });
1436
- describe('typed arrays', () => {
1437
- it('is not allowed in brightscript mode', () => {
1438
- let parser = parse(`
1439
- sub main(things as string[])
1440
- print things
1441
- end sub
1442
- `, Parser_1.ParseMode.BrightScript);
1443
- (0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser.diagnostics, [DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('typed arrays')]);
1444
- });
1445
- it('is allowed in brighterscript mode', () => {
1446
- let { statements, diagnostics } = parse(`
1447
- sub main(things as string[])
1448
- print things
1449
- end sub
1450
- `, Parser_1.ParseMode.BrighterScript);
1451
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1452
- const paramType = statements[0].func.parameters[0].getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1453
- (0, testHelpers_spec_1.expectTypeToBe)(paramType, types_1.ArrayType);
1454
- (0, testHelpers_spec_1.expectTypeToBe)(paramType.defaultType, StringType_1.StringType);
1455
- });
1456
- it('allows multi dimensional arrays', () => {
1457
- let { statements, diagnostics } = parse(`
1458
- sub main(things as string[][])
1459
- print things
1460
- end sub
1461
- `, Parser_1.ParseMode.BrighterScript);
1462
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1463
- const paramType = statements[0].func.parameters[0].getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1464
- (0, testHelpers_spec_1.expectTypeToBe)(paramType, types_1.ArrayType);
1465
- (0, testHelpers_spec_1.expectTypeToBe)(paramType.defaultType, types_1.ArrayType);
1466
- (0, testHelpers_spec_1.expectTypeToBe)(paramType.defaultType.defaultType, StringType_1.StringType);
1467
- });
1468
- it('allows arrays as return types', () => {
1469
- let { statements, diagnostics } = parse(`
1470
- function getFourPrimes() as integer[]
1471
- return [2, 3, 5, 7]
1472
- end function
1473
- `, Parser_1.ParseMode.BrighterScript);
1474
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1475
- const paramType = statements[0].func.returnTypeExpression.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1476
- (0, testHelpers_spec_1.expectTypeToBe)(paramType, types_1.ArrayType);
1477
- (0, testHelpers_spec_1.expectTypeToBe)(paramType.defaultType, IntegerType_1.IntegerType);
1478
- });
1479
- it('allows arrays in union types', () => {
1480
- let { statements, diagnostics } = parse(`
1481
- sub foo(x as integer or integer[] or string or string[])
1482
- print x
1483
- end sub
1484
- `, Parser_1.ParseMode.BrighterScript);
1485
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1486
- const paramType = statements[0].func.parameters[0].getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1487
- (0, testHelpers_spec_1.expectTypeToBe)(paramType, types_1.UnionType);
1488
- (0, chai_config_spec_1.expect)(paramType.toString().includes('Array<string>')).to.be.true;
1489
- (0, chai_config_spec_1.expect)(paramType.toString().includes('Array<integer>')).to.be.true;
1490
- });
1491
- });
1492
- describe('interfaces', () => {
1493
- it('allows fields and methods', () => {
1494
- let { statements, diagnostics } = parse(`
1495
- interface SomeIFace
1496
- name as string
1497
- height as integer
1498
- function getValue(thing as float) as object
1499
- function getMe() as SomeIFace
1500
- sub noop()
1501
- end interface
1502
- `, Parser_1.ParseMode.BrighterScript);
1503
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1504
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1505
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1506
- });
1507
- it('allows untyped fields', () => {
1508
- let { statements, diagnostics } = parse(`
1509
- interface HasUntyped
1510
- name
1511
- end interface
1512
- `, Parser_1.ParseMode.BrighterScript);
1513
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1514
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1515
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1516
- });
1517
- it('allows optional fields', () => {
1518
- let { statements, diagnostics } = parse(`
1519
- interface HasOptional
1520
- optional name as string
1521
- optional height
1522
- end interface
1523
- `, Parser_1.ParseMode.BrighterScript);
1524
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1525
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1526
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1527
- const iface = statements[0];
1528
- iface.fields.forEach(f => (0, chai_config_spec_1.expect)(f.isOptional).to.be.true);
1529
- const ifaceType = iface.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1530
- // eslint-disable-next-line no-bitwise
1531
- ifaceType.getMemberTable().getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime).forEach(sym => (0, chai_config_spec_1.expect)(sym.flags & SymbolTable_1.SymbolTypeFlag.optional).to.eq(SymbolTable_1.SymbolTypeFlag.optional));
1532
- });
1533
- it('allows fields named optional', () => {
1534
- let { statements, diagnostics } = parse(`
1535
- interface IsJustOptional
1536
- optional
1537
- someThingElse
1538
- end interface
1539
- `, Parser_1.ParseMode.BrighterScript);
1540
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1541
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1542
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1543
- const iface = statements[0];
1544
- iface.fields.forEach(f => (0, chai_config_spec_1.expect)(f.isOptional).to.be.false);
1545
- const ifaceType = iface.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1546
- const iFaceMembers = ifaceType.getMemberTable().getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime);
1547
- (0, chai_config_spec_1.expect)(iFaceMembers.length).to.eq(2);
1548
- // eslint-disable-next-line no-bitwise
1549
- iFaceMembers.forEach(sym => (0, chai_config_spec_1.expect)(sym.flags & SymbolTable_1.SymbolTypeFlag.optional).to.eq(0));
1550
- });
1551
- it('allows fields named optional that are also optional', () => {
1552
- let { statements, diagnostics } = parse(`
1553
- interface IsJustOptional
1554
- optional optional
1555
- end interface
1556
- `, Parser_1.ParseMode.BrighterScript);
1557
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1558
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1559
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1560
- const iface = statements[0];
1561
- iface.fields.forEach(f => (0, chai_config_spec_1.expect)(f.isOptional).to.be.true);
1562
- const ifaceType = iface.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1563
- const iFaceMembers = ifaceType.getMemberTable().getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime);
1564
- (0, chai_config_spec_1.expect)(iFaceMembers.length).to.eq(1);
1565
- // eslint-disable-next-line no-bitwise
1566
- iFaceMembers.forEach(sym => (0, chai_config_spec_1.expect)(sym.flags & SymbolTable_1.SymbolTypeFlag.optional).to.eq(SymbolTable_1.SymbolTypeFlag.optional));
1567
- });
1568
- it('allows optional methods', () => {
1569
- let { statements, diagnostics } = parse(`
1570
- interface HasOptional
1571
- optional function getValue() as boolean
1572
- optional sub noop()
1573
- optional function process()
1574
- end interface
1575
- `, Parser_1.ParseMode.BrighterScript);
1576
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1577
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1578
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1579
- const iface = statements[0];
1580
- iface.methods.forEach(m => (0, chai_config_spec_1.expect)(m.isOptional).to.equal(true));
1581
- const ifaceType = iface.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1582
- // eslint-disable-next-line no-bitwise
1583
- ifaceType.getMemberTable().getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime).forEach(sym => (0, chai_config_spec_1.expect)(sym.flags & SymbolTable_1.SymbolTypeFlag.optional).to.eq(SymbolTable_1.SymbolTypeFlag.optional));
1584
- });
1585
- it('allows fields named `as` that are also optional', () => {
1586
- let { statements, diagnostics } = parse(`
1587
- interface IsJustOptional
1588
- optional as
1589
- end interface
1590
- `, Parser_1.ParseMode.BrighterScript);
1591
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1592
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1593
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1594
- const iface = statements[0];
1595
- iface.fields.forEach(f => (0, chai_config_spec_1.expect)(f.isOptional).to.be.true);
1596
- const ifaceType = iface.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1597
- const iFaceMembers = ifaceType.getMemberTable().getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime);
1598
- (0, chai_config_spec_1.expect)(iFaceMembers.length).to.eq(1);
1599
- // eslint-disable-next-line no-bitwise
1600
- iFaceMembers.forEach(sym => (0, chai_config_spec_1.expect)(sym.flags & SymbolTable_1.SymbolTypeFlag.optional).to.eq(SymbolTable_1.SymbolTypeFlag.optional));
1601
- });
1602
- it('allows fields named `as` that are also typed', () => {
1603
- let { statements, diagnostics } = parse(`
1604
- interface IsJustOptional
1605
- optional as as string
1606
- end interface
1607
- `, Parser_1.ParseMode.BrighterScript);
1608
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1609
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1610
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1611
- const iface = statements[0];
1612
- iface.fields.forEach(f => (0, chai_config_spec_1.expect)(f.isOptional).to.be.true);
1613
- const ifaceType = iface.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1614
- const iFaceMembers = ifaceType.getMemberTable().getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime);
1615
- (0, chai_config_spec_1.expect)(iFaceMembers.length).to.eq(1);
1616
- // eslint-disable-next-line no-bitwise
1617
- iFaceMembers.forEach(sym => (0, chai_config_spec_1.expect)(sym.flags & SymbolTable_1.SymbolTypeFlag.optional).to.eq(SymbolTable_1.SymbolTypeFlag.optional));
1618
- });
1619
- it('allows fields named `optional` that are also typed', () => {
1620
- let { statements, diagnostics } = parse(`
1621
- interface IsJustOptional
1622
- optional as string
1623
- end interface
1624
- `, Parser_1.ParseMode.BrighterScript);
1625
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1626
- (0, chai_config_spec_1.expect)(statements.length).to.eq(1);
1627
- (0, chai_config_spec_1.expect)((0, reflection_1.isInterfaceStatement)(statements[0])).to.be.true;
1628
- const iface = statements[0];
1629
- iface.fields.forEach(f => (0, chai_config_spec_1.expect)(f.isOptional).to.be.false);
1630
- const ifaceType = iface.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1631
- const iFaceMembers = ifaceType.getMemberTable().getAllSymbols(SymbolTable_1.SymbolTypeFlag.runtime);
1632
- (0, chai_config_spec_1.expect)(iFaceMembers.length).to.eq(1);
1633
- // eslint-disable-next-line no-bitwise
1634
- iFaceMembers.forEach(sym => (0, chai_config_spec_1.expect)(sym.flags & SymbolTable_1.SymbolTypeFlag.optional).to.eq(0));
1635
- });
1636
- });
1637
- describe('leadingTrivia', () => {
1638
- it('gets leading trivia from functions', () => {
1639
- let { statements } = parse(`
1640
- ' Nice function, bro
1641
- function foo()
1642
- return 1
1643
- end function
1644
- `);
1645
- const funcStatements = statements.filter(reflection_1.isFunctionStatement);
1646
- const fooTrivia = funcStatements[0].getLeadingTrivia();
1647
- (0, chai_config_spec_1.expect)(fooTrivia.length).to.be.greaterThan(0);
1648
- (0, chai_config_spec_1.expect)(fooTrivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1649
- });
1650
- it('gets multiple lines of leading trivia', () => {
1651
- let { statements } = parse(`
1652
- ' Say hello to someone
1653
- '
1654
- ' @param {string} name the person you want to say hello to.
1655
- sub sayHello(name as string = "world")
1656
- end sub
1657
- `);
1658
- const funcStatements = statements.filter(reflection_1.isFunctionStatement);
1659
- const helloTrivia = funcStatements[0].getLeadingTrivia();
1660
- (0, chai_config_spec_1.expect)(helloTrivia.length).to.be.greaterThan(0);
1661
- (0, chai_config_spec_1.expect)(helloTrivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(3);
1662
- });
1663
- it('gets leading trivia from classes', () => {
1664
- let { statements } = parse(`
1665
- ' hello
1666
- ' classes
1667
- class Hello
1668
- end class
1669
- `, Parser_1.ParseMode.BrighterScript);
1670
- const classStatements = statements.filter(reflection_1.isClassStatement);
1671
- const trivia = classStatements[0].getLeadingTrivia();
1672
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1673
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(2);
1674
- });
1675
- it('gets leading trivia from functions with annotations', () => {
1676
- let { statements } = parse(`
1677
- ' hello comment 1
1678
- ' hello comment 2
1679
- @annotation
1680
- sub sayHello(name as string = "world")
1681
- end sub
1682
- `, Parser_1.ParseMode.BrighterScript);
1683
- const funcStatements = statements.filter(reflection_1.isFunctionStatement);
1684
- const helloTrivia = funcStatements[0].getLeadingTrivia();
1685
- (0, chai_config_spec_1.expect)(helloTrivia.length).to.be.greaterThan(0);
1686
- (0, chai_config_spec_1.expect)(helloTrivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(2);
1687
- });
1688
- it('gets leading trivia from class methods', () => {
1689
- let { statements } = parse(`
1690
- ' hello
1691
- ' classes
1692
- class Hello
1693
-
1694
- ' Gets the value of PI
1695
- ' Not a dessert
1696
- function getPi() as float
1697
- return 3.14
1698
- end function
1699
-
1700
- ' Gets a dessert
1701
- function getPie() as string
1702
- return "Apple Pie"
1703
- end function
1704
- end class
1705
- `, Parser_1.ParseMode.BrighterScript);
1706
- const classStatement = statements.filter(reflection_1.isClassStatement)[0];
1707
- const methodStatements = classStatement.methods;
1708
- // function getPi()
1709
- let trivia = methodStatements[0].getLeadingTrivia();
1710
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1711
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(2);
1712
- // function getPie()
1713
- trivia = methodStatements[1].getLeadingTrivia();
1714
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1715
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1716
- });
1717
- it('gets leading trivia from class fields', () => {
1718
- let { statements } = parse(`
1719
- ' hello
1720
- ' classes
1721
- class Thing
1722
- ' like the sky
1723
- ' or a blueberry, evn though that's purple
1724
- color = "blue"
1725
-
1726
- ' My name
1727
- public name as string
1728
-
1729
- ' Only I know how old I am
1730
- private age = 42
1731
- end class
1732
- `, Parser_1.ParseMode.BrighterScript);
1733
- const classStatement = statements.filter(reflection_1.isClassStatement)[0];
1734
- const fieldStatements = classStatement.fields;
1735
- // color = "blue"
1736
- let trivia = fieldStatements[0].getLeadingTrivia();
1737
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1738
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(2);
1739
- // public name as string
1740
- trivia = fieldStatements[1].getLeadingTrivia();
1741
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1742
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1743
- // private age = 42
1744
- trivia = fieldStatements[2].getLeadingTrivia();
1745
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1746
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1747
- });
1748
- it('gets leading trivia from interfaces', () => {
1749
- let { statements } = parse(`
1750
- ' Description of interface
1751
- interface myIface
1752
- ' comment
1753
- someField as integer
1754
-
1755
- 'comment
1756
- function someFunc() as string
1757
- end interface
1758
- `, Parser_1.ParseMode.BrighterScript);
1759
- const ifaceStatement = statements.filter(reflection_1.isInterfaceStatement)[0];
1760
- const fieldStatements = ifaceStatement.fields;
1761
- const methodStatements = ifaceStatement.methods;
1762
- // interface myIface
1763
- let trivia = ifaceStatement.getLeadingTrivia();
1764
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1765
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1766
- // someField as integer
1767
- trivia = fieldStatements[0].getLeadingTrivia();
1768
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1769
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1770
- // function someFunc() as string
1771
- trivia = methodStatements[0].getLeadingTrivia();
1772
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1773
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1774
- });
1775
- it('gets leading trivia from namespaces', () => {
1776
- let { statements } = parse(`
1777
- ' Description of interface
1778
- namespace Nested.Name.Space
1779
-
1780
- end namespace
1781
- `, Parser_1.ParseMode.BrighterScript);
1782
- const nameSpaceStatement = statements.filter(reflection_1.isNamespaceStatement)[0];
1783
- // namespace Nested.Name.Space
1784
- let trivia = nameSpaceStatement.getLeadingTrivia();
1785
- (0, chai_config_spec_1.expect)(trivia.length).to.be.greaterThan(0);
1786
- (0, chai_config_spec_1.expect)(trivia.filter(t => t.kind === TokenKind_1.TokenKind.Comment).length).to.eq(1);
1787
- });
1788
- });
1789
- describe('unary/binary ordering', () => {
1790
- it('creates the correct operator order for `not x = x` code', () => {
1791
- let { diagnostics, statements } = parse(`
1792
- function isStrNotEmpty(myStr as string) as boolean
1793
- return not myStr = ""
1794
- end function
1795
- `);
1796
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1797
- (0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(statements[0])).to.be.true;
1798
- const insideReturn = statements[0].func.body.statements[0].value;
1799
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn)).to.be.true;
1800
- (0, chai_config_spec_1.expect)((0, reflection_1.isBinaryExpression)(insideReturn.right)).to.be.true;
1801
- });
1802
- it('creates the correct operator order for `not x + x` code', () => {
1803
- let { diagnostics, statements } = parse(`
1804
- function tryStuff() as integer
1805
- return not 1 + 3 ' same as "not (3)" ... eg. the "flipped bits" of 3 (0000 0011) -> 1111 1100, or -4
1806
- end function
1807
- `);
1808
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1809
- (0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(statements[0])).to.be.true;
1810
- const insideReturn = statements[0].func.body.statements[0].value;
1811
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn)).to.be.true;
1812
- (0, chai_config_spec_1.expect)((0, reflection_1.isBinaryExpression)(insideReturn.right)).to.be.true;
1813
- });
1814
- it('creates the correct operator order for `x = not x` code', () => {
1815
- let { diagnostics, statements } = parse(`
1816
- function tryStuff() as boolean
1817
- return 4 = not -5 ' same as "4 = 4"
1818
- end function
1819
- `);
1820
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1821
- (0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(statements[0])).to.be.true;
1822
- const insideReturn = statements[0].func.body.statements[0].value;
1823
- (0, chai_config_spec_1.expect)((0, reflection_1.isBinaryExpression)(insideReturn)).to.be.true;
1824
- (0, chai_config_spec_1.expect)((0, reflection_1.isLiteralExpression)(insideReturn.left)).to.be.true;
1825
- const right = insideReturn.right;
1826
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(right)).to.be.true;
1827
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(right.right)).to.be.true; // not ( - ( 5))
1828
- });
1829
- it('allows multiple nots', () => {
1830
- let { diagnostics, statements } = parse(`
1831
- function tryStuff() as integer
1832
- return not not not 4
1833
- end function
1834
- `);
1835
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1836
- (0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(statements[0])).to.be.true;
1837
- const insideReturn = statements[0].func.body.statements[0].value;
1838
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn)).to.be.true;
1839
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn.right)).to.be.true;
1840
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn.right.right)).to.be.true;
1841
- });
1842
- it('allows multiple -', () => {
1843
- let { diagnostics, statements } = parse(`
1844
- function tryStuff() as integer
1845
- return - - - 4
1846
- end function
1847
- `);
1848
- (0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
1849
- (0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(statements[0])).to.be.true;
1850
- const insideReturn = statements[0].func.body.statements[0].value;
1851
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn)).to.be.true;
1852
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn.right)).to.be.true;
1853
- (0, chai_config_spec_1.expect)((0, reflection_1.isUnaryExpression)(insideReturn.right.right)).to.be.true;
1854
- });
1855
- });
1856
1193
  });
1857
1194
  function parse(text, mode) {
1858
1195
  let { tokens } = Lexer_1.Lexer.scan(text);
@@ -1860,7 +1197,6 @@ function parse(text, mode) {
1860
1197
  mode: mode
1861
1198
  });
1862
1199
  }
1863
- exports.parse = parse;
1864
1200
  function rangeToArray(range) {
1865
1201
  return [
1866
1202
  range.start.line,