brighterscript 0.66.0-alpha.9 → 0.67.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/CHANGELOG.md +123 -73
  2. package/README.md +14 -418
  3. package/dist/BsConfig.d.ts +25 -2
  4. package/dist/Cache.js +3 -3
  5. package/dist/Cache.js.map +1 -1
  6. package/dist/CodeActionUtil.d.ts +3 -3
  7. package/dist/CodeActionUtil.js.map +1 -1
  8. package/dist/CommentFlagProcessor.d.ts +3 -4
  9. package/dist/CommentFlagProcessor.js +4 -3
  10. package/dist/CommentFlagProcessor.js.map +1 -1
  11. package/dist/DependencyGraph.js +8 -8
  12. package/dist/DependencyGraph.js.map +1 -1
  13. package/dist/DiagnosticFilterer.d.ts +8 -4
  14. package/dist/DiagnosticFilterer.js +71 -38
  15. package/dist/DiagnosticFilterer.js.map +1 -1
  16. package/dist/DiagnosticMessages.d.ts +15 -36
  17. package/dist/DiagnosticMessages.js +15 -61
  18. package/dist/DiagnosticMessages.js.map +1 -1
  19. package/dist/DiagnosticSeverityAdjuster.js +3 -0
  20. package/dist/DiagnosticSeverityAdjuster.js.map +1 -1
  21. package/dist/FunctionScope.d.ts +2 -3
  22. package/dist/FunctionScope.js +0 -3
  23. package/dist/FunctionScope.js.map +1 -1
  24. package/dist/LanguageServer.d.ts +1 -2
  25. package/dist/LanguageServer.js +31 -35
  26. package/dist/LanguageServer.js.map +1 -1
  27. package/dist/Logger.d.ts +5 -9
  28. package/dist/Logger.js +18 -22
  29. package/dist/Logger.js.map +1 -1
  30. package/dist/PluginInterface.d.ts +13 -15
  31. package/dist/PluginInterface.js +16 -70
  32. package/dist/PluginInterface.js.map +1 -1
  33. package/dist/Program.d.ts +105 -138
  34. package/dist/Program.js +479 -702
  35. package/dist/Program.js.map +1 -1
  36. package/dist/ProgramBuilder.d.ts +8 -19
  37. package/dist/ProgramBuilder.js +85 -89
  38. package/dist/ProgramBuilder.js.map +1 -1
  39. package/dist/Scope.d.ts +56 -46
  40. package/dist/Scope.js +281 -217
  41. package/dist/Scope.js.map +1 -1
  42. package/dist/Stopwatch.js +1 -1
  43. package/dist/Stopwatch.js.map +1 -1
  44. package/dist/SymbolTable.d.ts +12 -68
  45. package/dist/SymbolTable.js +28 -213
  46. package/dist/SymbolTable.js.map +1 -1
  47. package/dist/XmlScope.d.ts +5 -7
  48. package/dist/XmlScope.js +36 -76
  49. package/dist/XmlScope.js.map +1 -1
  50. package/dist/astUtils/{Editor.d.ts → AstEditor.d.ts} +1 -6
  51. package/dist/astUtils/{Editor.js → AstEditor.js} +3 -9
  52. package/dist/astUtils/AstEditor.js.map +1 -0
  53. package/dist/astUtils/{Editor.spec.js → AstEditor.spec.js} +6 -10
  54. package/dist/astUtils/AstEditor.spec.js.map +1 -0
  55. package/dist/astUtils/creators.d.ts +8 -19
  56. package/dist/astUtils/creators.js +22 -54
  57. package/dist/astUtils/creators.js.map +1 -1
  58. package/dist/astUtils/creators.spec.js +0 -10
  59. package/dist/astUtils/creators.spec.js.map +1 -1
  60. package/dist/astUtils/reflection.d.ts +45 -81
  61. package/dist/astUtils/reflection.js +157 -220
  62. package/dist/astUtils/reflection.js.map +1 -1
  63. package/dist/astUtils/reflection.spec.js +19 -96
  64. package/dist/astUtils/reflection.spec.js.map +1 -1
  65. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  66. package/dist/astUtils/visitors.d.ts +14 -18
  67. package/dist/astUtils/visitors.js +9 -22
  68. package/dist/astUtils/visitors.js.map +1 -1
  69. package/dist/astUtils/visitors.spec.js +9 -62
  70. package/dist/astUtils/visitors.spec.js.map +1 -1
  71. package/dist/astUtils/xml.d.ts +9 -9
  72. package/dist/astUtils/xml.js +6 -6
  73. package/dist/astUtils/xml.js.map +1 -1
  74. package/dist/bscPlugin/BscPlugin.d.ts +8 -11
  75. package/dist/bscPlugin/BscPlugin.js +21 -29
  76. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  77. package/dist/bscPlugin/CallExpressionInfo.d.ts +6 -5
  78. package/dist/bscPlugin/CallExpressionInfo.js +2 -2
  79. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  80. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +11 -11
  81. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  82. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
  83. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  84. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +1 -49
  85. package/dist/bscPlugin/completions/CompletionsProcessor.js +23 -424
  86. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  87. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  88. package/dist/bscPlugin/definition/DefinitionProvider.js +200 -0
  89. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  90. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  91. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  92. package/dist/bscPlugin/hover/HoverProcessor.d.ts +3 -7
  93. package/dist/bscPlugin/hover/HoverProcessor.js +88 -128
  94. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  95. package/dist/bscPlugin/hover/HoverProcessor.spec.js +24 -336
  96. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  97. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  98. package/dist/bscPlugin/references/ReferencesProvider.js +56 -0
  99. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  100. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  101. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  102. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +0 -1
  103. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +5 -49
  104. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  105. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +0 -22
  106. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  107. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  108. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  109. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  110. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +290 -0
  111. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  112. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  113. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  114. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  115. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  116. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  117. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  118. package/dist/bscPlugin/symbols/symbolUtils.js +140 -0
  119. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  120. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.d.ts → BrsFilePreTranspileProcessor.d.ts} +2 -4
  121. package/dist/bscPlugin/transpile/{BrsFileTranspileProcessor.js → BrsFilePreTranspileProcessor.js} +15 -36
  122. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
  123. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +46 -0
  124. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -0
  125. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +1 -0
  126. package/dist/bscPlugin/validation/BrsFileValidator.js +30 -41
  127. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  128. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +2 -2
  129. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  130. package/dist/bscPlugin/validation/ProgramValidator.d.ts +3 -3
  131. package/dist/bscPlugin/validation/ProgramValidator.js +6 -6
  132. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -1
  133. package/dist/bscPlugin/validation/ScopeValidator.d.ts +6 -28
  134. package/dist/bscPlugin/validation/ScopeValidator.js +166 -387
  135. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  136. package/dist/bscPlugin/validation/XmlFileValidator.js +9 -9
  137. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  138. package/dist/diagnosticUtils.d.ts +2 -3
  139. package/dist/diagnosticUtils.js +5 -5
  140. package/dist/diagnosticUtils.js.map +1 -1
  141. package/dist/examples/plugins/removePrint.js +1 -1
  142. package/dist/examples/plugins/removePrint.js.map +1 -1
  143. package/dist/files/BrsFile.Class.spec.js +143 -114
  144. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  145. package/dist/files/BrsFile.d.ts +61 -83
  146. package/dist/files/BrsFile.js +559 -612
  147. package/dist/files/BrsFile.js.map +1 -1
  148. package/dist/files/BrsFile.spec.js +1365 -1201
  149. package/dist/files/BrsFile.spec.js.map +1 -1
  150. package/dist/files/XmlFile.d.ts +28 -56
  151. package/dist/files/XmlFile.js +103 -89
  152. package/dist/files/XmlFile.js.map +1 -1
  153. package/dist/files/XmlFile.spec.js +179 -122
  154. package/dist/files/XmlFile.spec.js.map +1 -1
  155. package/dist/files/tests/imports.spec.js +19 -29
  156. package/dist/files/tests/imports.spec.js.map +1 -1
  157. package/dist/files/tests/optionalChaning.spec.js +14 -14
  158. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  159. package/dist/globalCallables.js +83 -88
  160. package/dist/globalCallables.js.map +1 -1
  161. package/dist/index.d.ts +1 -9
  162. package/dist/index.js +1 -9
  163. package/dist/index.js.map +1 -1
  164. package/dist/interfaces.d.ts +173 -423
  165. package/dist/interfaces.js +0 -24
  166. package/dist/interfaces.js.map +1 -1
  167. package/dist/lexer/Lexer.d.ts +9 -15
  168. package/dist/lexer/Lexer.js +35 -46
  169. package/dist/lexer/Lexer.js.map +1 -1
  170. package/dist/lexer/Lexer.spec.js +48 -40
  171. package/dist/lexer/Lexer.spec.js.map +1 -1
  172. package/dist/lexer/Token.d.ts +1 -5
  173. package/dist/lexer/Token.js +1 -1
  174. package/dist/lexer/Token.js.map +1 -1
  175. package/dist/lexer/TokenKind.d.ts +0 -6
  176. package/dist/lexer/TokenKind.js +2 -14
  177. package/dist/lexer/TokenKind.js.map +1 -1
  178. package/dist/logging.d.ts +9 -0
  179. package/dist/logging.js +16 -0
  180. package/dist/logging.js.map +1 -0
  181. package/dist/parser/AstNode.d.ts +6 -90
  182. package/dist/parser/AstNode.js +5 -96
  183. package/dist/parser/AstNode.js.map +1 -1
  184. package/dist/parser/AstNode.spec.js.map +1 -1
  185. package/dist/parser/BrsTranspileState.d.ts +3 -4
  186. package/dist/parser/BrsTranspileState.js +2 -3
  187. package/dist/parser/BrsTranspileState.js.map +1 -1
  188. package/dist/parser/Expression.d.ts +114 -137
  189. package/dist/parser/Expression.js +244 -373
  190. package/dist/parser/Expression.js.map +1 -1
  191. package/dist/parser/Parser.Class.spec.js +19 -46
  192. package/dist/parser/Parser.Class.spec.js.map +1 -1
  193. package/dist/parser/Parser.d.ts +18 -14
  194. package/dist/parser/Parser.js +196 -175
  195. package/dist/parser/Parser.js.map +1 -1
  196. package/dist/parser/Parser.spec.d.ts +0 -2
  197. package/dist/parser/Parser.spec.js +10 -674
  198. package/dist/parser/Parser.spec.js.map +1 -1
  199. package/dist/parser/SGParser.d.ts +6 -44
  200. package/dist/parser/SGParser.js +198 -194
  201. package/dist/parser/SGParser.js.map +1 -1
  202. package/dist/parser/SGParser.spec.js +11 -14
  203. package/dist/parser/SGParser.spec.js.map +1 -1
  204. package/dist/parser/SGTypes.d.ts +52 -280
  205. package/dist/parser/SGTypes.js +185 -562
  206. package/dist/parser/SGTypes.js.map +1 -1
  207. package/dist/parser/Statement.d.ts +140 -172
  208. package/dist/parser/Statement.js +201 -337
  209. package/dist/parser/Statement.js.map +1 -1
  210. package/dist/parser/Statement.spec.js.map +1 -1
  211. package/dist/parser/TranspileState.d.ts +3 -2
  212. package/dist/parser/TranspileState.js +8 -10
  213. package/dist/parser/TranspileState.js.map +1 -1
  214. package/dist/parser/tests/Parser.spec.js +3 -5
  215. package/dist/parser/tests/Parser.spec.js.map +1 -1
  216. package/dist/parser/tests/controlFlow/For.spec.js +8 -16
  217. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  218. package/dist/parser/tests/controlFlow/ForEach.spec.js +6 -12
  219. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  220. package/dist/parser/tests/controlFlow/While.spec.js +4 -8
  221. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  222. package/dist/parser/tests/expression/Call.spec.js +4 -4
  223. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  224. package/dist/parser/tests/expression/Indexing.spec.js +25 -0
  225. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  226. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +73 -29
  227. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  228. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
  229. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  230. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
  231. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  232. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +47 -35
  233. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  234. package/dist/parser/tests/expression/TernaryExpression.spec.js +83 -36
  235. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  236. package/dist/parser/tests/expression/UnaryExpression.spec.js +2 -2
  237. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -1
  238. package/dist/parser/tests/statement/ConstStatement.spec.js +26 -27
  239. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  240. package/dist/parser/tests/statement/Continue.spec.js +2 -2
  241. package/dist/parser/tests/statement/Continue.spec.js.map +1 -1
  242. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  243. package/dist/parser/tests/statement/Enum.spec.js +393 -90
  244. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  245. package/dist/parser/tests/statement/For.spec.js +6 -6
  246. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  247. package/dist/parser/tests/statement/ForEach.spec.js +4 -4
  248. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  249. package/dist/parser/tests/statement/Function.spec.js +1 -1
  250. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  251. package/dist/parser/tests/statement/InterfaceStatement.spec.js +18 -18
  252. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  253. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  254. package/dist/parser/tests/statement/PrintStatement.spec.js +13 -16
  255. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  256. package/dist/parser/tests/statement/ReturnStatement.spec.js +3 -5
  257. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  258. package/dist/parser/tests/statement/Set.spec.js +13 -26
  259. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  260. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  261. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  262. package/dist/preprocessor/Chunk.js +1 -2
  263. package/dist/preprocessor/Chunk.js.map +1 -1
  264. package/dist/preprocessor/Preprocessor.d.ts +3 -4
  265. package/dist/preprocessor/Preprocessor.js +3 -3
  266. package/dist/preprocessor/Preprocessor.js.map +1 -1
  267. package/dist/preprocessor/PreprocessorParser.js +8 -1
  268. package/dist/preprocessor/PreprocessorParser.js.map +1 -1
  269. package/dist/roku-types/data.json +293 -243
  270. package/dist/roku-types/index.d.ts +38 -17
  271. package/dist/types/ArrayType.d.ts +4 -9
  272. package/dist/types/ArrayType.js +24 -72
  273. package/dist/types/ArrayType.js.map +1 -1
  274. package/dist/types/ArrayType.spec.js +10 -39
  275. package/dist/types/ArrayType.spec.js.map +1 -1
  276. package/dist/types/BooleanType.d.ts +4 -8
  277. package/dist/types/BooleanType.js +8 -19
  278. package/dist/types/BooleanType.js.map +1 -1
  279. package/dist/types/BooleanType.spec.js +3 -9
  280. package/dist/types/BooleanType.spec.js.map +1 -1
  281. package/dist/types/BscType.d.ts +2 -29
  282. package/dist/types/BscType.js +0 -113
  283. package/dist/types/BscType.js.map +1 -1
  284. package/dist/types/CustomType.d.ts +9 -0
  285. package/dist/types/CustomType.js +32 -0
  286. package/dist/types/CustomType.js.map +1 -0
  287. package/dist/types/DoubleType.d.ts +4 -8
  288. package/dist/types/DoubleType.js +20 -23
  289. package/dist/types/DoubleType.js.map +1 -1
  290. package/dist/types/DoubleType.spec.js +3 -11
  291. package/dist/types/DoubleType.spec.js.map +1 -1
  292. package/dist/types/DynamicType.d.ts +3 -9
  293. package/dist/types/DynamicType.js +2 -18
  294. package/dist/types/DynamicType.js.map +1 -1
  295. package/dist/types/DynamicType.spec.js +4 -15
  296. package/dist/types/DynamicType.spec.js.map +1 -1
  297. package/dist/types/FloatType.d.ts +4 -8
  298. package/dist/types/FloatType.js +20 -23
  299. package/dist/types/FloatType.js.map +1 -1
  300. package/dist/types/FloatType.spec.js +3 -3
  301. package/dist/types/FloatType.spec.js.map +1 -1
  302. package/dist/types/FunctionType.d.ts +20 -10
  303. package/dist/types/FunctionType.js +52 -27
  304. package/dist/types/FunctionType.js.map +1 -1
  305. package/dist/types/FunctionType.spec.js +23 -0
  306. package/dist/types/FunctionType.spec.js.map +1 -0
  307. package/dist/types/IntegerType.d.ts +4 -8
  308. package/dist/types/IntegerType.js +20 -23
  309. package/dist/types/IntegerType.js.map +1 -1
  310. package/dist/types/IntegerType.spec.js +3 -7
  311. package/dist/types/IntegerType.spec.js.map +1 -1
  312. package/dist/types/InterfaceType.d.ts +10 -12
  313. package/dist/types/InterfaceType.js +48 -23
  314. package/dist/types/InterfaceType.js.map +1 -1
  315. package/dist/types/InterfaceType.spec.js +45 -82
  316. package/dist/types/InterfaceType.spec.js.map +1 -1
  317. package/dist/types/InvalidType.d.ts +4 -7
  318. package/dist/types/InvalidType.js +8 -18
  319. package/dist/types/InvalidType.js.map +1 -1
  320. package/dist/types/InvalidType.spec.js +3 -7
  321. package/dist/types/InvalidType.spec.js.map +1 -1
  322. package/dist/types/LongIntegerType.d.ts +4 -8
  323. package/dist/types/LongIntegerType.js +20 -23
  324. package/dist/types/LongIntegerType.js.map +1 -1
  325. package/dist/types/LongIntegerType.spec.js +3 -9
  326. package/dist/types/LongIntegerType.spec.js.map +1 -1
  327. package/dist/types/ObjectType.d.ts +4 -8
  328. package/dist/types/ObjectType.js +7 -21
  329. package/dist/types/ObjectType.js.map +1 -1
  330. package/dist/types/ObjectType.spec.js +2 -2
  331. package/dist/types/ObjectType.spec.js.map +1 -1
  332. package/dist/types/StringType.d.ts +4 -11
  333. package/dist/types/StringType.js +8 -23
  334. package/dist/types/StringType.js.map +1 -1
  335. package/dist/types/StringType.spec.js +2 -2
  336. package/dist/types/StringType.spec.js.map +1 -1
  337. package/dist/types/UninitializedType.d.ts +3 -7
  338. package/dist/types/UninitializedType.js +3 -14
  339. package/dist/types/UninitializedType.js.map +1 -1
  340. package/dist/types/VoidType.d.ts +4 -8
  341. package/dist/types/VoidType.js +8 -18
  342. package/dist/types/VoidType.js.map +1 -1
  343. package/dist/types/VoidType.spec.js +2 -2
  344. package/dist/types/VoidType.spec.js.map +1 -1
  345. package/dist/util.d.ts +43 -104
  346. package/dist/util.js +243 -640
  347. package/dist/util.js.map +1 -1
  348. package/dist/validators/ClassValidator.d.ts +6 -1
  349. package/dist/validators/ClassValidator.js +61 -20
  350. package/dist/validators/ClassValidator.js.map +1 -1
  351. package/package.json +13 -11
  352. package/dist/ActionPipeline.d.ts +0 -10
  353. package/dist/ActionPipeline.js +0 -40
  354. package/dist/ActionPipeline.js.map +0 -1
  355. package/dist/AstValidationSegmenter.d.ts +0 -25
  356. package/dist/AstValidationSegmenter.js +0 -150
  357. package/dist/AstValidationSegmenter.js.map +0 -1
  358. package/dist/CacheVerifier.d.ts +0 -7
  359. package/dist/CacheVerifier.js +0 -20
  360. package/dist/CacheVerifier.js.map +0 -1
  361. package/dist/astUtils/Editor.js.map +0 -1
  362. package/dist/astUtils/Editor.spec.js.map +0 -1
  363. package/dist/bscPlugin/FileWriter.d.ts +0 -6
  364. package/dist/bscPlugin/FileWriter.js +0 -24
  365. package/dist/bscPlugin/FileWriter.js.map +0 -1
  366. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +0 -1658
  367. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +0 -1
  368. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +0 -9
  369. package/dist/bscPlugin/fileProviders/FileProvider.js +0 -51
  370. package/dist/bscPlugin/fileProviders/FileProvider.js.map +0 -1
  371. package/dist/bscPlugin/serialize/BslibInjector.spec.js +0 -19
  372. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +0 -1
  373. package/dist/bscPlugin/serialize/BslibManager.d.ts +0 -9
  374. package/dist/bscPlugin/serialize/BslibManager.js +0 -40
  375. package/dist/bscPlugin/serialize/BslibManager.js.map +0 -1
  376. package/dist/bscPlugin/serialize/FileSerializer.d.ts +0 -9
  377. package/dist/bscPlugin/serialize/FileSerializer.js +0 -72
  378. package/dist/bscPlugin/serialize/FileSerializer.js.map +0 -1
  379. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +0 -1
  380. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +0 -41
  381. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +0 -1
  382. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +0 -11
  383. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +0 -53
  384. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +0 -1
  385. package/dist/bscPlugin/validation/ScopeValidator.spec.js +0 -2004
  386. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +0 -1
  387. package/dist/files/AssetFile.d.ts +0 -26
  388. package/dist/files/AssetFile.js +0 -26
  389. package/dist/files/AssetFile.js.map +0 -1
  390. package/dist/files/Factory.d.ts +0 -25
  391. package/dist/files/Factory.js +0 -22
  392. package/dist/files/Factory.js.map +0 -1
  393. package/dist/files/File.d.ts +0 -106
  394. package/dist/files/File.js +0 -16
  395. package/dist/files/File.js.map +0 -1
  396. package/dist/files/LazyFileData.d.ts +0 -20
  397. package/dist/files/LazyFileData.js +0 -54
  398. package/dist/files/LazyFileData.js.map +0 -1
  399. package/dist/files/LazyFileData.spec.js +0 -27
  400. package/dist/files/LazyFileData.spec.js.map +0 -1
  401. package/dist/parser/tests/expression/TypeExpression.spec.js +0 -127
  402. package/dist/parser/tests/expression/TypeExpression.spec.js.map +0 -1
  403. package/dist/types/AssociativeArrayType.d.ts +0 -11
  404. package/dist/types/AssociativeArrayType.js +0 -52
  405. package/dist/types/AssociativeArrayType.js.map +0 -1
  406. package/dist/types/BaseFunctionType.d.ts +0 -9
  407. package/dist/types/BaseFunctionType.js +0 -25
  408. package/dist/types/BaseFunctionType.js.map +0 -1
  409. package/dist/types/BscTypeKind.d.ts +0 -25
  410. package/dist/types/BscTypeKind.js +0 -30
  411. package/dist/types/BscTypeKind.js.map +0 -1
  412. package/dist/types/BuiltInInterfaceAdder.d.ts +0 -23
  413. package/dist/types/BuiltInInterfaceAdder.js +0 -160
  414. package/dist/types/BuiltInInterfaceAdder.js.map +0 -1
  415. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +0 -1
  416. package/dist/types/BuiltInInterfaceAdder.spec.js +0 -116
  417. package/dist/types/BuiltInInterfaceAdder.spec.js.map +0 -1
  418. package/dist/types/ClassType.d.ts +0 -17
  419. package/dist/types/ClassType.js +0 -58
  420. package/dist/types/ClassType.js.map +0 -1
  421. package/dist/types/ClassType.spec.d.ts +0 -1
  422. package/dist/types/ClassType.spec.js +0 -77
  423. package/dist/types/ClassType.spec.js.map +0 -1
  424. package/dist/types/ComponentType.d.ts +0 -26
  425. package/dist/types/ComponentType.js +0 -83
  426. package/dist/types/ComponentType.js.map +0 -1
  427. package/dist/types/EnumType.d.ts +0 -40
  428. package/dist/types/EnumType.js +0 -81
  429. package/dist/types/EnumType.js.map +0 -1
  430. package/dist/types/EnumType.spec.d.ts +0 -1
  431. package/dist/types/EnumType.spec.js +0 -33
  432. package/dist/types/EnumType.spec.js.map +0 -1
  433. package/dist/types/InheritableType.d.ts +0 -28
  434. package/dist/types/InheritableType.js +0 -152
  435. package/dist/types/InheritableType.js.map +0 -1
  436. package/dist/types/NamespaceType.d.ts +0 -12
  437. package/dist/types/NamespaceType.js +0 -28
  438. package/dist/types/NamespaceType.js.map +0 -1
  439. package/dist/types/ReferenceType.d.ts +0 -63
  440. package/dist/types/ReferenceType.js +0 -423
  441. package/dist/types/ReferenceType.js.map +0 -1
  442. package/dist/types/ReferenceType.spec.d.ts +0 -1
  443. package/dist/types/ReferenceType.spec.js +0 -137
  444. package/dist/types/ReferenceType.spec.js.map +0 -1
  445. package/dist/types/TypedFunctionType.d.ts +0 -33
  446. package/dist/types/TypedFunctionType.js +0 -106
  447. package/dist/types/TypedFunctionType.js.map +0 -1
  448. package/dist/types/TypedFunctionType.spec.d.ts +0 -1
  449. package/dist/types/TypedFunctionType.spec.js +0 -122
  450. package/dist/types/TypedFunctionType.spec.js.map +0 -1
  451. package/dist/types/UnionType.d.ts +0 -20
  452. package/dist/types/UnionType.js +0 -123
  453. package/dist/types/UnionType.js.map +0 -1
  454. package/dist/types/UnionType.spec.d.ts +0 -1
  455. package/dist/types/UnionType.spec.js +0 -130
  456. package/dist/types/UnionType.spec.js.map +0 -1
  457. package/dist/types/helper.spec.d.ts +0 -1
  458. package/dist/types/helper.spec.js +0 -145
  459. package/dist/types/helper.spec.js.map +0 -1
  460. package/dist/types/helpers.d.ts +0 -24
  461. package/dist/types/helpers.js +0 -178
  462. package/dist/types/helpers.js.map +0 -1
  463. package/dist/types/index.d.ts +0 -22
  464. package/dist/types/index.js +0 -39
  465. package/dist/types/index.js.map +0 -1
  466. /package/dist/astUtils/{Editor.spec.d.ts → AstEditor.spec.d.ts} +0 -0
  467. /package/dist/bscPlugin/{completions/CompletionsProcessor.spec.d.ts → definition/DefinitionProvider.spec.d.ts} +0 -0
  468. /package/dist/bscPlugin/{serialize/BslibInjector.spec.d.ts → references/ReferencesProvider.spec.d.ts} +0 -0
  469. /package/dist/bscPlugin/{transpile/BrsFileTranspileProcessor.spec.d.ts → symbols/DocumentSymbolProcessor.spec.d.ts} +0 -0
  470. /package/dist/bscPlugin/{validation/ScopeValidator.spec.d.ts → symbols/WorkspaceSymbolProcessor.spec.d.ts} +0 -0
  471. /package/dist/{files/LazyFileData.spec.d.ts → bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts} +0 -0
  472. /package/dist/{parser/tests/expression/TypeExpression.spec.d.ts → types/FunctionType.spec.d.ts} +0 -0
