brighterscript 1.0.0-alpha.2 → 1.0.0-alpha.22

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 (388) hide show
  1. package/CHANGELOG.md +643 -253
  2. package/README.md +33 -9
  3. package/bsconfig.schema.json +22 -2
  4. package/dist/BsConfig.d.ts +9 -0
  5. package/dist/Cache.d.ts +5 -6
  6. package/dist/Cache.js +12 -11
  7. package/dist/Cache.js.map +1 -1
  8. package/dist/CodeActionUtil.d.ts +11 -2
  9. package/dist/CodeActionUtil.js +17 -3
  10. package/dist/CodeActionUtil.js.map +1 -1
  11. package/dist/CommentFlagProcessor.d.ts +4 -4
  12. package/dist/CommentFlagProcessor.js +5 -3
  13. package/dist/CommentFlagProcessor.js.map +1 -1
  14. package/dist/DependencyGraph.d.ts +2 -2
  15. package/dist/DependencyGraph.js +20 -7
  16. package/dist/DependencyGraph.js.map +1 -1
  17. package/dist/DiagnosticCollection.d.ts +3 -3
  18. package/dist/DiagnosticCollection.js +11 -11
  19. package/dist/DiagnosticCollection.js.map +1 -1
  20. package/dist/DiagnosticFilterer.js +5 -4
  21. package/dist/DiagnosticFilterer.js.map +1 -1
  22. package/dist/DiagnosticMessages.d.ts +59 -4
  23. package/dist/DiagnosticMessages.js +65 -7
  24. package/dist/DiagnosticMessages.js.map +1 -1
  25. package/dist/LanguageServer.d.ts +51 -39
  26. package/dist/LanguageServer.js +316 -232
  27. package/dist/LanguageServer.js.map +1 -1
  28. package/dist/Logger.d.ts +2 -0
  29. package/dist/Logger.js +10 -8
  30. package/dist/Logger.js.map +1 -1
  31. package/dist/PluginInterface.d.ts +7 -3
  32. package/dist/PluginInterface.js +9 -0
  33. package/dist/PluginInterface.js.map +1 -1
  34. package/dist/Program.d.ts +43 -25
  35. package/dist/Program.js +212 -95
  36. package/dist/Program.js.map +1 -1
  37. package/dist/ProgramBuilder.d.ts +4 -0
  38. package/dist/ProgramBuilder.js +36 -20
  39. package/dist/ProgramBuilder.js.map +1 -1
  40. package/dist/Scope.d.ts +126 -29
  41. package/dist/Scope.js +433 -156
  42. package/dist/Scope.js.map +1 -1
  43. package/dist/SemanticTokenUtils.d.ts +14 -0
  44. package/dist/SemanticTokenUtils.js +81 -0
  45. package/dist/SemanticTokenUtils.js.map +1 -0
  46. package/dist/SymbolTable.d.ts +10 -4
  47. package/dist/SymbolTable.js +55 -13
  48. package/dist/SymbolTable.js.map +1 -1
  49. package/dist/XmlScope.d.ts +7 -2
  50. package/dist/XmlScope.js +65 -27
  51. package/dist/XmlScope.js.map +1 -1
  52. package/dist/astUtils/AstEditor.d.ts +65 -0
  53. package/dist/astUtils/AstEditor.js +239 -0
  54. package/dist/astUtils/AstEditor.js.map +1 -0
  55. package/dist/{types/FunctionType.spec.d.ts → astUtils/AstEditor.spec.d.ts} +0 -0
  56. package/dist/astUtils/AstEditor.spec.js +254 -0
  57. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  58. package/dist/astUtils/creators.d.ts +28 -6
  59. package/dist/astUtils/creators.js +137 -19
  60. package/dist/astUtils/creators.js.map +1 -1
  61. package/dist/astUtils/creators.spec.js +14 -4
  62. package/dist/astUtils/creators.spec.js.map +1 -1
  63. package/dist/astUtils/reflection.d.ts +32 -10
  64. package/dist/astUtils/reflection.js +82 -7
  65. package/dist/astUtils/reflection.js.map +1 -1
  66. package/dist/astUtils/reflection.spec.js +130 -119
  67. package/dist/astUtils/reflection.spec.js.map +1 -1
  68. package/dist/astUtils/stackedVisitor.js.map +1 -1
  69. package/dist/astUtils/stackedVisitor.spec.js +13 -13
  70. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  71. package/dist/astUtils/visitors.d.ts +76 -51
  72. package/dist/astUtils/visitors.js +31 -11
  73. package/dist/astUtils/visitors.js.map +1 -1
  74. package/dist/astUtils/visitors.spec.js +126 -32
  75. package/dist/astUtils/visitors.spec.js.map +1 -1
  76. package/dist/astUtils/xml.d.ts +4 -3
  77. package/dist/astUtils/xml.js +8 -3
  78. package/dist/astUtils/xml.js.map +1 -1
  79. package/dist/bscPlugin/BscPlugin.d.ts +7 -1
  80. package/dist/bscPlugin/BscPlugin.js +28 -0
  81. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  82. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +4 -4
  83. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  84. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +26 -26
  85. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  86. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +9 -0
  87. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +108 -0
  88. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  89. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  90. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +130 -0
  91. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  92. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
  93. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +52 -0
  94. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
  95. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts +1 -0
  96. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +32 -0
  97. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -0
  98. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +9 -0
  99. package/dist/bscPlugin/validation/BrsFileValidator.js +66 -0
  100. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  101. package/dist/bscPlugin/validation/ScopeValidator.d.ts +29 -0
  102. package/dist/bscPlugin/validation/ScopeValidator.js +183 -0
  103. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  104. package/dist/cli.js +10 -3
  105. package/dist/cli.js.map +1 -1
  106. package/dist/diagnosticUtils.d.ts +1 -0
  107. package/dist/diagnosticUtils.js +15 -8
  108. package/dist/diagnosticUtils.js.map +1 -1
  109. package/dist/examples/plugins/removePrint.js +12 -14
  110. package/dist/examples/plugins/removePrint.js.map +1 -1
  111. package/dist/files/BrsFile.Class.spec.js +717 -147
  112. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  113. package/dist/files/BrsFile.d.ts +70 -30
  114. package/dist/files/BrsFile.js +719 -353
  115. package/dist/files/BrsFile.js.map +1 -1
  116. package/dist/files/BrsFile.spec.js +1238 -449
  117. package/dist/files/BrsFile.spec.js.map +1 -1
  118. package/dist/files/XmlFile.d.ts +6 -5
  119. package/dist/files/XmlFile.js +38 -30
  120. package/dist/files/XmlFile.js.map +1 -1
  121. package/dist/files/XmlFile.spec.js +302 -237
  122. package/dist/files/XmlFile.spec.js.map +1 -1
  123. package/dist/files/tests/imports.spec.js +44 -42
  124. package/dist/files/tests/imports.spec.js.map +1 -1
  125. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  126. package/dist/files/tests/optionalChaning.spec.js +88 -0
  127. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  128. package/dist/globalCallables.d.ts +3 -1
  129. package/dist/globalCallables.js +424 -152
  130. package/dist/globalCallables.js.map +1 -1
  131. package/dist/index.d.ts +13 -3
  132. package/dist/index.js +28 -5
  133. package/dist/index.js.map +1 -1
  134. package/dist/interfaces.d.ts +133 -16
  135. package/dist/lexer/Lexer.d.ts +19 -1
  136. package/dist/lexer/Lexer.js +127 -21
  137. package/dist/lexer/Lexer.js.map +1 -1
  138. package/dist/lexer/Lexer.spec.js +657 -536
  139. package/dist/lexer/Lexer.spec.js.map +1 -1
  140. package/dist/lexer/Token.d.ts +2 -2
  141. package/dist/lexer/TokenKind.d.ts +13 -1
  142. package/dist/lexer/TokenKind.js +60 -3
  143. package/dist/lexer/TokenKind.js.map +1 -1
  144. package/dist/parser/BrsTranspileState.d.ts +9 -0
  145. package/dist/parser/BrsTranspileState.js +14 -0
  146. package/dist/parser/BrsTranspileState.js.map +1 -1
  147. package/dist/parser/Expression.d.ts +150 -34
  148. package/dist/parser/Expression.js +335 -165
  149. package/dist/parser/Expression.js.map +1 -1
  150. package/dist/parser/Parser.Class.spec.js +189 -89
  151. package/dist/parser/Parser.Class.spec.js.map +1 -1
  152. package/dist/parser/Parser.d.ts +153 -30
  153. package/dist/parser/Parser.js +1100 -503
  154. package/dist/parser/Parser.js.map +1 -1
  155. package/dist/parser/Parser.spec.js +687 -266
  156. package/dist/parser/Parser.spec.js.map +1 -1
  157. package/dist/parser/SGParser.d.ts +41 -4
  158. package/dist/parser/SGParser.js +186 -175
  159. package/dist/parser/SGParser.js.map +1 -1
  160. package/dist/parser/SGParser.spec.js +35 -22
  161. package/dist/parser/SGParser.spec.js.map +1 -1
  162. package/dist/parser/SGTypes.d.ts +206 -38
  163. package/dist/parser/SGTypes.js +470 -161
  164. package/dist/parser/SGTypes.js.map +1 -1
  165. package/dist/parser/SGTypes.spec.d.ts +1 -0
  166. package/dist/parser/SGTypes.spec.js +351 -0
  167. package/dist/parser/SGTypes.spec.js.map +1 -0
  168. package/dist/parser/Statement.d.ts +202 -48
  169. package/dist/parser/Statement.js +648 -193
  170. package/dist/parser/Statement.js.map +1 -1
  171. package/dist/parser/Statement.spec.js +11 -11
  172. package/dist/parser/Statement.spec.js.map +1 -1
  173. package/dist/parser/TranspileState.d.ts +1 -1
  174. package/dist/parser/TranspileState.js +15 -7
  175. package/dist/parser/TranspileState.js.map +1 -1
  176. package/dist/parser/tests/Parser.spec.d.ts +10 -9
  177. package/dist/parser/tests/Parser.spec.js +15 -11
  178. package/dist/parser/tests/Parser.spec.js.map +1 -1
  179. package/dist/parser/tests/controlFlow/For.spec.js +60 -60
  180. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  181. package/dist/parser/tests/controlFlow/ForEach.spec.js +40 -39
  182. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  183. package/dist/parser/tests/controlFlow/If.spec.js +213 -194
  184. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  185. package/dist/parser/tests/controlFlow/While.spec.js +37 -37
  186. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  187. package/dist/parser/tests/expression/Additive.spec.js +30 -30
  188. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  189. package/dist/parser/tests/expression/ArrayLiterals.spec.js +119 -119
  190. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  191. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +162 -138
  192. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  193. package/dist/parser/tests/expression/Boolean.spec.js +24 -24
  194. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  195. package/dist/parser/tests/expression/Call.spec.js +41 -40
  196. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  197. package/dist/parser/tests/expression/Exponential.spec.js +17 -17
  198. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  199. package/dist/parser/tests/expression/Function.spec.js +256 -256
  200. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  201. package/dist/parser/tests/expression/Indexing.spec.js +87 -87
  202. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  203. package/dist/parser/tests/expression/Multiplicative.spec.js +37 -37
  204. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  205. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +75 -63
  206. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  207. package/dist/parser/tests/expression/PrefixUnary.spec.js +41 -41
  208. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  209. package/dist/parser/tests/expression/Primary.spec.js +41 -41
  210. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  211. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  212. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  213. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  214. package/dist/parser/tests/expression/Relational.spec.js +43 -43
  215. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  216. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +9 -9
  217. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  218. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +28 -28
  219. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  220. package/dist/parser/tests/expression/TernaryExpression.spec.js +102 -102
  221. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  222. package/dist/parser/tests/statement/AssignmentOperators.spec.js +36 -36
  223. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  224. package/dist/parser/tests/statement/Declaration.spec.js +44 -44
  225. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  226. package/dist/parser/tests/statement/Dim.spec.js +21 -21
  227. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  228. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  229. package/dist/parser/tests/statement/Enum.spec.js +840 -0
  230. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  231. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  232. package/dist/parser/tests/statement/For.spec.js +46 -0
  233. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  234. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  235. package/dist/parser/tests/statement/ForEach.spec.js +37 -0
  236. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  237. package/dist/parser/tests/statement/Function.spec.js +198 -197
  238. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  239. package/dist/parser/tests/statement/Goto.spec.js +15 -14
  240. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  241. package/dist/parser/tests/statement/Increment.spec.js +50 -50
  242. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  243. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  244. package/dist/parser/tests/statement/InterfaceStatement.spec.js +254 -0
  245. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  246. package/dist/parser/tests/statement/LibraryStatement.spec.js +17 -17
  247. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  248. package/dist/parser/tests/statement/Misc.spec.js +108 -106
  249. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  250. package/dist/parser/tests/statement/PrintStatement.spec.js +40 -40
  251. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  252. package/dist/parser/tests/statement/ReturnStatement.spec.js +46 -46
  253. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  254. package/dist/parser/tests/statement/Set.spec.js +83 -83
  255. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  256. package/dist/parser/tests/statement/Stop.spec.js +12 -11
  257. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  258. package/dist/parser/tests/statement/Throw.spec.js +5 -5
  259. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  260. package/dist/parser/tests/statement/TryCatch.spec.js +15 -13
  261. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  262. package/dist/preprocessor/Chunk.d.ts +1 -1
  263. package/dist/preprocessor/Chunk.js.map +1 -1
  264. package/dist/preprocessor/Manifest.d.ts +5 -5
  265. package/dist/preprocessor/Manifest.js +14 -35
  266. package/dist/preprocessor/Manifest.js.map +1 -1
  267. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  268. package/dist/preprocessor/Manifest.spec.js +78 -103
  269. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  270. package/dist/preprocessor/Preprocessor.d.ts +1 -1
  271. package/dist/preprocessor/Preprocessor.js +8 -8
  272. package/dist/preprocessor/Preprocessor.js.map +1 -1
  273. package/dist/preprocessor/Preprocessor.spec.js +49 -49
  274. package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
  275. package/dist/preprocessor/PreprocessorParser.spec.js +72 -72
  276. package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
  277. package/dist/roku-types/data.json +21891 -0
  278. package/dist/roku-types/index.d.ts +6776 -0
  279. package/dist/roku-types/index.js +11 -0
  280. package/dist/roku-types/index.js.map +1 -0
  281. package/dist/types/ArrayType.d.ts +8 -5
  282. package/dist/types/ArrayType.js +52 -12
  283. package/dist/types/ArrayType.js.map +1 -1
  284. package/dist/types/ArrayType.spec.js +72 -11
  285. package/dist/types/ArrayType.spec.js.map +1 -1
  286. package/dist/types/BooleanType.d.ts +4 -2
  287. package/dist/types/BooleanType.js +9 -4
  288. package/dist/types/BooleanType.js.map +1 -1
  289. package/dist/types/BooleanType.spec.js +5 -3
  290. package/dist/types/BooleanType.spec.js.map +1 -1
  291. package/dist/types/BscType.d.ts +20 -5
  292. package/dist/types/BscType.js +24 -0
  293. package/dist/types/BscType.js.map +1 -1
  294. package/dist/types/CustomType.d.ts +8 -6
  295. package/dist/types/CustomType.js +20 -11
  296. package/dist/types/CustomType.js.map +1 -1
  297. package/dist/types/DoubleType.d.ts +2 -0
  298. package/dist/types/DoubleType.js +14 -9
  299. package/dist/types/DoubleType.js.map +1 -1
  300. package/dist/types/DoubleType.spec.js +5 -3
  301. package/dist/types/DoubleType.spec.js.map +1 -1
  302. package/dist/types/DynamicType.d.ts +2 -0
  303. package/dist/types/DynamicType.js +6 -2
  304. package/dist/types/DynamicType.js.map +1 -1
  305. package/dist/types/DynamicType.spec.js +2 -2
  306. package/dist/types/DynamicType.spec.js.map +1 -1
  307. package/dist/types/EnumType.d.ts +22 -0
  308. package/dist/types/EnumType.js +55 -0
  309. package/dist/types/EnumType.js.map +1 -0
  310. package/dist/types/FloatType.d.ts +2 -0
  311. package/dist/types/FloatType.js +14 -9
  312. package/dist/types/FloatType.js.map +1 -1
  313. package/dist/types/FloatType.spec.js +4 -2
  314. package/dist/types/FloatType.spec.js.map +1 -1
  315. package/dist/types/FunctionType.d.ts +7 -31
  316. package/dist/types/FunctionType.js +11 -57
  317. package/dist/types/FunctionType.js.map +1 -1
  318. package/dist/types/IntegerType.d.ts +2 -0
  319. package/dist/types/IntegerType.js +14 -9
  320. package/dist/types/IntegerType.js.map +1 -1
  321. package/dist/types/IntegerType.spec.js +5 -3
  322. package/dist/types/IntegerType.spec.js.map +1 -1
  323. package/dist/types/InterfaceType.d.ts +13 -4
  324. package/dist/types/InterfaceType.js +48 -8
  325. package/dist/types/InterfaceType.js.map +1 -1
  326. package/dist/types/InterfaceType.spec.d.ts +1 -0
  327. package/dist/types/InterfaceType.spec.js +194 -0
  328. package/dist/types/InterfaceType.spec.js.map +1 -0
  329. package/dist/types/InvalidType.d.ts +4 -2
  330. package/dist/types/InvalidType.js +10 -5
  331. package/dist/types/InvalidType.js.map +1 -1
  332. package/dist/types/InvalidType.spec.js +4 -2
  333. package/dist/types/InvalidType.spec.js.map +1 -1
  334. package/dist/types/LazyType.d.ts +8 -7
  335. package/dist/types/LazyType.js +22 -10
  336. package/dist/types/LazyType.js.map +1 -1
  337. package/dist/types/LongIntegerType.d.ts +2 -0
  338. package/dist/types/LongIntegerType.js +14 -9
  339. package/dist/types/LongIntegerType.js.map +1 -1
  340. package/dist/types/LongIntegerType.spec.js +4 -2
  341. package/dist/types/LongIntegerType.spec.js.map +1 -1
  342. package/dist/types/ObjectType.d.ts +8 -4
  343. package/dist/types/ObjectType.js +9 -4
  344. package/dist/types/ObjectType.js.map +1 -1
  345. package/dist/types/ObjectType.spec.js +2 -2
  346. package/dist/types/ObjectType.spec.js.map +1 -1
  347. package/dist/types/StringType.d.ts +4 -2
  348. package/dist/types/StringType.js +9 -4
  349. package/dist/types/StringType.js.map +1 -1
  350. package/dist/types/StringType.spec.js +4 -2
  351. package/dist/types/StringType.spec.js.map +1 -1
  352. package/dist/types/TypedFunctionType.d.ts +28 -0
  353. package/dist/types/TypedFunctionType.js +88 -0
  354. package/dist/types/TypedFunctionType.js.map +1 -0
  355. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  356. package/dist/types/TypedFunctionType.spec.js +37 -0
  357. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  358. package/dist/types/UninitializedType.js +3 -3
  359. package/dist/types/UninitializedType.js.map +1 -1
  360. package/dist/types/VoidType.d.ts +4 -2
  361. package/dist/types/VoidType.js +8 -4
  362. package/dist/types/VoidType.js.map +1 -1
  363. package/dist/types/VoidType.spec.js +2 -2
  364. package/dist/types/VoidType.spec.js.map +1 -1
  365. package/dist/types/helpers.d.ts +42 -0
  366. package/dist/types/helpers.js +118 -0
  367. package/dist/types/helpers.js.map +1 -0
  368. package/dist/util.d.ts +91 -21
  369. package/dist/util.js +364 -114
  370. package/dist/util.js.map +1 -1
  371. package/dist/validators/ClassValidator.d.ts +19 -2
  372. package/dist/validators/ClassValidator.js +164 -103
  373. package/dist/validators/ClassValidator.js.map +1 -1
  374. package/package.json +30 -19
  375. package/dist/astUtils/index.d.ts +0 -7
  376. package/dist/astUtils/index.js +0 -26
  377. package/dist/astUtils/index.js.map +0 -1
  378. package/dist/lexer/index.d.ts +0 -3
  379. package/dist/lexer/index.js +0 -17
  380. package/dist/lexer/index.js.map +0 -1
  381. package/dist/parser/index.d.ts +0 -3
  382. package/dist/parser/index.js +0 -16
  383. package/dist/parser/index.js.map +0 -1
  384. package/dist/preprocessor/index.d.ts +0 -3
  385. package/dist/preprocessor/index.js +0 -16
  386. package/dist/preprocessor/index.js.map +0 -1
  387. package/dist/types/FunctionType.spec.js +0 -23
  388. package/dist/types/FunctionType.spec.js.map +0 -1
