brighterscript 0.66.0-alpha.1 → 0.66.0-alpha.3

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 (128) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +0 -6
  3. package/dist/BsConfig.d.ts +0 -5
  4. package/dist/Cache.js +3 -3
  5. package/dist/Cache.js.map +1 -1
  6. package/dist/CacheVerifier.d.ts +0 -1
  7. package/dist/CodeActionUtil.d.ts +2 -2
  8. package/dist/DiagnosticCollection.js +8 -5
  9. package/dist/DiagnosticCollection.js.map +1 -1
  10. package/dist/DiagnosticMessages.d.ts +6 -1
  11. package/dist/DiagnosticMessages.js +5 -0
  12. package/dist/DiagnosticMessages.js.map +1 -1
  13. package/dist/FunctionScope.d.ts +1 -1
  14. package/dist/LanguageServer.d.ts +5 -1
  15. package/dist/LanguageServer.js +7 -0
  16. package/dist/LanguageServer.js.map +1 -1
  17. package/dist/Logger.d.ts +2 -1
  18. package/dist/Logger.js +10 -2
  19. package/dist/Logger.js.map +1 -1
  20. package/dist/Program.d.ts +1 -3
  21. package/dist/Program.js +4 -14
  22. package/dist/Program.js.map +1 -1
  23. package/dist/ProgramBuilder.js +1 -1
  24. package/dist/ProgramBuilder.js.map +1 -1
  25. package/dist/Scope.d.ts +11 -6
  26. package/dist/Scope.js +77 -93
  27. package/dist/Scope.js.map +1 -1
  28. package/dist/SymbolTable.d.ts +13 -5
  29. package/dist/SymbolTable.js +34 -10
  30. package/dist/SymbolTable.js.map +1 -1
  31. package/dist/astUtils/reflection.d.ts +4 -0
  32. package/dist/astUtils/reflection.js +9 -1
  33. package/dist/astUtils/reflection.js.map +1 -1
  34. package/dist/bscPlugin/hover/HoverProcessor.d.ts +5 -0
  35. package/dist/bscPlugin/hover/HoverProcessor.js +108 -77
  36. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  37. package/dist/bscPlugin/hover/HoverProcessor.spec.js +83 -29
  38. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  39. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +0 -4
  40. package/dist/bscPlugin/validation/BrsFileValidator.js +10 -16
  41. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  42. package/dist/bscPlugin/validation/ScopeValidator.d.ts +4 -0
  43. package/dist/bscPlugin/validation/ScopeValidator.js +77 -42
  44. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  45. package/dist/bscPlugin/validation/ScopeValidator.spec.js +684 -0
  46. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  47. package/dist/cli.js +95 -13
  48. package/dist/cli.js.map +1 -1
  49. package/dist/files/BrsFile.Class.spec.js +5 -0
  50. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  51. package/dist/files/BrsFile.d.ts +1 -11
  52. package/dist/files/BrsFile.js +9 -101
  53. package/dist/files/BrsFile.js.map +1 -1
  54. package/dist/files/BrsFile.spec.js +3 -267
  55. package/dist/files/BrsFile.spec.js.map +1 -1
  56. package/dist/globalCallables.js +78 -78
  57. package/dist/globalCallables.js.map +1 -1
  58. package/dist/index.d.ts +1 -0
  59. package/dist/index.js +1 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/interfaces.d.ts +7 -5
  62. package/dist/interfaces.js.map +1 -1
  63. package/dist/parser/Expression.d.ts +4 -3
  64. package/dist/parser/Expression.js +32 -9
  65. package/dist/parser/Expression.js.map +1 -1
  66. package/dist/parser/SGParser.d.ts +2 -2
  67. package/dist/parser/Statement.d.ts +11 -6
  68. package/dist/parser/Statement.js +54 -21
  69. package/dist/parser/Statement.js.map +1 -1
  70. package/dist/parser/tests/expression/TernaryExpression.spec.js +2 -2
  71. package/dist/types/BaseFunctionType.d.ts +8 -0
  72. package/dist/types/BaseFunctionType.js +25 -0
  73. package/dist/types/BaseFunctionType.js.map +1 -0
  74. package/dist/types/BooleanType.js +2 -1
  75. package/dist/types/BooleanType.js.map +1 -1
  76. package/dist/types/BscTypeKind.d.ts +1 -0
  77. package/dist/types/BscTypeKind.js +1 -0
  78. package/dist/types/BscTypeKind.js.map +1 -1
  79. package/dist/types/ClassType.js +1 -1
  80. package/dist/types/ClassType.js.map +1 -1
  81. package/dist/types/DoubleType.js +1 -0
  82. package/dist/types/DoubleType.js.map +1 -1
  83. package/dist/types/EnumType.d.ts +20 -4
  84. package/dist/types/EnumType.js +14 -2
  85. package/dist/types/EnumType.js.map +1 -1
  86. package/dist/types/FloatType.js +1 -0
  87. package/dist/types/FloatType.js.map +1 -1
  88. package/dist/types/FunctionType.d.ts +6 -19
  89. package/dist/types/FunctionType.js +12 -44
  90. package/dist/types/FunctionType.js.map +1 -1
  91. package/dist/types/IntegerType.js +1 -0
  92. package/dist/types/IntegerType.js.map +1 -1
  93. package/dist/types/InterfaceType.js +3 -3
  94. package/dist/types/InterfaceType.js.map +1 -1
  95. package/dist/types/InvalidType.d.ts +1 -0
  96. package/dist/types/InvalidType.js +3 -1
  97. package/dist/types/InvalidType.js.map +1 -1
  98. package/dist/types/LongIntegerType.js +1 -0
  99. package/dist/types/LongIntegerType.js.map +1 -1
  100. package/dist/types/ObjectType.js +2 -9
  101. package/dist/types/ObjectType.js.map +1 -1
  102. package/dist/types/ReferenceType.d.ts +1 -3
  103. package/dist/types/ReferenceType.js +27 -13
  104. package/dist/types/ReferenceType.js.map +1 -1
  105. package/dist/types/ReferenceType.spec.js +6 -6
  106. package/dist/types/ReferenceType.spec.js.map +1 -1
  107. package/dist/types/StringType.js +4 -1
  108. package/dist/types/StringType.js.map +1 -1
  109. package/dist/types/TypedFunctionType.d.ts +27 -0
  110. package/dist/types/TypedFunctionType.js +69 -0
  111. package/dist/types/TypedFunctionType.js.map +1 -0
  112. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  113. package/dist/types/TypedFunctionType.spec.js +23 -0
  114. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  115. package/dist/types/UnionType.js +4 -1
  116. package/dist/types/UnionType.js.map +1 -1
  117. package/dist/types/VoidType.js +2 -1
  118. package/dist/types/VoidType.js.map +1 -1
  119. package/dist/types/index.d.ts +1 -1
  120. package/dist/types/index.js +1 -1
  121. package/dist/types/index.js.map +1 -1
  122. package/dist/util.d.ts +22 -5
  123. package/dist/util.js +245 -79
  124. package/dist/util.js.map +1 -1
  125. package/package.json +3 -1
  126. package/dist/types/FunctionType.spec.js +0 -23
  127. package/dist/types/FunctionType.spec.js.map +0 -1
  128. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/validation/ScopeValidator.spec.d.ts} +0 -0
