brighterscript 1.0.0-alpha.5 → 1.0.0-alpha.51

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 (652) hide show
  1. package/README.md +79 -138
  2. package/bsconfig.schema.json +196 -5
  3. package/dist/ActionPipeline.d.ts +10 -0
  4. package/dist/ActionPipeline.js +40 -0
  5. package/dist/ActionPipeline.js.map +1 -0
  6. package/dist/AstValidationSegmenter.d.ts +45 -0
  7. package/dist/AstValidationSegmenter.js +322 -0
  8. package/dist/AstValidationSegmenter.js.map +1 -0
  9. package/dist/BsConfig.d.ts +161 -43
  10. package/dist/BusyStatusTracker.d.ts +61 -0
  11. package/dist/BusyStatusTracker.js +148 -0
  12. package/dist/BusyStatusTracker.js.map +1 -0
  13. package/dist/Cache.d.ts +3 -8
  14. package/dist/Cache.js +9 -14
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +29 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +20 -15
  23. package/dist/CommentFlagProcessor.js +143 -58
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +650 -0
  27. package/dist/CrossScopeValidator.js.map +1 -0
  28. package/dist/DependencyGraph.d.ts +8 -3
  29. package/dist/DependencyGraph.js +49 -16
  30. package/dist/DependencyGraph.js.map +1 -1
  31. package/dist/DiagnosticCollection.d.ts +21 -5
  32. package/dist/DiagnosticCollection.js +77 -24
  33. package/dist/DiagnosticCollection.js.map +1 -1
  34. package/dist/DiagnosticFilterer.d.ts +27 -6
  35. package/dist/DiagnosticFilterer.js +273 -60
  36. package/dist/DiagnosticFilterer.js.map +1 -1
  37. package/dist/DiagnosticManager.d.ts +83 -0
  38. package/dist/DiagnosticManager.js +422 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +602 -196
  41. package/dist/DiagnosticMessages.js +926 -342
  42. package/dist/DiagnosticMessages.js.map +1 -1
  43. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  44. package/dist/DiagnosticSeverityAdjuster.js +45 -0
  45. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  46. package/dist/FunctionScope.d.ts +28 -0
  47. package/dist/FunctionScope.js +52 -0
  48. package/dist/FunctionScope.js.map +1 -0
  49. package/dist/KeyedThrottler.d.ts +3 -3
  50. package/dist/KeyedThrottler.js +3 -3
  51. package/dist/KeyedThrottler.js.map +1 -1
  52. package/dist/LanguageServer.d.ts +136 -104
  53. package/dist/LanguageServer.js +577 -741
  54. package/dist/LanguageServer.js.map +1 -1
  55. package/dist/Logger.d.ts +17 -13
  56. package/dist/Logger.js +64 -34
  57. package/dist/Logger.js.map +1 -1
  58. package/dist/PluginInterface.d.ts +32 -10
  59. package/dist/PluginInterface.js +117 -7
  60. package/dist/PluginInterface.js.map +1 -1
  61. package/dist/Program.d.ts +302 -98
  62. package/dist/Program.js +1613 -726
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +39 -22
  65. package/dist/ProgramBuilder.js +245 -179
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +227 -106
  68. package/dist/Scope.js +609 -557
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/ScopeNamespaceLookup.d.ts +73 -0
  71. package/dist/ScopeNamespaceLookup.js +242 -0
  72. package/dist/ScopeNamespaceLookup.js.map +1 -0
  73. package/dist/SemanticTokenUtils.js +5 -1
  74. package/dist/SemanticTokenUtils.js.map +1 -1
  75. package/dist/Stopwatch.d.ts +4 -0
  76. package/dist/Stopwatch.js +8 -1
  77. package/dist/Stopwatch.js.map +1 -1
  78. package/dist/SymbolTable.d.ts +145 -26
  79. package/dist/SymbolTable.js +575 -64
  80. package/dist/SymbolTable.js.map +1 -1
  81. package/dist/SymbolTypeFlag.d.ts +9 -0
  82. package/dist/SymbolTypeFlag.js +14 -0
  83. package/dist/SymbolTypeFlag.js.map +1 -0
  84. package/dist/Throttler.d.ts +12 -0
  85. package/dist/Throttler.js +39 -0
  86. package/dist/Throttler.js.map +1 -1
  87. package/dist/Watcher.d.ts +0 -3
  88. package/dist/Watcher.js +0 -3
  89. package/dist/Watcher.js.map +1 -1
  90. package/dist/XmlScope.d.ts +5 -15
  91. package/dist/XmlScope.js +34 -90
  92. package/dist/XmlScope.js.map +1 -1
  93. package/dist/astUtils/CachedLookups.d.ts +50 -0
  94. package/dist/astUtils/CachedLookups.js +337 -0
  95. package/dist/astUtils/CachedLookups.js.map +1 -0
  96. package/dist/astUtils/Editor.d.ts +69 -0
  97. package/dist/astUtils/Editor.js +245 -0
  98. package/dist/astUtils/Editor.js.map +1 -0
  99. package/dist/astUtils/creators.d.ts +54 -19
  100. package/dist/astUtils/creators.js +242 -42
  101. package/dist/astUtils/creators.js.map +1 -1
  102. package/dist/astUtils/reflection.d.ts +199 -85
  103. package/dist/astUtils/reflection.js +518 -145
  104. package/dist/astUtils/reflection.js.map +1 -1
  105. package/dist/astUtils/stackedVisitor.js.map +1 -1
  106. package/dist/astUtils/visitors.d.ts +117 -53
  107. package/dist/astUtils/visitors.js +95 -15
  108. package/dist/astUtils/visitors.js.map +1 -1
  109. package/dist/astUtils/xml.d.ts +9 -8
  110. package/dist/astUtils/xml.js +12 -7
  111. package/dist/astUtils/xml.js.map +1 -1
  112. package/dist/bscPlugin/BscPlugin.d.ts +26 -4
  113. package/dist/bscPlugin/BscPlugin.js +96 -4
  114. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  115. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  116. package/dist/bscPlugin/CallExpressionInfo.js +142 -0
  117. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  118. package/dist/bscPlugin/FileWriter.d.ts +19 -0
  119. package/dist/bscPlugin/FileWriter.js +79 -0
  120. package/dist/bscPlugin/FileWriter.js.map +1 -0
  121. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  122. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  123. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  124. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +109 -7
  125. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +676 -26
  126. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  127. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.d.ts +17 -0
  128. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js +66 -0
  129. package/dist/bscPlugin/codeActions/FixAllCodeActionsProcessor.js.map +1 -0
  130. package/dist/bscPlugin/codeActions/codeActionHelpers.d.ts +18 -0
  131. package/dist/bscPlugin/codeActions/codeActionHelpers.js +31 -0
  132. package/dist/bscPlugin/codeActions/codeActionHelpers.js.map +1 -0
  133. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  134. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  135. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  136. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  137. package/dist/bscPlugin/definition/DefinitionProvider.js +220 -0
  138. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  139. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  140. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  141. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  142. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  143. package/dist/bscPlugin/hover/HoverProcessor.js +238 -0
  144. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  145. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  146. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  147. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  148. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.d.ts +7 -0
  149. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js +77 -0
  150. package/dist/bscPlugin/selectionRanges/SelectionRangesProcessor.js.map +1 -0
  151. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  152. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  153. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  154. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  155. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  156. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  157. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  158. package/dist/bscPlugin/serialize/FileSerializer.js +80 -0
  159. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  160. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  161. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  162. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  163. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  164. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  165. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  166. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  167. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  168. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  169. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +34 -0
  170. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +504 -0
  171. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  172. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  173. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  174. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  175. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  176. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  177. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  178. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +51 -0
  179. package/dist/bscPlugin/validation/BrsFileValidator.js +714 -0
  180. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  181. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  182. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  183. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  184. package/dist/bscPlugin/validation/ScopeValidator.d.ts +158 -0
  185. package/dist/bscPlugin/validation/ScopeValidator.js +1481 -0
  186. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  187. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  188. package/dist/bscPlugin/validation/XmlFileValidator.js +50 -0
  189. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  190. package/dist/cli.js +140 -28
  191. package/dist/cli.js.map +1 -1
  192. package/dist/common/Sequencer.d.ts +53 -0
  193. package/dist/common/Sequencer.js +233 -0
  194. package/dist/common/Sequencer.js.map +1 -0
  195. package/dist/deferred.d.ts +5 -3
  196. package/dist/deferred.js +10 -0
  197. package/dist/deferred.js.map +1 -1
  198. package/dist/diagnosticUtils.d.ts +61 -4
  199. package/dist/diagnosticUtils.js +285 -25
  200. package/dist/diagnosticUtils.js.map +1 -1
  201. package/dist/examples/plugins/removePrint.d.ts +2 -2
  202. package/dist/examples/plugins/removePrint.js +8 -12
  203. package/dist/examples/plugins/removePrint.js.map +1 -1
  204. package/dist/files/AssetFile.d.ts +24 -0
  205. package/dist/files/AssetFile.js +25 -0
  206. package/dist/files/AssetFile.js.map +1 -0
  207. package/dist/files/BrsFile.d.ts +161 -87
  208. package/dist/files/BrsFile.js +919 -936
  209. package/dist/files/BrsFile.js.map +1 -1
  210. package/dist/files/BscFile.d.ts +102 -0
  211. package/dist/files/BscFile.js +15 -0
  212. package/dist/files/BscFile.js.map +1 -0
  213. package/dist/files/Factory.d.ts +25 -0
  214. package/dist/files/Factory.js +22 -0
  215. package/dist/files/Factory.js.map +1 -0
  216. package/dist/files/LazyFileData.d.ts +21 -0
  217. package/dist/files/LazyFileData.js +54 -0
  218. package/dist/files/LazyFileData.js.map +1 -0
  219. package/dist/files/XmlFile.d.ts +80 -41
  220. package/dist/files/XmlFile.js +162 -137
  221. package/dist/files/XmlFile.js.map +1 -1
  222. package/dist/globalCallables.d.ts +3 -1
  223. package/dist/globalCallables.js +424 -184
  224. package/dist/globalCallables.js.map +1 -1
  225. package/dist/index.d.ts +32 -4
  226. package/dist/index.js +54 -7
  227. package/dist/index.js.map +1 -1
  228. package/dist/interfaces.d.ts +987 -125
  229. package/dist/interfaces.js +21 -0
  230. package/dist/interfaces.js.map +1 -1
  231. package/dist/lexer/Lexer.d.ts +51 -12
  232. package/dist/lexer/Lexer.js +214 -65
  233. package/dist/lexer/Lexer.js.map +1 -1
  234. package/dist/lexer/Token.d.ts +27 -11
  235. package/dist/lexer/Token.js +10 -2
  236. package/dist/lexer/Token.js.map +1 -1
  237. package/dist/lexer/TokenKind.d.ts +48 -2
  238. package/dist/lexer/TokenKind.js +167 -10
  239. package/dist/lexer/TokenKind.js.map +1 -1
  240. package/dist/logging.d.ts +14 -0
  241. package/dist/logging.js +29 -0
  242. package/dist/logging.js.map +1 -0
  243. package/dist/lsp/ActionQueue.d.ts +35 -0
  244. package/dist/lsp/ActionQueue.js +115 -0
  245. package/dist/lsp/ActionQueue.js.map +1 -0
  246. package/dist/lsp/DocumentManager.d.ts +63 -0
  247. package/dist/lsp/DocumentManager.js +122 -0
  248. package/dist/lsp/DocumentManager.js.map +1 -0
  249. package/dist/lsp/LspProject.d.ts +287 -0
  250. package/dist/lsp/LspProject.js +3 -0
  251. package/dist/lsp/LspProject.js.map +1 -0
  252. package/dist/lsp/PathFilterer.d.ts +75 -0
  253. package/dist/lsp/PathFilterer.js +196 -0
  254. package/dist/lsp/PathFilterer.js.map +1 -0
  255. package/dist/lsp/Project.d.ts +200 -0
  256. package/dist/lsp/Project.js +562 -0
  257. package/dist/lsp/Project.js.map +1 -0
  258. package/dist/lsp/ProjectManager.d.ts +288 -0
  259. package/dist/lsp/ProjectManager.js +967 -0
  260. package/dist/lsp/ProjectManager.js.map +1 -0
  261. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  262. package/dist/lsp/ReaderWriterManager.js +60 -0
  263. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  264. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  265. package/dist/lsp/worker/MessageHandler.js +138 -0
  266. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  267. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  268. package/dist/lsp/worker/WorkerPool.js +78 -0
  269. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  270. package/dist/lsp/worker/WorkerThreadProject.d.ts +168 -0
  271. package/dist/lsp/worker/WorkerThreadProject.js +205 -0
  272. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  273. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  274. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  275. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  276. package/dist/lsp/worker/run.js +14 -0
  277. package/dist/lsp/worker/run.js.map +1 -0
  278. package/dist/parser/AstNode.d.ts +205 -0
  279. package/dist/parser/AstNode.js +305 -0
  280. package/dist/parser/AstNode.js.map +1 -0
  281. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  282. package/dist/parser/BrightScriptDocParser.js +294 -0
  283. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  284. package/dist/parser/BrsTranspileState.d.ts +22 -3
  285. package/dist/parser/BrsTranspileState.js +19 -0
  286. package/dist/parser/BrsTranspileState.js.map +1 -1
  287. package/dist/parser/Expression.d.ts +601 -220
  288. package/dist/parser/Expression.js +1516 -502
  289. package/dist/parser/Expression.js.map +1 -1
  290. package/dist/parser/Parser.d.ts +137 -121
  291. package/dist/parser/Parser.js +1808 -982
  292. package/dist/parser/Parser.js.map +1 -1
  293. package/dist/parser/SGParser.d.ts +30 -13
  294. package/dist/parser/SGParser.js +94 -56
  295. package/dist/parser/SGParser.js.map +1 -1
  296. package/dist/parser/SGTypes.d.ts +134 -46
  297. package/dist/parser/SGTypes.js +206 -115
  298. package/dist/parser/SGTypes.js.map +1 -1
  299. package/dist/parser/Statement.d.ts +854 -267
  300. package/dist/parser/Statement.js +2416 -621
  301. package/dist/parser/Statement.js.map +1 -1
  302. package/dist/parser/TranspileState.d.ts +30 -14
  303. package/dist/parser/TranspileState.js +124 -27
  304. package/dist/parser/TranspileState.js.map +1 -1
  305. package/dist/preprocessor/Manifest.d.ts +6 -6
  306. package/dist/preprocessor/Manifest.js +17 -38
  307. package/dist/preprocessor/Manifest.js.map +1 -1
  308. package/dist/roku-types/data.json +20554 -0
  309. package/dist/roku-types/index.d.ts +5726 -0
  310. package/dist/roku-types/index.js +11 -0
  311. package/dist/roku-types/index.js.map +1 -0
  312. package/dist/types/ArrayType.d.ts +12 -5
  313. package/dist/types/ArrayType.js +95 -25
  314. package/dist/types/ArrayType.js.map +1 -1
  315. package/dist/types/AssociativeArrayType.d.ts +15 -0
  316. package/dist/types/AssociativeArrayType.js +64 -0
  317. package/dist/types/AssociativeArrayType.js.map +1 -0
  318. package/dist/types/BaseFunctionType.d.ts +10 -0
  319. package/dist/types/BaseFunctionType.js +26 -0
  320. package/dist/types/BaseFunctionType.js.map +1 -0
  321. package/dist/types/BooleanType.d.ts +9 -5
  322. package/dist/types/BooleanType.js +19 -8
  323. package/dist/types/BooleanType.js.map +1 -1
  324. package/dist/types/BscType.d.ts +41 -3
  325. package/dist/types/BscType.js +152 -0
  326. package/dist/types/BscType.js.map +1 -1
  327. package/dist/types/BscTypeKind.d.ts +28 -0
  328. package/dist/types/BscTypeKind.js +33 -0
  329. package/dist/types/BscTypeKind.js.map +1 -0
  330. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  331. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  332. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  333. package/dist/types/CallFuncableType.d.ts +24 -0
  334. package/dist/types/CallFuncableType.js +91 -0
  335. package/dist/types/CallFuncableType.js.map +1 -0
  336. package/dist/types/ClassType.d.ts +17 -0
  337. package/dist/types/ClassType.js +63 -0
  338. package/dist/types/ClassType.js.map +1 -0
  339. package/dist/types/ComponentType.d.ts +22 -0
  340. package/dist/types/ComponentType.js +110 -0
  341. package/dist/types/ComponentType.js.map +1 -0
  342. package/dist/types/DoubleType.d.ts +10 -5
  343. package/dist/types/DoubleType.js +21 -17
  344. package/dist/types/DoubleType.js.map +1 -1
  345. package/dist/types/DynamicType.d.ts +13 -5
  346. package/dist/types/DynamicType.js +26 -5
  347. package/dist/types/DynamicType.js.map +1 -1
  348. package/dist/types/EnumType.d.ts +42 -0
  349. package/dist/types/EnumType.js +101 -0
  350. package/dist/types/EnumType.js.map +1 -0
  351. package/dist/types/FloatType.d.ts +10 -5
  352. package/dist/types/FloatType.js +21 -17
  353. package/dist/types/FloatType.js.map +1 -1
  354. package/dist/types/FunctionType.d.ts +8 -22
  355. package/dist/types/FunctionType.js +25 -63
  356. package/dist/types/FunctionType.js.map +1 -1
  357. package/dist/types/InheritableType.d.ts +29 -0
  358. package/dist/types/InheritableType.js +173 -0
  359. package/dist/types/InheritableType.js.map +1 -0
  360. package/dist/types/InlineInterfaceType.d.ts +5 -0
  361. package/dist/types/InlineInterfaceType.js +17 -0
  362. package/dist/types/InlineInterfaceType.js.map +1 -0
  363. package/dist/types/IntegerType.d.ts +10 -5
  364. package/dist/types/IntegerType.js +21 -17
  365. package/dist/types/IntegerType.js.map +1 -1
  366. package/dist/types/InterfaceType.d.ts +14 -6
  367. package/dist/types/InterfaceType.js +30 -15
  368. package/dist/types/InterfaceType.js.map +1 -1
  369. package/dist/types/IntersectionType.d.ts +29 -0
  370. package/dist/types/IntersectionType.js +256 -0
  371. package/dist/types/IntersectionType.js.map +1 -0
  372. package/dist/types/InvalidType.d.ts +10 -5
  373. package/dist/types/InvalidType.js +21 -9
  374. package/dist/types/InvalidType.js.map +1 -1
  375. package/dist/types/LongIntegerType.d.ts +10 -5
  376. package/dist/types/LongIntegerType.js +21 -17
  377. package/dist/types/LongIntegerType.js.map +1 -1
  378. package/dist/types/NamespaceType.d.ts +12 -0
  379. package/dist/types/NamespaceType.js +28 -0
  380. package/dist/types/NamespaceType.js.map +1 -0
  381. package/dist/types/ObjectType.d.ts +12 -5
  382. package/dist/types/ObjectType.js +25 -8
  383. package/dist/types/ObjectType.js.map +1 -1
  384. package/dist/types/ReferenceType.d.ts +123 -0
  385. package/dist/types/ReferenceType.js +726 -0
  386. package/dist/types/ReferenceType.js.map +1 -0
  387. package/dist/types/StringType.d.ts +12 -5
  388. package/dist/types/StringType.js +23 -8
  389. package/dist/types/StringType.js.map +1 -1
  390. package/dist/types/TypeStatementType.d.ts +19 -0
  391. package/dist/types/TypeStatementType.js +56 -0
  392. package/dist/types/TypeStatementType.js.map +1 -0
  393. package/dist/types/TypedFunctionType.d.ts +34 -0
  394. package/dist/types/TypedFunctionType.js +157 -0
  395. package/dist/types/TypedFunctionType.js.map +1 -0
  396. package/dist/types/UninitializedType.d.ts +11 -6
  397. package/dist/types/UninitializedType.js +20 -11
  398. package/dist/types/UninitializedType.js.map +1 -1
  399. package/dist/types/UnionType.d.ts +27 -0
  400. package/dist/types/UnionType.js +196 -0
  401. package/dist/types/UnionType.js.map +1 -0
  402. package/dist/types/VoidType.d.ts +11 -5
  403. package/dist/types/VoidType.js +22 -8
  404. package/dist/types/VoidType.js.map +1 -1
  405. package/dist/types/helpers.d.ts +51 -0
  406. package/dist/types/helpers.js +329 -0
  407. package/dist/types/helpers.js.map +1 -0
  408. package/dist/types/index.d.ts +22 -0
  409. package/dist/types/index.js +39 -0
  410. package/dist/types/index.js.map +1 -0
  411. package/dist/types/roFunctionType.d.ts +11 -0
  412. package/dist/types/roFunctionType.js +37 -0
  413. package/dist/types/roFunctionType.js.map +1 -0
  414. package/dist/util.d.ts +325 -185
  415. package/dist/util.js +2135 -568
  416. package/dist/util.js.map +1 -1
  417. package/dist/validators/ClassValidator.d.ts +9 -15
  418. package/dist/validators/ClassValidator.js +93 -138
  419. package/dist/validators/ClassValidator.js.map +1 -1
  420. package/package.json +183 -138
  421. package/CHANGELOG.md +0 -1188
  422. package/dist/astUtils/creators.spec.js +0 -21
  423. package/dist/astUtils/creators.spec.js.map +0 -1
  424. package/dist/astUtils/index.d.ts +0 -7
  425. package/dist/astUtils/index.js +0 -26
  426. package/dist/astUtils/index.js.map +0 -1
  427. package/dist/astUtils/reflection.spec.d.ts +0 -1
  428. package/dist/astUtils/reflection.spec.js +0 -292
  429. package/dist/astUtils/reflection.spec.js.map +0 -1
  430. package/dist/astUtils/stackedVisitor.spec.d.ts +0 -1
  431. package/dist/astUtils/stackedVisitor.spec.js +0 -79
  432. package/dist/astUtils/stackedVisitor.spec.js.map +0 -1
  433. package/dist/astUtils/visitors.spec.d.ts +0 -1
  434. package/dist/astUtils/visitors.spec.js +0 -854
  435. package/dist/astUtils/visitors.spec.js.map +0 -1
  436. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.d.ts +0 -1
  437. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +0 -194
  438. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +0 -1
  439. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  440. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  441. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  442. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +0 -1
  443. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  444. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  445. package/dist/files/BrsFile.Class.spec.d.ts +0 -1
  446. package/dist/files/BrsFile.Class.spec.js +0 -1081
  447. package/dist/files/BrsFile.Class.spec.js.map +0 -1
  448. package/dist/files/BrsFile.spec.d.ts +0 -1
  449. package/dist/files/BrsFile.spec.js +0 -2524
  450. package/dist/files/BrsFile.spec.js.map +0 -1
  451. package/dist/files/XmlFile.spec.d.ts +0 -1
  452. package/dist/files/XmlFile.spec.js +0 -1065
  453. package/dist/files/XmlFile.spec.js.map +0 -1
  454. package/dist/files/tests/imports.spec.d.ts +0 -1
  455. package/dist/files/tests/imports.spec.js +0 -241
  456. package/dist/files/tests/imports.spec.js.map +0 -1
  457. package/dist/lexer/Character.spec.d.ts +0 -1
  458. package/dist/lexer/Character.spec.js +0 -27
  459. package/dist/lexer/Character.spec.js.map +0 -1
  460. package/dist/lexer/Lexer.spec.d.ts +0 -1
  461. package/dist/lexer/Lexer.spec.js +0 -1101
  462. package/dist/lexer/Lexer.spec.js.map +0 -1
  463. package/dist/lexer/index.d.ts +0 -3
  464. package/dist/lexer/index.js +0 -17
  465. package/dist/lexer/index.js.map +0 -1
  466. package/dist/parser/Parser.Class.spec.d.ts +0 -1
  467. package/dist/parser/Parser.Class.spec.js +0 -390
  468. package/dist/parser/Parser.Class.spec.js.map +0 -1
  469. package/dist/parser/Parser.spec.d.ts +0 -4
  470. package/dist/parser/Parser.spec.js +0 -1216
  471. package/dist/parser/Parser.spec.js.map +0 -1
  472. package/dist/parser/SGParser.spec.d.ts +0 -1
  473. package/dist/parser/SGParser.spec.js +0 -145
  474. package/dist/parser/SGParser.spec.js.map +0 -1
  475. package/dist/parser/SGTypes.spec.d.ts +0 -1
  476. package/dist/parser/SGTypes.spec.js +0 -351
  477. package/dist/parser/SGTypes.spec.js.map +0 -1
  478. package/dist/parser/Statement.spec.d.ts +0 -1
  479. package/dist/parser/Statement.spec.js +0 -94
  480. package/dist/parser/Statement.spec.js.map +0 -1
  481. package/dist/parser/index.d.ts +0 -3
  482. package/dist/parser/index.js +0 -16
  483. package/dist/parser/index.js.map +0 -1
  484. package/dist/parser/tests/Parser.spec.d.ts +0 -18
  485. package/dist/parser/tests/Parser.spec.js +0 -35
  486. package/dist/parser/tests/Parser.spec.js.map +0 -1
  487. package/dist/parser/tests/controlFlow/For.spec.d.ts +0 -1
  488. package/dist/parser/tests/controlFlow/For.spec.js +0 -161
  489. package/dist/parser/tests/controlFlow/For.spec.js.map +0 -1
  490. package/dist/parser/tests/controlFlow/ForEach.spec.d.ts +0 -1
  491. package/dist/parser/tests/controlFlow/ForEach.spec.js +0 -106
  492. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +0 -1
  493. package/dist/parser/tests/controlFlow/If.spec.d.ts +0 -1
  494. package/dist/parser/tests/controlFlow/If.spec.js +0 -551
  495. package/dist/parser/tests/controlFlow/If.spec.js.map +0 -1
  496. package/dist/parser/tests/controlFlow/While.spec.d.ts +0 -1
  497. package/dist/parser/tests/controlFlow/While.spec.js +0 -107
  498. package/dist/parser/tests/controlFlow/While.spec.js.map +0 -1
  499. package/dist/parser/tests/expression/Additive.spec.d.ts +0 -1
  500. package/dist/parser/tests/expression/Additive.spec.js +0 -99
  501. package/dist/parser/tests/expression/Additive.spec.js.map +0 -1
  502. package/dist/parser/tests/expression/ArrayLiterals.spec.d.ts +0 -1
  503. package/dist/parser/tests/expression/ArrayLiterals.spec.js +0 -254
  504. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +0 -1
  505. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.d.ts +0 -1
  506. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +0 -266
  507. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +0 -1
  508. package/dist/parser/tests/expression/Boolean.spec.d.ts +0 -1
  509. package/dist/parser/tests/expression/Boolean.spec.js +0 -83
  510. package/dist/parser/tests/expression/Boolean.spec.js.map +0 -1
  511. package/dist/parser/tests/expression/Call.spec.d.ts +0 -1
  512. package/dist/parser/tests/expression/Call.spec.js +0 -134
  513. package/dist/parser/tests/expression/Call.spec.js.map +0 -1
  514. package/dist/parser/tests/expression/Exponential.spec.d.ts +0 -1
  515. package/dist/parser/tests/expression/Exponential.spec.js +0 -37
  516. package/dist/parser/tests/expression/Exponential.spec.js.map +0 -1
  517. package/dist/parser/tests/expression/Function.spec.d.ts +0 -1
  518. package/dist/parser/tests/expression/Function.spec.js +0 -403
  519. package/dist/parser/tests/expression/Function.spec.js.map +0 -1
  520. package/dist/parser/tests/expression/Indexing.spec.d.ts +0 -1
  521. package/dist/parser/tests/expression/Indexing.spec.js +0 -219
  522. package/dist/parser/tests/expression/Indexing.spec.js.map +0 -1
  523. package/dist/parser/tests/expression/Multiplicative.spec.d.ts +0 -1
  524. package/dist/parser/tests/expression/Multiplicative.spec.js +0 -67
  525. package/dist/parser/tests/expression/Multiplicative.spec.js.map +0 -1
  526. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.d.ts +0 -1
  527. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +0 -201
  528. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +0 -1
  529. package/dist/parser/tests/expression/PrefixUnary.spec.d.ts +0 -1
  530. package/dist/parser/tests/expression/PrefixUnary.spec.js +0 -105
  531. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +0 -1
  532. package/dist/parser/tests/expression/Primary.spec.d.ts +0 -1
  533. package/dist/parser/tests/expression/Primary.spec.js +0 -149
  534. package/dist/parser/tests/expression/Primary.spec.js.map +0 -1
  535. package/dist/parser/tests/expression/Relational.spec.d.ts +0 -1
  536. package/dist/parser/tests/expression/Relational.spec.js +0 -83
  537. package/dist/parser/tests/expression/Relational.spec.js.map +0 -1
  538. package/dist/parser/tests/expression/SourceLiteralExpression.spec.d.ts +0 -1
  539. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +0 -201
  540. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +0 -1
  541. package/dist/parser/tests/expression/TemplateStringExpression.spec.d.ts +0 -1
  542. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +0 -202
  543. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +0 -1
  544. package/dist/parser/tests/expression/TernaryExpression.spec.d.ts +0 -1
  545. package/dist/parser/tests/expression/TernaryExpression.spec.js +0 -323
  546. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +0 -1
  547. package/dist/parser/tests/statement/AssignmentOperators.spec.d.ts +0 -1
  548. package/dist/parser/tests/statement/AssignmentOperators.spec.js +0 -79
  549. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +0 -1
  550. package/dist/parser/tests/statement/Declaration.spec.d.ts +0 -1
  551. package/dist/parser/tests/statement/Declaration.spec.js +0 -108
  552. package/dist/parser/tests/statement/Declaration.spec.js.map +0 -1
  553. package/dist/parser/tests/statement/Dim.spec.d.ts +0 -1
  554. package/dist/parser/tests/statement/Dim.spec.js +0 -73
  555. package/dist/parser/tests/statement/Dim.spec.js.map +0 -1
  556. package/dist/parser/tests/statement/Function.spec.d.ts +0 -1
  557. package/dist/parser/tests/statement/Function.spec.js +0 -332
  558. package/dist/parser/tests/statement/Function.spec.js.map +0 -1
  559. package/dist/parser/tests/statement/Goto.spec.d.ts +0 -1
  560. package/dist/parser/tests/statement/Goto.spec.js +0 -50
  561. package/dist/parser/tests/statement/Goto.spec.js.map +0 -1
  562. package/dist/parser/tests/statement/Increment.spec.d.ts +0 -1
  563. package/dist/parser/tests/statement/Increment.spec.js +0 -117
  564. package/dist/parser/tests/statement/Increment.spec.js.map +0 -1
  565. package/dist/parser/tests/statement/LibraryStatement.spec.d.ts +0 -1
  566. package/dist/parser/tests/statement/LibraryStatement.spec.js +0 -74
  567. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +0 -1
  568. package/dist/parser/tests/statement/Misc.spec.d.ts +0 -1
  569. package/dist/parser/tests/statement/Misc.spec.js +0 -333
  570. package/dist/parser/tests/statement/Misc.spec.js.map +0 -1
  571. package/dist/parser/tests/statement/PrintStatement.spec.d.ts +0 -1
  572. package/dist/parser/tests/statement/PrintStatement.spec.js +0 -181
  573. package/dist/parser/tests/statement/PrintStatement.spec.js.map +0 -1
  574. package/dist/parser/tests/statement/ReturnStatement.spec.d.ts +0 -1
  575. package/dist/parser/tests/statement/ReturnStatement.spec.js +0 -94
  576. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +0 -1
  577. package/dist/parser/tests/statement/Set.spec.d.ts +0 -1
  578. package/dist/parser/tests/statement/Set.spec.js +0 -218
  579. package/dist/parser/tests/statement/Set.spec.js.map +0 -1
  580. package/dist/parser/tests/statement/Stop.spec.d.ts +0 -1
  581. package/dist/parser/tests/statement/Stop.spec.js +0 -37
  582. package/dist/parser/tests/statement/Stop.spec.js.map +0 -1
  583. package/dist/parser/tests/statement/Throw.spec.d.ts +0 -1
  584. package/dist/parser/tests/statement/Throw.spec.js +0 -35
  585. package/dist/parser/tests/statement/Throw.spec.js.map +0 -1
  586. package/dist/parser/tests/statement/TryCatch.spec.d.ts +0 -1
  587. package/dist/parser/tests/statement/TryCatch.spec.js +0 -140
  588. package/dist/parser/tests/statement/TryCatch.spec.js.map +0 -1
  589. package/dist/preprocessor/Chunk.d.ts +0 -82
  590. package/dist/preprocessor/Chunk.js +0 -77
  591. package/dist/preprocessor/Chunk.js.map +0 -1
  592. package/dist/preprocessor/Manifest.spec.d.ts +0 -0
  593. package/dist/preprocessor/Manifest.spec.js +0 -105
  594. package/dist/preprocessor/Manifest.spec.js.map +0 -1
  595. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  596. package/dist/preprocessor/Preprocessor.js +0 -156
  597. package/dist/preprocessor/Preprocessor.js.map +0 -1
  598. package/dist/preprocessor/Preprocessor.spec.d.ts +0 -1
  599. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  600. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  601. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  602. package/dist/preprocessor/PreprocessorParser.js +0 -194
  603. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  604. package/dist/preprocessor/PreprocessorParser.spec.d.ts +0 -1
  605. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  606. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  607. package/dist/preprocessor/index.d.ts +0 -3
  608. package/dist/preprocessor/index.js +0 -16
  609. package/dist/preprocessor/index.js.map +0 -1
  610. package/dist/types/ArrayType.spec.d.ts +0 -1
  611. package/dist/types/ArrayType.spec.js +0 -30
  612. package/dist/types/ArrayType.spec.js.map +0 -1
  613. package/dist/types/BooleanType.spec.d.ts +0 -1
  614. package/dist/types/BooleanType.spec.js +0 -12
  615. package/dist/types/BooleanType.spec.js.map +0 -1
  616. package/dist/types/CustomType.d.ts +0 -10
  617. package/dist/types/CustomType.js +0 -35
  618. package/dist/types/CustomType.js.map +0 -1
  619. package/dist/types/DoubleType.spec.d.ts +0 -1
  620. package/dist/types/DoubleType.spec.js +0 -12
  621. package/dist/types/DoubleType.spec.js.map +0 -1
  622. package/dist/types/DynamicType.spec.d.ts +0 -1
  623. package/dist/types/DynamicType.spec.js +0 -12
  624. package/dist/types/DynamicType.spec.js.map +0 -1
  625. package/dist/types/FloatType.spec.d.ts +0 -1
  626. package/dist/types/FloatType.spec.js +0 -12
  627. package/dist/types/FloatType.spec.js.map +0 -1
  628. package/dist/types/FunctionType.spec.d.ts +0 -1
  629. package/dist/types/FunctionType.spec.js +0 -29
  630. package/dist/types/FunctionType.spec.js.map +0 -1
  631. package/dist/types/IntegerType.spec.d.ts +0 -1
  632. package/dist/types/IntegerType.spec.js +0 -12
  633. package/dist/types/IntegerType.spec.js.map +0 -1
  634. package/dist/types/InvalidType.spec.d.ts +0 -1
  635. package/dist/types/InvalidType.spec.js +0 -12
  636. package/dist/types/InvalidType.spec.js.map +0 -1
  637. package/dist/types/LazyType.d.ts +0 -15
  638. package/dist/types/LazyType.js +0 -32
  639. package/dist/types/LazyType.js.map +0 -1
  640. package/dist/types/LongIntegerType.spec.d.ts +0 -1
  641. package/dist/types/LongIntegerType.spec.js +0 -12
  642. package/dist/types/LongIntegerType.spec.js.map +0 -1
  643. package/dist/types/ObjectType.spec.d.ts +0 -1
  644. package/dist/types/ObjectType.spec.js +0 -12
  645. package/dist/types/ObjectType.spec.js.map +0 -1
  646. package/dist/types/StringType.spec.d.ts +0 -1
  647. package/dist/types/StringType.spec.js +0 -12
  648. package/dist/types/StringType.spec.js.map +0 -1
  649. package/dist/types/VoidType.spec.d.ts +0 -1
  650. package/dist/types/VoidType.spec.js +0 -12
  651. package/dist/types/VoidType.spec.js.map +0 -1
  652. /package/dist/{astUtils/creators.spec.d.ts → lsp/worker/run.d.ts} +0 -0