@@ -2,19 +2,25 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BsClassValidator = void 0;
4
4
  const DiagnosticMessages_1 = require("../DiagnosticMessages");
5
- const Parser_1 = require("../parser/Parser");
6
5
  const vscode_languageserver_1 = require("vscode-languageserver");
7
6
  const vscode_uri_1 = require("vscode-uri");
8
7
  const util_1 = require("../util");
9
8
  const reflection_1 = require("../astUtils/reflection");
10
9
  const visitors_1 = require("../astUtils/visitors");
11
- const lexer_1 = require("../lexer");
10
+ const TokenKind_1 = require("../lexer/TokenKind");
11
+ const DynamicType_1 = require("../types/DynamicType");
12
+ const BscType_1 = require("../types/BscType");
13
+ const Parser_1 = require("../parser/Parser");
12
14
  class BsClassValidator {
13
- validate(scope) {
15
+ get typeContext() {
16
+ return { scope: this.scope, file: this.file };
17
+ }
18
+ validate(scope, file) {
14
19
  this.scope = scope;
20
+ this.file = file;
15
21
  this.diagnostics = [];
16
- this.classes = {};
17
22
  this.findClasses();
23
+ this.findInterfaces();
18
24
  this.findNamespaceNonNamespaceCollisions();
19
25
  this.linkClassesWithParents();
20
26
  this.validateMemberCollisions();
@@ -28,13 +34,25 @@ class BsClassValidator {
28
34
  */
29
35
  getClassByName(className, namespaceName) {
30
36
  let fullName = util_1.default.getFullyQualifiedClassName(className, namespaceName);
31
- let cls = this.classes[fullName.toLowerCase()];
37
+ let cls = this.classes.get(fullName.toLowerCase());
32
38
  //if we couldn't find the class by its full namespaced name, look for a global class with that name
33
39
  if (!cls) {
34
- cls = this.classes[className.toLowerCase()];
40
+ cls = this.classes.get(className.toLowerCase());
35
41
  }
36
42
  return cls;
37
43
  }
44
+ /**
45
+ * Given an interface name optionally prefixed with a namespace name, find the interface that matches
46
+ */
47
+ getInterfaceByName(ifaceName, namespaceName) {
48
+ let fullName = util_1.default.getFullyQualifiedClassName(ifaceName, namespaceName);
49
+ let iface = this.interfaces.get(fullName.toLowerCase());
50
+ //if we couldn't find the interface by its full namespaced name, look for a global interface with that name
51
+ if (!iface) {
52
+ iface = this.interfaces.get(ifaceName.toLowerCase());
53
+ }
54
+ return iface;
55
+ }
38
56
  /**
39
57
  * Find all "new" statements in the program,
40
58
  * and make sure we can find a class with that name
@@ -63,10 +81,9 @@ class BsClassValidator {
63
81
  });
64
82
  }
65
83
  findNamespaceNonNamespaceCollisions() {
66
- for (let name in this.classes) {
67
- let classStatement = this.classes[name];
84
+ for (const [className, classStatement] of this.classes) {
68
85
  //catch namespace class collision with global class
69
- let nonNamespaceClass = this.classes[util_1.default.getTextAfterFinalDot(name).toLowerCase()];
86
+ let nonNamespaceClass = this.classes.get(util_1.default.getTextAfterFinalDot(className).toLowerCase());
70
87
  if (classStatement.namespaceName && nonNamespaceClass) {
71
88
  this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.namespacedClassCannotShareNamewithNonNamespacedClass(nonNamespaceClass.name.text)), { file: classStatement.file, range: classStatement.name.range, relatedInformation: [{
72
89
  location: vscode_languageserver_1.Location.create(vscode_uri_1.URI.file(nonNamespaceClass.file.srcPath).toString(), nonNamespaceClass.name.range),
@@ -74,27 +91,36 @@ class BsClassValidator {
74
91
  }] }));
75
92
  }
76
93
  }
94
+ for (const [ifaceName, ifaceStatement] of this.interfaces) {
95
+ //catch namespace class collision with global class
96
+ let nonNamespaceInterface = this.interfaces.get(util_1.default.getTextAfterFinalDot(ifaceName).toLowerCase());
97
+ if (ifaceStatement.namespaceName && nonNamespaceInterface) {
98
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.namespacedInterfaceCannotShareNameWithNonNamespacedInterface(nonNamespaceInterface.tokens.name.text)), { file: ifaceStatement.file, range: ifaceStatement.tokens.name.range, relatedInformation: [{
99
+ location: vscode_languageserver_1.Location.create(vscode_uri_1.URI.file(nonNamespaceInterface.file.srcPath).toString(), nonNamespaceInterface.tokens.name.range),
100
+ message: 'Original interface declared here'
101
+ }] }));
102
+ }
103
+ }
77
104
  }
78
105
  verifyChildConstructor() {
79
- for (let key in this.classes) {
80
- let classStatement = this.classes[key];
106
+ for (const [, classStatement] of this.classes) {
81
107
  const newMethod = classStatement.memberMap.new;
82
108
  if (
83
109
  //this class has a "new method"
84
110
  newMethod &&
85
111
  //this class has a parent class
86
- classStatement.parentClass) {
112
+ classStatement.parent) {
87
113
  //prevent use of `m.` anywhere before the `super()` call
88
114
  const cancellationToken = new vscode_languageserver_1.CancellationTokenSource();
89
115
  let superCall;
90
- newMethod.func.body.walk(visitors_1.createVisitor({
116
+ newMethod.func.body.walk((0, visitors_1.createVisitor)({
91
117
  VariableExpression: (expression, parent) => {
92
118
  var _a;
93
119
  const expressionNameLower = (_a = expression === null || expression === void 0 ? void 0 : expression.name) === null || _a === void 0 ? void 0 : _a.text.toLowerCase();
94
120
  if (expressionNameLower === 'm') {
95
121
  this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall()), { file: classStatement.file, range: expression.range }));
96
122
  }
97
- if (reflection_1.isCallExpression(parent) && expressionNameLower === 'super') {
123
+ if ((0, reflection_1.isCallExpression)(parent) && expressionNameLower === 'super') {
98
124
  superCall = parent;
99
125
  //stop walking
100
126
  cancellationToken.cancel();
@@ -111,120 +137,163 @@ class BsClassValidator {
111
137
  }
112
138
  }
113
139
  }
114
- validateMemberCollisions() {
115
- var _a, _b, _c, _d, _e, _f, _g;
116
- for (let key in this.classes) {
117
- let classStatement = this.classes[key];
140
+ isMemberFieldStatement(stmt) {
141
+ return (0, reflection_1.isFieldStatement)(stmt) || (0, reflection_1.isInterfaceFieldStatement)(stmt);
142
+ }
143
+ isMemberMethodStatement(stmt) {
144
+ return (0, reflection_1.isMethodStatement)(stmt) || (0, reflection_1.isInterfaceMethodStatement)(stmt);
145
+ }
146
+ isMemberStatement(stmt) {
147
+ return (0, reflection_1.isFieldStatement)(stmt) || (0, reflection_1.isMethodStatement)(stmt);
148
+ }
149
+ validateMemberCollisionsForStatements(map) {
150
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
151
+ for (const [, bodyStatement] of map) {
118
152
  let methods = {};
119
153
  let fields = {};
120
- for (let statement of classStatement.body) {
121
- if (reflection_1.isClassMethodStatement(statement) || reflection_1.isClassFieldStatement(statement)) {
154
+ for (let statement of bodyStatement.body) {
155
+ if (this.isMemberStatement(statement)) {
122
156
  let member = statement;
123
157
  let lowerMemberName = member.name.text.toLowerCase();
124
158
  //catch duplicate member names on same class
125
159
  if (methods[lowerMemberName] || fields[lowerMemberName]) {
126
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier(member.name.text)), { file: classStatement.file, range: member.name.range }));
160
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier(member.name.text)), { file: bodyStatement.file, range: member.name.range }));
127
161
  }
128
- let memberType = reflection_1.isClassFieldStatement(member) ? 'field' : 'method';
129
- let ancestorAndMember = this.getAncestorMember(classStatement, lowerMemberName);
162
+ let memberType = this.isMemberFieldStatement(member) ? 'field' : 'method';
163
+ let ancestorAndMember = this.getAncestorMember(bodyStatement, lowerMemberName);
130
164
  if (ancestorAndMember) {
131
- let ancestorMemberKind = reflection_1.isClassFieldStatement(ancestorAndMember.member) ? 'field' : 'method';
165
+ let ancestorMemberKind = this.isMemberFieldStatement(ancestorAndMember.member) ? 'field' : 'method';
132
166
  //mismatched member type (field/method in child, opposite in ancestor)
133
167
  if (memberType !== ancestorMemberKind) {
134
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classChildMemberDifferentMemberTypeThanAncestor(memberType, ancestorMemberKind, ancestorAndMember.classStatement.getName(Parser_1.ParseMode.BrighterScript))), { file: classStatement.file, range: member.range }));
168
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classChildMemberDifferentMemberTypeThanAncestor(memberType, ancestorMemberKind, ancestorAndMember.ancestorStatement.getName(Parser_1.ParseMode.BrighterScript))), { file: bodyStatement.file, range: member.range }));
135
169
  }
136
170
  //child field has same name as parent
137
- if (reflection_1.isClassFieldStatement(member)) {
138
- const ancestorFieldType = ancestorAndMember.member.getType();
171
+ if (this.isMemberFieldStatement(member)) {
172
+ let ancestorMemberType = new DynamicType_1.DynamicType();
173
+ if (this.isMemberFieldStatement(ancestorAndMember.member)) {
174
+ ancestorMemberType = ancestorAndMember.member.getType();
175
+ }
176
+ else if (this.isMemberMethodStatement(ancestorAndMember.member)) {
177
+ ancestorMemberType = ancestorAndMember.member.func.getFunctionType();
178
+ }
139
179
  const childFieldType = member.getType();
140
- if (!childFieldType.isAssignableTo(ancestorFieldType)) {
180
+ if (!childFieldType.isAssignableTo(ancestorMemberType, this.typeContext)) {
141
181
  //flag incompatible child field type to ancestor field type
142
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty(classStatement.getName(Parser_1.ParseMode.BrighterScript), ancestorAndMember.classStatement.getName(Parser_1.ParseMode.BrighterScript), member.name.text, childFieldType.toString(), ancestorFieldType.toString())), { file: classStatement.file, range: member.range }));
182
+ const childFieldTypeName = (_a = childFieldType === null || childFieldType === void 0 ? void 0 : childFieldType.toString(this.typeContext)) !== null && _a !== void 0 ? _a : (_b = member.type) === null || _b === void 0 ? void 0 : _b.getText();
183
+ const ancestorFieldTypeName = (_c = ancestorMemberType === null || ancestorMemberType === void 0 ? void 0 : ancestorMemberType.toString(this.typeContext)) !== null && _c !== void 0 ? _c : ancestorAndMember.member.type.getText();
184
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty(bodyStatement.getName(Parser_1.ParseMode.BrighterScript), ancestorAndMember.ancestorStatement.getName(Parser_1.ParseMode.BrighterScript), member.name.text, childFieldTypeName, ancestorFieldTypeName)), { file: bodyStatement.file, range: member.range }));
143
185
  }
144
186
  }
145
187
  //child method missing the override keyword
146
188
  if (
147
189
  //is a method
148
- reflection_1.isClassMethodStatement(member) &&
190
+ (0, reflection_1.isMethodStatement)(member) &&
149
191
  //does not have an override keyword
150
192
  !member.override &&
151
193
  //is not the constructur function
152
194
  member.name.text.toLowerCase() !== 'new') {
153
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.missingOverrideKeyword(ancestorAndMember.classStatement.getName(Parser_1.ParseMode.BrighterScript))), { file: classStatement.file, range: member.range }));
195
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.missingOverrideKeyword(ancestorAndMember.ancestorStatement.getName(Parser_1.ParseMode.BrighterScript))), { file: bodyStatement.file, range: member.range }));
154
196
  }
155
197
  //child member has different visiblity
156
198
  if (
157
199
  //is a method
158
- reflection_1.isClassMethodStatement(member) &&
159
- ((_b = (_a = member.accessModifier) === null || _a === void 0 ? void 0 : _a.kind) !== null && _b !== void 0 ? _b : lexer_1.TokenKind.Public) !== ((_d = (_c = ancestorAndMember.member.accessModifier) === null || _c === void 0 ? void 0 : _c.kind) !== null && _d !== void 0 ? _d : lexer_1.TokenKind.Public)) {
160
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility(classStatement.name.text, (_e = ancestorAndMember.member.name) === null || _e === void 0 ? void 0 : _e.text, ((_f = member.accessModifier) === null || _f === void 0 ? void 0 : _f.text) || 'public', ((_g = ancestorAndMember.member.accessModifier) === null || _g === void 0 ? void 0 : _g.text) || 'public', ancestorAndMember.classStatement.getName(Parser_1.ParseMode.BrighterScript))), { file: classStatement.file, range: member.range }));
200
+ (0, reflection_1.isMethodStatement)(member) && (0, reflection_1.isMethodStatement)(ancestorAndMember.member) &&
201
+ ((_e = (_d = member.accessModifier) === null || _d === void 0 ? void 0 : _d.kind) !== null && _e !== void 0 ? _e : TokenKind_1.TokenKind.Public) !== ((_g = (_f = ancestorAndMember.member.accessModifier) === null || _f === void 0 ? void 0 : _f.kind) !== null && _g !== void 0 ? _g : TokenKind_1.TokenKind.Public)) {
202
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility(bodyStatement.name.text, (_h = ancestorAndMember.member.name) === null || _h === void 0 ? void 0 : _h.text, ((_j = member.accessModifier) === null || _j === void 0 ? void 0 : _j.text) || 'public', ((_k = ancestorAndMember.member.accessModifier) === null || _k === void 0 ? void 0 : _k.text) || 'public', ancestorAndMember.ancestorStatement.getName(Parser_1.ParseMode.BrighterScript))), { file: bodyStatement.file, range: member.range }));
161
203
  }
162
204
  }
163
- if (reflection_1.isClassMethodStatement(member)) {
205
+ if (this.isMemberMethodStatement(member)) {
164
206
  methods[lowerMemberName] = member;
165
207
  }
166
- else if (reflection_1.isClassFieldStatement(member)) {
208
+ else if (this.isMemberFieldStatement(member)) {
167
209
  fields[lowerMemberName] = member;
168
210
  }
169
211
  }
170
212
  }
171
213
  }
172
214
  }
173
- /**
174
- * Check the types for fields, and validate they are valid types
175
- */
176
- validateFieldTypes() {
177
- var _a;
178
- for (let key in this.classes) {
179
- let classStatement = this.classes[key];
180
- for (let statement of classStatement.body) {
181
- if (reflection_1.isClassFieldStatement(statement)) {
182
- let fieldType = statement.getType();
183
- if (reflection_1.isCustomType(fieldType)) {
184
- const fieldTypeName = fieldType.name;
185
- const lowerFieldTypeName = fieldTypeName === null || fieldTypeName === void 0 ? void 0 : fieldTypeName.toLowerCase();
215
+ validateMemberCollisions() {
216
+ this.validateMemberCollisionsForStatements(this.classes);
217
+ this.validateMemberCollisionsForStatements(this.interfaces);
218
+ }
219
+ validateFieldTypesForStatements(map) {
220
+ var _a, _b, _c, _d;
221
+ for (const [, statement] of map) {
222
+ for (let bodyStatement of statement.body) {
223
+ if (this.isMemberFieldStatement(bodyStatement)) {
224
+ let fieldType = (0, BscType_1.getTypeFromContext)(bodyStatement.getType(), this.typeContext);
225
+ const fieldTypeName = (_a = fieldType === null || fieldType === void 0 ? void 0 : fieldType.toString(this.typeContext)) !== null && _a !== void 0 ? _a : (_b = bodyStatement.type) === null || _b === void 0 ? void 0 : _b.getText();
226
+ const lowerFieldTypeName = fieldTypeName === null || fieldTypeName === void 0 ? void 0 : fieldTypeName.toLowerCase();
227
+ let addDiagnostic = false;
228
+ if ((0, reflection_1.isCustomType)(fieldType)) {
186
229
  if (lowerFieldTypeName) {
187
- const currentNamespaceName = (_a = classStatement.namespaceName) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript);
230
+ const currentNamespaceName = (_c = bodyStatement.namespaceName) === null || _c === void 0 ? void 0 : _c.getName(Parser_1.ParseMode.BrighterScript);
188
231
  //check if this custom type is in our class map
189
232
  if (!this.getClassByName(lowerFieldTypeName, currentNamespaceName)) {
190
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindType(fieldTypeName)), { range: statement.type.range, file: classStatement.file }));
233
+ addDiagnostic = true;
191
234
  }
192
235
  }
193
236
  }
237
+ else if ((0, reflection_1.isInterfaceType)(fieldType)) {
238
+ if (lowerFieldTypeName) {
239
+ const currentNamespaceName = (_d = bodyStatement.namespaceName) === null || _d === void 0 ? void 0 : _d.getName(Parser_1.ParseMode.BrighterScript);
240
+ //check if this custom type is in our class map
241
+ if (!this.getInterfaceByName(lowerFieldTypeName, currentNamespaceName)) {
242
+ addDiagnostic = true;
243
+ }
244
+ }
245
+ }
246
+ else if (!fieldType) {
247
+ addDiagnostic = true;
248
+ }
249
+ if (addDiagnostic) {
250
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.cannotFindType(fieldTypeName)), { range: bodyStatement.type.range, file: statement.file }));
251
+ }
194
252
  }
195
253
  }
196
254
  }
197
255
  }
256
+ /**
257
+ * Check the types for fields, and validate they are valid types
258
+ */
259
+ validateFieldTypes() {
260
+ this.validateFieldTypesForStatements(this.classes);
261
+ this.validateFieldTypesForStatements(this.interfaces);
262
+ }
198
263
  /**
199
264
  * Get the closest member with the specified name (case-insensitive)
200
265
  */
201
266
  getAncestorMember(classStatement, memberName) {
202
267
  let lowerMemberName = memberName.toLowerCase();
203
- let ancestor = classStatement.parentClass;
268
+ let ancestor = classStatement.parent;
204
269
  while (ancestor) {
205
270
  let member = ancestor.memberMap[lowerMemberName];
206
271
  if (member) {
207
272
  return {
208
273
  member: member,
209
- classStatement: ancestor
274
+ ancestorStatement: ancestor
210
275
  };
211
276
  }
212
- ancestor = ancestor.parentClass;
277
+ ancestor = ancestor.parent;
213
278
  }
214
279
  }
215
280
  cleanUp() {
216
281
  //unlink all classes from their parents so it doesn't mess up the next scope
217
- for (let key in this.classes) {
218
- let classStatement = this.classes[key];
219
- delete classStatement.parentClass;
282
+ for (const [, classStatement] of this.classes) {
283
+ delete classStatement.parent;
220
284
  delete classStatement.file;
221
285
  }
286
+ //unlink all interfaces from their parents so it doesn't mess up the next scope
287
+ for (const [, interfaceStatement] of this.interfaces) {
288
+ delete interfaceStatement.parent;
289
+ delete interfaceStatement.file;
290
+ }
222
291
  }
223
- findClasses() {
224
- this.classes = {};
292
+ findStatements(referencesFunc, dupeDiagnosticFunc) {
293
+ const map = new Map();
225
294
  this.scope.enumerateBrsFiles((file) => {
226
- var _a;
227
- for (let x of (_a = file.parser.references.classStatements) !== null && _a !== void 0 ? _a : []) {
295
+ const references = referencesFunc(file.parser.references);
296
+ for (let x of references !== null && references !== void 0 ? references : []) {
228
297
  let classStatement = x;
229
298
  let name = classStatement.getName(Parser_1.ParseMode.BrighterScript);
230
299
  //skip this class if it doesn't have a name
@@ -233,69 +302,61 @@ class BsClassValidator {
233
302
  }
234
303
  let lowerName = name.toLowerCase();
235
304
  //see if this class was already defined
236
- let alreadyDefinedClass = this.classes[lowerName];
305
+ let alreadyDefinedClass = map.get(lowerName);
237
306
  //if we don't already have this class, register it
238
307
  if (!alreadyDefinedClass) {
239
- this.classes[lowerName] = classStatement;
308
+ map.set(lowerName, classStatement);
240
309
  classStatement.file = file;
241
310
  //add a diagnostic about this class already existing
242
311
  }
243
312
  else {
244
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration(this.scope.name, name)), { file: file, range: classStatement.name.range, relatedInformation: [{
245
- location: vscode_languageserver_1.Location.create(vscode_uri_1.URI.file(alreadyDefinedClass.file.srcPath).toString(), this.classes[lowerName].range),
313
+ this.diagnostics.push(Object.assign(Object.assign({}, dupeDiagnosticFunc(this.scope.name, name)), { file: file, range: classStatement.name.range, relatedInformation: [{
314
+ location: vscode_languageserver_1.Location.create(vscode_uri_1.URI.file(alreadyDefinedClass.file.srcPath).toString(), map.get(lowerName).range),
246
315
  message: ''
247
316
  }] }));
248
317
  }
249
318
  }
250
319
  });
320
+ return map;
251
321
  }
252
- linkClassesWithParents() {
253
- var _a;
322
+ findClasses() {
323
+ this.classes = this.findStatements((references) => references.classStatements, DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration);
324
+ }
325
+ findInterfaces() {
326
+ this.interfaces = this.findStatements((references) => references.interfaceStatements, DiagnosticMessages_1.DiagnosticMessages.duplicateInterfaceDeclaration);
327
+ }
328
+ linkWithParents(map) {
254
329
  //link all classes with their parents
255
- for (let key in this.classes) {
256
- let classStatement = this.classes[key];
257
- let parentClassName = (_a = classStatement.parentClassName) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript);
258
- if (parentClassName) {
259
- let relativeName;
260
- let absoluteName;
261
- //if the parent class name was namespaced in the declaration of this class,
262
- //compute the relative name of the parent class and the absolute name of the parent class
263
- if (parentClassName.indexOf('.') > 0) {
264
- absoluteName = parentClassName;
265
- let parts = parentClassName.split('.');
266
- relativeName = parts[parts.length - 1];
267
- //the parent class name was NOT namespaced.
268
- //compute the relative name of the parent class and prepend the current class's namespace
269
- //to the beginning of the parent class's name
270
- }
271
- else {
272
- if (classStatement.namespaceName) {
273
- absoluteName = `${classStatement.namespaceName.getName(Parser_1.ParseMode.BrighterScript)}.${parentClassName}`;
274
- }
275
- else {
276
- absoluteName = parentClassName;
277
- }
278
- relativeName = parentClassName;
279
- }
280
- let relativeParent = this.classes[relativeName.toLowerCase()];
281
- let absoluteParent = this.classes[absoluteName.toLowerCase()];
330
+ for (const [, classStatement] of map) {
331
+ if (classStatement.hasParent()) {
332
+ let parentNames = classStatement.getPossibleFullParentNames();
282
333
  let parentClass;
283
- //if we found a relative parent class
284
- if (relativeParent) {
285
- parentClass = relativeParent;
286
- //we found an absolute parent class
334
+ for (const parentName of parentNames) {
335
+ parentClass = map.get(parentName.toLowerCase());
336
+ if (parentClass) {
337
+ break;
338
+ }
287
339
  }
288
- else if (absoluteParent) {
289
- parentClass = absoluteParent;
290
- //couldn't find the parent class
340
+ if (parentClass) {
341
+ classStatement.parent = parentClass;
291
342
  }
292
343
  else {
293
- this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound(parentClassName, this.scope.name)), { file: classStatement.file, range: classStatement.parentClassName.range }));
344
+ let parentExpression;
345
+ if ((0, reflection_1.isClassStatement)(classStatement)) {
346
+ parentExpression = classStatement.parentClassName;
347
+ }
348
+ else if ((0, reflection_1.isInterfaceStatement)(classStatement)) {
349
+ parentExpression = classStatement.parentInterfaceName;
350
+ }
351
+ this.diagnostics.push(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound(parentExpression.getName(Parser_1.ParseMode.BrighterScript), this.scope.name)), { file: classStatement.file, range: parentExpression === null || parentExpression === void 0 ? void 0 : parentExpression.range }));
294
352
  }
295
- classStatement.parentClass = parentClass;
296
353
  }
297
354
  }
298
355
  }
356
+ linkClassesWithParents() {
357
+ this.linkWithParents(this.classes);
358
+ this.linkWithParents(this.interfaces);
359
+ }
299
360
  }
300
361
  exports.BsClassValidator = BsClassValidator;
301
362
  //# sourceMappingURL=ClassValidator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClassValidator.js","sourceRoot":"","sources":["../../src/validators/ClassValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClassValidator.js","sourceRoot":"","sources":["../../src/validators/ClassValidator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brighterscript",
3
- "version": "1.0.0-alpha.2",
3
+ "version": "1.0.0-alpha.22",
4
4
  "description": "A superset of Roku's BrightScript language.",
5
5
  "scripts": {
6
6
  "preversion": "npm run build && npm run lint && npm run test",
@@ -12,10 +12,12 @@
12
12
  "test": "nyc mocha",
13
13
  "test:nocover": "mocha",
14
14
  "test:watch": "mocha --watch",
15
+ "test-related-projects": "ts-node scripts/test-related-projects.ts",
15
16
  "publish-coverage": "nyc report --reporter=text-lcov | coveralls",
16
17
  "dep-graph": "madge --image graph.svg --extensions ts ./src/parser",
17
18
  "docs": "ts-node scripts/compile-doc-examples.ts",
18
- "benchmark": "node ./benchmarks/index.js"
19
+ "benchmark": "node ./benchmarks/index.js",
20
+ "scrape-roku-docs": "ts-node scripts/scrape-roku-docs.ts"
19
21
  },
20
22
  "mocha": {
21
23
  "spec": "src/**/*.spec.ts",
@@ -24,6 +26,7 @@
24
26
  "ts-node/register"
25
27
  ],
26
28
  "fullTrace": true,
29
+ "timeout": 987654321,
27
30
  "watchExtensions": [
28
31
  "ts"
29
32
  ]
@@ -69,42 +72,50 @@
69
72
  "branches": 100
70
73
  },
71
74
  "devDependencies": {
75
+ "@guyplusplus/turndown-plugin-gfm": "^1.0.7",
72
76
  "@types/benchmark": "^1.0.31",
73
77
  "@types/chai": "^4.1.2",
74
- "@types/chokidar": "^1.7.5",
75
78
  "@types/command-line-args": "^5.0.0",
76
79
  "@types/command-line-usage": "^5.0.1",
77
80
  "@types/debounce-promise": "^3.1.1",
78
- "@types/fs-extra": "^5.0.1",
79
- "@types/glob": "^7.1.1",
81
+ "@types/fs-extra": "^8.0.0",
82
+ "@types/marked": "^4.0.3",
80
83
  "@types/mocha": "^5.2.5",
81
84
  "@types/node": "^11.9.0",
82
- "@types/request": "^2.47.0",
83
85
  "@types/sinon": "^9.0.4",
86
+ "@types/turndown": "^5.0.1",
84
87
  "@types/yargs": "^15.0.5",
85
- "@typescript-eslint/eslint-plugin": "^4.4.1",
86
- "@typescript-eslint/parser": "^4.4.1",
88
+ "@typescript-eslint/eslint-plugin": "^5.27.0",
89
+ "@typescript-eslint/parser": "^5.27.0",
87
90
  "benchmark": "^2.1.4",
88
91
  "chai": "^4.2.0",
89
92
  "chai-files": "^1.4.0",
90
93
  "coveralls": "^3.0.0",
91
- "eslint": "^7.11.0",
92
- "eslint-plugin-github": "^4.1.1",
93
- "eslint-plugin-no-only-tests": "^2.4.0",
94
+ "deepmerge": "^4.2.2",
95
+ "eslint": "^8.16.0",
96
+ "eslint-plugin-github": "4.3.6",
97
+ "eslint-plugin-no-only-tests": "2.6.0",
98
+ "he": "^1.2.0",
94
99
  "madge": "^4.0.2",
95
- "mocha": "^8.3.2",
100
+ "marked": "^4.0.12",
101
+ "mocha": "^9.1.3",
96
102
  "node-run-cmd": "^1.0.1",
97
103
  "nyc": "^15.1.0",
98
104
  "object.pick": "^1.3.0",
105
+ "phin": "^3.5.1",
99
106
  "rimraf": "^2.6.2",
100
107
  "semver-extra": "^3.0.0",
101
108
  "sinon": "^9.0.2",
102
109
  "source-map-support": "^0.5.13",
103
110
  "sync-request": "^6.1.0",
104
111
  "testdouble": "^3.5.2",
112
+ "thenby": "^1.3.4",
105
113
  "ts-node": "8.9.1",
106
- "typescript": "^3.9.2",
114
+ "turndown": "^7.1.1",
115
+ "turndown-plugin-gfm": "^1.0.2",
116
+ "typescript": "^4.7.2",
107
117
  "typescript-formatter": "^7.2.2",
118
+ "undent": "^0.1.0",
108
119
  "vscode-jsonrpc": "^5.0.1"
109
120
  },
110
121
  "dependencies": {
@@ -113,14 +124,14 @@
113
124
  "array-flat-polyfill": "^1.0.1",
114
125
  "chalk": "^2.4.2",
115
126
  "chevrotain": "^7.0.1",
116
- "chokidar": "^3.0.2",
127
+ "chokidar": "^3.5.1",
117
128
  "clear": "^0.1.0",
118
129
  "cross-platform-clear-console": "^2.3.0",
119
130
  "debounce-promise": "^3.1.0",
120
131
  "eventemitter3": "^4.0.0",
132
+ "fast-glob": "^3.2.11",
121
133
  "file-url": "^3.0.0",
122
- "fs-extra": "^7.0.1",
123
- "glob": "^7.1.6",
134
+ "fs-extra": "^8.0.0",
124
135
  "jsonc-parser": "^2.3.0",
125
136
  "long": "^3.2.0",
126
137
  "luxon": "^1.8.3",
@@ -128,11 +139,11 @@
128
139
  "moment": "^2.23.0",
129
140
  "p-settle": "^2.1.0",
130
141
  "parse-ms": "^2.1.0",
131
- "roku-deploy": "^3.2.4",
142
+ "roku-deploy": "^3.7.1",
132
143
  "serialize-error": "^7.0.1",
133
144
  "source-map": "^0.7.3",
134
- "vscode-languageserver": "^6.1.1",
135
- "vscode-languageserver-protocol": "~3.15.3",
145
+ "vscode-languageserver": "7.0.0",
146
+ "vscode-languageserver-protocol": "3.16.0",
136
147
  "vscode-languageserver-textdocument": "^1.0.1",
137
148
  "vscode-uri": "^2.1.1",
138
149
  "xml2js": "^0.4.19",
@@ -1,7 +0,0 @@
1
- import { Range, Position, CancellationToken, CancellationTokenSource, DiagnosticSeverity, DiagnosticTag } from 'vscode-languageserver';
2
- export { Range, Position, CancellationToken, CancellationTokenSource, DiagnosticSeverity, DiagnosticTag };
3
- export * from './visitors';
4
- export * from './stackedVisitor';
5
- export * from './reflection';
6
- export * from './creators';
7
- export * from './xml';