brighterscript 1.0.0-alpha.13 → 1.0.0-alpha.14

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 (180) hide show
  1. package/CHANGELOG.md +46 -2
  2. package/dist/Cache.d.ts +3 -3
  3. package/dist/Cache.js +10 -6
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/LanguageServer.d.ts +1 -6
  6. package/dist/LanguageServer.js +0 -9
  7. package/dist/LanguageServer.js.map +1 -1
  8. package/dist/PluginInterface.d.ts +3 -3
  9. package/dist/PluginInterface.js +3 -0
  10. package/dist/PluginInterface.js.map +1 -1
  11. package/dist/Program.d.ts +30 -16
  12. package/dist/Program.js +106 -43
  13. package/dist/Program.js.map +1 -1
  14. package/dist/ProgramBuilder.js +3 -3
  15. package/dist/ProgramBuilder.js.map +1 -1
  16. package/dist/Scope.d.ts +15 -6
  17. package/dist/Scope.js +39 -25
  18. package/dist/Scope.js.map +1 -1
  19. package/dist/SymbolTable.d.ts +1 -1
  20. package/dist/astUtils/reflection.spec.js +6 -6
  21. package/dist/astUtils/reflection.spec.js.map +1 -1
  22. package/dist/astUtils/visitors.spec.js +8 -8
  23. package/dist/astUtils/visitors.spec.js.map +1 -1
  24. package/dist/bscPlugin/BscPlugin.js +5 -2
  25. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  26. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +3 -3
  27. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  28. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  29. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +8 -0
  30. package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.js → BrsFileSemanticTokensProcessor.js} +12 -14
  31. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  32. package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.d.ts → BrsFileSemanticTokensProcessor.spec.d.ts} +0 -0
  33. package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.js → BrsFileSemanticTokensProcessor.spec.js} +2 -2
  34. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  35. package/dist/files/BrsFile.Class.spec.js +389 -238
  36. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  37. package/dist/files/BrsFile.d.ts +17 -11
  38. package/dist/files/BrsFile.js +160 -91
  39. package/dist/files/BrsFile.js.map +1 -1
  40. package/dist/files/BrsFile.spec.js +442 -109
  41. package/dist/files/BrsFile.spec.js.map +1 -1
  42. package/dist/files/XmlFile.d.ts +6 -5
  43. package/dist/files/XmlFile.js +13 -8
  44. package/dist/files/XmlFile.js.map +1 -1
  45. package/dist/files/XmlFile.spec.js +57 -55
  46. package/dist/files/XmlFile.spec.js.map +1 -1
  47. package/dist/files/tests/imports.spec.js +8 -6
  48. package/dist/files/tests/imports.spec.js.map +1 -1
  49. package/dist/index.d.ts +12 -3
  50. package/dist/index.js +21 -4
  51. package/dist/index.js.map +1 -1
  52. package/dist/interfaces.d.ts +46 -10
  53. package/dist/lexer/Lexer.js +1 -2
  54. package/dist/lexer/Lexer.js.map +1 -1
  55. package/dist/lexer/Lexer.spec.js +462 -462
  56. package/dist/lexer/Lexer.spec.js.map +1 -1
  57. package/dist/parser/Expression.d.ts +1 -1
  58. package/dist/parser/Expression.js +10 -10
  59. package/dist/parser/Expression.js.map +1 -1
  60. package/dist/parser/Parser.Class.spec.js +33 -32
  61. package/dist/parser/Parser.Class.spec.js.map +1 -1
  62. package/dist/parser/Parser.d.ts +17 -5
  63. package/dist/parser/Parser.js +403 -288
  64. package/dist/parser/Parser.js.map +1 -1
  65. package/dist/parser/Parser.spec.js +157 -35
  66. package/dist/parser/Parser.spec.js.map +1 -1
  67. package/dist/parser/SGTypes.spec.js +9 -9
  68. package/dist/parser/SGTypes.spec.js.map +1 -1
  69. package/dist/parser/Statement.d.ts +3 -3
  70. package/dist/parser/Statement.js +8 -8
  71. package/dist/parser/Statement.js.map +1 -1
  72. package/dist/parser/tests/Parser.spec.d.ts +3 -3
  73. package/dist/parser/tests/Parser.spec.js +4 -4
  74. package/dist/parser/tests/Parser.spec.js.map +1 -1
  75. package/dist/parser/tests/controlFlow/For.spec.js +40 -40
  76. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  77. package/dist/parser/tests/controlFlow/ForEach.spec.js +22 -21
  78. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  79. package/dist/parser/tests/controlFlow/If.spec.js +100 -99
  80. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  81. package/dist/parser/tests/controlFlow/While.spec.js +25 -25
  82. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  83. package/dist/parser/tests/expression/Additive.spec.js +21 -21
  84. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  85. package/dist/parser/tests/expression/ArrayLiterals.spec.js +91 -91
  86. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  87. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +102 -102
  88. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  89. package/dist/parser/tests/expression/Boolean.spec.js +15 -15
  90. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  91. package/dist/parser/tests/expression/Call.spec.js +22 -21
  92. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  93. package/dist/parser/tests/expression/Exponential.spec.js +11 -11
  94. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  95. package/dist/parser/tests/expression/Function.spec.js +171 -171
  96. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  97. package/dist/parser/tests/expression/Indexing.spec.js +50 -50
  98. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  99. package/dist/parser/tests/expression/Multiplicative.spec.js +25 -25
  100. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  101. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +16 -16
  102. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  103. package/dist/parser/tests/expression/PrefixUnary.spec.js +26 -26
  104. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  105. package/dist/parser/tests/expression/Primary.spec.js +27 -27
  106. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  107. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +3 -2
  108. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  109. package/dist/parser/tests/expression/Relational.spec.js +25 -25
  110. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  111. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +7 -7
  112. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  113. package/dist/parser/tests/expression/TernaryExpression.spec.js +6 -6
  114. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  115. package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
  116. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  117. package/dist/parser/tests/statement/Declaration.spec.js +20 -20
  118. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  119. package/dist/parser/tests/statement/Function.spec.js +121 -120
  120. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  121. package/dist/parser/tests/statement/Goto.spec.js +9 -8
  122. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  123. package/dist/parser/tests/statement/Increment.spec.js +22 -22
  124. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  125. package/dist/parser/tests/statement/InterfaceStatement.spec.js +12 -0
  126. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  127. package/dist/parser/tests/statement/LibraryStatement.spec.js +7 -7
  128. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  129. package/dist/parser/tests/statement/Misc.spec.js +71 -70
  130. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  131. package/dist/parser/tests/statement/PrintStatement.spec.js +17 -17
  132. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  133. package/dist/parser/tests/statement/ReturnStatement.spec.js +33 -33
  134. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  135. package/dist/parser/tests/statement/Set.spec.js +53 -53
  136. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  137. package/dist/parser/tests/statement/Stop.spec.js +7 -6
  138. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  139. package/dist/preprocessor/Chunk.d.ts +1 -1
  140. package/dist/preprocessor/Preprocessor.d.ts +1 -1
  141. package/dist/preprocessor/Preprocessor.js +7 -7
  142. package/dist/preprocessor/Preprocessor.js.map +1 -1
  143. package/dist/types/ArrayType.d.ts +8 -5
  144. package/dist/types/ArrayType.js +45 -9
  145. package/dist/types/ArrayType.js.map +1 -1
  146. package/dist/types/ArrayType.spec.js +62 -3
  147. package/dist/types/ArrayType.spec.js.map +1 -1
  148. package/dist/types/BscType.d.ts +1 -1
  149. package/dist/types/CustomType.d.ts +1 -1
  150. package/dist/types/CustomType.js +4 -2
  151. package/dist/types/CustomType.js.map +1 -1
  152. package/dist/types/FunctionType.d.ts +5 -5
  153. package/dist/types/FunctionType.js +11 -11
  154. package/dist/types/FunctionType.js.map +1 -1
  155. package/dist/types/LazyType.d.ts +1 -2
  156. package/dist/types/LazyType.js +1 -5
  157. package/dist/types/LazyType.js.map +1 -1
  158. package/dist/types/helpers.js +1 -1
  159. package/dist/types/helpers.js.map +1 -1
  160. package/dist/util.d.ts +15 -9
  161. package/dist/util.js +93 -50
  162. package/dist/util.js.map +1 -1
  163. package/dist/validators/ClassValidator.js +17 -24
  164. package/dist/validators/ClassValidator.js.map +1 -1
  165. package/package.json +2 -1
  166. package/dist/astUtils/index.d.ts +0 -7
  167. package/dist/astUtils/index.js +0 -26
  168. package/dist/astUtils/index.js.map +0 -1
  169. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  170. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  171. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  172. package/dist/lexer/index.d.ts +0 -3
  173. package/dist/lexer/index.js +0 -18
  174. package/dist/lexer/index.js.map +0 -1
  175. package/dist/parser/index.d.ts +0 -3
  176. package/dist/parser/index.js +0 -16
  177. package/dist/parser/index.js.map +0 -1
  178. package/dist/preprocessor/index.d.ts +0 -3
  179. package/dist/preprocessor/index.js +0 -16
  180. package/dist/preprocessor/index.js.map +0 -1