@@ -1,1081 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const sinonImport = require("sinon");
4
- const Program_1 = require("../Program");
5
- const chai_1 = require("chai");
6
- const DiagnosticMessages_1 = require("../DiagnosticMessages");
7
- const vscode_languageserver_1 = require("vscode-languageserver");
8
- const Parser_1 = require("../parser/Parser");
9
- const testHelpers_spec_1 = require("../testHelpers.spec");
10
- const util_1 = require("../util");
11
- const fsExtra = require("fs-extra");
12
- const BrsTranspileState_1 = require("../parser/BrsTranspileState");
13
- const assert_1 = require("assert");
14
- let sinon = sinonImport.createSandbox();
15
- describe('BrsFile BrighterScript classes', () => {
16
- let tmpPath = util_1.standardizePath `${process.cwd()}/.tmp`;
17
- let rootDir = util_1.standardizePath `${tmpPath}/rootDir`;
18
- let program;
19
- let testTranspile = testHelpers_spec_1.getTestTranspile(() => [program, rootDir]);
20
- beforeEach(() => {
21
- fsExtra.ensureDirSync(rootDir);
22
- fsExtra.emptyDirSync(tmpPath);
23
- program = new Program_1.Program({ rootDir: rootDir });
24
- });
25
- afterEach(() => {
26
- sinon.restore();
27
- program.dispose();
28
- fsExtra.ensureDirSync(tmpPath);
29
- fsExtra.emptyDirSync(tmpPath);
30
- });
31
- function addFile(relativePath, text) {
32
- return program.setFile({ src: `${rootDir}/${relativePath}`, dest: relativePath }, text);
33
- }
34
- it('detects all classes after parse', () => {
35
- let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
36
- class Animal
37
- end class
38
- class Duck
39
-
40
-
41
- end class
42
- `);
43
- chai_1.expect(file.parser.references.classStatements.map(x => x.getName(Parser_1.ParseMode.BrighterScript)).sort()).to.eql(['Animal', 'Duck']);
44
- });
45
- it('does not cause errors with incomplete class statement', () => {
46
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
47
- class
48
- `);
49
- program.validate();
50
- //if no exception was thrown, this test passes
51
- });
52
- it('catches child class missing super call in constructor', () => {
53
- var _a;
54
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
55
- class Person
56
- sub new()
57
- end sub
58
- end class
59
- class Infant extends Person
60
- sub new()
61
- end sub
62
- end class
63
- `);
64
- program.validate();
65
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
66
- });
67
- it('access modifier is option for override', () => {
68
- var _a;
69
- let file = program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
70
- class Animal
71
- sub move()
72
- end sub
73
- end class
74
-
75
- class Duck extends Animal
76
- override sub move()
77
- end sub
78
- end class
79
- `);
80
- program.validate();
81
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
82
- let duckClass = file.parser.references.classStatements.find(x => x.name.text.toLowerCase() === 'duck');
83
- chai_1.expect(duckClass).to.exist;
84
- chai_1.expect(duckClass.memberMap['move']).to.exist;
85
- });
86
- it('supports various namespace configurations', () => {
87
- var _a;
88
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
89
- class Animal
90
- sub new()
91
- bigBird = new Birds.Bird()
92
- donald = new Birds.Duck()
93
- end sub
94
- end class
95
-
96
- namespace Birds
97
- class Bird
98
- sub new()
99
- dog = new Animal()
100
- donald = new Duck()
101
- end sub
102
- end class
103
- class Duck
104
- end class
105
- end namespace
106
- `);
107
- program.validate();
108
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
109
- });
110
- describe('super', () => {
111
- it('always requires super call in child constructor', () => {
112
- var _a;
113
- program.setFile('source/main.bs', `
114
- class Bird
115
- end class
116
- class Duck extends Bird
117
- sub new()
118
- end sub
119
- end class
120
- `);
121
- program.validate();
122
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
123
- });
124
- it('requires super call in child when parent has own `new` method', () => {
125
- var _a;
126
- program.setFile('source/main.bs', `
127
- class Bird
128
- sub new()
129
- end sub
130
- end class
131
- class Duck extends Bird
132
- sub new()
133
- end sub
134
- end class
135
- `);
136
- program.validate();
137
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.eql(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
138
- });
139
- it('allows non-`m` expressions and statements before the super call', () => {
140
- var _a;
141
- program.setFile('source/main.bs', `
142
- class Bird
143
- sub new(name)
144
- end sub
145
- end class
146
- class Duck extends Bird
147
- sub new()
148
- thing = { m: "m"}
149
- print thing.m
150
- name = "Donald" + "Duck"
151
- super(name)
152
- end sub
153
- end class
154
- `);
155
- program.validate();
156
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.be.undefined;
157
- });
158
- it('allows non-`m` expressions and statements before the super call', () => {
159
- program.setFile('source/main.bs', `
160
- class Bird
161
- sub new(name)
162
- end sub
163
- end class
164
- class Duck extends Bird
165
- sub new()
166
- m.name = m.name + "Duck"
167
- super()
168
- end sub
169
- end class
170
- `);
171
- program.validate();
172
- chai_1.expect(program.getDiagnostics().map(x => ({ message: x.message, range: x.range }))).to.eql([{
173
- message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
174
- range: vscode_languageserver_1.Range.create(7, 24, 7, 25)
175
- }, {
176
- message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
177
- range: vscode_languageserver_1.Range.create(7, 33, 7, 34)
178
- }]);
179
- });
180
- });
181
- describe('transpile', () => {
182
- it('follows correct sequence for property initializers', () => {
183
- testTranspile(`
184
- class Animal
185
- species1 = "Animal"
186
- sub new()
187
- print "From Animal: " + m.species
188
- end sub
189
- end class
190
- class Duck extends Animal
191
- species2 = "Duck"
192
- sub new()
193
- super()
194
- print "From Duck: " + m.species
195
- end sub
196
- end class
197
- `, `
198
- function __Animal_builder()
199
- instance = {}
200
- instance.new = sub()
201
- m.species1 = "Animal"
202
- print "From Animal: " + m.species
203
- end sub
204
- return instance
205
- end function
206
- function Animal()
207
- instance = __Animal_builder()
208
- instance.new()
209
- return instance
210
- end function
211
- function __Duck_builder()
212
- instance = __Animal_builder()
213
- instance.super0_new = instance.new
214
- instance.new = sub()
215
- m.super0_new()
216
- m.species2 = "Duck"
217
- print "From Duck: " + m.species
218
- end sub
219
- return instance
220
- end function
221
- function Duck()
222
- instance = __Duck_builder()
223
- instance.new()
224
- return instance
225
- end function
226
- `, 'trim', 'source/main.bs');
227
- });
228
- it('handles class inheritance inferred constructor calls', () => {
229
- testTranspile(`
230
- class Animal
231
- className1 = "Animal"
232
- end class
233
- class Duck extends Animal
234
- className2 = "Duck"
235
- end class
236
- class BabyDuck extends Duck
237
- className3 = "BabyDuck"
238
- end class
239
- `, `
240
- function __Animal_builder()
241
- instance = {}
242
- instance.new = sub()
243
- m.className1 = "Animal"
244
- end sub
245
- return instance
246
- end function
247
- function Animal()
248
- instance = __Animal_builder()
249
- instance.new()
250
- return instance
251
- end function
252
- function __Duck_builder()
253
- instance = __Animal_builder()
254
- instance.super0_new = instance.new
255
- instance.new = sub()
256
- m.super0_new()
257
- m.className2 = "Duck"
258
- end sub
259
- return instance
260
- end function
261
- function Duck()
262
- instance = __Duck_builder()
263
- instance.new()
264
- return instance
265
- end function
266
- function __BabyDuck_builder()
267
- instance = __Duck_builder()
268
- instance.super1_new = instance.new
269
- instance.new = sub()
270
- m.super1_new()
271
- m.className3 = "BabyDuck"
272
- end sub
273
- return instance
274
- end function
275
- function BabyDuck()
276
- instance = __BabyDuck_builder()
277
- instance.new()
278
- return instance
279
- end function
280
- `, undefined, 'source/main.bs');
281
- });
282
- it('works with namespaces', () => {
283
- testTranspile(`
284
- namespace Birds.WaterFowl
285
- class Duck
286
- end class
287
- class BabyDuck extends Duck
288
- end class
289
- end namespace
290
- `, `
291
- function __Birds_WaterFowl_Duck_builder()
292
- instance = {}
293
- instance.new = sub()
294
- end sub
295
- return instance
296
- end function
297
- function Birds_WaterFowl_Duck()
298
- instance = __Birds_WaterFowl_Duck_builder()
299
- instance.new()
300
- return instance
301
- end function
302
- function __Birds_WaterFowl_BabyDuck_builder()
303
- instance = __Birds_WaterFowl_Duck_builder()
304
- instance.super0_new = instance.new
305
- instance.new = sub()
306
- m.super0_new()
307
- end sub
308
- return instance
309
- end function
310
- function Birds_WaterFowl_BabyDuck()
311
- instance = __Birds_WaterFowl_BabyDuck_builder()
312
- instance.new()
313
- return instance
314
- end function
315
- `, undefined, 'source/main.bs');
316
- });
317
- it('works for simple class', () => {
318
- testTranspile(`
319
- class Duck
320
- end class
321
- `, `
322
- function __Duck_builder()
323
- instance = {}
324
- instance.new = sub()
325
- end sub
326
- return instance
327
- end function
328
- function Duck()
329
- instance = __Duck_builder()
330
- instance.new()
331
- return instance
332
- end function
333
- `, undefined, 'source/main.bs');
334
- });
335
- it('registers the constructor and properly handles its parameters', () => {
336
- testTranspile(`
337
- class Duck
338
- sub new(name as string, age as integer)
339
- end sub
340
- end class
341
- `, `
342
- function __Duck_builder()
343
- instance = {}
344
- instance.new = sub(name as string, age as integer)
345
- end sub
346
- return instance
347
- end function
348
- function Duck(name as string, age as integer)
349
- instance = __Duck_builder()
350
- instance.new(name, age)
351
- return instance
352
- end function
353
- `, undefined, 'source/main.bs');
354
- });
355
- it('properly handles child class constructor override and super calls', () => {
356
- testTranspile(`
357
- class Animal
358
- sub new(name as string)
359
- end sub
360
- end class
361
-
362
- class Duck extends Animal
363
- sub new(name as string, age as integer)
364
- super(name)
365
- super.DoSomething()
366
- end sub
367
- end class
368
- `, `
369
- function __Animal_builder()
370
- instance = {}
371
- instance.new = sub(name as string)
372
- end sub
373
- return instance
374
- end function
375
- function Animal(name as string)
376
- instance = __Animal_builder()
377
- instance.new(name)
378
- return instance
379
- end function
380
- function __Duck_builder()
381
- instance = __Animal_builder()
382
- instance.super0_new = instance.new
383
- instance.new = sub(name as string, age as integer)
384
- m.super0_new(name)
385
- m.super0_DoSomething()
386
- end sub
387
- return instance
388
- end function
389
- function Duck(name as string, age as integer)
390
- instance = __Duck_builder()
391
- instance.new(name, age)
392
- return instance
393
- end function
394
- `, undefined, 'source/main.bs');
395
- });
396
- it('transpiles super in nested blocks', () => {
397
- testTranspile(`
398
- class Creature
399
- sub new(name as string)
400
- end sub
401
- function sayHello(text)
402
- ? text
403
- end function
404
- end class
405
-
406
- class Duck extends Creature
407
- override function sayHello(text)
408
- text = "The duck says " + text
409
- if text <> invalid
410
- super.sayHello(text)
411
- end if
412
- end function
413
- end class
414
- `, `
415
- function __Creature_builder()
416
- instance = {}
417
- instance.new = sub(name as string)
418
- end sub
419
- instance.sayHello = function(text)
420
- ? text
421
- end function
422
- return instance
423
- end function
424
- function Creature(name as string)
425
- instance = __Creature_builder()
426
- instance.new(name)
427
- return instance
428
- end function
429
- function __Duck_builder()
430
- instance = __Creature_builder()
431
- instance.super0_new = instance.new
432
- instance.new = sub()
433
- m.super0_new()
434
- end sub
435
- instance.super0_sayHello = instance.sayHello
436
- instance.sayHello = function(text)
437
- text = "The duck says " + text
438
- if text <> invalid then
439
- m.super0_sayHello(text)
440
- end if
441
- end function
442
- return instance
443
- end function
444
- function Duck()
445
- instance = __Duck_builder()
446
- instance.new()
447
- return instance
448
- end function
449
- `, 'trim', 'source/main.bs');
450
- });
451
- it('properly transpiles classes from outside current namespace', () => {
452
- addFile('source/Animals.bs', `
453
- namespace Animals
454
- class Duck
455
- end class
456
- end namespace
457
- class Bird
458
- end class
459
- `);
460
- testTranspile(`
461
- namespace Animals
462
- sub init()
463
- donaldDuck = new Duck()
464
- daffyDuck = new Animals.Duck()
465
- bigBird = new Bird()
466
- end sub
467
- end namespace
468
- `, `
469
- sub Animals_init()
470
- donaldDuck = Animals_Duck()
471
- daffyDuck = Animals_Duck()
472
- bigBird = Bird()
473
- end sub
474
- `, undefined, 'source/main.bs');
475
- });
476
- it('properly transpiles new statement for missing class ', () => {
477
- testTranspile(`
478
- sub main()
479
- bob = new Human()
480
- end sub
481
- `, `
482
- sub main()
483
- bob = Human()
484
- end sub
485
- `, undefined, 'source/main.bs', false);
486
- });
487
- it('new keyword transpiles correctly', () => {
488
- addFile('source/Animal.bs', `
489
- class Animal
490
- sub new(name as string)
491
- end sub
492
- end class
493
- `);
494
- testTranspile(`
495
- sub main()
496
- a = new Animal("donald")
497
- end sub
498
- `, `
499
- sub main()
500
- a = Animal("donald")
501
- end sub
502
- `, undefined, 'source/main.bs');
503
- });
504
- it('does not screw up local variable references', () => {
505
- testTranspile(`
506
- class Animal
507
- sub new(name as string)
508
- m.name = name
509
- end sub
510
-
511
- name as string
512
-
513
- sub move(distanceInMeters as integer)
514
- print m.name + " moved " + distanceInMeters.ToStr() + " meters"
515
- end sub
516
- end class
517
-
518
- class Duck extends Animal
519
- override sub move(distanceInMeters as integer)
520
- print "Waddling..."
521
- super.move(distanceInMeters)
522
- end sub
523
- end class
524
-
525
- class BabyDuck extends Duck
526
- override sub move(distanceInMeters as integer)
527
- super.move(distanceInMeters)
528
- print "Fell over...I'm new at this"
529
- end sub
530
- end class
531
-
532
- sub Main()
533
- smokey = new Animal("Smokey")
534
- smokey.move(1)
535
- '> Bear moved 1 meters
536
-
537
- donald = new Duck("Donald")
538
- donald.move(2)
539
- '> Waddling...\\nDonald moved 2 meters
540
-
541
- dewey = new BabyDuck("Dewey")
542
- dewey.move(3)
543
- '> Waddling...\\nDewey moved 2 meters\\nFell over...I'm new at this
544
- end sub
545
- `, `
546
- function __Animal_builder()
547
- instance = {}
548
- instance.new = sub(name as string)
549
- m.name = invalid
550
- m.name = name
551
- end sub
552
- instance.move = sub(distanceInMeters as integer)
553
- print m.name + " moved " + distanceInMeters.ToStr() + " meters"
554
- end sub
555
- return instance
556
- end function
557
- function Animal(name as string)
558
- instance = __Animal_builder()
559
- instance.new(name)
560
- return instance
561
- end function
562
- function __Duck_builder()
563
- instance = __Animal_builder()
564
- instance.super0_new = instance.new
565
- instance.new = sub()
566
- m.super0_new()
567
- end sub
568
- instance.super0_move = instance.move
569
- instance.move = sub(distanceInMeters as integer)
570
- print "Waddling..."
571
- m.super0_move(distanceInMeters)
572
- end sub
573
- return instance
574
- end function
575
- function Duck()
576
- instance = __Duck_builder()
577
- instance.new()
578
- return instance
579
- end function
580
- function __BabyDuck_builder()
581
- instance = __Duck_builder()
582
- instance.super1_new = instance.new
583
- instance.new = sub()
584
- m.super1_new()
585
- end sub
586
- instance.super1_move = instance.move
587
- instance.move = sub(distanceInMeters as integer)
588
- m.super1_move(distanceInMeters)
589
- print "Fell over...I'm new at this"
590
- end sub
591
- return instance
592
- end function
593
- function BabyDuck()
594
- instance = __BabyDuck_builder()
595
- instance.new()
596
- return instance
597
- end function
598
-
599
- sub Main()
600
- smokey = Animal("Smokey")
601
- smokey.move(1)
602
- '> Bear moved 1 meters
603
- donald = Duck("Donald")
604
- donald.move(2)
605
- '> Waddling...\\nDonald moved 2 meters
606
- dewey = BabyDuck("Dewey")
607
- dewey.move(3)
608
- '> Waddling...\\nDewey moved 2 meters\\nFell over...I'm new at this
609
- end sub
610
- `, 'trim', 'source/main.bs');
611
- });
612
- it('calculates the proper super index', () => {
613
- testTranspile(`
614
- class Duck
615
- public sub walk(meters as integer)
616
- print "Walked " + meters.ToStr() + " meters"
617
- end sub
618
- end class
619
-
620
- class BabyDuck extends Duck
621
- public override sub walk(meters as integer)
622
- print "Tripped"
623
- super.walk(meters)
624
- end sub
625
- end class
626
- `, `
627
- function __Duck_builder()
628
- instance = {}
629
- instance.new = sub()
630
- end sub
631
- instance.walk = sub(meters as integer)
632
- print "Walked " + meters.ToStr() + " meters"
633
- end sub
634
- return instance
635
- end function
636
- function Duck()
637
- instance = __Duck_builder()
638
- instance.new()
639
- return instance
640
- end function
641
- function __BabyDuck_builder()
642
- instance = __Duck_builder()
643
- instance.super0_new = instance.new
644
- instance.new = sub()
645
- m.super0_new()
646
- end sub
647
- instance.super0_walk = instance.walk
648
- instance.walk = sub(meters as integer)
649
- print "Tripped"
650
- m.super0_walk(meters)
651
- end sub
652
- return instance
653
- end function
654
- function BabyDuck()
655
- instance = __BabyDuck_builder()
656
- instance.new()
657
- return instance
658
- end function
659
- `, 'trim', 'source/main.bs');
660
- });
661
- });
662
- it('detects using `new` keyword on non-classes', () => {
663
- var _a;
664
- program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
665
- sub quack()
666
- end sub
667
- sub main()
668
- duck = new quack()
669
- end sub
670
- `);
671
- program.validate();
672
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expressionIsNotConstructable('sub').message);
673
- });
674
- it('detects missing call to super', () => {
675
- var _a;
676
- program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
677
- class Animal
678
- sub new()
679
- end sub
680
- end class
681
- class Duck extends Animal
682
- sub new()
683
- end sub
684
- end class
685
- `);
686
- program.validate();
687
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall().message);
688
- });
689
- it.skip('detects calls to unknown m methods', () => {
690
- var _a;
691
- program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
692
- class Animal
693
- sub new()
694
- m.methodThatDoesNotExist()
695
- end sub
696
- end class
697
- `);
698
- program.validate();
699
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.methodDoesNotExistOnType('methodThatDoesNotExist', 'Animal'));
700
- });
701
- it('detects duplicate member names', () => {
702
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
703
- class Animal
704
- public name
705
- public name
706
- public sub name()
707
- end sub
708
- public sub age()
709
- end sub
710
- public sub age()
711
- end sub
712
- public age
713
- end class
714
- `);
715
- program.validate();
716
- let diagnostics = program.getDiagnostics().map(x => {
717
- return {
718
- code: x.code,
719
- message: x.message,
720
- range: x.range,
721
- severity: vscode_languageserver_1.DiagnosticSeverity.Error
722
- };
723
- });
724
- chai_1.expect(diagnostics).to.eql([Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(3, 23, 3, 27) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(4, 27, 4, 31) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(8, 27, 8, 30) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(10, 23, 10, 26) })]);
725
- });
726
- it('detects mismatched member type in child class', () => {
727
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
728
- class Animal
729
- public name
730
- end class
731
- class Duck extends Animal
732
- public function name()
733
- return "Donald"
734
- end function
735
- end class
736
- `);
737
- program.validate();
738
- chai_1.expect(program.getDiagnostics().map(x => x.message).sort()[0]).to.eql(DiagnosticMessages_1.DiagnosticMessages.classChildMemberDifferentMemberTypeThanAncestor('method', 'field', 'Animal').message);
739
- });
740
- it('allows untyped overridden field in child class', () => {
741
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
742
- class Animal
743
- public name
744
- end class
745
- class Duck extends Animal
746
- public name
747
- end class
748
- `);
749
- program.validate();
750
- testHelpers_spec_1.expectZeroDiagnostics(program);
751
- });
752
- it('allows overridden property name in child class', () => {
753
- program.setFile('source/main.bs', `
754
- class Bird
755
- public name = "bird"
756
- end class
757
- class Duck extends Bird
758
- public name = "duck"
759
- end class
760
- `);
761
- program.validate();
762
- testHelpers_spec_1.expectZeroDiagnostics(program);
763
- });
764
- it('flags incompatible child field type changes', () => {
765
- program.setFile('source/main.bs', `
766
- class Bird
767
- public age = 12
768
- public name = "bird"
769
- public owner as Person
770
- end class
771
- class Duck extends Bird
772
- public age = 12.2 'should be integer but is float
773
- public name = 12 'should be string but is integer
774
- public owner as string
775
- end class
776
- `);
777
- program.validate();
778
- chai_1.expect(program.getDiagnostics().map(x => x.message).sort()).to.eql([
779
- DiagnosticMessages_1.DiagnosticMessages.cannotFindType('Person').message,
780
- DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'age', 'float', 'integer').message,
781
- DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'name', 'integer', 'string').message,
782
- DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'owner', 'string', 'Person').message
783
- ]);
784
- });
785
- it('detects overridden methods without override keyword', () => {
786
- program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
787
- class Animal
788
- sub speak()
789
- end sub
790
- end class
791
- class Duck extends Animal
792
- sub speak()
793
- end sub
794
- end class
795
- `);
796
- program.validate();
797
- chai_1.expect(program.getDiagnostics()[0]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.missingOverrideKeyword('Animal')));
798
- });
799
- it('detects overridden methods with different visibility', () => {
800
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
801
- class Animal
802
- sub speakInPublic()
803
- end sub
804
- protected sub speakWithFriends()
805
- end sub
806
- private sub speakWithFamily()
807
- end sub
808
- end class
809
- class Duck extends Animal
810
- private override sub speakInPublic()
811
- end sub
812
- public override sub speakWithFriends()
813
- end sub
814
- override sub speakWithFamily()
815
- end sub
816
- end class
817
- `);
818
- program.validate();
819
- chai_1.expect(program.getDiagnostics()[0]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakInPublic', 'private', 'public', 'Animal')));
820
- chai_1.expect(program.getDiagnostics()[1]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFriends', 'public', 'protected', 'Animal')));
821
- chai_1.expect(program.getDiagnostics()[2]).to.exist.and.to.include(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFamily', 'public', 'private', 'Animal')));
822
- });
823
- it('allows overridden methods with matching visibility', () => {
824
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
825
- class Animal
826
- sub speakInPublic()
827
- end sub
828
- protected sub speakWithFriends()
829
- end sub
830
- private sub speakWithFamily()
831
- end sub
832
- end class
833
- class Duck extends Animal
834
- override sub speakInPublic()
835
- end sub
836
- protected override sub speakWithFriends()
837
- end sub
838
- private override sub speakWithFamily()
839
- end sub
840
- end class
841
- `);
842
- program.validate();
843
- chai_1.expect(program.getDiagnostics()).to.be.empty;
844
- });
845
- it('detects extending unknown parent class', () => {
846
- program.setFile('source/main.brs', `
847
- class Duck extends Animal
848
- sub speak()
849
- end sub
850
- end class
851
- `);
852
- program.validate();
853
- chai_1.expect(program.getDiagnostics()[0]).to.exist.and.to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')), { range: vscode_languageserver_1.Range.create(1, 31, 1, 37) }));
854
- });
855
- it('catches newable class without namespace name', () => {
856
- var _a;
857
- program.setFile('source/main.bs', `
858
- namespace NameA.NameB
859
- class Duck
860
- end class
861
- end namespace
862
- sub main()
863
- ' this should be an error because the proper name is NameA.NameB.Duck"
864
- d = new Duck()
865
- end sub
866
- `);
867
- program.validate();
868
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Duck', 'source').message);
869
- });
870
- it('supports newable class namespace inference', () => {
871
- var _a;
872
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
873
- namespace NameA.NameB
874
- class Duck
875
- end class
876
- sub main()
877
- d = new Duck()
878
- end sub
879
- end namespace
880
- `);
881
- program.validate();
882
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
883
- });
884
- it('catches extending unknown namespaced class', () => {
885
- var _a;
886
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
887
- namespace NameA.NameB
888
- class Animal
889
- end class
890
- class Duck extends NameA.NameB.Animal1
891
- end class
892
- end namespace
893
- `);
894
- program.validate();
895
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('NameA.NameB.Animal1', 'source').message);
896
- });
897
- it('supports omitting namespace prefix for items in same namespace', () => {
898
- var _a;
899
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
900
- namespace NameA.NameB
901
- class Animal
902
- end class
903
- class Duck extends Animal
904
- end class
905
- end namespace
906
- `);
907
- program.validate();
908
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).not.to.exist;
909
- });
910
- it('catches duplicate root-level class declarations', () => {
911
- var _a;
912
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
913
- class Animal
914
- end class
915
- class Animal
916
- `);
917
- program.validate();
918
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'Animal').message);
919
- });
920
- it('catches duplicate namespace-level class declarations', () => {
921
- var _a;
922
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
923
- namespace NameA.NameB
924
- class Animal
925
- end class
926
- class Animal
927
- end namespace
928
- `);
929
- program.validate();
930
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'NameA.NameB.Animal').message);
931
- });
932
- it('catches namespaced class name which is the same as a global class', () => {
933
- var _a;
934
- program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
935
- namespace NameA.NameB
936
- class Animal
937
- end class
938
- end namespace
939
- class Animal
940
- end class
941
- `);
942
- program.validate();
943
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.namespacedClassCannotShareNamewithNonNamespacedClass('Animal').message);
944
- });
945
- it('catches class with same name as function', () => {
946
- var _a;
947
- program.setFile('source/main.bs', `
948
- class Animal
949
- end class
950
- sub Animal()
951
- end sub
952
- `);
953
- program.validate();
954
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('Animal').message);
955
- });
956
- it('catches class with same name (but different case) as function', () => {
957
- var _a;
958
- program.setFile('source/main.bs', `
959
- class ANIMAL
960
- end class
961
- sub animal()
962
- end sub
963
- `);
964
- program.validate();
965
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('animal').message);
966
- });
967
- it('catches variable with same name as class', () => {
968
- var _a;
969
- program.setFile('source/main.bs', `
970
- class Animal
971
- end class
972
- sub main()
973
- animal = new Animal()
974
- end sub
975
- `);
976
- program.validate();
977
- chai_1.expect((_a = program.getDiagnostics()[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.localVarSameNameAsClass('Animal').message);
978
- });
979
- it('allows extending classes with more than one dot in the filename', () => {
980
- program.setFile('source/testclass.bs', `
981
- class Foo
982
- end class
983
-
984
- class Bar extends Foo
985
- sub new()
986
- super()
987
- end sub
988
- end class
989
- `);
990
- program.setFile('source/testclass_no_testdot.bs', `
991
- class BarNoDot extends Foo
992
- sub new()
993
- super()
994
- end sub
995
- end class
996
- `);
997
- program.setFile('source/testclass.dot.bs', `
998
- class BarDot extends Foo
999
- sub new()
1000
- super()
1001
- end sub
1002
- end class
1003
- `);
1004
- program.validate();
1005
- testHelpers_spec_1.expectZeroDiagnostics(program);
1006
- });
1007
- it('computes correct super index for grandchild class', () => {
1008
- program.setFile('source/main.bs', `
1009
- sub Main()
1010
- c = new App.ClassC()
1011
- end sub
1012
-
1013
- namespace App
1014
- class ClassA
1015
- end class
1016
-
1017
- class ClassB extends ClassA
1018
- end class
1019
- end namespace
1020
- `);
1021
- testTranspile(`
1022
- namespace App
1023
- class ClassC extends ClassB
1024
- sub new()
1025
- super()
1026
- end sub
1027
- end class
1028
- end namespace
1029
- `, `
1030
- function __App_ClassC_builder()
1031
- instance = __App_ClassB_builder()
1032
- instance.super1_new = instance.new
1033
- instance.new = sub()
1034
- m.super1_new()
1035
- end sub
1036
- return instance
1037
- end function
1038
- function App_ClassC()
1039
- instance = __App_ClassC_builder()
1040
- instance.new()
1041
- return instance
1042
- end function
1043
- `, 'trim', 'source/App.ClassC.bs');
1044
- });
1045
- it('computes correct super index for namespaced child class and global parent class', () => {
1046
- program.setFile('source/ClassA.bs', `
1047
- class ClassA
1048
- end class
1049
- `);
1050
- testTranspile(`
1051
- namespace App
1052
- class ClassB extends ClassA
1053
- end class
1054
- end namespace
1055
- `, `
1056
- function __App_ClassB_builder()
1057
- instance = __ClassA_builder()
1058
- instance.super0_new = instance.new
1059
- instance.new = sub()
1060
- m.super0_new()
1061
- end sub
1062
- return instance
1063
- end function
1064
- function App_ClassB()
1065
- instance = __App_ClassB_builder()
1066
- instance.new()
1067
- return instance
1068
- end function
1069
- `, 'trim', 'source/App.ClassB.bs');
1070
- });
1071
- it('does not crash when parent class is missing', () => {
1072
- const file = program.setFile('source/ClassB.bs', `
1073
- class ClassB extends ClassA
1074
- end class
1075
- `);
1076
- assert_1.doesNotThrow(() => {
1077
- file.parser.references.classStatements[0].getParentClassIndex(new BrsTranspileState_1.BrsTranspileState(file));
1078
- });
1079
- });
1080
- });
1081
- //# sourceMappingURL=BrsFile.Class.spec.js.map