@@ -0,0 +1,27 @@
1
+ import { BaseFunctionType } from './BaseFunctionType';
2
+ import type { BscType } from './BscType';
3
+ import { BscTypeKind } from './BscTypeKind';
4
+ export declare class TypedFunctionType extends BaseFunctionType {
5
+ returnType: BscType;
6
+ constructor(returnType: BscType);
7
+ readonly kind = BscTypeKind.TypedFunctionType;
8
+ /**
9
+ * The name of the function for this type. Can be null
10
+ */
11
+ name: string;
12
+ /**
13
+ * Determines if this is a sub or not
14
+ */
15
+ isSub: boolean;
16
+ params: {
17
+ name: string;
18
+ type: BscType;
19
+ isOptional: boolean;
20
+ }[];
21
+ setName(name: string): this;
22
+ addParameter(name: string, type: BscType, isOptional: boolean): this;
23
+ isTypeCompatible(targetType: BscType): boolean;
24
+ toString(): string;
25
+ toTypeString(): string;
26
+ isEqual(targetType: BscType): boolean;
27
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedFunctionType = void 0;
4
+ const reflection_1 = require("../astUtils/reflection");
5
+ const BaseFunctionType_1 = require("./BaseFunctionType");
6
+ const BscTypeKind_1 = require("./BscTypeKind");
7
+ class TypedFunctionType extends BaseFunctionType_1.BaseFunctionType {
8
+ constructor(returnType) {
9
+ super();
10
+ this.returnType = returnType;
11
+ this.kind = BscTypeKind_1.BscTypeKind.TypedFunctionType;
12
+ /**
13
+ * Determines if this is a sub or not
14
+ */
15
+ this.isSub = false;
16
+ this.params = [];
17
+ }
18
+ setName(name) {
19
+ this.name = name;
20
+ return this;
21
+ }
22
+ addParameter(name, type, isOptional) {
23
+ this.params.push({
24
+ name: name,
25
+ type: type,
26
+ isOptional: isOptional === true ? true : false
27
+ });
28
+ return this;
29
+ }
30
+ isTypeCompatible(targetType) {
31
+ if ((0, reflection_1.isDynamicType)(targetType) ||
32
+ (0, reflection_1.isObjectType)(targetType)) {
33
+ return true;
34
+ }
35
+ return this.isEqual(targetType);
36
+ }
37
+ toString() {
38
+ let paramTexts = [];
39
+ for (let param of this.params) {
40
+ paramTexts.push(`${param.name}${param.isOptional ? '?' : ''} as ${param.type.toString()}`);
41
+ }
42
+ return `${this.isSub ? 'sub' : 'function'} ${this.name}(${paramTexts.join(', ')}) as ${this.returnType.toString()}`;
43
+ }
44
+ toTypeString() {
45
+ return 'Function';
46
+ }
47
+ isEqual(targetType) {
48
+ if ((0, reflection_1.isTypedFunctionType)(targetType)) {
49
+ //compare all parameters
50
+ let len = Math.max(this.params.length, targetType.params.length);
51
+ for (let i = 0; i < len; i++) {
52
+ let myParam = this.params[i];
53
+ let targetParam = targetType.params[i];
54
+ if (!myParam || !targetParam || !myParam.type.isAssignableTo(targetParam.type)) {
55
+ return false;
56
+ }
57
+ }
58
+ //compare return type
59
+ if (!this.returnType || !targetType.returnType || !this.returnType.isAssignableTo(targetType.returnType)) {
60
+ return false;
61
+ }
62
+ //made it here, all params and return type are equivalent
63
+ return true;
64
+ }
65
+ return false;
66
+ }
67
+ }
68
+ exports.TypedFunctionType = TypedFunctionType;
69
+ //# sourceMappingURL=TypedFunctionType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedFunctionType.js","sourceRoot":"","sources":["../../src/types/TypedFunctionType.ts"],"names":[],"mappings":";;;AAAA,uDAA0F;AAC1F,yDAAsD;AAEtD,+CAA4C;AAE5C,MAAa,iBAAkB,SAAQ,mCAAgB;IACnD,YACW,UAAmB;QAE1B,KAAK,EAAE,CAAC;QAFD,eAAU,GAAV,UAAU,CAAS;QAKd,SAAI,GAAG,yBAAW,CAAC,iBAAiB,CAAC;QAOrD;;WAEG;QACI,UAAK,GAAG,KAAK,CAAC;QAEd,WAAM,GAAG,EAAiE,CAAC;IAdlF,CAAC;IAgBM,OAAO,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,IAAY,EAAE,IAAa,EAAE,UAAmB;QAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;SACjD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,gBAAgB,CAAC,UAAmB;QACvC,IACI,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,yBAAY,EAAC,UAAU,CAAC,EAC1B;YACE,OAAO,IAAI,CAAC;SACf;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAEM,QAAQ;QACX,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC3B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SAC9F;QACD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;IAExH,CAAC;IAEM,YAAY;QACf,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,UAAmB;QACvB,IAAI,IAAA,gCAAmB,EAAC,UAAU,CAAC,EAAE;YACjC,wBAAwB;YACxB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;oBAC5E,OAAO,KAAK,CAAC;iBAChB;aACJ;YAED,qBAAqB;YACrB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBACtG,OAAO,KAAK,CAAC;aAChB;YAED,yDAAyD;YACzD,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAhFD,8CAgFC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_config_spec_1 = require("../chai-config.spec");
4
+ const DynamicType_1 = require("./DynamicType");
5
+ const TypedFunctionType_1 = require("./TypedFunctionType");
6
+ const IntegerType_1 = require("./IntegerType");
7
+ const StringType_1 = require("./StringType");
8
+ const VoidType_1 = require("./VoidType");
9
+ describe('TypedFunctionType', () => {
10
+ it('is equivalent to dynamic type', () => {
11
+ (0, chai_config_spec_1.expect)(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()).isTypeCompatible(new DynamicType_1.DynamicType())).to.be.true;
12
+ });
13
+ it('validates using param and return types', () => {
14
+ (0, chai_config_spec_1.expect)(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()).isTypeCompatible(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()))).to.be.true;
15
+ //different parameter count
16
+ (0, chai_config_spec_1.expect)(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()).addParameter('a', new IntegerType_1.IntegerType(), false).isTypeCompatible(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()))).to.be.false;
17
+ //different parameter types
18
+ (0, chai_config_spec_1.expect)(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()).addParameter('a', new IntegerType_1.IntegerType(), false).isTypeCompatible(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()).addParameter('a', new StringType_1.StringType(), false))).to.be.false;
19
+ //different return type
20
+ (0, chai_config_spec_1.expect)(new TypedFunctionType_1.TypedFunctionType(new VoidType_1.VoidType()).isTypeCompatible(new TypedFunctionType_1.TypedFunctionType(new IntegerType_1.IntegerType()))).to.be.false;
21
+ });
22
+ });
23
+ //# sourceMappingURL=TypedFunctionType.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedFunctionType.spec.js","sourceRoot":"","sources":["../../src/types/TypedFunctionType.spec.ts"],"names":[],"mappings":";;AAAA,0DAA6C;AAE7C,+CAA4C;AAC5C,2DAAwD;AACxD,+CAA4C;AAC5C,6CAA0C;AAC1C,yCAAsC;AAEtC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,IAAA,yBAAM,EAAC,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,IAAA,yBAAM,EAAC,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAEjH,2BAA2B;QAC3B,IAAA,yBAAM,EACF,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,yBAAW,EAAE,EAAE,KAAK,CAAC,CAAC,gBAAgB,CAC9F,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CACxC,CACJ,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEd,2BAA2B;QAC3B,IAAA,yBAAM,EACF,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,yBAAW,EAAE,EAAE,KAAK,CAAC,CAAC,gBAAgB,CAC9F,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,uBAAU,EAAE,EAAE,KAAK,CAAC,CACnF,CACJ,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAEd,uBAAuB;QACvB,IAAA,yBAAM,EACF,IAAI,qCAAiB,CAAC,IAAI,mBAAQ,EAAE,CAAC,CAAC,gBAAgB,CAClD,IAAI,qCAAiB,CAAC,IAAI,yBAAW,EAAE,CAAC,CAC3C,CACJ,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -39,6 +39,9 @@ class UnionType extends BscType_1.BscType {
39
39
  return {
40
40
  getSymbolType: (innerName, innerOptions) => {
41
41
  return (0, helpers_1.getUniqueType)((0, helpers_1.findTypeUnion)(this.getMemberTypeFromInnerTypes(name, options)), unionTypeFactory);
42
+ },
43
+ setCachedType: (innerName, innerType, innerOptions) => {
44
+ // TODO: is this even cachable? This is a NO-OP for now, and it shouldn't hurt anything
42
45
  }
43
46
  };