@@ -2,12 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ArrayType = void 0;
4
4
  const reflection_1 = require("../astUtils/reflection");
5
+ const DynamicType_1 = require("./DynamicType");
5
6
  class ArrayType {
6
7
  constructor(...innerTypes) {
7
8
  this.innerTypes = [];
8
- this.innerTypes = innerTypes;
9
+ this.innerTypes = this.getUniqueTypesByAssignability(innerTypes);
9
10
  }
10
- isAssignableTo(targetType) {
11
+ isAssignableTo(targetType, context) {
11
12
  if ((0, reflection_1.isArrayType)(targetType)) {
12
13
  //this array type is assignable to the target IF
13
14
  //1. all of the types in this array are present in the target
@@ -16,7 +17,7 @@ class ArrayType {
16
17
  // eslint-disable-next-line no-unreachable-loop
17
18
  for (let targetInnerType of targetType.innerTypes) {
18
19
  //TODO TYPES is this loop correct? It ends after 1 iteration but we might need to do more iterations
19
- if (innerType.isAssignableTo(targetInnerType)) {
20
+ if (innerType.isAssignableTo(targetInnerType, context)) {
20
21
  continue outer;
21
22
  }
22
23
  //our array contains a type that the target array does not...so these arrays are different
@@ -31,17 +32,52 @@ class ArrayType {
31
32
  }
32
33
  return false;
33
34
  }
34
- isConvertibleTo(targetType) {
35
- return this.isAssignableTo(targetType);
35
+ isConvertibleTo(targetType, context) {
36
+ return this.isAssignableTo(targetType, context);
36
37
  }
37
- toString() {
38
- return `Array<${this.innerTypes.map((x) => x.toString()).join(' | ')}>`;
38
+ toString(context) {
39
+ // TODO TYPES: When we support union types, the output should be more like:
40
+ // `Array<${this.innerTypes.map((x) => x.toString(context)).join(' | ')}>`;
41
+ return `${this.getDefaultType(context).toString(context)}[]`;
42
+ }
43
+ toJsString(context) {
44
+ const uniqueInnerTypes = this.getUniqueTypesByAssignability(this.innerTypes);
45
+ return `Array<${uniqueInnerTypes.map((x) => x.toString(context)).join(' | ')}>`;
39
46
  }
40
47
  toTypeString() {
41
48
  return 'object';
42
49
  }
43
- equals(targetType) {
44
- return (0, reflection_1.isArrayType)(targetType) && this.isAssignableTo(targetType);
50
+ getDefaultType(context) {
51
+ const uniqueInnerTypes = this.getUniqueTypesByAssignability(this.innerTypes, context);
52
+ return (uniqueInnerTypes === null || uniqueInnerTypes === void 0 ? void 0 : uniqueInnerTypes.length) === 1 ? uniqueInnerTypes[0] : new DynamicType_1.DynamicType();
53
+ }
54
+ equals(targetType, context) {
55
+ return (0, reflection_1.isArrayType)(targetType) && this.isAssignableTo(targetType, context);
56
+ }
57
+ getUniqueTypesByAssignability(innerTypes, context) {
58
+ const uniqueTypes = [];
59
+ for (const innerType of innerTypes) {
60
+ let shouldAddType = true;
61
+ for (let i = 0; i < uniqueTypes.length; i++) {
62
+ const uniqueType = uniqueTypes[i];
63
+ if (innerType.isAssignableTo(uniqueType, context)) {
64
+ // this type is already assignable to the existing type
65
+ shouldAddType = false;
66
+ break;
67
+ }
68
+ else if (uniqueType.isAssignableTo(innerType, context)) {
69
+ // an existing type is assignable to this type. replace the existing type with this
70
+ // as this is more general
71
+ shouldAddType = false;
72
+ uniqueTypes[i] = innerType;
73
+ break;
74
+ }
75
+ }
76
+ if (shouldAddType) {
77
+ uniqueTypes.push(innerType);
78
+ }
79
+ }
80
+ return uniqueTypes;
45
81
  }
46
82
  }
47
83
  exports.ArrayType = ArrayType;
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../src/types/ArrayType.ts"],"names":[],"mappings":";;;AAAA,uDAAkF;AAGlF,MAAa,SAAS;IAClB,YAAY,GAAG,UAAqB;QAG7B,eAAU,GAAc,EAAE,CAAC;QAF9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAGM,cAAc,CAAC,UAAmB;QACrC,IAAI,IAAA,wBAAW,EAAC,UAAU,CAAC,EAAE;YACzB,gDAAgD;YAChD,6DAA6D;YAC7D,KAAK,EAAE,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC1C,oCAAoC;gBACpC,+CAA+C;gBAC/C,KAAK,IAAI,eAAe,IAAI,UAAU,CAAC,UAAU,EAAE;oBAC/C,oGAAoG;oBAEpG,IAAI,SAAS,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;wBAC3C,SAAS,KAAK,CAAC;qBAClB;oBAED,0FAA0F;oBAC1F,OAAO,KAAK,CAAC;iBAChB;aACJ;YACD,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,IAAA,0BAAa,EAAC,UAAU,CAAC;YAChC,IAAA,yBAAY,EAAC,UAAU,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,eAAe,CAAC,UAAmB;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAEM,QAAQ;QACX,OAAO,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC5E,CAAC;IAEM,YAAY;QACf,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,UAAmB;QAC7B,OAAO,IAAA,wBAAW,EAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IACtE,CAAC;CACJ;AA/CD,8BA+CC"}
1
+ {"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../src/types/ArrayType.ts"],"names":[],"mappings":";;;AAAA,uDAAkF;AAElF,+CAA4C;AAE5C,MAAa,SAAS;IAClB,YAAY,GAAG,UAAqB;QAG7B,eAAU,GAAc,EAAE,CAAC;QAF9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACrE,CAAC;IAGM,cAAc,CAAC,UAAmB,EAAE,OAAqB;QAC5D,IAAI,IAAA,wBAAW,EAAC,UAAU,CAAC,EAAE;YACzB,gDAAgD;YAChD,6DAA6D;YAC7D,KAAK,EAAE,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;gBAC1C,oCAAoC;gBACpC,+CAA+C;gBAC/C,KAAK,IAAI,eAAe,IAAI,UAAU,CAAC,UAAU,EAAE;oBAC/C,oGAAoG;oBAEpG,IAAI,SAAS,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE;wBACpD,SAAS,KAAK,CAAC;qBAClB;oBAED,0FAA0F;oBAC1F,OAAO,KAAK,CAAC;iBAChB;aACJ;YACD,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,IAAA,0BAAa,EAAC,UAAU,CAAC;YAChC,IAAA,yBAAY,EAAC,UAAU,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,eAAe,CAAC,UAAmB,EAAE,OAAqB;QAC7D,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,QAAQ,CAAC,OAAqB;QACjC,2EAA2E;QAC3E,2EAA2E;QAC3E,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;IACjE,CAAC;IAEM,UAAU,CAAC,OAAqB;QACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7E,OAAO,SAAS,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACpF,CAAC;IAEM,YAAY;QACf,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,cAAc,CAAC,OAAqB;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACtF,OAAO,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,MAAM,MAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,yBAAW,EAAE,CAAC;IACpF,CAAC;IAEM,MAAM,CAAC,UAAmB,EAAE,OAAqB;QACpD,OAAO,IAAA,wBAAW,EAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAGO,6BAA6B,CAAC,UAAqB,EAAE,OAAqB;QAC9E,MAAM,WAAW,GAAc,EAAE,CAAC;QAClC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;YAChC,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;oBAC/C,uDAAuD;oBACvD,aAAa,GAAG,KAAK,CAAC;oBACtB,MAAM;iBACT;qBAAM,IAAI,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;oBACtD,mFAAmF;oBACnF,0BAA0B;oBAC1B,aAAa,GAAG,KAAK,CAAC;oBACtB,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;oBAC3B,MAAM;iBACT;aACJ;YACD,IAAI,aAAa,EAAE;gBACf,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B;SACJ;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;CACJ;AAtFD,8BAsFC"}
@@ -5,6 +5,11 @@ const ArrayType_1 = require("./ArrayType");
5
5
  const DynamicType_1 = require("./DynamicType");
6
6
  const BooleanType_1 = require("./BooleanType");
7
7
  const StringType_1 = require("./StringType");
8
+ const CustomType_1 = require("./CustomType");
9
+ const IntegerType_1 = require("./IntegerType");
10
+ const FloatType_1 = require("./FloatType");
11
+ const Program_1 = require("../Program");
12
+ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
8
13
  describe('ArrayType', () => {
9
14
  it('is equivalent to array types', () => {
10
15
  (0, chai_1.expect)(new ArrayType_1.ArrayType().isAssignableTo(new ArrayType_1.ArrayType())).to.be.true;
@@ -14,16 +19,70 @@ describe('ArrayType', () => {
14
19
  (0, chai_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType()).isAssignableTo(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType()))).to.be.true;
15
20
  (0, chai_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType()).isAssignableTo(new ArrayType_1.ArrayType(new StringType_1.StringType()))).to.be.false;
16
21
  });
22
+ it('sets the innerTypes to unique types', () => {
23
+ const boolArray = new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new BooleanType_1.BooleanType());
24
+ (0, chai_1.expect)(boolArray.innerTypes.length).to.eql(1);
25
+ (0, chai_1.expect)(boolArray.innerTypes[0].equals(new BooleanType_1.BooleanType())).to.be.true;
26
+ (0, chai_1.expect)(boolArray.toJsString()).to.eql('Array<boolean>');
27
+ const multiTypeArray = new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new StringType_1.StringType(), new BooleanType_1.BooleanType());
28
+ (0, chai_1.expect)(multiTypeArray.innerTypes.length).to.eql(2);
29
+ (0, chai_1.expect)(multiTypeArray.innerTypes[0].equals(new BooleanType_1.BooleanType())).to.be.true;
30
+ (0, chai_1.expect)(multiTypeArray.innerTypes[1].equals(new StringType_1.StringType())).to.be.true;
31
+ (0, chai_1.expect)(multiTypeArray.toJsString()).to.eql('Array<boolean | string>');
32
+ });
33
+ it('sets the innerTypes to custom types', () => {
34
+ (0, chai_1.expect)(new ArrayType_1.ArrayType(new CustomType_1.CustomType('MyKlass')).toString()).to.eql('MyKlass[]');
35
+ });
17
36
  it('is not equivalent to other types', () => {
18
37
  (0, chai_1.expect)(new ArrayType_1.ArrayType().isAssignableTo(new BooleanType_1.BooleanType())).to.be.false;
19
38
  });
20
- describe('isConveribleTo', () => {
39
+ describe('isConvertibleTo', () => {
21
40
  (0, chai_1.expect)(new ArrayType_1.ArrayType().isConvertibleTo(new BooleanType_1.BooleanType())).to.be.false;
22
41
  (0, chai_1.expect)(new ArrayType_1.ArrayType().isConvertibleTo(new ArrayType_1.ArrayType())).to.be.true;
23
42
  });
24
43
  describe('toString', () => {
25
- it('prints inner types', () => {
26
- (0, chai_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new StringType_1.StringType()).toString()).to.eql('Array<boolean | string>');
44
+ it('returns the default type', () => {
45
+ (0, chai_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType()).toString()).to.eql('boolean[]');
46
+ (0, chai_1.expect)(new ArrayType_1.ArrayType(new StringType_1.StringType()).toString()).to.eql('string[]');
47
+ (0, chai_1.expect)(new ArrayType_1.ArrayType(new CustomType_1.CustomType('MyKlass')).toString()).to.eql('MyKlass[]');
48
+ });
49
+ it('returns dynamic if more than one type is assigned', () => {
50
+ (0, chai_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new StringType_1.StringType()).toString()).to.eql('dynamic[]');
51
+ });
52
+ });
53
+ describe('unique types by assignability', () => {
54
+ it('follows the isAssignable method on the type', () => {
55
+ const numbersArray = new ArrayType_1.ArrayType(new IntegerType_1.IntegerType(), new FloatType_1.FloatType(), new IntegerType_1.IntegerType(), new FloatType_1.FloatType());
56
+ // integers ARE NOT assignable to float, and vice versa
57
+ (0, chai_1.expect)(numbersArray.innerTypes.length).to.eql(2);
58
+ (0, chai_1.expect)(numbersArray.innerTypes[0].equals(new IntegerType_1.IntegerType())).to.be.true;
59
+ (0, chai_1.expect)(numbersArray.innerTypes[1].equals(new FloatType_1.FloatType())).to.be.true;
60
+ });
61
+ it('sets the default type to Dynamic if types are not assignable', () => {
62
+ const numbersArray = new ArrayType_1.ArrayType(new IntegerType_1.IntegerType(), new FloatType_1.FloatType(), new IntegerType_1.IntegerType(), new FloatType_1.FloatType());
63
+ // integers ARE NOT assignable to float, and vice versa
64
+ (0, chai_1.expect)(numbersArray.getDefaultType().equals(new DynamicType_1.DynamicType())).to.be.true;
65
+ });
66
+ it('sets the default type to the most general of the types provided', () => {
67
+ const program = new Program_1.Program({
68
+ rootDir: process.cwd()
69
+ });
70
+ program.createSourceScope();
71
+ const file = program.setFile('source/main.bs', `
72
+ class Parent
73
+ end class
74
+
75
+ class Child extends Parent
76
+ end class
77
+
78
+ sub main()
79
+ ' inside main
80
+ end sub
81
+ `);
82
+ const klassesArray = new ArrayType_1.ArrayType(new CustomType_1.CustomType('Child'), new CustomType_1.CustomType('Parent'), new CustomType_1.CustomType('Child'));
83
+ const context = { scope: program.getScopesForFile(file)[0], file: file, position: vscode_languageserver_protocol_1.Position.create(8, 23) };
84
+ (0, chai_1.expect)(klassesArray.innerTypes.length).to.eql(2);
85
+ (0, chai_1.expect)(klassesArray.getDefaultType(context).equals(new CustomType_1.CustomType('Parent'))).to.be.true;
27
86
  });
28
87
  });
29
88
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../src/types/ArrayType.spec.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,2CAAwC;AACxC,+CAA4C;AAC5C,+CAA4C;AAC5C,6CAA0C;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACpC,IAAA,aAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,cAAc,CAAC,IAAI,qBAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,IAAA,aAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,cAAc,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,IAAA,aAAM,EAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrG,IAAA,aAAM,EAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,qBAAS,CAAC,IAAI,uBAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IACzG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,IAAA,aAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,cAAc,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC5B,IAAA,aAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,eAAe,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvE,IAAA,aAAM,EAAC,IAAI,qBAAS,EAAE,CAAC,eAAe,CAAC,IAAI,qBAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC1B,IAAA,aAAM,EAAC,IAAI,qBAAS,CAAC,IAAI,yBAAW,EAAE,EAAE,IAAI,uBAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../src/types/ArrayType.spec.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Position } from '../astUtils';
1
+ import type { Position } from 'vscode-languageserver';
2
2
  import type { BrsFile } from '../files/BrsFile';
3
3
  import type { Scope } from '../Scope';
4
4
  import type { SymbolTable } from '../SymbolTable';
@@ -6,7 +6,7 @@ export declare class CustomType implements BscType, SymbolContainer {
6
6
  constructor(name: string, memberTable?: SymbolTable);
7
7
  toString(): string;
8
8
  toTypeString(): string;
9
- isAssignableTo(targetType: BscType, context?: TypeContext, ancestorTypes?: CustomType[]): boolean;
9
+ isAssignableTo(targetType: BscType, context?: TypeContext): boolean;
10
10
  isConvertibleTo(targetType: BscType, context?: TypeContext): boolean;
11
11
  equals(targetType: BscType, context?: TypeContext): boolean;
12
12
  }
@@ -13,7 +13,9 @@ class CustomType {
13
13
  toTypeString() {
14
14
  return 'object';
15
15
  }
16
- isAssignableTo(targetType, context, ancestorTypes) {
16
+ isAssignableTo(targetType, context) {
17
+ var _a;
18
+ const ancestorTypes = (_a = context === null || context === void 0 ? void 0 : context.scope) === null || _a === void 0 ? void 0 : _a.getAncestorTypeListByContext(this, context);
17
19
  if (ancestorTypes === null || ancestorTypes === void 0 ? void 0 : ancestorTypes.find(ancestorType => targetType.equals(ancestorType, context))) {
18
20
  return true;
19
21
  }
@@ -25,7 +27,7 @@ class CustomType {
25
27
  return this.isAssignableTo(targetType, context);
26
28
  }
27
29
  equals(targetType, context) {
28
- return this.toString() === (targetType === null || targetType === void 0 ? void 0 : targetType.toString(context));
30
+ return (0, reflection_1.isCustomType)(targetType) && this.toString() === (targetType === null || targetType === void 0 ? void 0 : targetType.toString());
29
31
  }
30
32
  }
31
33
  exports.CustomType = CustomType;
@@ -1 +1 @@
1
- {"version":3,"file":"CustomType.js","sourceRoot":"","sources":["../../src/types/CustomType.ts"],"names":[],"mappings":";;;AAAA,uDAAqE;AAIrE,MAAa,UAAU;IAEnB,YAAmB,IAAY,EAAS,cAA2B,IAAI;QAApD,SAAI,GAAJ,IAAI,CAAQ;QAAS,gBAAW,GAAX,WAAW,CAAoB;IACvE,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,YAAY;QACf,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,cAAc,CAAC,UAAmB,EAAE,OAAqB,EAAE,aAA4B;QAC1F,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE;YAC/E,OAAO,IAAI,CAAC;SACf;QACD,OAAO,CACH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;YAChC,IAAA,yBAAY,EAAC,UAAU,CAAC;YACxB,IAAA,0BAAa,EAAC,UAAU,CAAC,CAC5B,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,UAAmB,EAAE,OAAqB;QAC7D,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,MAAM,CAAC,UAAmB,EAAE,OAAqB;QACpD,OAAO,IAAI,CAAC,QAAQ,EAAE,MAAK,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,CAAC,OAAO,CAAC,CAAA,CAAC;IAC7D,CAAC;CACJ;AA/BD,gCA+BC"}
1
+ {"version":3,"file":"CustomType.js","sourceRoot":"","sources":["../../src/types/CustomType.ts"],"names":[],"mappings":";;;AAAA,uDAAmF;AAInF,MAAa,UAAU;IAEnB,YAAmB,IAAY,EAAS,cAA2B,IAAI;QAApD,SAAI,GAAJ,IAAI,CAAQ;QAAS,gBAAW,GAAX,WAAW,CAAoB;IACvE,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,YAAY;QACf,OAAO,QAAQ,CAAC;IACpB,CAAC;IAEM,cAAc,CAAC,UAAmB,EAAE,OAAqB;;QAC5D,MAAM,aAAa,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,0CAAE,4BAA4B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClF,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE;YAC/E,OAAO,IAAI,CAAC;SACf;QACD,OAAO,CACH,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC;YAChC,IAAA,yBAAY,EAAC,UAAU,CAAC;YACxB,IAAA,0BAAa,EAAC,UAAU,CAAC,CAC5B,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,UAAmB,EAAE,OAAqB;QAC7D,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,MAAM,CAAC,UAAmB,EAAE,OAAqB;QACpD,OAAO,IAAA,yBAAY,EAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAK,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,EAAE,CAAA,CAAC;IAClF,CAAC;CACJ;AAhCD,gCAgCC"}
@@ -1,5 +1,5 @@
1
1
  import type { CallableParam } from '../interfaces';
2
- import type { BscType } from './BscType';
2
+ import type { BscType, TypeContext } from './BscType';
3
3
  export declare class FunctionType implements BscType {
4
4
  returnType: BscType;
5
5
  /**
@@ -19,9 +19,9 @@ export declare class FunctionType implements BscType {
19
19
  name: string;
20
20
  setName(name: string): this;
21
21
  addParameter(paramOrName: CallableParam | string, type?: BscType, isOptional?: boolean): this;
22
- isAssignableTo(targetType: BscType): boolean;
23
- isConvertibleTo(targetType: BscType): boolean;
24
- toString(): string;
22
+ isAssignableTo(targetType: BscType, context?: TypeContext): boolean;
23
+ isConvertibleTo(targetType: BscType, context?: TypeContext): boolean;
24
+ toString(context?: TypeContext): string;
25
25
  toTypeString(): string;
26
- equals(targetType: BscType): boolean;
26
+ equals(targetType: BscType, context?: TypeContext): boolean;
27
27
  }
@@ -23,7 +23,7 @@ class FunctionType {
23
23
  this.params.push({
24
24
  name: paramOrName,
25
25
  type: type !== null && type !== void 0 ? type : new DynamicType_1.DynamicType(),
26
- isOptional: !!isOptional,
26
+ isOptional: isOptional === true ? true : false,
27
27
  isRestArgument: false
28
28
  });
29
29
  }
@@ -32,19 +32,19 @@ class FunctionType {
32
32
  }
33
33
  return this;
34
34
  }
35
- isAssignableTo(targetType) {
35
+ isAssignableTo(targetType, context) {
36
36
  if ((0, reflection_1.isFunctionType)(targetType)) {
37
37
  //compare all parameters
38
38
  let len = Math.max(this.params.length, targetType.params.length);
39
39
  for (let i = 0; i < len; i++) {
40
40
  let myParam = this.params[i];
41
41
  let targetParam = targetType.params[i];
42
- if (!myParam || !targetParam || !myParam.type.isAssignableTo(targetParam.type)) {
42
+ if (!myParam || !targetParam || !myParam.type.isAssignableTo(targetParam.type, context)) {
43
43
  return false;
44
44
  }
45
45
  }
46
46
  //compare return type
47
- if (!this.returnType || !targetType.returnType || !this.returnType.isAssignableTo(targetType.returnType)) {
47
+ if (!this.returnType || !targetType.returnType || !this.returnType.isAssignableTo(targetType.returnType, context)) {
48
48
  return false;
49
49
  }
50
50
  //made it here, all params and return type are equivalent
@@ -57,25 +57,25 @@ class FunctionType {
57
57
  return false;
58
58
  }
59
59
  }
60
- isConvertibleTo(targetType) {
61
- return this.isAssignableTo(targetType);
60
+ isConvertibleTo(targetType, context) {
61
+ return this.isAssignableTo(targetType, context);
62
62
  }
63
- toString() {
63
+ toString(context) {
64
64
  var _a, _b;
65
65
  let paramTexts = [];
66
66
  for (let param of this.params) {
67
- paramTexts.push(`${param.name}${param.isOptional ? '?' : ''} as ${param.type.toString()}`);
67
+ paramTexts.push(`${param.name}${param.isOptional ? '?' : ''} as ${param.type.toString(context)}`);
68
68
  }
69
69
  if (this.isNew) {
70
70
  return `new ${(_a = this.name) !== null && _a !== void 0 ? _a : ''}(${paramTexts.join(', ')})`;
71
71
  }
72
- return `${this.isSub ? 'sub' : 'function'} ${(_b = this.name) !== null && _b !== void 0 ? _b : ''}(${paramTexts.join(', ')}) as ${this.returnType.toString()}`;
72
+ return `${this.isSub ? 'sub' : 'function'} ${(_b = this.name) !== null && _b !== void 0 ? _b : ''}(${paramTexts.join(', ')}) as ${this.returnType.toString(context)}`;
73
73
  }
74
74
  toTypeString() {
75
75
  return 'Function';
76
76
  }
77
- equals(targetType) {
78
- return ((0, reflection_1.isFunctionType)(targetType)) && this.isAssignableTo(targetType);
77
+ equals(targetType, context) {
78
+ return ((0, reflection_1.isFunctionType)(targetType)) && this.isAssignableTo(targetType, context);
79
79
  }
80
80
  }
81
81
  exports.FunctionType = FunctionType;
@@ -1 +1 @@
1
- {"version":3,"file":"FunctionType.js","sourceRoot":"","sources":["../../src/types/FunctionType.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FunctionType.js","sourceRoot":"","sources":["../../src/types/FunctionType.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import type { BscType, TypeContext } from './BscType';
2
- import type { CustomType } from './CustomType';
3
2
  /**
4
3
  * A type whose actual type is not computed until requested.
5
4
  * This is useful when the parser creates types in the middle of the file that depend on items further down in the file that haven't been parsed yet
@@ -9,7 +8,7 @@ export declare class LazyType implements BscType {
9
8
  constructor(factory: (context?: TypeContext) => BscType);
10
9
  get type(): BscType;
11
10
  getTypeFromContext(context?: TypeContext): BscType;
12
- isAssignableTo(targetType: BscType, context?: TypeContext, potentialAncestorTypes?: CustomType[]): boolean;
11
+ isAssignableTo(targetType: BscType, context?: TypeContext): boolean;
13
12
  isConvertibleTo(targetType: BscType, context?: TypeContext): boolean;
14
13
  toString(context?: TypeContext): string;
15
14
  toTypeString(context?: TypeContext): string;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LazyType = void 0;
4
- const astUtils_1 = require("../astUtils");
5
4
  /**
6
5
  * A type whose actual type is not computed until requested.
7
6
  * This is useful when the parser creates types in the middle of the file that depend on items further down in the file that haven't been parsed yet
@@ -16,11 +15,8 @@ class LazyType {
16
15
  getTypeFromContext(context) {
17
16
  return this.factory(context);
18
17
  }
19
- isAssignableTo(targetType, context, potentialAncestorTypes) {
18
+ isAssignableTo(targetType, context) {
20
19
  const foundType = this.getTypeFromContext(context);
21
- if ((0, astUtils_1.isCustomType)(foundType)) {
22
- return foundType.isAssignableTo(targetType, context, potentialAncestorTypes);
23
- }
24
20
  return foundType === null || foundType === void 0 ? void 0 : foundType.isAssignableTo(targetType, context);
25
21
  }
26
22
  isConvertibleTo(targetType, context) {
@@ -1 +1 @@
1
- {"version":3,"file":"LazyType.js","sourceRoot":"","sources":["../../src/types/LazyType.ts"],"names":[],"mappings":";;;AAAA,0CAA2C;AAI3C;;;GAGG;AACH,MAAa,QAAQ;IACjB,YACY,OAA2C;QAA3C,YAAO,GAAP,OAAO,CAAoC;IAEvD,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACM,kBAAkB,CAAC,OAAqB;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAEM,cAAc,CAAC,UAAmB,EAAE,OAAqB,EAAE,sBAAqC;QACnG,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,IAAA,uBAAY,EAAC,SAAS,CAAC,EAAE;YACzB,OAAO,SAAS,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,sBAAsB,CAAC,CAAC;SAChF;QACD,OAAO,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEM,eAAe,CAAC,UAAmB,EAAE,OAAqB;;QAC7D,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAEM,QAAQ,CAAC,OAAqB;;QACjC,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEM,YAAY,CAAC,OAAqB;;QACrC,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAEM,MAAM,CAAC,UAAmB,EAAE,OAAqB;;QACpD,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACJ;AApCD,4BAoCC"}
1
+ {"version":3,"file":"LazyType.js","sourceRoot":"","sources":["../../src/types/LazyType.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,QAAQ;IACjB,YACY,OAA2C;QAA3C,YAAO,GAAP,OAAO,CAAoC;IAEvD,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IACM,kBAAkB,CAAC,OAAqB;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAEM,cAAc,CAAC,UAAmB,EAAE,OAAqB;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEM,eAAe,CAAC,UAAmB,EAAE,OAAqB;;QAC7D,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAEM,QAAQ,CAAC,OAAqB;;QACjC,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEM,YAAY,CAAC,OAAqB;;QACrC,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAEM,MAAM,CAAC,UAAmB,EAAE,OAAqB;;QACpD,OAAO,MAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,0CAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;CACJ;AAjCD,4BAiCC"}
@@ -57,7 +57,7 @@ exports.getTypeFromCallExpression = getTypeFromCallExpression;
57
57
  function getTypeFromVariableExpression(variable, functionExpression) {
58
58
  let variableName = variable.name.text.toLowerCase();
59
59
  const currentKnownType = functionExpression.symbolTable.getSymbolType(variableName);
60
- if ((0, reflection_1.isPrimitiveType)(currentKnownType)) {
60
+ if ((0, reflection_1.isPrimitiveType)(currentKnownType) || (0, reflection_1.isArrayType)(currentKnownType)) {
61
61
  // for "contextless" types, eg. myVar = 3.14
62
62
  return currentKnownType;
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/types/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/types/helpers.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -10,14 +10,13 @@ import { FunctionType } from './types/FunctionType';
10
10
  import { IntegerType } from './types/IntegerType';
11
11
  import { InvalidType } from './types/InvalidType';
12
12
  import { LongIntegerType } from './types/LongIntegerType';
13
- import { ObjectType } from './types/ObjectType';
14
13
  import { StringType } from './types/StringType';
15
14
  import { VoidType } from './types/VoidType';
16
15
  import type { DottedGetExpression, Expression, NamespacedVariableNameExpression, VariableExpression } from './parser/Expression';
17
- import type { Locatable, Token } from './lexer';
16
+ import type { Locatable, Token } from './lexer/Token';
18
17
  import { SourceNode } from 'source-map';
19
18
  import { SGAttribute } from './parser/SGTypes';
20
- import { LazyType } from './types/LazyType';
19
+ import type { BscType } from './types/BscType';
21
20
  export declare class Util {
22
21
  clearConsole(): void;
23
22
  /**
@@ -279,7 +278,7 @@ export declare class Util {
279
278
  /**
280
279
  * Convert a token into a BscType
281
280
  */
282
- tokenToBscType(token: Token, allowCustomType?: boolean, currentNamespaceName?: NamespacedVariableNameExpression): DynamicType | FloatType | FunctionType | IntegerType | LongIntegerType | StringType | BooleanType | LazyType | ObjectType | DoubleType | InvalidType | VoidType;
281
+ tokenToBscType(token: Token, allowBrighterscriptTypes?: boolean, currentNamespaceName?: NamespacedVariableNameExpression): DynamicType | BscType | FloatType | FunctionType | IntegerType | LongIntegerType | StringType | BooleanType | DoubleType | InvalidType | VoidType;
283
282
  /**
284
283
  * Get the extension for the given file path. Basically the part after the final dot, except for
285
284
  * `d.bs` which is treated as single extension
@@ -314,7 +313,13 @@ export declare class Util {
314
313
  * Remove leading simple protocols from a path (if present)
315
314
  */
316
315
  removeProtocol(pkgPath: string): string;
316
+ /**
317
+ * Converts a path into a standardized format (drive letter to lower, remove extra slashes, use single slash type, resolve relative parts, etc...)
318
+ */
317
319
  standardizePath(thePath: string): string;
320
+ /**
321
+ * Copy the version of bslib from local node_modules to the staging folder
322
+ */
318
323
  copyBslibToStaging(stagingDir: string): Promise<void>;
319
324
  /**
320
325
  * Given a Diagnostic or BsDiagnostic, return a copy of the diagnostic
@@ -363,12 +368,13 @@ export declare class Util {
363
368
  text: string;
364
369
  range: Range;
365
370
  }[];
371
+ mdFence(code: string, language?: string): string;
366
372
  /**
367
- * Finds a callable from a container map based on the name AND number of arguments
368
- * If the callable was called in a function in a namespace, functions in that namespace are preferred
369
- * The first callable that matches the name AND will accept the number of arguments given is returned
370
- * @return a callable containers that matches the call
371
- */
373
+ * Finds a callable from a container map based on the name AND number of arguments
374
+ * If the callable was called in a function in a namespace, functions in that namespace are preferred
375
+ * The first callable that matches the name AND will accept the number of arguments given is returned
376
+ * @return a callable containers that matches the call
377
+ */
372
378
  getCallableContainerByFunctionCall(callablesByLowerName: CallableContainerMap, expCall: FunctionCall): CallableContainer;
373
379
  }
374
380
  /**