brighterscript 0.66.0-alpha.4 → 0.66.0-alpha.5
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.
- package/CHANGELOG.md +17 -0
- package/dist/DiagnosticMessages.d.ts +6 -1
- package/dist/DiagnosticMessages.js +5 -0
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +1 -0
- package/dist/LanguageServer.js +8 -5
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Program.d.ts +3 -8
- package/dist/Program.js +3 -51
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +14 -2
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +1 -13
- package/dist/Scope.js +10 -65
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +12 -10
- package/dist/SymbolTable.js +33 -24
- package/dist/SymbolTable.js.map +1 -1
- package/dist/astUtils/creators.js +5 -3
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +3 -1
- package/dist/astUtils/reflection.js +12 -1
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +2 -1
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +39 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.js +305 -3
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1369 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/hover/HoverProcessor.d.ts +9 -4
- package/dist/bscPlugin/hover/HoverProcessor.js +64 -67
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +107 -4
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.js +18 -15
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +10 -1
- package/dist/bscPlugin/validation/ScopeValidator.js +85 -42
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.js +276 -0
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +7 -2
- package/dist/diagnosticUtils.js +43 -15
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +10 -8
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +3 -20
- package/dist/files/BrsFile.js +7 -355
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +2 -248
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +1 -6
- package/dist/files/XmlFile.js +0 -13
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +0 -36
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/interfaces.d.ts +8 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +12 -0
- package/dist/lexer/Lexer.js +27 -2
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +40 -0
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +4 -0
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +4 -0
- package/dist/lexer/TokenKind.js +10 -1
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +8 -1
- package/dist/parser/AstNode.js +16 -0
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/Expression.d.ts +16 -1
- package/dist/parser/Expression.js +43 -1
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.d.ts +7 -0
- package/dist/parser/Parser.js +46 -6
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +327 -3
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +1 -1
- package/dist/parser/Statement.d.ts +16 -3
- package/dist/parser/Statement.js +53 -15
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/tests/Parser.spec.js +2 -1
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +16 -8
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +8 -4
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +4 -4
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +13 -13
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +0 -33
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +1 -257
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +6 -3
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +26 -13
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/roku-types/data.json +158 -137
- package/dist/roku-types/index.d.ts +3 -38
- package/dist/types/ArrayType.d.ts +3 -1
- package/dist/types/ArrayType.js +42 -6
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +21 -2
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/BooleanType.d.ts +0 -3
- package/dist/types/BooleanType.js +5 -6
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BscType.d.ts +6 -2
- package/dist/types/BscType.js +20 -4
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BuiltInInterfaceAdder.d.ts +15 -0
- package/dist/types/BuiltInInterfaceAdder.js +93 -0
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js +109 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
- package/dist/types/ClassType.d.ts +4 -0
- package/dist/types/ClassType.js +25 -1
- package/dist/types/ClassType.js.map +1 -1
- package/dist/types/DoubleType.d.ts +1 -4
- package/dist/types/DoubleType.js +5 -6
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DynamicType.js +2 -0
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/EnumType.d.ts +1 -3
- package/dist/types/EnumType.js +6 -5
- package/dist/types/EnumType.js.map +1 -1
- package/dist/types/FloatType.d.ts +1 -4
- package/dist/types/FloatType.js +5 -6
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FunctionType.js +5 -1
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/IntegerType.d.ts +1 -4
- package/dist/types/IntegerType.js +5 -6
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/InterfaceType.js +2 -1
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InvalidType.d.ts +1 -1
- package/dist/types/InvalidType.js +5 -1
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +1 -4
- package/dist/types/LongIntegerType.js +5 -6
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/ObjectType.js +2 -0
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +12 -0
- package/dist/types/ReferenceType.js +69 -12
- package/dist/types/ReferenceType.js.map +1 -1
- package/dist/types/ReferenceType.spec.js +15 -0
- package/dist/types/ReferenceType.spec.js.map +1 -1
- package/dist/types/StringType.d.ts +1 -4
- package/dist/types/StringType.js +4 -5
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/TypedFunctionType.js +9 -2
- package/dist/types/TypedFunctionType.js.map +1 -1
- package/dist/types/UnionType.d.ts +2 -0
- package/dist/types/UnionType.js +22 -1
- package/dist/types/UnionType.js.map +1 -1
- package/dist/types/UnionType.spec.js +43 -17
- package/dist/types/UnionType.spec.js.map +1 -1
- package/dist/types/VoidType.d.ts +1 -1
- package/dist/types/VoidType.js +5 -1
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/helpers.d.ts +1 -0
- package/dist/types/helpers.js +18 -3
- package/dist/types/helpers.js.map +1 -1
- package/dist/util.d.ts +10 -1
- package/dist/util.js +77 -1
- package/dist/util.js.map +1 -1
- package/package.json +1 -1
|
@@ -404,7 +404,7 @@ export declare const nodes: {
|
|
|
404
404
|
name: string;
|
|
405
405
|
url: string;
|
|
406
406
|
};
|
|
407
|
-
"key
|
|
407
|
+
"key definition file": {
|
|
408
408
|
description: string;
|
|
409
409
|
events: any[];
|
|
410
410
|
fields: any[];
|
|
@@ -862,25 +862,6 @@ export declare const nodes: {
|
|
|
862
862
|
name: string;
|
|
863
863
|
url: string;
|
|
864
864
|
};
|
|
865
|
-
rsgpalette: {
|
|
866
|
-
availableSince: string;
|
|
867
|
-
description: string;
|
|
868
|
-
events: any[];
|
|
869
|
-
extends: {
|
|
870
|
-
name: string;
|
|
871
|
-
url: string;
|
|
872
|
-
};
|
|
873
|
-
fields: {
|
|
874
|
-
accessPermission: string;
|
|
875
|
-
default: string;
|
|
876
|
-
description: string;
|
|
877
|
-
name: string;
|
|
878
|
-
type: string;
|
|
879
|
-
}[];
|
|
880
|
-
interfaces: any[];
|
|
881
|
-
name: string;
|
|
882
|
-
url: string;
|
|
883
|
-
};
|
|
884
865
|
scene: {
|
|
885
866
|
description: string;
|
|
886
867
|
events: any[];
|
|
@@ -1557,10 +1538,6 @@ export declare const nodes: {
|
|
|
1557
1538
|
zoomrowlist: {
|
|
1558
1539
|
description: string;
|
|
1559
1540
|
events: any[];
|
|
1560
|
-
extends: {
|
|
1561
|
-
name: string;
|
|
1562
|
-
url: string;
|
|
1563
|
-
};
|
|
1564
1541
|
fields: any[];
|
|
1565
1542
|
interfaces: any[];
|
|
1566
1543
|
name: string;
|
|
@@ -1611,7 +1588,6 @@ export declare const components: {
|
|
|
1611
1588
|
roarray: {
|
|
1612
1589
|
constructors: {
|
|
1613
1590
|
params: {
|
|
1614
|
-
default: any;
|
|
1615
1591
|
isRequired: boolean;
|
|
1616
1592
|
name: string;
|
|
1617
1593
|
type: string;
|
|
@@ -2214,22 +2190,14 @@ export declare const components: {
|
|
|
2214
2190
|
url: string;
|
|
2215
2191
|
};
|
|
2216
2192
|
roregistrysection: {
|
|
2217
|
-
constructors:
|
|
2218
|
-
params: {
|
|
2219
|
-
default: any;
|
|
2220
|
-
isRequired: boolean;
|
|
2221
|
-
name: string;
|
|
2222
|
-
type: string;
|
|
2223
|
-
}[];
|
|
2224
|
-
returnType: string;
|
|
2225
|
-
} | {
|
|
2193
|
+
constructors: {
|
|
2226
2194
|
params: {
|
|
2227
2195
|
isRequired: boolean;
|
|
2228
2196
|
name: string;
|
|
2229
2197
|
type: string;
|
|
2230
2198
|
}[];
|
|
2231
2199
|
returnType: string;
|
|
2232
|
-
}
|
|
2200
|
+
}[];
|
|
2233
2201
|
description: string;
|
|
2234
2202
|
events: any[];
|
|
2235
2203
|
interfaces: {
|
|
@@ -3453,16 +3421,13 @@ export declare const interfaces: {
|
|
|
3453
3421
|
url: string;
|
|
3454
3422
|
}[];
|
|
3455
3423
|
methods: {
|
|
3456
|
-
description: string;
|
|
3457
3424
|
name: string;
|
|
3458
3425
|
params: {
|
|
3459
3426
|
default: any;
|
|
3460
|
-
description: string;
|
|
3461
3427
|
isRequired: boolean;
|
|
3462
3428
|
name: string;
|
|
3463
3429
|
type: string;
|
|
3464
3430
|
}[];
|
|
3465
|
-
returnDescription: string;
|
|
3466
3431
|
returnType: string;
|
|
3467
3432
|
}[];
|
|
3468
3433
|
name: string;
|
|
@@ -4,8 +4,10 @@ export declare class ArrayType extends BscType {
|
|
|
4
4
|
constructor(...innerTypes: BscType[]);
|
|
5
5
|
readonly kind = BscTypeKind.ArrayType;
|
|
6
6
|
innerTypes: BscType[];
|
|
7
|
-
|
|
7
|
+
get defaultType(): BscType;
|
|
8
|
+
isTypeCompatible(targetType: BscType): any;
|
|
8
9
|
toString(): string;
|
|
9
10
|
toTypeString(): string;
|
|
10
11
|
isEqual(targetType: BscType): boolean;
|
|
12
|
+
addBuiltInInterfaces(): void;
|
|
11
13
|
}
|
package/dist/types/ArrayType.js
CHANGED
|
@@ -4,6 +4,11 @@ exports.ArrayType = void 0;
|
|
|
4
4
|
const reflection_1 = require("../astUtils/reflection");
|
|
5
5
|
const BscType_1 = require("./BscType");
|
|
6
6
|
const BscTypeKind_1 = require("./BscTypeKind");
|
|
7
|
+
const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
|
|
8
|
+
const DynamicType_1 = require("./DynamicType");
|
|
9
|
+
const IntegerType_1 = require("./IntegerType");
|
|
10
|
+
const UnionType_1 = require("./UnionType");
|
|
11
|
+
const helpers_1 = require("./helpers");
|
|
7
12
|
class ArrayType extends BscType_1.BscType {
|
|
8
13
|
constructor(...innerTypes) {
|
|
9
14
|
super();
|
|
@@ -11,6 +16,16 @@ class ArrayType extends BscType_1.BscType {
|
|
|
11
16
|
this.innerTypes = [];
|
|
12
17
|
this.innerTypes = innerTypes;
|
|
13
18
|
}
|
|
19
|
+
get defaultType() {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
if (((_a = this.innerTypes) === null || _a === void 0 ? void 0 : _a.length) === 0) {
|
|
22
|
+
return DynamicType_1.DynamicType.instance;
|
|
23
|
+
}
|
|
24
|
+
else if (((_b = this.innerTypes) === null || _b === void 0 ? void 0 : _b.length) === 1) {
|
|
25
|
+
return this.innerTypes[0];
|
|
26
|
+
}
|
|
27
|
+
return (0, helpers_1.getUniqueType)(this.innerTypes, UnionType_1.unionTypeFactory);
|
|
28
|
+
}
|
|
14
29
|
isTypeCompatible(targetType) {
|
|
15
30
|
if ((0, reflection_1.isDynamicType)(targetType)) {
|
|
16
31
|
return true;
|
|
@@ -18,22 +33,21 @@ class ArrayType extends BscType_1.BscType {
|
|
|
18
33
|
else if ((0, reflection_1.isObjectType)(targetType)) {
|
|
19
34
|
return true;
|
|
20
35
|
}
|
|
21
|
-
else if (
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
if (this.isEqual(targetType)) {
|
|
36
|
+
else if ((0, helpers_1.isUnionTypeCompatible)(this, targetType)) {
|
|
25
37
|
return true;
|
|
26
38
|
}
|
|
39
|
+
else if ((0, reflection_1.isArrayType)(targetType)) {
|
|
40
|
+
return this.defaultType.isTypeCompatible(targetType.defaultType);
|
|
41
|
+
}
|
|
27
42
|
return false;
|
|
28
43
|
}
|
|
29
44
|
toString() {
|
|
30
|
-
return `Array<${this.
|
|
45
|
+
return `Array<${this.defaultType.toString()}>`;
|
|
31
46
|
}
|
|
32
47
|
toTypeString() {
|
|
33
48
|
return 'object';
|
|
34
49
|
}
|
|
35
50
|
isEqual(targetType) {
|
|
36
|
-
//TODO: figure out array type equality later
|
|
37
51
|
if ((0, reflection_1.isArrayType)(targetType)) {
|
|
38
52
|
if (targetType.innerTypes.length !== this.innerTypes.length) {
|
|
39
53
|
return false;
|
|
@@ -47,6 +61,28 @@ class ArrayType extends BscType_1.BscType {
|
|
|
47
61
|
}
|
|
48
62
|
return false;
|
|
49
63
|
}
|
|
64
|
+
addBuiltInInterfaces() {
|
|
65
|
+
if (!this.hasAddedBuiltInInterfaces) {
|
|
66
|
+
const overrideMap = new Map();
|
|
67
|
+
const defaultType = this.defaultType;
|
|
68
|
+
overrideMap
|
|
69
|
+
// ifArray
|
|
70
|
+
.set('peek', { returnType: defaultType })
|
|
71
|
+
.set('pop', { returnType: defaultType })
|
|
72
|
+
.set('push', { parameterTypes: [defaultType] })
|
|
73
|
+
.set('shift', { returnType: defaultType })
|
|
74
|
+
.set('unshift', { parameterTypes: [defaultType] })
|
|
75
|
+
.set('append', { parameterTypes: [this] })
|
|
76
|
+
// ifArrayGet
|
|
77
|
+
.set('get', { returnType: defaultType })
|
|
78
|
+
// ifArraySet
|
|
79
|
+
.set('get', { parameterTypes: [IntegerType_1.IntegerType.instance, defaultType] })
|
|
80
|
+
//ifEnum
|
|
81
|
+
.set('next', { returnType: defaultType });
|
|
82
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(this, overrideMap);
|
|
83
|
+
}
|
|
84
|
+
this.hasAddedBuiltInInterfaces = true;
|
|
85
|
+
}
|
|
50
86
|
}
|
|
51
87
|
exports.ArrayType = ArrayType;
|
|
52
88
|
//# sourceMappingURL=ArrayType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../src/types/ArrayType.ts"],"names":[],"mappings":";;;AAAA,uDAAkF;AAClF,uCAAoC;AACpC,+CAA4C;AAE5C,MAAa,SAAU,SAAQ,iBAAO;IAClC,YAAY,GAAG,UAAqB;QAChC,KAAK,EAAE,CAAC;QAII,SAAI,GAAG,yBAAW,CAAC,SAAS,CAAC;QAEtC,eAAU,GAAc,EAAE,CAAC;QAL9B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"ArrayType.js","sourceRoot":"","sources":["../../src/types/ArrayType.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ 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 SymbolTable_1 = require("../SymbolTable");
|
|
9
|
+
const TypedFunctionType_1 = require("./TypedFunctionType");
|
|
10
|
+
const testHelpers_spec_1 = require("../testHelpers.spec");
|
|
11
|
+
const IntegerType_1 = require("./IntegerType");
|
|
8
12
|
describe('ArrayType', () => {
|
|
9
13
|
it('is equivalent to array types', () => {
|
|
10
14
|
(0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType().isTypeCompatible(new ArrayType_1.ArrayType())).to.be.true;
|
|
@@ -22,8 +26,23 @@ describe('ArrayType', () => {
|
|
|
22
26
|
(0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType().isTypeCompatible(new ArrayType_1.ArrayType())).to.be.true;
|
|
23
27
|
});
|
|
24
28
|
describe('toString', () => {
|
|
25
|
-
it('prints
|
|
26
|
-
(0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new StringType_1.StringType()).toString()).to.eql('Array<boolean
|
|
29
|
+
it('prints default type', () => {
|
|
30
|
+
(0, chai_config_spec_1.expect)(new ArrayType_1.ArrayType(new BooleanType_1.BooleanType(), new StringType_1.StringType()).toString()).to.eql('Array<boolean or string>');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('built in interfaces', () => {
|
|
34
|
+
it('adds built in interfaces', () => {
|
|
35
|
+
const myArray = new ArrayType_1.ArrayType();
|
|
36
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myArray.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
37
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myArray.getMemberType('sort', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
38
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myArray.getMemberType('next', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
39
|
+
});
|
|
40
|
+
it('correctly sets types for typed array', () => {
|
|
41
|
+
const myArray = new ArrayType_1.ArrayType(IntegerType_1.IntegerType.instance);
|
|
42
|
+
const popType = myArray.getMemberType('pop', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
43
|
+
(0, testHelpers_spec_1.expectTypeToBe)(popType.returnType, IntegerType_1.IntegerType);
|
|
44
|
+
const pushType = myArray.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
45
|
+
(0, testHelpers_spec_1.expectTypeToBe)(pushType.params[0].type, IntegerType_1.IntegerType);
|
|
27
46
|
});
|
|
28
47
|
});
|
|
29
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../src/types/ArrayType.spec.ts"],"names":[],"mappings":";;AAAA,0DAA6C;AAE7C,2CAAwC;AACxC,+CAA4C;AAC5C,+CAA4C;AAC5C,6CAA0C;
|
|
1
|
+
{"version":3,"file":"ArrayType.spec.js","sourceRoot":"","sources":["../../src/types/ArrayType.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import type { GetTypeOptions } from '../interfaces';
|
|
2
1
|
import { BscType } from './BscType';
|
|
3
2
|
import { BscTypeKind } from './BscTypeKind';
|
|
4
|
-
import { DynamicType } from './DynamicType';
|
|
5
3
|
export declare class BooleanType extends BscType {
|
|
6
4
|
typeText?: string;
|
|
7
5
|
constructor(typeText?: string);
|
|
@@ -11,5 +9,4 @@ export declare class BooleanType extends BscType {
|
|
|
11
9
|
toString(): string;
|
|
12
10
|
toTypeString(): string;
|
|
13
11
|
isEqual(targetType: BscType): boolean;
|
|
14
|
-
getMemberType(memberName: string, options: GetTypeOptions): DynamicType;
|
|
15
12
|
}
|
|
@@ -4,7 +4,8 @@ exports.BooleanType = void 0;
|
|
|
4
4
|
const reflection_1 = require("../astUtils/reflection");
|
|
5
5
|
const BscType_1 = require("./BscType");
|
|
6
6
|
const BscTypeKind_1 = require("./BscTypeKind");
|
|
7
|
-
const
|
|
7
|
+
const helpers_1 = require("./helpers");
|
|
8
|
+
const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
|
|
8
9
|
class BooleanType extends BscType_1.BscType {
|
|
9
10
|
constructor(typeText) {
|
|
10
11
|
super();
|
|
@@ -14,7 +15,8 @@ class BooleanType extends BscType_1.BscType {
|
|
|
14
15
|
isTypeCompatible(targetType) {
|
|
15
16
|
return ((0, reflection_1.isBooleanType)(targetType) ||
|
|
16
17
|
(0, reflection_1.isDynamicType)(targetType) ||
|
|
17
|
-
(0, reflection_1.isObjectType)(targetType)
|
|
18
|
+
(0, reflection_1.isObjectType)(targetType) ||
|
|
19
|
+
(0, helpers_1.isUnionTypeCompatible)(this, targetType));
|
|
18
20
|
}
|
|
19
21
|
toString() {
|
|
20
22
|
var _a;
|
|
@@ -26,11 +28,8 @@ class BooleanType extends BscType_1.BscType {
|
|
|
26
28
|
isEqual(targetType) {
|
|
27
29
|
return (0, reflection_1.isBooleanType)(targetType);
|
|
28
30
|
}
|
|
29
|
-
getMemberType(memberName, options) {
|
|
30
|
-
//TODO: this should really add the appropriate interface methods from roku-types
|
|
31
|
-
return DynamicType_1.DynamicType.instance;
|
|
32
|
-
}
|
|
33
31
|
}
|
|
34
32
|
exports.BooleanType = BooleanType;
|
|
35
33
|
BooleanType.instance = new BooleanType('boolean');
|
|
34
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.primitiveTypeInstanceCache.set('boolean', BooleanType.instance);
|
|
36
35
|
//# sourceMappingURL=BooleanType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BooleanType.js","sourceRoot":"","sources":["../../src/types/BooleanType.ts"],"names":[],"mappings":";;;AAAA,uDAAoF;
|
|
1
|
+
{"version":3,"file":"BooleanType.js","sourceRoot":"","sources":["../../src/types/BooleanType.ts"],"names":[],"mappings":";;;AAAA,uDAAoF;AACpF,uCAAoC;AACpC,+CAA4C;AAC5C,uCAAkD;AAClD,mEAAgE;AAEhE,MAAa,WAAY,SAAQ,iBAAO;IACpC,YACW,QAAiB;QAExB,KAAK,EAAE,CAAC;QAFD,aAAQ,GAAR,QAAQ,CAAS;QAKZ,SAAI,GAAG,yBAAW,CAAC,WAAW,CAAC;IAF/C,CAAC;IAMM,gBAAgB,CAAC,UAAmB;QACvC,OAAO,CACH,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,yBAAY,EAAC,UAAU,CAAC;YACxB,IAAA,+BAAqB,EAAC,IAAI,EAAE,UAAU,CAAC,CAC1C,CAAC;IACN,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,SAAS,CAAC;IACtC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,UAAmB;QACvB,OAAO,IAAA,0BAAa,EAAC,UAAU,CAAC,CAAC;IACrC,CAAC;;AA9BL,kCA+BC;AAtBiB,oBAAQ,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;AAwBxD,6CAAqB,CAAC,0BAA0B,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC"}
|
package/dist/types/BscType.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import type { GetSymbolTypeOptions, SymbolTableProvider } from '../SymbolTable';
|
|
2
|
-
import type { Range } from 'vscode-languageserver';
|
|
3
2
|
import type { SymbolTypeFlag } from '../SymbolTable';
|
|
4
3
|
import { SymbolTable } from '../SymbolTable';
|
|
4
|
+
import type { ExtraSymbolData } from '../interfaces';
|
|
5
5
|
export declare abstract class BscType {
|
|
6
6
|
readonly memberTable: SymbolTable;
|
|
7
7
|
protected __identifier: string;
|
|
8
|
+
protected hasAddedBuiltInInterfaces: boolean;
|
|
8
9
|
constructor(name?: string);
|
|
9
10
|
pushMemberProvider(provider: SymbolTableProvider): void;
|
|
10
11
|
popMemberProvider(): void;
|
|
11
|
-
|
|
12
|
+
getBuiltInMemberTable(): SymbolTable;
|
|
13
|
+
addMember(name: string, data: ExtraSymbolData, type: BscType, flags: SymbolTypeFlag): void;
|
|
12
14
|
getMemberType(name: string, options: GetSymbolTypeOptions): BscType;
|
|
15
|
+
getMemberTable(): SymbolTable;
|
|
13
16
|
isResolvable(): boolean;
|
|
14
17
|
/**
|
|
15
18
|
* Check if this type can be assigned to the target type
|
|
@@ -26,4 +29,5 @@ export declare abstract class BscType {
|
|
|
26
29
|
toTypeString(): string;
|
|
27
30
|
isEqual(targetType: BscType): boolean;
|
|
28
31
|
checkCompatibilityBasedOnMembers(targetType: BscType, flags: SymbolTypeFlag): boolean;
|
|
32
|
+
addBuiltInInterfaces(): void;
|
|
29
33
|
}
|
package/dist/types/BscType.js
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BscType = void 0;
|
|
4
4
|
const SymbolTable_1 = require("../SymbolTable");
|
|
5
|
+
const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
|
|
5
6
|
class BscType {
|
|
6
7
|
constructor(name = '') {
|
|
8
|
+
this.hasAddedBuiltInInterfaces = false;
|
|
7
9
|
this.__identifier = `${this.constructor.name}${name ? ': ' + name : ''}`;
|
|
8
10
|
this.memberTable = new SymbolTable_1.SymbolTable(this.__identifier);
|
|
9
11
|
}
|
|
@@ -13,12 +15,19 @@ class BscType {
|
|
|
13
15
|
popMemberProvider() {
|
|
14
16
|
this.memberTable.popParentProvider();
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
this.memberTable
|
|
18
|
+
getBuiltInMemberTable() {
|
|
19
|
+
return this.memberTable;
|
|
20
|
+
}
|
|
21
|
+
addMember(name, data, type, flags) {
|
|
22
|
+
this.memberTable.addSymbol(name, data, type, flags);
|
|
18
23
|
}
|
|
19
24
|
getMemberType(name, options) {
|
|
25
|
+
this.addBuiltInInterfaces();
|
|
20
26
|
return this.memberTable.getSymbolType(name, options);
|
|
21
27
|
}
|
|
28
|
+
getMemberTable() {
|
|
29
|
+
return this.memberTable;
|
|
30
|
+
}
|
|
22
31
|
isResolvable() {
|
|
23
32
|
return true;
|
|
24
33
|
}
|
|
@@ -47,11 +56,12 @@ class BscType {
|
|
|
47
56
|
throw new Error('Method not implemented.');
|
|
48
57
|
}
|
|
49
58
|
checkCompatibilityBasedOnMembers(targetType, flags) {
|
|
50
|
-
var _a;
|
|
59
|
+
var _a, _b;
|
|
51
60
|
let isSuperSet = true;
|
|
52
61
|
const targetSymbols = (_a = targetType.memberTable) === null || _a === void 0 ? void 0 : _a.getAllSymbols(flags);
|
|
53
62
|
for (const targetSymbol of targetSymbols) {
|
|
54
|
-
const myTypesOfTargetSymbol = this.memberTable
|
|
63
|
+
const myTypesOfTargetSymbol = (_b = this.memberTable
|
|
64
|
+
.getSymbolTypes(targetSymbol.name, { flags: flags })) === null || _b === void 0 ? void 0 : _b.map(symbol => symbol.type);
|
|
55
65
|
isSuperSet = isSuperSet && myTypesOfTargetSymbol && myTypesOfTargetSymbol.length > 0 &&
|
|
56
66
|
myTypesOfTargetSymbol.reduce((acc, myTypeOfTarget) => {
|
|
57
67
|
return acc && myTypeOfTarget.isTypeCompatible(targetSymbol.type);
|
|
@@ -62,6 +72,12 @@ class BscType {
|
|
|
62
72
|
}
|
|
63
73
|
return isSuperSet;
|
|
64
74
|
}
|
|
75
|
+
addBuiltInInterfaces() {
|
|
76
|
+
if (!this.hasAddedBuiltInInterfaces) {
|
|
77
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(this);
|
|
78
|
+
}
|
|
79
|
+
this.hasAddedBuiltInInterfaces = true;
|
|
80
|
+
}
|
|
65
81
|
}
|
|
66
82
|
exports.BscType = BscType;
|
|
67
83
|
//# sourceMappingURL=BscType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BscType.js","sourceRoot":"","sources":["../../src/types/BscType.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"BscType.js","sourceRoot":"","sources":["../../src/types/BscType.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Cache } from '../Cache';
|
|
2
|
+
import type { TypedFunctionType } from './TypedFunctionType';
|
|
3
|
+
import type { BscType } from './BscType';
|
|
4
|
+
export interface BuiltInInterfaceOverride {
|
|
5
|
+
type?: BscType;
|
|
6
|
+
parameterTypes?: BscType[];
|
|
7
|
+
returnType?: BscType;
|
|
8
|
+
}
|
|
9
|
+
export declare class BuiltInInterfaceAdder {
|
|
10
|
+
static readonly primitiveTypeInstanceCache: Cache<string, BscType>;
|
|
11
|
+
static typedFunctionFactory: (type: BscType) => TypedFunctionType;
|
|
12
|
+
static addBuiltInInterfacesToType(thisType: BscType, overrides?: Map<string, BuiltInInterfaceOverride>): void;
|
|
13
|
+
private static getPrimitiveType;
|
|
14
|
+
static getMatchingRokuComponent(theType: BscType): any;
|
|
15
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuiltInInterfaceAdder = void 0;
|
|
4
|
+
const roku_types_1 = require("../roku-types");
|
|
5
|
+
const Cache_1 = require("../Cache");
|
|
6
|
+
const SymbolTable_1 = require("../SymbolTable");
|
|
7
|
+
const reflection_1 = require("../astUtils/reflection");
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
9
|
+
class BuiltInInterfaceAdder {
|
|
10
|
+
static addBuiltInInterfacesToType(thisType, overrides) {
|
|
11
|
+
var _a, _b, _c;
|
|
12
|
+
const componentName = this.getMatchingRokuComponent(thisType);
|
|
13
|
+
if (!componentName) {
|
|
14
|
+
// No component matches the given type
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const memberTable = thisType.getBuiltInMemberTable();
|
|
18
|
+
if (!memberTable) {
|
|
19
|
+
// no memberTable to add to
|
|
20
|
+
// this could be because it's a class that has a parent
|
|
21
|
+
// the original ancestor should get the built ins
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const builtInComponent = roku_types_1.components[componentName.toLowerCase()];
|
|
25
|
+
if (!builtInComponent) {
|
|
26
|
+
throw new Error(`Unknown Roku component '${componentName}'`);
|
|
27
|
+
}
|
|
28
|
+
if (!this.typedFunctionFactory) {
|
|
29
|
+
throw new Error(`Unable to build typed functions - no typed function factory`);
|
|
30
|
+
}
|
|
31
|
+
for (const iface of builtInComponent.interfaces) {
|
|
32
|
+
const lowerIfaceName = iface.name.toLowerCase();
|
|
33
|
+
for (const method of roku_types_1.interfaces[lowerIfaceName].methods) {
|
|
34
|
+
const override = overrides === null || overrides === void 0 ? void 0 : overrides.get(method.name.toLowerCase());
|
|
35
|
+
const returnType = (_a = override === null || override === void 0 ? void 0 : override.returnType) !== null && _a !== void 0 ? _a : this.getPrimitiveType(method.returnType);
|
|
36
|
+
const methodFuncType = this.typedFunctionFactory(returnType);
|
|
37
|
+
methodFuncType.name = method.name;
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
39
|
+
for (let i = 0; i < method.params.length; i++) {
|
|
40
|
+
const param = method.params[i];
|
|
41
|
+
const paramType = (_c = (_b = override === null || override === void 0 ? void 0 : override.parameterTypes) === null || _b === void 0 ? void 0 : _b[i]) !== null && _c !== void 0 ? _c : this.getPrimitiveType(param.type);
|
|
42
|
+
methodFuncType.addParameter(param.name, paramType, !param.isRequired);
|
|
43
|
+
}
|
|
44
|
+
memberTable.addSymbol(method.name, { description: method.description, completionPriority: 1 }, methodFuncType, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
static getPrimitiveType(typeName) {
|
|
49
|
+
const returnType = this.primitiveTypeInstanceCache.get(typeName.toLowerCase());
|
|
50
|
+
if (!returnType) {
|
|
51
|
+
throw new Error(`Unable to find type instance '${typeName}'`);
|
|
52
|
+
}
|
|
53
|
+
return returnType;
|
|
54
|
+
}
|
|
55
|
+
static getMatchingRokuComponent(theType) {
|
|
56
|
+
if ((0, reflection_1.isStringType)(theType)) {
|
|
57
|
+
return 'roString';
|
|
58
|
+
}
|
|
59
|
+
else if ((0, reflection_1.isIntegerType)(theType)) {
|
|
60
|
+
return 'roInt';
|
|
61
|
+
}
|
|
62
|
+
else if ((0, reflection_1.isBooleanType)(theType)) {
|
|
63
|
+
return 'roBoolean';
|
|
64
|
+
}
|
|
65
|
+
else if ((0, reflection_1.isFloatType)(theType)) {
|
|
66
|
+
return 'roFloat';
|
|
67
|
+
}
|
|
68
|
+
else if ((0, reflection_1.isDoubleType)(theType)) {
|
|
69
|
+
return 'roDouble';
|
|
70
|
+
}
|
|
71
|
+
else if ((0, reflection_1.isLongIntegerType)(theType)) {
|
|
72
|
+
return 'roLongInteger';
|
|
73
|
+
}
|
|
74
|
+
else if ((0, reflection_1.isInvalidType)(theType)) {
|
|
75
|
+
return 'roInvalid';
|
|
76
|
+
}
|
|
77
|
+
else if ((0, reflection_1.isCallableType)(theType)) {
|
|
78
|
+
return 'roFunction';
|
|
79
|
+
}
|
|
80
|
+
else if ((0, reflection_1.isClassType)(theType)) {
|
|
81
|
+
return 'roAssociativeArray';
|
|
82
|
+
}
|
|
83
|
+
else if ((0, reflection_1.isArrayType)(theType)) {
|
|
84
|
+
return 'roArray';
|
|
85
|
+
}
|
|
86
|
+
else if ((0, reflection_1.isEnumMemberType)(theType)) {
|
|
87
|
+
return this.getMatchingRokuComponent(theType.underlyingType);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.BuiltInInterfaceAdder = BuiltInInterfaceAdder;
|
|
92
|
+
BuiltInInterfaceAdder.primitiveTypeInstanceCache = new Cache_1.Cache();
|
|
93
|
+
//# sourceMappingURL=BuiltInInterfaceAdder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuiltInInterfaceAdder.js","sourceRoot":"","sources":["../../src/types/BuiltInInterfaceAdder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
|
|
4
|
+
const StringType_1 = require("./StringType");
|
|
5
|
+
const testHelpers_spec_1 = require("../testHelpers.spec");
|
|
6
|
+
const IntegerType_1 = require("./IntegerType");
|
|
7
|
+
const SymbolTable_1 = require("../SymbolTable");
|
|
8
|
+
const TypedFunctionType_1 = require("./TypedFunctionType");
|
|
9
|
+
const BooleanType_1 = require("./BooleanType");
|
|
10
|
+
const FunctionType_1 = require("./FunctionType");
|
|
11
|
+
const DoubleType_1 = require("./DoubleType");
|
|
12
|
+
const DynamicType_1 = require("./DynamicType");
|
|
13
|
+
const ClassType_1 = require("./ClassType");
|
|
14
|
+
const ArrayType_1 = require("./ArrayType");
|
|
15
|
+
const chai_1 = require("chai");
|
|
16
|
+
const EnumType_1 = require("./EnumType");
|
|
17
|
+
describe('BuiltInInterfaceAdder', () => {
|
|
18
|
+
it('should add members to StringType', () => {
|
|
19
|
+
const myType = new StringType_1.StringType();
|
|
20
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
21
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('trim', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
22
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('split', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
23
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getString', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
24
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('replace', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
25
|
+
});
|
|
26
|
+
it('should have correct types for string members', () => {
|
|
27
|
+
const myType = new StringType_1.StringType();
|
|
28
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
29
|
+
const leftType = myType.getMemberType('left', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
30
|
+
(0, testHelpers_spec_1.expectTypeToBe)(leftType, TypedFunctionType_1.TypedFunctionType);
|
|
31
|
+
const leftFuncType = leftType;
|
|
32
|
+
(0, chai_1.expect)(leftFuncType.params.length).to.equal(1);
|
|
33
|
+
(0, testHelpers_spec_1.expectTypeToBe)(leftFuncType.params[0].type, IntegerType_1.IntegerType);
|
|
34
|
+
(0, testHelpers_spec_1.expectTypeToBe)(leftFuncType.returnType, StringType_1.StringType);
|
|
35
|
+
});
|
|
36
|
+
it('should add members to IntegerType', () => {
|
|
37
|
+
const myType = new IntegerType_1.IntegerType();
|
|
38
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
39
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
40
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getInt', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
41
|
+
});
|
|
42
|
+
it('should add members to BooleanType', () => {
|
|
43
|
+
const myType = new BooleanType_1.BooleanType();
|
|
44
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
45
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
46
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getBoolean', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
47
|
+
});
|
|
48
|
+
it('should add members to DoubleType', () => {
|
|
49
|
+
const myType = new DoubleType_1.DoubleType();
|
|
50
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
51
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
52
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getDouble', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
53
|
+
});
|
|
54
|
+
it('should add members to FunctionType', () => {
|
|
55
|
+
const myType = new FunctionType_1.FunctionType();
|
|
56
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
57
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
58
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getSub', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
59
|
+
});
|
|
60
|
+
it('should add members to TypedFunctionType', () => {
|
|
61
|
+
const myType = new TypedFunctionType_1.TypedFunctionType(DynamicType_1.DynamicType.instance);
|
|
62
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
63
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('toStr', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
64
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getSub', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
65
|
+
});
|
|
66
|
+
it('should add members to ArrayType', () => {
|
|
67
|
+
const myType = new ArrayType_1.ArrayType();
|
|
68
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
69
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
70
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('getEntry', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
71
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('join', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
72
|
+
});
|
|
73
|
+
it('should add members to ClassType', () => {
|
|
74
|
+
const myType = new ClassType_1.ClassType('Klass');
|
|
75
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
76
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('clear', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
77
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('lookUp', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), TypedFunctionType_1.TypedFunctionType);
|
|
78
|
+
});
|
|
79
|
+
it('should allow classes to override built in members', () => {
|
|
80
|
+
const myType = new ClassType_1.ClassType('Klass');
|
|
81
|
+
myType.addMember('clear', null, new BooleanType_1.BooleanType(), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
82
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(myType);
|
|
83
|
+
(0, testHelpers_spec_1.expectTypeToBe)(myType.getMemberType('clear', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), BooleanType_1.BooleanType);
|
|
84
|
+
});
|
|
85
|
+
it('should only add built ins to original ancestor', () => {
|
|
86
|
+
const sup = new ClassType_1.ClassType('SuperKlass');
|
|
87
|
+
const sub = new ClassType_1.ClassType('Klass', sup);
|
|
88
|
+
sup.addMember('clear', null, new BooleanType_1.BooleanType(), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
89
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.addBuiltInInterfacesToType(sub);
|
|
90
|
+
(0, testHelpers_spec_1.expectTypeToBe)(sub.getMemberType('clear', { flags: SymbolTable_1.SymbolTypeFlag.runtime }), BooleanType_1.BooleanType);
|
|
91
|
+
});
|
|
92
|
+
it('should respect overrides', () => {
|
|
93
|
+
const myArray = new ArrayType_1.ArrayType(IntegerType_1.IntegerType.instance);
|
|
94
|
+
const popType = myArray.getMemberType('pop', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
95
|
+
(0, testHelpers_spec_1.expectTypeToBe)(popType.returnType, IntegerType_1.IntegerType);
|
|
96
|
+
const pushType = myArray.getMemberType('push', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
97
|
+
(0, testHelpers_spec_1.expectTypeToBe)(pushType.params[0].type, IntegerType_1.IntegerType);
|
|
98
|
+
});
|
|
99
|
+
it('works with enums', () => {
|
|
100
|
+
const myEnum = new EnumType_1.EnumType('myEnum', StringType_1.StringType.instance);
|
|
101
|
+
const myEnumMember = new EnumType_1.EnumMemberType('myEnum', 'member', StringType_1.StringType.instance);
|
|
102
|
+
myEnum.addMember('member', {}, myEnumMember, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
103
|
+
const enumTrim = myEnum.getMemberType('trim', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
104
|
+
(0, chai_1.expect)(enumTrim).to.be.undefined;
|
|
105
|
+
const memberTrim = myEnumMember.getMemberType('trim', { flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
106
|
+
(0, testHelpers_spec_1.expectTypeToBe)(memberTrim, TypedFunctionType_1.TypedFunctionType);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=BuiltInInterfaceAdder.spec.js.map
|