@@ -1,1658 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const chai_config_spec_1 = require("../../chai-config.spec");
4
- const Program_1 = require("../../Program");
5
- const util_1 = require("../../util");
6
- const vscode_languageserver_1 = require("vscode-languageserver");
7
- const sinon_1 = require("sinon");
8
- const testHelpers_spec_1 = require("../../testHelpers.spec");
9
- const XmlFile_1 = require("../../files/XmlFile");
10
- const TokenKind_1 = require("../../lexer/TokenKind");
11
- const CompletionsProcessor_1 = require("./CompletionsProcessor");
12
- const pick = require("object.pick");
13
- const BrsFile_1 = require("../../files/BrsFile");
14
- const fsExtra = require("fs-extra");
15
- describe('CompletionsProcessor', () => {
16
- let program;
17
- let sinon = (0, sinon_1.createSandbox)();
18
- beforeEach(() => {
19
- fsExtra.emptyDirSync(testHelpers_spec_1.tempDir);
20
- fsExtra.ensureDirSync(testHelpers_spec_1.rootDir);
21
- fsExtra.ensureDirSync(testHelpers_spec_1.stagingDir);
22
- program = new Program_1.Program({ rootDir: testHelpers_spec_1.rootDir });
23
- });
24
- afterEach(() => {
25
- sinon.restore();
26
- program.dispose();
27
- });
28
- describe('getCompletions - Program.spec', () => {
29
- it('includes `for each` variable', () => {
30
- program.setFile('source/main.brs', `
31
- sub main()
32
- items = [1, 2, 3]
33
- for each thing in items
34
- t =
35
- end for
36
- end sub
37
- `);
38
- program.validate();
39
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(4, 28)).map(x => x.label);
40
- (0, chai_config_spec_1.expect)(completions).to.include('thing');
41
- });
42
- it('includes `for` variable', () => {
43
- program.setFile('source/main.brs', `
44
- sub main()
45
- for i = 0 to 10
46
- t =
47
- end for
48
- end sub
49
- `);
50
- program.validate();
51
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 28)).map(x => x.label);
52
- (0, chai_config_spec_1.expect)(completions).to.include('i');
53
- });
54
- it('should include first-level namespace names for brighterscript files', () => {
55
- program.setFile('source/main.bs', `
56
- namespace NameA.NameB.NameC
57
- sub DoSomething()
58
- end sub
59
- end namespace
60
- sub main()
61
- print
62
- end sub
63
- `);
64
- program.validate();
65
- // print |
66
- const completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(6, 25));
67
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
68
- label: 'NameA',
69
- kind: vscode_languageserver_1.CompletionItemKind.Module
70
- }]);
71
- (0, testHelpers_spec_1.expectCompletionsExcludes)(completions, [{
72
- label: 'NameB',
73
- kind: vscode_languageserver_1.CompletionItemKind.Module
74
- }, {
75
- label: 'NameA.NameB',
76
- kind: vscode_languageserver_1.CompletionItemKind.Module
77
- }, {
78
- label: 'NameA.NameB.NameC',
79
- kind: vscode_languageserver_1.CompletionItemKind.Module
80
- }, {
81
- label: 'NameA.NameB.NameC.DoSomething',
82
- kind: vscode_languageserver_1.CompletionItemKind.Module
83
- }]);
84
- });
85
- it('resolves completions for namespaces with next namespace part for brighterscript file', () => {
86
- program.setFile('source/main.bs', `
87
- namespace NameA.NameB.NameC
88
- sub DoSomething()
89
- end sub
90
- end namespace
91
- sub main()
92
- NameA.
93
- end sub
94
- `);
95
- program.validate();
96
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(6, 26)).map(x => x.label);
97
- (0, chai_config_spec_1.expect)(completions).to.include('NameB');
98
- (0, chai_config_spec_1.expect)(completions).not.to.include('NameA');
99
- (0, chai_config_spec_1.expect)(completions).not.to.include('NameA.NameB');
100
- (0, chai_config_spec_1.expect)(completions).not.to.include('NameA.NameB.NameC');
101
- (0, chai_config_spec_1.expect)(completions).not.to.include('NameA.NameB.NameC.DoSomething');
102
- });
103
- it('finds namespace members for brighterscript file', () => {
104
- program.setFile('source/main.bs', `
105
- sub main()
106
- NameA.
107
- NameA.NameB.
108
- NameA.NameB.NameC.
109
- end sub
110
- namespace NameA
111
- sub alertA()
112
- end sub
113
- end namespace
114
- namespace NameA
115
- sub info()
116
- end sub
117
- end namespace
118
- namespace NameA.NameB
119
- sub alertB()
120
- end sub
121
- end namespace
122
- namespace NameA.NameB.NameC
123
- sub alertC()
124
- end sub
125
- end namespace
126
- `);
127
- program.validate();
128
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 26)).map(x => x.label).sort()).to.eql(['NameB', 'alertA', 'info']);
129
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(3, 32)).map(x => x.label).sort()).to.eql(['NameC', 'alertB']);
130
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(4, 38)).map(x => x.label).sort()).to.eql(['alertC']);
131
- });
132
- it('finds namespace members for classes', () => {
133
- program.setFile('source/main.bs', `
134
- sub main()
135
- NameA.
136
- NameA.NameB.
137
- NameA.NameB.NameC.
138
- end sub
139
- namespace NameA
140
- sub alertA()
141
- end sub
142
- end namespace
143
- namespace NameA
144
- sub info()
145
- end sub
146
- class MyClassA
147
- end class
148
- end namespace
149
- namespace NameA.NameB
150
- sub alertB()
151
- end sub
152
- class MyClassB
153
- end class
154
- end namespace
155
- namespace NameA.NameB.NameC
156
- sub alertC()
157
- end sub
158
- end namespace
159
- `);
160
- program.validate();
161
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 26)).map(x => x.label).sort()).to.eql(['MyClassA', 'NameB', 'alertA', 'info']);
162
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(3, 32)).map(x => x.label).sort()).to.eql(['MyClassB', 'NameC', 'alertB']);
163
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(4, 38)).map(x => x.label).sort()).to.eql(['alertC']);
164
- });
165
- it('finds only namespaces that have classes, when new keyword is used', () => {
166
- program.setFile('source/main.bs', `
167
- sub main()
168
- a = new NameA.
169
- b = new NameA.NameB.
170
- c = new NameA.NameB.NameC.
171
- end sub
172
- namespace NameA
173
- sub alertA()
174
- end sub
175
- end namespace
176
- namespace NameA
177
- sub info()
178
- end sub
179
- class MyClassA
180
- end class
181
- end namespace
182
- namespace NameA.NoClassA
183
- end namespace
184
- namespace NameA.NoClassB
185
- end namespace
186
- namespace NameA.NameB
187
- sub alertB()
188
- end sub
189
- class MyClassB
190
- end class
191
- end namespace
192
- namespace NameA.NameB.NoClass
193
- end namespace
194
- namespace NameA.NameB.NameC
195
- sub alertC()
196
- end sub
197
- end namespace
198
- `);
199
- program.validate();
200
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 34)).map(x => x.label).sort()).to.eql(['MyClassA', 'NameB']);
201
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(3, 40)).map(x => x.label).sort()).to.eql(['MyClassB']);
202
- (0, chai_config_spec_1.expect)(program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(4, 46)).map(x => x.label).sort()).to.be.empty;
203
- });
204
- //Bron.. pain to get this working.. do we realy need this? seems moot with ropm..
205
- it.skip('should include translated namespace function names for brightscript files', () => {
206
- program.setFile('source/main.bs', `
207
- namespace NameA.NameB.NameC
208
- sub DoSomething()
209
- end sub
210
- end namespace
211
- `);
212
- program.setFile('source/lib.brs', `
213
- sub test()
214
-
215
- end sub
216
- `);
217
- program.validate();
218
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/lib.brs`, vscode_languageserver_1.Position.create(2, 23));
219
- (0, chai_config_spec_1.expect)(completions.map(x => x.label)).to.include('NameA_NameB_NameC_DoSomething');
220
- });
221
- it('includes global completions for file with no scope', () => {
222
- program.setFile('source/main.brs', `
223
- function Main()
224
- age = 1
225
- end function
226
- `);
227
- program.validate();
228
- let completions = program.getCompletions('source/main.brs', vscode_languageserver_1.Position.create(2, 21));
229
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label.toLowerCase() === 'abs')).to.be.lengthOf(1);
230
- });
231
- it('filters out text results for top-level function statements', () => {
232
- program.setFile('source/main.brs', `
233
- function Main()
234
- age = 1
235
- end function
236
- `);
237
- program.validate();
238
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 21));
239
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label === 'Main')).to.be.lengthOf(1);
240
- });
241
- it('does not filter text results for object properties used in conditional statements', () => {
242
- program.setFile('source/main.brs', `
243
- sub Main()
244
- p.
245
- end sub
246
- sub SayHello()
247
- person = {}
248
- if person.isAlive then
249
- print "Hello"
250
- end if
251
- end sub
252
- `);
253
- program.validate();
254
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 22));
255
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label === 'isAlive')).to.be.lengthOf(1);
256
- });
257
- it('does not filter text results for object properties used in assignments', () => {
258
- program.setFile('source/main.brs', `
259
- sub Main()
260
- p.
261
- end sub
262
- sub SayHello()
263
- person = {}
264
- localVar = person.name
265
- end sub
266
- `);
267
- program.validate();
268
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 22));
269
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label === 'name')).to.be.lengthOf(1);
270
- });
271
- it('does not filter text results for object properties', () => {
272
- program.setFile('source/main.brs', `
273
- sub Main()
274
- p.
275
- end sub
276
- sub SayHello()
277
- person = {}
278
- person.name = "bob"
279
- end sub
280
- `);
281
- program.validate();
282
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 22));
283
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label === 'name')).to.be.lengthOf(1);
284
- });
285
- it('filters out text results for local vars used in conditional statements', () => {
286
- program.setFile('source/main.brs', `
287
- sub Main()
288
-
289
- end sub
290
- sub SayHello()
291
- isTrue = true
292
- if isTrue then
293
- print "is true"
294
- end if
295
- end sub
296
- `);
297
- program.validate();
298
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 10));
299
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label === 'isTrue')).to.be.lengthOf(0);
300
- });
301
- it('filters out text results for local variable assignments', () => {
302
- program.setFile('source/main.brs', `
303
- sub Main()
304
-
305
- end sub
306
- sub SayHello()
307
- message = "Hello"
308
- end sub
309
- `);
310
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 10));
311
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label === 'message')).to.be.lengthOf(0);
312
- });
313
- it('filters out text results for local variables used in assignments', () => {
314
- program.setFile('source/main.brs', `
315
- sub Main()
316
-
317
- end sub
318
- sub SayHello()
319
- message = "Hello"
320
- otherVar = message
321
- end sub
322
- `);
323
- program.validate();
324
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 10));
325
- (0, chai_config_spec_1.expect)(completions.filter(x => x.label === 'message')).to.be.lengthOf(0);
326
- });
327
- it('does not suggest local variables when initiated to the right of a period', () => {
328
- program.setFile('source/main.brs', `
329
- function Main()
330
- helloMessage = "jack"
331
- person.hello
332
- end function
333
- `);
334
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 32));
335
- (0, chai_config_spec_1.expect)(completions.filter(x => x.kind === vscode_languageserver_1.CompletionItemKind.Variable).map(x => x.label)).not.to.contain('helloMessage');
336
- });
337
- it('finds all file paths when initiated on xml uri', () => {
338
- let xmlPath = (0, util_1.standardizePath) `${testHelpers_spec_1.rootDir}/components/component1.xml`;
339
- program.setFile('components/component1.xml', (0, testHelpers_spec_1.trim) `
340
- <?xml version="1.0" encoding="utf-8" ?>
341
- <component name="HeroScene" extends="Scene">
342
- <script type="text/brightscript" uri="" />
343
- </component>
344
- `);
345
- program.setFile('components/component1.brs', '');
346
- program.validate();
347
- let completions = program.getCompletions(xmlPath, vscode_languageserver_1.Position.create(2, 42));
348
- (0, chai_config_spec_1.expect)(completions[0]).to.include({
349
- kind: vscode_languageserver_1.CompletionItemKind.File,
350
- label: 'component1.brs'
351
- });
352
- (0, chai_config_spec_1.expect)(completions[1]).to.include({
353
- kind: vscode_languageserver_1.CompletionItemKind.File,
354
- label: 'pkg:/components/component1.brs'
355
- });
356
- //it should NOT include the global methods
357
- (0, chai_config_spec_1.expect)(completions).to.be.lengthOf(2);
358
- });
359
- it('get all functions and properties in scope when doing any dotted get on non m ', () => {
360
- program.setFile('source/main.bs', `
361
- sub main()
362
- thing.anonPropA = "foo"
363
- thing.anonPropB = "bar"
364
- thing.person
365
- end sub
366
- class MyClassA
367
- personName = "rafa"
368
- personAName = "rafaA"
369
- function personAMethodA()
370
- end function
371
- function personAMethodB()
372
- end function
373
- end class
374
- namespace NameA
375
- sub alertA()
376
- end sub
377
- end namespace
378
- namespace NameA.NameB
379
- sub alertB()
380
- end sub
381
- class MyClassB
382
- personName = "roger"
383
- personBName = "rogerB"
384
- function personAMethodC()
385
- end function
386
- function personBMethodA()
387
- end function
388
- function personBMethodB()
389
- end function
390
- end class
391
- end namespace
392
- namespace NameA.NameB.NameC
393
- sub alertC()
394
- end sub
395
- end namespace
396
- `);
397
- program.validate();
398
- //note - we let the vscode extension do the filtering, so we still return everything; otherwise it exhibits strange behaviour in the IDE
399
- (0, chai_config_spec_1.expect)((program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(4, 32))).map(x => x.label).sort()).to.eql(['anonPropA', 'anonPropB', 'person', 'personAMethodA', 'personAMethodB', 'personAMethodC', 'personAName', 'personBMethodA', 'personBMethodB', 'personBName', 'personName']);
400
- });
401
- it('get all functions and properties relevant for m ', () => {
402
- program.setFile('source/main.bs', `
403
- class MyClassA
404
- function new()
405
- m.
406
- end function
407
- personName = "rafa"
408
- personAName = "rafaA"
409
- function personAMethodA()
410
- end function
411
- function personAMethodB()
412
- end function
413
- end class
414
- class MyClassB
415
- personName = "roger"
416
- personBName = "rogerB"
417
- function personAMethodC()
418
- end function
419
- function personBMethodA()
420
- end function
421
- function personBMethodB()
422
- end function
423
- end class
424
- class MyClassC extends MyClassA
425
- function new()
426
- m.
427
- end function
428
- personCName = "rogerC"
429
- function personCMethodC()
430
- end function
431
- function personCMethodA()
432
- end function
433
- function personCMethodB()
434
- end function
435
- end class
436
- sub alertC()
437
- end sub
438
- `);
439
- program.validate();
440
- const myClassACompletions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(3, 26));
441
- // remove completions with sortText (they are built in methods), then sort the remaining labels
442
- const myClassACompletionsSorted = myClassACompletions.filter(x => !x.sortText).map(x => x.label).sort();
443
- (0, chai_config_spec_1.expect)(myClassACompletionsSorted).to.eql(['personAMethodA', 'personAMethodB', 'personAName', 'personName']);
444
- const myClassCCompletions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(24, 26));
445
- // remove completions with sortText (they are built in methods), then sort the remaining labels
446
- const myClassCCompletionsSorted = myClassCCompletions.filter(x => !x.sortText).map(x => x.label).sort();
447
- (0, chai_config_spec_1.expect)(myClassCCompletionsSorted).to.eql(['personAMethodA', 'personAMethodB', 'personAName', 'personCMethodA', 'personCMethodB', 'personCMethodC', 'personCName', 'personName']);
448
- });
449
- it.skip('include non-namespaced classes in the list of general output', () => {
450
- program.setFile('source/main.bs', `
451
- function regularFunc()
452
- MyClass
453
- end function
454
- sub alertC()
455
- end sub
456
- class MyClassA
457
- end class
458
- class MyClassB
459
- end class
460
- class MyClassC extends MyClassA
461
- end class
462
- `);
463
- (0, chai_config_spec_1.expect)((program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(3, 26))).map(x => x.label).sort()).to.include.members(['MyClassA', 'MyClassB', 'MyClassC']);
464
- });
465
- it('only include classes when using new keyword', () => {
466
- program.setFile('source/main.bs', `
467
- class MyClassA
468
- end class
469
- class MyClassB
470
- end class
471
- class MyClassC extends MyClassA
472
- end class
473
- function regularFunc()
474
- new MyClass
475
- end function
476
- sub alertC()
477
- end sub
478
- `);
479
- program.validate();
480
- (0, chai_config_spec_1.expect)((program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(8, 29))).map(x => x.label).sort()).to.eql(['MyClassA', 'MyClassB', 'MyClassC']);
481
- });
482
- it('gets completions when using callfunc invocation', () => {
483
- program.setFile('source/main.bs', `
484
- function doStuff(myNode)
485
- myNode@.sayHello(1, 2)
486
- end function
487
- `);
488
- program.setFile('components/MyNode.bs', `
489
- function sayHello(text, text2)
490
- end function
491
- `);
492
- program.setFile('components/MyNode.xml', (0, testHelpers_spec_1.trim) `<?xml version="1.0" encoding="utf-8" ?>
493
- <component name="Component1" extends="Scene">
494
- <script type="text/brightscript" uri="pkg:/components/MyNode.bs" />
495
- <interface>
496
- <function name="sayHello"/>
497
- </interface>
498
- </component>`);
499
- program.validate();
500
- (0, testHelpers_spec_1.expectZeroDiagnostics)(program);
501
- (0, chai_config_spec_1.expect)((program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 30))).map(x => x.label).sort()).to.eql(['sayHello']);
502
- });
503
- it('gets completions for callfunc invocation with multiple nodes', () => {
504
- program.setFile('source/main.bs', `
505
- function main()
506
- myNode@.sayHello(arg1)
507
- end function
508
- `);
509
- program.setFile('components/MyNode.bs', `
510
- function sayHello(text, text2)
511
- end function
512
- function sayHello2(text, text2)
513
- end function
514
- `);
515
- program.setFile('components/MyNode.xml', (0, testHelpers_spec_1.trim) `<?xml version="1.0" encoding="utf-8" ?>
516
- <component name="Component1" extends="Scene">
517
- <script type="text/brightscript" uri="pkg:/components/MyNode.bs" />
518
- <interface>
519
- <function name="sayHello"/>
520
- <function name="sayHello2"/>
521
- </interface>
522
- </component>`);
523
- program.setFile('components/MyNode2.bs', `
524
- function sayHello3(text, text2)
525
- end function
526
- function sayHello4(text, text2)
527
- end function
528
- `);
529
- program.setFile('components/MyNode2.xml', (0, testHelpers_spec_1.trim) `<?xml version="1.0" encoding="utf-8" ?>
530
- <component name="Component2" extends="Scene">
531
- <script type="text/brightscript" uri="pkg:/components/MyNode2.bs" />
532
- <interface>
533
- <function name="sayHello3"/>
534
- <function name="sayHello4"/>
535
- </interface>
536
- </component>`);
537
- program.validate();
538
- (0, chai_config_spec_1.expect)((program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 30))).map(x => x.label).sort()).to.eql(['sayHello', 'sayHello2', 'sayHello3', 'sayHello4']);
539
- });
540
- it('gets completions for callfunc invocation with multiple nodes and validates single code completion results', () => {
541
- program.setFile('source/main.bs', `
542
- function main()
543
- ParentNode@.sayHello(arg1)
544
- end function
545
- `);
546
- program.setFile('components/ParentNode.bs', `
547
- function sayHello(text, text2)
548
- end function
549
- `);
550
- program.setFile('components/ParentNode.xml', (0, testHelpers_spec_1.trim) `<?xml version="1.0" encoding="utf-8" ?>
551
- <component name="ParentNode" extends="Scene">
552
- <script type="text/brightscript" uri="pkg:/components/ParentNode.bs" />
553
- <interface>
554
- <function name="sayHello"/>
555
- </interface>
556
- </component>`);
557
- program.setFile('components/ChildNode.bs', `
558
- function sayHello(text, text2)
559
- end function
560
- `);
561
- program.setFile('components/ChildNode.xml', (0, testHelpers_spec_1.trim) `<?xml version="1.0" encoding="utf-8" ?>
562
- <component name="ChildNode" extends="ParentNode">
563
- <script type="text/brightscript" uri="pkg:/components/ChildNode.bs" />
564
- </component>`);
565
- program.validate();
566
- (0, chai_config_spec_1.expect)((program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 31))).map(x => x.label).sort()).to.eql(['sayHello']);
567
- });
568
- it('gets completions for extended nodes with callfunc invocation - ensure overridden methods included', () => {
569
- program.setFile('source/main.bs', `
570
- function main()
571
- myNode@.sayHello(arg1)
572
- end function
573
- `);
574
- program.setFile('components/MyNode.bs', `
575
- function sayHello(text, text2)
576
- end function
577
- function sayHello2(text, text2)
578
- end function
579
- `);
580
- program.setFile('components/MyNode.xml', (0, testHelpers_spec_1.trim) `<?xml version="1.0" encoding="utf-8" ?>
581
- <component name="Component1" extends="Scene">
582
- <script type="text/brightscript" uri="pkg:/components/MyNode.bs" />
583
- <interface>
584
- <function name="sayHello"/>
585
- <function name="sayHello2"/>
586
- </interface>
587
- </component>`);
588
- program.setFile('components/MyNode2.bs', `
589
- function sayHello3(text, text2)
590
- end function
591
- function sayHello2(text, text2)
592
- end function
593
- function sayHello4(text, text2)
594
- end function
595
- `);
596
- program.setFile('components/MyNode2.xml', (0, testHelpers_spec_1.trim) `<?xml version="1.0" encoding="utf-8" ?>
597
- <component name="Component2" extends="Component1">
598
- <script type="text/brightscript" uri="pkg:/components/MyNode2.bs" />
599
- <interface>
600
- <function name="sayHello3"/>
601
- <function name="sayHello4"/>
602
- </interface>
603
- </component>`);
604
- program.validate();
605
- (0, chai_config_spec_1.expect)((program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 30))).map(x => x.label).sort()).to.eql(['sayHello', 'sayHello2', 'sayHello3', 'sayHello4']);
606
- });
607
- describe('getCompletions', () => {
608
- it('returns all functions in scope', () => {
609
- program.setFile('source/main.brs', `
610
- sub Main()
611
-
612
- end sub
613
-
614
- sub ActionA()
615
- end sub
616
- `);
617
- program.setFile('source/lib.brs', `
618
- sub ActionB()
619
- end sub
620
- `);
621
- program.validate();
622
- let completions = program
623
- //get completions
624
- .getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, util_1.default.createPosition(2, 10))
625
- //only keep the label property for this test
626
- .map(x => pick(x, 'label'));
627
- (0, chai_config_spec_1.expect)(completions).to.deep.include({ label: 'Main' });
628
- (0, chai_config_spec_1.expect)(completions).to.deep.include({ label: 'ActionA' });
629
- (0, chai_config_spec_1.expect)(completions).to.deep.include({ label: 'ActionB' });
630
- });
631
- it('returns all variables in scope', () => {
632
- program.setFile('source/main.brs', `
633
- sub Main()
634
- name = "bob"
635
- age = 20
636
- shoeSize = 12.5
637
- end sub
638
- sub ActionA()
639
- end sub
640
- `);
641
- program.setFile('source/lib.brs', `
642
- sub ActionB()
643
- end sub
644
- `);
645
- program.validate();
646
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, util_1.default.createPosition(2, 24));
647
- let labels = completions.map(x => pick(x, 'label'));
648
- (0, chai_config_spec_1.expect)(labels).to.deep.include({ label: 'Main' });
649
- (0, chai_config_spec_1.expect)(labels).to.deep.include({ label: 'ActionA' });
650
- (0, chai_config_spec_1.expect)(labels).to.deep.include({ label: 'ActionB' });
651
- (0, chai_config_spec_1.expect)(labels).to.deep.include({ label: 'name' });
652
- (0, chai_config_spec_1.expect)(labels).to.deep.include({ label: 'age' });
653
- (0, chai_config_spec_1.expect)(labels).to.deep.include({ label: 'shoeSize' });
654
- });
655
- it('returns empty set when out of range', () => {
656
- const position = util_1.default.createPosition(99, 99);
657
- const mainFile = program.setFile('source/main.brs', '');
658
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, position);
659
- const completionProcessor = new CompletionsProcessor_1.CompletionsProcessor({
660
- program: program,
661
- file: mainFile,
662
- position: position,
663
- scopes: [],
664
- completions: []
665
- });
666
- program.validate();
667
- //get the name of all global completions
668
- const globalCompletions = program.globalScope.getAllFiles().flatMap(x => completionProcessor.getBrsFileCompletions(position, x)).map(x => x.label);
669
- //filter out completions from global scope
670
- completions = completions.filter(x => !globalCompletions.includes(x.label));
671
- (0, chai_config_spec_1.expect)(completions).to.be.empty;
672
- });
673
- it('finds parameters', () => {
674
- program.setFile('source/main.brs', `
675
- sub Main(count = 1)
676
- firstName = "bob"
677
- age = 21
678
- shoeSize = 10
679
- end sub
680
- `);
681
- program.validate();
682
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 10));
683
- let labels = completions.map(x => pick(x, 'label'));
684
- (0, chai_config_spec_1.expect)(labels).to.deep.include({ label: 'count' });
685
- });
686
- });
687
- });
688
- describe('getCompletions - BrsFile.spec', () => {
689
- it('does not crash for callfunc on a function call', () => {
690
- const file = program.setFile('source/main.brs', `
691
- sub main()
692
- getManager()@.
693
- end sub
694
- `);
695
- program.validate();
696
- (0, chai_config_spec_1.expect)(() => {
697
- program.getCompletions(file.srcPath, util_1.default.createPosition(2, 34));
698
- }).not.to.throw;
699
- });
700
- it('suggests pkg paths in strings that match that criteria', () => {
701
- program.setFile('source/main.brs', `
702
- sub main()
703
- print "pkg:"
704
- end sub
705
- `);
706
- program.validate();
707
- const result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
708
- const names = result.map(x => x.label);
709
- (0, chai_config_spec_1.expect)(names.sort()).to.eql([
710
- 'pkg:/source/main.brs'
711
- ]);
712
- });
713
- it('suggests libpkg paths in strings that match that criteria', () => {
714
- program.setFile('source/main.brs', `
715
- sub main()
716
- print "libpkg:"
717
- end sub
718
- `);
719
- program.validate();
720
- const result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
721
- const names = result.map(x => x.label);
722
- (0, chai_config_spec_1.expect)(names.sort()).to.eql([
723
- 'libpkg:/source/main.brs'
724
- ]);
725
- });
726
- it('suggests pkg paths in template strings', () => {
727
- program.setFile('source/main.brs', `
728
- sub main()
729
- print \`pkg:\`
730
- end sub
731
- `);
732
- program.validate();
733
- const result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
734
- const names = result.map(x => x.label);
735
- (0, chai_config_spec_1.expect)(names.sort()).to.eql([
736
- 'pkg:/source/main.brs'
737
- ]);
738
- });
739
- it('waits for the file to be processed before collecting completions', () => {
740
- //eslint-disable-next-line @typescript-eslint/no-floating-promises
741
- program.setFile('source/main.brs', `
742
- sub Main()
743
- print "hello"
744
- Say
745
- end sub
746
-
747
- sub SayHello()
748
- end sub
749
- `);
750
- program.validate();
751
- let result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 23));
752
- let names = result.map(x => x.label);
753
- (0, chai_config_spec_1.expect)(names).to.includes('Main');
754
- (0, chai_config_spec_1.expect)(names).to.includes('SayHello');
755
- });
756
- it('includes every type of item at base level', () => {
757
- program.setFile('source/main.bs', `
758
- sub main()
759
- print
760
- end sub
761
- sub speak()
762
- end sub
763
- namespace stuff
764
- end namespace
765
- class Person
766
- end class
767
- enum Direction
768
- end enum
769
- `);
770
- program.validate();
771
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 26)), [{
772
- label: 'main',
773
- kind: vscode_languageserver_1.CompletionItemKind.Function
774
- }, {
775
- label: 'speak',
776
- kind: vscode_languageserver_1.CompletionItemKind.Function
777
- }, {
778
- label: 'stuff',
779
- kind: vscode_languageserver_1.CompletionItemKind.Module
780
- }, {
781
- label: 'Person',
782
- kind: vscode_languageserver_1.CompletionItemKind.Class
783
- }, {
784
- label: 'Direction',
785
- kind: vscode_languageserver_1.CompletionItemKind.Enum
786
- }]);
787
- });
788
- describe('namespaces', () => {
789
- it('gets full namespace completions at any point through the leading identifier', () => {
790
- program.setFile('source/main.bs', `
791
- sub main()
792
- foo.bar
793
- end sub
794
-
795
- namespace foo.bar
796
- end namespace
797
-
798
- class Person
799
- end class
800
- `);
801
- program.validate();
802
- const result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 24)).map(x => x.label);
803
- (0, chai_config_spec_1.expect)(result).includes('main');
804
- (0, chai_config_spec_1.expect)(result).includes('foo');
805
- (0, chai_config_spec_1.expect)(result).includes('Person');
806
- });
807
- it('gets namespace completions', () => {
808
- program.setFile('source/main.bs', `
809
- namespace foo.bar
810
- function sayHello()
811
- end function
812
- end namespace
813
-
814
- sub Main()
815
- print "hello"
816
- foo.ba
817
- foo.bar.
818
- end sub
819
- `);
820
- program.validate();
821
- let result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(8, 30));
822
- let names = result.map(x => x.label);
823
- (0, chai_config_spec_1.expect)(names).to.includes('bar');
824
- result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(9, 32));
825
- names = result.map(x => x.label);
826
- (0, chai_config_spec_1.expect)(names).to.includes('sayHello');
827
- });
828
- });
829
- it('always includes `m`', () => {
830
- program.setFile('source/main.brs', `
831
- sub Main()
832
-
833
- end sub
834
- `);
835
- program.validate();
836
- let result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
837
- let names = result.map(x => x.label);
838
- (0, chai_config_spec_1.expect)(names).to.contain('m');
839
- });
840
- it('does not fail for missing previousToken', () => {
841
- //add a single character to the file, and get completions after it
842
- program.setFile('source/main.brs', `i`);
843
- program.validate();
844
- (0, chai_config_spec_1.expect)(() => {
845
- program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(0, 1)).map(x => x.label);
846
- }).not.to.throw;
847
- });
848
- it.skip('includes all keywords`', () => {
849
- program.setFile('source/main.brs', `
850
- sub Main()
851
-
852
- end sub
853
- `);
854
- program.validate();
855
- let keywords = Object.keys(TokenKind_1.Keywords).filter(x => !x.includes(' '));
856
- //inside the function
857
- let result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
858
- let names = result.map(x => x.label);
859
- for (let keyword of keywords) {
860
- (0, chai_config_spec_1.expect)(names).to.include(keyword);
861
- }
862
- //outside the function
863
- result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(4, 8));
864
- names = result.map(x => x.label);
865
- for (let keyword of keywords) {
866
- (0, chai_config_spec_1.expect)(names).to.include(keyword);
867
- }
868
- });
869
- it('does not provide completions within a comment', () => {
870
- program.setFile('source/main.brs', `
871
- sub Main()
872
- 'some comment
873
- end sub
874
- `);
875
- program.validate();
876
- //inside the function
877
- let result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 33));
878
- (0, chai_config_spec_1.expect)(result).to.be.lengthOf(0);
879
- });
880
- it('does not provide duplicate entries for variables', () => {
881
- program.setFile('source/main.brs', `
882
- sub Main()
883
- name = "bob"
884
- age = 12
885
- name = "john"
886
- end sub
887
- `);
888
- program.validate();
889
- let result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 23));
890
- let count = result.reduce((total, x) => {
891
- return x.label === 'name' ? total + 1 : total;
892
- }, 0);
893
- (0, chai_config_spec_1.expect)(count).to.equal(1);
894
- });
895
- it('does not include `as` and `string` text options when used in function params', () => {
896
- program.setFile('source/main.brs', `
897
- sub Main(name as string)
898
-
899
- end sub
900
- `);
901
- program.validate();
902
- let result = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
903
- (0, chai_config_spec_1.expect)(result.filter(x => x.kind === vscode_languageserver_1.CompletionItemKind.Text)).not.to.contain('as');
904
- (0, chai_config_spec_1.expect)(result.filter(x => x.kind === vscode_languageserver_1.CompletionItemKind.Text)).not.to.contain('string');
905
- });
906
- it('does not provide intellisense results when inside a comment', () => {
907
- program.setFile('source/main.brs', `
908
- sub Main(name as string)
909
- 'this is a comment
910
- end sub
911
- `);
912
- program.validate();
913
- let results = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 30));
914
- (0, chai_config_spec_1.expect)(results).to.be.empty;
915
- });
916
- it('does provide intellisence for labels only after a goto keyword', () => {
917
- var _a;
918
- program.setFile('source/main.brs', `
919
- sub Main(name as string)
920
- something:
921
- goto \nend sub
922
- `);
923
- program.validate();
924
- let results = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 25));
925
- (0, chai_config_spec_1.expect)(results.length).to.equal(1);
926
- (0, chai_config_spec_1.expect)((_a = results[0]) === null || _a === void 0 ? void 0 : _a.label).to.equal('something');
927
- });
928
- });
929
- describe('getCompletions - XmlFile.spec', () => {
930
- it('formats completion paths with proper slashes', () => {
931
- let scriptPath = (0, util_1.standardizePath) `C:/app/components/component1/component1.brs`;
932
- program.files[scriptPath] = new BrsFile_1.BrsFile({ srcPath: scriptPath, destPath: (0, util_1.standardizePath) `components/component1/component1.brs`, program: program });
933
- let xmlFile = new XmlFile_1.XmlFile({
934
- srcPath: (0, util_1.standardizePath) `${testHelpers_spec_1.rootDir}/components/component1/component1.xml`,
935
- destPath: (0, util_1.standardizePath) `components/component1/component1.xml`,
936
- program: program
937
- });
938
- xmlFile.parser.references.scriptTagImports.push({
939
- destPath: (0, util_1.standardizePath) `components/component1/component1.brs`,
940
- text: 'component1.brs',
941
- filePathRange: vscode_languageserver_1.Range.create(1, 1, 1, 1)
942
- });
943
- const processesor = new CompletionsProcessor_1.CompletionsProcessor(null);
944
- const completions = processesor.getXmlFileCompletions(vscode_languageserver_1.Position.create(1, 1), xmlFile);
945
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
946
- label: 'component1.brs',
947
- kind: vscode_languageserver_1.CompletionItemKind.File
948
- }, {
949
- label: 'pkg:/components/component1/component1.brs',
950
- kind: vscode_languageserver_1.CompletionItemKind.File
951
- }]);
952
- });
953
- //TODO - refine this test once cdata scripts are supported
954
- it('prevents scope completions entirely', () => {
955
- program.setFile('components/component1.brs', ``);
956
- let xmlFile = program.setFile('components/component1.xml', (0, testHelpers_spec_1.trim) `
957
- <?xml version="1.0" encoding="utf-8" ?>
958
- <component name="ParentScene" extends="GrandparentScene">
959
- <script type="text/brightscript" uri="./Component1.brs" />
960
- </component>
961
- `);
962
- program.validate();
963
- (0, chai_config_spec_1.expect)(program.getCompletions(xmlFile.srcPath, vscode_languageserver_1.Position.create(1, 1))).to.be.empty;
964
- });
965
- });
966
- describe('documentation', () => {
967
- it('returns documentation when possible', () => {
968
- program.setFile('source/main.brs', `
969
- sub Main()
970
- print "hello"
971
- Say
972
- end sub
973
-
974
- ' Says hello to the world
975
- sub SayHello()
976
- end sub
977
- `);
978
- program.validate();
979
- // Say|
980
- let completions = program.getCompletions(`${testHelpers_spec_1.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 22));
981
- //it should find the completions for the global scope
982
- (0, chai_config_spec_1.expect)(completions).to.be.length.greaterThan(0);
983
- //it should find documentation for completions
984
- (0, chai_config_spec_1.expect)(completions.filter(x => !!x.documentation)).to.have.length.greaterThan(0);
985
- });
986
- });
987
- describe('getPartialVariableName', () => {
988
- let entry = {
989
- src: `${testHelpers_spec_1.rootDir}/source/lib.brs`,
990
- dest: `source/lib.brs`
991
- };
992
- it('creates proper tokens', () => {
993
- const file = program.setFile(entry, `call(ModuleA.ModuleB.ModuleC.`);
994
- (0, chai_config_spec_1.expect)(file['getPartialVariableName'](file.parser.tokens[7])).to.equal('ModuleA.ModuleB.ModuleC.');
995
- (0, chai_config_spec_1.expect)(file['getPartialVariableName'](file.parser.tokens[6])).to.equal('ModuleA.ModuleB.ModuleC');
996
- (0, chai_config_spec_1.expect)(file['getPartialVariableName'](file.parser.tokens[5])).to.equal('ModuleA.ModuleB.');
997
- (0, chai_config_spec_1.expect)(file['getPartialVariableName'](file.parser.tokens[4])).to.equal('ModuleA.ModuleB');
998
- (0, chai_config_spec_1.expect)(file['getPartialVariableName'](file.parser.tokens[3])).to.equal('ModuleA.');
999
- (0, chai_config_spec_1.expect)(file['getPartialVariableName'](file.parser.tokens[2])).to.equal('ModuleA');
1000
- });
1001
- });
1002
- describe('import completions', () => {
1003
- it('should show import completions for a single scope', () => {
1004
- program.setFile('source/common.bs', `
1005
- import "
1006
- `);
1007
- program.setFile('source/common2.bs', `
1008
- sub SayHello()
1009
- end sub
1010
- `);
1011
- program.setFile('components/widget.xml', (0, testHelpers_spec_1.trim) `
1012
- <?xml version="1.0" encoding="utf-8" ?>
1013
- <component name="Widget" extends="Group">
1014
- <script uri="widget.bs"/>
1015
- </component>
1016
- `);
1017
- program.setFile('components/widget.bs', `
1018
- import "pkg:/source/common.bs"
1019
- `);
1020
- program.validate();
1021
- // import "|
1022
- const completions = program.getCompletions('source/common.bs', util_1.default.createPosition(1, 25));
1023
- (0, chai_config_spec_1.expect)(completions).to.exist;
1024
- (0, chai_config_spec_1.expect)(completions.map(comp => comp.label)).to.include('common2.bs');
1025
- (0, chai_config_spec_1.expect)(completions.map(comp => comp.label)).to.include('../components/widget.bs');
1026
- });
1027
- });
1028
- describe('const completions', () => {
1029
- it('shows up in standard completions', () => {
1030
- program.setFile('source/main.bs', `
1031
- const API_KEY = "123"
1032
- sub log(message)
1033
- log()
1034
- end sub
1035
- `);
1036
- program.validate();
1037
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(3, 24));
1038
- (0, testHelpers_spec_1.expectCompletionsIncludes)(
1039
- // log(|)
1040
- completions, [{
1041
- label: 'API_KEY',
1042
- kind: vscode_languageserver_1.CompletionItemKind.Constant
1043
- }]);
1044
- });
1045
- it('shows up in namespace completions', () => {
1046
- program.setFile('source/main.bs', `
1047
- namespace constants
1048
- const API_KEY = "123"
1049
- end namespace
1050
- sub log(message)
1051
- log(constants.)
1052
- end sub
1053
- `);
1054
- program.validate();
1055
- (0, testHelpers_spec_1.expectCompletionsIncludes)(
1056
- // log(|)
1057
- program.getCompletions('source/main.bs', util_1.default.createPosition(5, 34)), [{
1058
- label: 'API_KEY',
1059
- kind: vscode_languageserver_1.CompletionItemKind.Constant
1060
- }]);
1061
- });
1062
- });
1063
- describe('enum completions', () => {
1064
- it('does not crash when completing enum members with unsupported values', () => {
1065
- program.setFile('source/main.bs', `
1066
- sub Main()
1067
- direction.obj
1068
- end sub
1069
- enum Direction
1070
- up
1071
- down
1072
- obj = {}
1073
- end enum
1074
- `);
1075
- program.validate();
1076
- // direction.|obj
1077
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 30)), [{
1078
- label: 'up',
1079
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1080
- }, {
1081
- label: 'down',
1082
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1083
- }, {
1084
- label: 'obj',
1085
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1086
- }]);
1087
- });
1088
- it('gets enum statement completions from global enum', () => {
1089
- program.setFile('source/main.bs', `
1090
- sub Main()
1091
- direction.down
1092
- end sub
1093
- enum Direction
1094
- up
1095
- down
1096
- end enum
1097
- `);
1098
- program.validate();
1099
- // |direction.down
1100
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 20)), [{
1101
- label: 'Direction',
1102
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1103
- }]);
1104
- // dire|ction.down
1105
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 24)), [{
1106
- label: 'Direction',
1107
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1108
- }]);
1109
- // direction|.down
1110
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 29)), [{
1111
- label: 'Direction',
1112
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1113
- }]);
1114
- });
1115
- it('gets enum member completions from global enum', () => {
1116
- program.setFile('source/main.bs', `
1117
- sub Main()
1118
- direction.down
1119
- end sub
1120
- enum Direction
1121
- up
1122
- down
1123
- end enum
1124
- `);
1125
- program.validate();
1126
- // direction.|down
1127
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 30)), [{
1128
- label: 'up',
1129
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1130
- }, {
1131
- label: 'down',
1132
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1133
- }]);
1134
- // direction.do|wn
1135
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 32)), [{
1136
- label: 'up',
1137
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1138
- }, {
1139
- label: 'down',
1140
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1141
- }]);
1142
- // direction.down|
1143
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 34)), [{
1144
- label: 'up',
1145
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1146
- }, {
1147
- label: 'down',
1148
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1149
- }]);
1150
- });
1151
- it('gets enum statement completions from namespaced enum', () => {
1152
- program.setFile('source/main.bs', `
1153
- sub Main()
1154
- enums.direction.down
1155
- end sub
1156
- namespace enums
1157
- enum Direction
1158
- up
1159
- down
1160
- end enum
1161
- end namespace
1162
- `);
1163
- program.validate();
1164
- // enums.|direction.down
1165
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 26)), [{
1166
- label: 'Direction',
1167
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1168
- }]);
1169
- // enums.dire|ction.down
1170
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 30)), [{
1171
- label: 'Direction',
1172
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1173
- }]);
1174
- // enums.direction|.down
1175
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 35)), [{
1176
- label: 'Direction',
1177
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1178
- }]);
1179
- });
1180
- it('gets enum member completions from namespaced enum', () => {
1181
- program.setFile('source/main.bs', `
1182
- sub Main()
1183
- enums.direction.down
1184
- end sub
1185
- namespace enums
1186
- enum Direction
1187
- up
1188
- down
1189
- end enum
1190
- end namespace
1191
- `);
1192
- program.validate();
1193
- // enums.direction.|down
1194
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 36)), [{
1195
- label: 'up',
1196
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1197
- }, {
1198
- label: 'down',
1199
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1200
- }]);
1201
- // enums.direction.do|wn
1202
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 38)), [{
1203
- label: 'up',
1204
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1205
- }, {
1206
- label: 'down',
1207
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1208
- }]);
1209
- // enums.direction.down|
1210
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 40)), [{
1211
- label: 'up',
1212
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1213
- }, {
1214
- label: 'down',
1215
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1216
- }]);
1217
- });
1218
- it('excludes enum member completions from namespace enum', () => {
1219
- program.setFile('source/main.bs', `
1220
- sub Main()
1221
- direction.ba
1222
- end sub
1223
- namespace enums
1224
- enum Direction
1225
- up
1226
- down
1227
- end enum
1228
- end namespace
1229
- `);
1230
- program.validate();
1231
- //should NOT find Direction because it's not directly available at the top level (you need to go through `enums.` to get at it)
1232
- // dire|ction.down
1233
- (0, testHelpers_spec_1.expectCompletionsExcludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 24)), [{
1234
- label: 'Direction',
1235
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1236
- }]);
1237
- });
1238
- it('infers namespace for enum statement completions', () => {
1239
- program.setFile('source/main.bs', `
1240
- namespace enums
1241
- sub Main()
1242
- direction.down
1243
- end sub
1244
- enum Direction
1245
- up
1246
- down
1247
- end enum
1248
- end namespace
1249
- enum Logic
1250
- yes
1251
- no
1252
- end enum
1253
- `);
1254
- program.validate();
1255
- // dire|ction.down
1256
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(3, 33));
1257
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1258
- label: 'Direction',
1259
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1260
- }, {
1261
- label: 'Logic',
1262
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1263
- }]);
1264
- });
1265
- it('infers multilevel deep namespace for enum statement completions', () => {
1266
- program.setFile('source/main.bs', `
1267
- namespace enums
1268
- namespace deep
1269
- sub Main()
1270
- direction.down
1271
- end sub
1272
- enum Direction
1273
- up
1274
- down
1275
- end enum
1276
- end namespace
1277
- end namespace
1278
- enum Logic
1279
- yes
1280
- no
1281
- end enum
1282
- `);
1283
- program.validate();
1284
- // dire|ction.down
1285
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(3, 33));
1286
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1287
- label: 'Direction',
1288
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1289
- }, {
1290
- label: 'Logic',
1291
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1292
- }]);
1293
- });
1294
- it('infers deep namespace for enum statement completions', () => {
1295
- program.setFile('source/main.bs', `
1296
- namespace enums.deep.deeper
1297
- sub Main()
1298
- direction.down
1299
- end sub
1300
- enum Direction
1301
- up
1302
- down
1303
- end enum
1304
- end namespace
1305
- enum Logic
1306
- yes
1307
- no
1308
- end enum
1309
- `);
1310
- program.validate();
1311
- // dire|ction.down
1312
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(3, 33));
1313
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1314
- label: 'Direction',
1315
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1316
- }, {
1317
- label: 'Logic',
1318
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1319
- }]);
1320
- });
1321
- it('infers namespace for enum member completions', () => {
1322
- program.setFile('source/main.bs', `
1323
- namespace enums
1324
- sub Main()
1325
- direction.down
1326
- end sub
1327
- enum Direction
1328
- up
1329
- down
1330
- end enum
1331
- end namespace
1332
- `);
1333
- program.validate();
1334
- // direction.do|wn
1335
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(3, 36)), [{
1336
- label: 'up',
1337
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1338
- }, {
1339
- label: 'down',
1340
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1341
- }]);
1342
- });
1343
- it('supports explicit namespace for enum statement completions', () => {
1344
- program.setFile('source/main.bs', `
1345
- namespace enums
1346
- sub Main()
1347
- enums.direction.down
1348
- end sub
1349
- enum Direction
1350
- up
1351
- down
1352
- end enum
1353
- end namespace
1354
- `);
1355
- program.validate();
1356
- // enums.dire|ction.down
1357
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(3, 38)), [{
1358
- label: 'Direction',
1359
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1360
- }]);
1361
- });
1362
- it('supports explicit namespace for enum statement completions', () => {
1363
- program.setFile('source/main.bs', `
1364
- namespace logger
1365
- sub log()
1366
- enums.direction.down
1367
- end sub
1368
- end namespace
1369
- namespace enums
1370
- enum Direction
1371
- up
1372
- down
1373
- end enum
1374
- end namespace
1375
- `);
1376
- program.validate();
1377
- // enums.dire|ction.down
1378
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(3, 38)), [{
1379
- label: 'Direction',
1380
- kind: vscode_languageserver_1.CompletionItemKind.Enum
1381
- }]);
1382
- });
1383
- it('gives completions for underlying types on enum members', () => {
1384
- program.setFile('source/main.bs', `
1385
- enum Direction
1386
- up = "up"
1387
- down = "down"
1388
- end enum
1389
-
1390
- sub goAway(dir as Direction)
1391
- print dir.
1392
- end sub
1393
-
1394
- `);
1395
- program.validate();
1396
- // print dir.|
1397
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(7, 31));
1398
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1399
- label: 'Trim',
1400
- kind: vscode_languageserver_1.CompletionItemKind.Method
1401
- }]);
1402
- });
1403
- it('gives completions for underlying types on enum members on future enum declaration', () => {
1404
- program.setFile('source/main.bs', `
1405
- sub goAway(dir as Direction)
1406
- print dir.
1407
- end sub
1408
-
1409
- enum Direction
1410
- up = "up"
1411
- down = "down"
1412
- end enum
1413
- `);
1414
- program.validate();
1415
- // print dir.|
1416
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(2, 31));
1417
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1418
- label: 'Trim',
1419
- kind: vscode_languageserver_1.CompletionItemKind.Method
1420
- }]);
1421
- });
1422
- it('does not give other members on enum member completion', () => {
1423
- program.setFile('source/main.bs', `
1424
- sub goAway(dir as Direction)
1425
- print dir.
1426
- end sub
1427
-
1428
- enum Direction
1429
- up = "up"
1430
- down = "down"
1431
- end enum
1432
- `);
1433
- program.validate();
1434
- // print dir.|
1435
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(2, 31));
1436
- (0, testHelpers_spec_1.expectCompletionsExcludes)(completions, [{
1437
- label: 'down',
1438
- kind: vscode_languageserver_1.CompletionItemKind.EnumMember
1439
- }]);
1440
- });
1441
- });
1442
- describe('built in type members', () => {
1443
- it('finds built in members', () => {
1444
- program.setFile('source/main.bs', `
1445
- sub foo(name as string)
1446
- print name.
1447
- end sub
1448
- `);
1449
- program.validate();
1450
- // print name|.
1451
- (0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 32)), [{
1452
- label: 'Replace',
1453
- kind: vscode_languageserver_1.CompletionItemKind.Method
1454
- }]);
1455
- });
1456
- });
1457
- describe('global callables', () => {
1458
- it('finds built in members', () => {
1459
- program.setFile('source/main.bs', `
1460
- sub foo(name as string)
1461
- print
1462
- end sub
1463
- `);
1464
- program.validate();
1465
- // print |
1466
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(2, 27));
1467
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1468
- label: 'LCase',
1469
- kind: vscode_languageserver_1.CompletionItemKind.Function
1470
- }]);
1471
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1472
- label: 'CreateObject',
1473
- kind: vscode_languageserver_1.CompletionItemKind.Function
1474
- }]);
1475
- });
1476
- });
1477
- describe('callfunc completions', () => {
1478
- it('finds callfunc members', () => {
1479
- program.setFile('components/Widget.xml', (0, testHelpers_spec_1.trim) `
1480
- <?xml version="1.0" encoding="utf-8" ?>
1481
- <component name="Widget" extends="Group">
1482
- <script uri="Widget.brs"/>
1483
- <interface>
1484
- <function name="someFunc" />
1485
- </interface>
1486
- </component>
1487
- `);
1488
- program.setFile('components/Widget.brs', `
1489
- function someFunc(input as string) as float
1490
- return input.toFloat()
1491
- end function
1492
- `);
1493
- program.setFile('source/util.bs', `
1494
- sub callWidgetSomeFunc(widget as roSGNodeWidget)
1495
- print widget@.
1496
- end sub
1497
- `);
1498
- program.validate();
1499
- // print widget@.|
1500
- let completions = program.getCompletions('source/util.bs', util_1.default.createPosition(2, 34));
1501
- (0, chai_config_spec_1.expect)(completions.length).to.eql(1);
1502
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1503
- label: 'someFunc',
1504
- kind: vscode_languageserver_1.CompletionItemKind.Function
1505
- }]);
1506
- });
1507
- it('includes documentation', () => {
1508
- program.setFile('components/Widget.xml', (0, testHelpers_spec_1.trim) `
1509
- <?xml version="1.0" encoding="utf-8" ?>
1510
- <component name="Widget" extends="Group">
1511
- <script uri="Widget.brs"/>
1512
- <interface>
1513
- <function name="someFunc" />
1514
- </interface>
1515
- </component>
1516
- `);
1517
- program.setFile('components/Widget.brs', `
1518
- ' This is documentation
1519
- function someFunc(input as string) as float
1520
- return input.toFloat()
1521
- end function
1522
- `);
1523
- program.setFile('source/util.bs', `
1524
- sub callWidgetSomeFunc(widget as roSGNodeWidget)
1525
- print widget@.
1526
- end sub
1527
- `);
1528
- program.validate();
1529
- // print widget@.|
1530
- let completions = program.getCompletions('source/util.bs', util_1.default.createPosition(2, 34));
1531
- (0, chai_config_spec_1.expect)(completions.length).to.eql(1);
1532
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1533
- label: 'someFunc',
1534
- kind: vscode_languageserver_1.CompletionItemKind.Function,
1535
- documentation: 'This is documentation'
1536
- }]);
1537
- });
1538
- });
1539
- describe('type expressions', () => {
1540
- it('finds built in types', () => {
1541
- program.setFile('source/main.bs', `
1542
- sub foo(thing as )
1543
- print thing
1544
- end sub
1545
- `);
1546
- program.validate();
1547
- // sub foo(thing as | )
1548
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(1, 34));
1549
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1550
- label: 'integer',
1551
- kind: vscode_languageserver_1.CompletionItemKind.Keyword
1552
- }]);
1553
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1554
- label: 'roSGNode',
1555
- kind: vscode_languageserver_1.CompletionItemKind.Interface
1556
- }]);
1557
- });
1558
- it('finds custom types', () => {
1559
- program.setFile('source/main.bs', `
1560
- sub foo(thing as )
1561
- print thing
1562
- end sub
1563
-
1564
- class SomeKlass
1565
- end class
1566
- `);
1567
- program.validate();
1568
- // sub foo(thing as | )
1569
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(1, 34));
1570
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1571
- label: 'SomeKlass',
1572
- kind: vscode_languageserver_1.CompletionItemKind.Class
1573
- }]);
1574
- });
1575
- it('only shows intrinsic/native types in brightscript', () => {
1576
- program.setFile('source/main.brs', `
1577
- sub foo(thing as )
1578
- print thing
1579
- end sub
1580
- `);
1581
- program.validate();
1582
- // sub foo(thing as | )
1583
- const completions = program.getCompletions('source/main.brs', util_1.default.createPosition(1, 34));
1584
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1585
- label: 'integer',
1586
- kind: vscode_languageserver_1.CompletionItemKind.Keyword
1587
- }]);
1588
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1589
- label: 'function',
1590
- kind: vscode_languageserver_1.CompletionItemKind.Keyword
1591
- }]);
1592
- (0, testHelpers_spec_1.expectCompletionsExcludes)(completions, [{
1593
- label: 'roSGNode'
1594
- }]);
1595
- });
1596
- });
1597
- describe('interfaces', () => {
1598
- it('finds members of interfaces', () => {
1599
- program.setFile('source/main.bs', `
1600
- sub foo(thing as SomeInterface )
1601
- print thing.
1602
- end sub
1603
-
1604
-
1605
- interface SomeInterface
1606
- name as string
1607
- data
1608
- function doStuff()
1609
- end interface
1610
- `);
1611
- program.validate();
1612
- // print thing.|
1613
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(2, 33));
1614
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1615
- label: 'name',
1616
- kind: vscode_languageserver_1.CompletionItemKind.Field
1617
- }]);
1618
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1619
- label: 'data',
1620
- kind: vscode_languageserver_1.CompletionItemKind.Field
1621
- }]);
1622
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1623
- label: 'doStuff',
1624
- kind: vscode_languageserver_1.CompletionItemKind.Method
1625
- }]);
1626
- });
1627
- it('finds optional members of interfaces', () => {
1628
- program.setFile('source/main.bs', `
1629
- sub foo(thing as SomeInterface )
1630
- print thing.
1631
- end sub
1632
-
1633
-
1634
- interface SomeInterface
1635
- optional name as string
1636
- optional data
1637
- optional function doStuff()
1638
- end interface
1639
- `);
1640
- program.validate();
1641
- // print thing.|
1642
- const completions = program.getCompletions('source/main.bs', util_1.default.createPosition(2, 33));
1643
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1644
- label: 'name',
1645
- kind: vscode_languageserver_1.CompletionItemKind.Field
1646
- }]);
1647
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1648
- label: 'data',
1649
- kind: vscode_languageserver_1.CompletionItemKind.Field
1650
- }]);
1651
- (0, testHelpers_spec_1.expectCompletionsIncludes)(completions, [{
1652
- label: 'doStuff',
1653
- kind: vscode_languageserver_1.CompletionItemKind.Method
1654
- }]);
1655
- });
1656
- });
1657
- });
1658
- //# sourceMappingURL=CompletionsProcessor.spec.js.map