44
47
  });
@@ -46,7 +49,7 @@ class UnionType extends BscType_1.BscType {
46
49
  return (0, helpers_1.getUniqueType)((0, helpers_1.findTypeUnion)(innerTypesMemberTypes), unionTypeFactory);
47
50
  }
48
51
  isTypeCompatible(targetType) {
49
- if ((0, reflection_1.isDynamicType)(targetType)) {
52
+ if ((0, reflection_1.isDynamicType)(targetType) || (0, reflection_1.isObjectType)(targetType)) {
50
53
  return true;
51
54
  }
52
55
  if ((0, reflection_1.isUnionType)(targetType)) {
@@ -1 +1 @@
1
- {"version":3,"file":"UnionType.js","sourceRoot":"","sources":["../../src/types/UnionType.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UnionType.js","sourceRoot":"","sources":["../../src/types/UnionType.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,8 @@ class VoidType extends BscType_1.BscType {
12
12
  }
13
13
  isTypeCompatible(targetType) {
14
14
  return ((0, reflection_1.isVoidType)(targetType) ||
15
- (0, reflection_1.isDynamicType)(targetType));
15
+ (0, reflection_1.isDynamicType)(targetType) ||
16
+ (0, reflection_1.isObjectType)(targetType));
16
17
  }
17
18
  toString() {
18
19
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"VoidType.js","sourceRoot":"","sources":["../../src/types/VoidType.ts"],"names":[],"mappings":";;;AAAA,uDAAmE;AACnE,uCAAoC;AACpC,+CAA4C;AAE5C,MAAa,QAAS,SAAQ,iBAAO;IACjC,YACW,QAAiB;QAExB,KAAK,EAAE,CAAC;QAFD,aAAQ,GAAR,QAAQ,CAAS;QAKZ,SAAI,GAAG,yBAAW,CAAC,QAAQ,CAAC;IAF5C,CAAC;IAMM,gBAAgB,CAAC,UAAmB;QACvC,OAAO,CACH,IAAA,uBAAU,EAAC,UAAU,CAAC;YACtB,IAAA,0BAAa,EAAC,UAAU,CAAC,CAC5B,CAAC;IACN,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,MAAM,CAAC;IACnC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEM,OAAO,CAAC,UAAmB;QAC9B,OAAO,IAAA,uBAAU,EAAC,UAAU,CAAC,CAAC;IAClC,CAAC;;AA5BL,4BA6BC;AApBiB,iBAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"VoidType.js","sourceRoot":"","sources":["../../src/types/VoidType.ts"],"names":[],"mappings":";;;AAAA,uDAAiF;AACjF,uCAAoC;AACpC,+CAA4C;AAE5C,MAAa,QAAS,SAAQ,iBAAO;IACjC,YACW,QAAiB;QAExB,KAAK,EAAE,CAAC;QAFD,aAAQ,GAAR,QAAQ,CAAS;QAKZ,SAAI,GAAG,yBAAW,CAAC,QAAQ,CAAC;IAF5C,CAAC;IAMM,gBAAgB,CAAC,UAAmB;QACvC,OAAO,CACH,IAAA,uBAAU,EAAC,UAAU,CAAC;YACtB,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,yBAAY,EAAC,UAAU,CAAC,CAC3B,CAAC;IACN,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,MAAM,CAAC;IACnC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEM,OAAO,CAAC,UAAmB;QAC9B,OAAO,IAAA,uBAAU,EAAC,UAAU,CAAC,CAAC;IAClC,CAAC;;AA7BL,4BA8BC;AArBiB,iBAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC"}
@@ -6,7 +6,7 @@ export * from './DoubleType';
6
6
  export * from './DynamicType';
7
7
  export * from './EnumType';
8
8
  export * from './FloatType';
9
- export * from './FunctionType';
9
+ export * from './TypedFunctionType';
10
10
  export * from './helpers';
11
11
  export * from './InheritableType';
12
12
  export * from './IntegerType';
@@ -22,7 +22,7 @@ __exportStar(require("./DoubleType"), exports);
22
22
  __exportStar(require("./DynamicType"), exports);
23
23
  __exportStar(require("./EnumType"), exports);
24
24
  __exportStar(require("./FloatType"), exports);
25
- __exportStar(require("./FunctionType"), exports);
25
+ __exportStar(require("./TypedFunctionType"), exports);
26
26
  __exportStar(require("./helpers"), exports);
27
27
  __exportStar(require("./InheritableType"), exports);
28
28
  __exportStar(require("./IntegerType"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B;AAC9B,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B;AAC7B,gDAA8B;AAC9B,6CAA2B;AAC3B,8CAA4B;AAC5B,iDAA+B;AAC/B,4CAA0B;AAC1B,oDAAkC;AAClC,gDAA8B;AAC9B,kDAAgC;AAChC,gDAA8B;AAC9B,oDAAkC;AAClC,kDAAgC;AAChC,+CAA6B;AAC7B,kDAAgC;AAChC,+CAA6B;AAC7B,sDAAoC;AACpC,8CAA4B;AAC5B,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B;AAC9B,4CAA0B;AAC1B,8CAA4B;AAC5B,+CAA6B;AAC7B,gDAA8B;AAC9B,6CAA2B;AAC3B,8CAA4B;AAC5B,sDAAoC;AACpC,4CAA0B;AAC1B,oDAAkC;AAClC,gDAA8B;AAC9B,kDAAgC;AAChC,gDAA8B;AAC9B,oDAAkC;AAClC,kDAAgC;AAChC,+CAA6B;AAC7B,kDAAgC;AAChC,+CAA6B;AAC7B,sDAAoC;AACpC,8CAA4B;AAC5B,6CAA2B"}
package/dist/util.d.ts CHANGED
@@ -5,7 +5,6 @@ import { BooleanType } from './types/BooleanType';
5
5
  import { DoubleType } from './types/DoubleType';
6
6
  import { DynamicType } from './types/DynamicType';
7
7
  import { FloatType } from './types/FloatType';
8
- import { FunctionType } from './types/FunctionType';
9
8
  import { IntegerType } from './types/IntegerType';
10
9
  import { InvalidType } from './types/InvalidType';
11
10
  import { LongIntegerType } from './types/LongIntegerType';
@@ -18,7 +17,10 @@ import type { Identifier, Locatable, Token } from './lexer/Token';
18
17
  import { SourceNode } from 'source-map';
19
18
  import type { BrsFile } from './files/BrsFile';
20
19
  import type { XmlFile } from './files/XmlFile';
21
- import type { Expression, Statement } from './parser/AstNode';
20
+ import type { AstNode } from './parser/AstNode';
21
+ import { type Expression, type Statement } from './parser/AstNode';
22
+ import type { BscType } from './types/BscType';
23
+ import { FunctionType } from './types/FunctionType';
22
24
  export declare class Util {
23
25
  clearConsole(): void;
24
26
  /**
@@ -288,7 +290,17 @@ export declare class Util {
288
290
  /**
289
291
  * Convert a token into a BscType
290
292
  */
291
- tokenToBscType(token: Token): DynamicType | FloatType | IntegerType | DoubleType | LongIntegerType | StringType | BooleanType | InvalidType | VoidType | FunctionType | ObjectType;
293
+ tokenToBscType(token: Token): DynamicType | ObjectType | FloatType | IntegerType | DoubleType | LongIntegerType | StringType | BooleanType | InvalidType | VoidType | FunctionType;
294
+ isNumberType(targetType: BscType): boolean;
295
+ /**
296
+ * Return the type of the result of a binary operator
297
+ * Note: compound assignments (eg. +=) internally use a binary expression, so that's why TokenKind.PlusEqual, etc. are here too
298
+ */
299
+ binaryOperatorResultType(leftType: BscType, operator: Token, rightType: BscType): BscType;
300
+ /**
301
+ * Return the type of the result of a binary operator
302
+ */
303
+ unaryOperatorResultType(operator: Token, exprType: BscType): BscType;
292
304
  /**
293
305
  * Get the extension for the given file path. Basically the part after the final dot, except for
294
306
  * `d.bs` which is treated as single extension
@@ -322,7 +334,7 @@ export declare class Util {
322
334
  * @param relatedInformationFallbackLocation a default location to use for all `relatedInformation` entries that are missing a location
323
335
  */
324
336
  toDiagnostic(diagnostic: Diagnostic | BsDiagnostic, relatedInformationFallbackLocation: string): {
325
- severity: import("vscode-languageserver-types").DiagnosticSeverity;
337
+ severity: import("vscode-languageserver").DiagnosticSeverity;
326
338
  range: Range;
327
339
  message: string;
328
340
  relatedInformation: {
@@ -359,8 +371,13 @@ export declare class Util {
359
371
  * @param node any ast expression
360
372
  * @returns an array of the parts of the dotted get. If not fully a dotted get, then returns undefined
361
373
  */
362
- getAllDottedGetParts(node: Expression | Statement): Identifier[] | undefined;
374
+ getAllDottedGetParts(node: AstNode): Identifier[] | undefined;
375
+ /**
376
+ * Given an expression, return all the DottedGet name parts as a string.
377
+ * Mostly used to convert namespaced item full names to a strings
378
+ */
363
379
  getAllDottedGetPartsAsString(node: Expression | Statement, parseMode?: ParseMode): string;
380
+ stringJoin(strings: string[], separator: string): string;
364
381
  /**
365
382
  * Break an expression into each part.
366
383
  */