brighterscript 0.42.0 → 0.45.0
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 +49 -0
- package/dist/Cache.d.ts +3 -8
- package/dist/Cache.js +9 -14
- package/dist/Cache.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +21 -1
- package/dist/DiagnosticMessages.js +20 -0
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +1 -6
- package/dist/LanguageServer.js +3 -12
- package/dist/LanguageServer.js.map +1 -1
- package/dist/PluginInterface.d.ts +3 -3
- package/dist/PluginInterface.js +3 -0
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +68 -25
- package/dist/Program.js +169 -76
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +6 -6
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +18 -11
- package/dist/Scope.js +41 -14
- package/dist/Scope.js.map +1 -1
- package/dist/XmlScope.d.ts +3 -3
- package/dist/astUtils/AstEditor.d.ts +6 -0
- package/dist/astUtils/AstEditor.js +10 -0
- package/dist/astUtils/AstEditor.js.map +1 -1
- package/dist/astUtils/AstEditor.spec.js +37 -0
- package/dist/astUtils/AstEditor.spec.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +5 -2
- package/dist/astUtils/reflection.js +14 -2
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +6 -6
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +3 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +15 -18
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +4 -1
- package/dist/bscPlugin/BscPlugin.js +21 -2
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +3 -3
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +18 -16
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +9 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +97 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.d.ts → BrsFileSemanticTokensProcessor.spec.d.ts} +0 -0
- package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.js → BrsFileSemanticTokensProcessor.spec.js} +32 -4
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +36 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +9 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +66 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +94 -0
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
- package/dist/files/BrsFile.Class.spec.js +218 -114
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +27 -8
- package/dist/files/BrsFile.js +216 -95
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +338 -190
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +11 -5
- package/dist/files/XmlFile.js +15 -9
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +118 -114
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +29 -27
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/index.d.ts +12 -3
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +50 -9
- package/dist/lexer/Lexer.js +1 -2
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +470 -462
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +2 -0
- package/dist/lexer/TokenKind.js +5 -0
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/Expression.d.ts +1 -1
- package/dist/parser/Expression.js +10 -10
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +32 -31
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +23 -2
- package/dist/parser/Parser.js +445 -254
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +86 -24
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.spec.js +1 -1
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/Statement.d.ts +54 -2
- package/dist/parser/Statement.js +162 -9
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +5 -5
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/tests/Parser.spec.d.ts +3 -3
- package/dist/parser/tests/Parser.spec.js +4 -4
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +40 -40
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +22 -21
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +100 -99
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +25 -25
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Additive.spec.js +21 -21
- package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +91 -91
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +102 -102
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +15 -15
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +22 -21
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +11 -11
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +171 -171
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +50 -50
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +25 -25
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +17 -17
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +26 -26
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +27 -27
- package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +4 -3
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/Relational.spec.js +25 -25
- package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +8 -8
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +7 -7
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/Declaration.spec.js +20 -20
- package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
- package/dist/parser/tests/statement/Enum.spec.js +774 -0
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
- package/dist/parser/tests/statement/Function.spec.js +121 -120
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +9 -8
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +22 -22
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +12 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +7 -7
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +71 -70
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +17 -17
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +33 -33
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +53 -53
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +7 -6
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/preprocessor/Chunk.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.js +7 -7
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/types/FunctionType.d.ts +2 -2
- package/dist/types/FunctionType.js +3 -3
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +2 -2
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/util.d.ts +27 -1
- package/dist/util.js +96 -29
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +20 -27
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -1
- package/dist/astUtils/index.d.ts +0 -7
- package/dist/astUtils/index.js +0 -26
- package/dist/astUtils/index.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
- package/dist/lexer/index.d.ts +0 -3
- package/dist/lexer/index.js +0 -18
- package/dist/lexer/index.js.map +0 -1
- package/dist/parser/index.d.ts +0 -3
- package/dist/parser/index.js +0 -16
- package/dist/parser/index.js.map +0 -1
- package/dist/preprocessor/index.d.ts +0 -3
- package/dist/preprocessor/index.js +0 -16
- package/dist/preprocessor/index.js.map +0 -1
|
@@ -29,10 +29,10 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
29
29
|
fsExtra.emptyDirSync(tmpPath);
|
|
30
30
|
});
|
|
31
31
|
function addFile(relativePath, text) {
|
|
32
|
-
return program.
|
|
32
|
+
return program.setFile({ src: `${rootDir}/${relativePath}`, dest: relativePath }, text);
|
|
33
33
|
}
|
|
34
34
|
it('detects all classes after parse', () => {
|
|
35
|
-
let file = program.
|
|
35
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
36
36
|
class Animal
|
|
37
37
|
end class
|
|
38
38
|
class Duck
|
|
@@ -43,15 +43,14 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
43
43
|
(0, chai_1.expect)(file.parser.references.classStatements.map(x => x.getName(Parser_1.ParseMode.BrighterScript)).sort()).to.eql(['Animal', 'Duck']);
|
|
44
44
|
});
|
|
45
45
|
it('does not cause errors with incomplete class statement', () => {
|
|
46
|
-
program.
|
|
46
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
47
47
|
class
|
|
48
48
|
`);
|
|
49
49
|
program.validate();
|
|
50
50
|
//if no exception was thrown, this test passes
|
|
51
51
|
});
|
|
52
52
|
it('catches child class missing super call in constructor', () => {
|
|
53
|
-
|
|
54
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
53
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
55
54
|
class Person
|
|
56
55
|
sub new()
|
|
57
56
|
end sub
|
|
@@ -62,11 +61,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
62
61
|
end class
|
|
63
62
|
`);
|
|
64
63
|
program.validate();
|
|
65
|
-
(0,
|
|
64
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
65
|
+
DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
|
|
66
|
+
]);
|
|
66
67
|
});
|
|
67
68
|
it('access modifier is option for override', () => {
|
|
68
|
-
|
|
69
|
-
let file = program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
69
|
+
let file = program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
70
70
|
class Animal
|
|
71
71
|
sub move()
|
|
72
72
|
end sub
|
|
@@ -78,14 +78,13 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
78
78
|
end class
|
|
79
79
|
`);
|
|
80
80
|
program.validate();
|
|
81
|
-
(0,
|
|
81
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
82
82
|
let duckClass = file.parser.references.classStatements.find(x => x.name.text.toLowerCase() === 'duck');
|
|
83
83
|
(0, chai_1.expect)(duckClass).to.exist;
|
|
84
84
|
(0, chai_1.expect)(duckClass.memberMap['move']).to.exist;
|
|
85
85
|
});
|
|
86
86
|
it('supports various namespace configurations', () => {
|
|
87
|
-
|
|
88
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
87
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
89
88
|
class Animal
|
|
90
89
|
sub new()
|
|
91
90
|
bigBird = new Birds.Bird()
|
|
@@ -105,12 +104,11 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
105
104
|
end namespace
|
|
106
105
|
`);
|
|
107
106
|
program.validate();
|
|
108
|
-
(0,
|
|
107
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
109
108
|
});
|
|
110
109
|
describe('super', () => {
|
|
111
110
|
it('always requires super call in child constructor', () => {
|
|
112
|
-
|
|
113
|
-
program.addOrReplaceFile('source/main.bs', `
|
|
111
|
+
program.setFile('source/main.bs', `
|
|
114
112
|
class Bird
|
|
115
113
|
end class
|
|
116
114
|
class Duck extends Bird
|
|
@@ -119,11 +117,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
119
117
|
end class
|
|
120
118
|
`);
|
|
121
119
|
program.validate();
|
|
122
|
-
(0,
|
|
120
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
121
|
+
DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
|
|
122
|
+
]);
|
|
123
123
|
});
|
|
124
124
|
it('requires super call in child when parent has own `new` method', () => {
|
|
125
|
-
|
|
126
|
-
program.addOrReplaceFile('source/main.bs', `
|
|
125
|
+
program.setFile('source/main.bs', `
|
|
127
126
|
class Bird
|
|
128
127
|
sub new()
|
|
129
128
|
end sub
|
|
@@ -134,11 +133,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
134
133
|
end class
|
|
135
134
|
`);
|
|
136
135
|
program.validate();
|
|
137
|
-
(0,
|
|
136
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
137
|
+
DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
|
|
138
|
+
]);
|
|
138
139
|
});
|
|
139
140
|
it('allows non-`m` expressions and statements before the super call', () => {
|
|
140
|
-
|
|
141
|
-
program.addOrReplaceFile('source/main.bs', `
|
|
141
|
+
program.setFile('source/main.bs', `
|
|
142
142
|
class Bird
|
|
143
143
|
sub new(name)
|
|
144
144
|
end sub
|
|
@@ -153,10 +153,10 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
153
153
|
end class
|
|
154
154
|
`);
|
|
155
155
|
program.validate();
|
|
156
|
-
(0,
|
|
156
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
157
157
|
});
|
|
158
158
|
it('allows non-`m` expressions and statements before the super call', () => {
|
|
159
|
-
program.
|
|
159
|
+
program.setFile('source/main.bs', `
|
|
160
160
|
class Bird
|
|
161
161
|
sub new(name)
|
|
162
162
|
end sub
|
|
@@ -169,13 +169,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
169
169
|
end class
|
|
170
170
|
`);
|
|
171
171
|
program.validate();
|
|
172
|
-
(0,
|
|
173
|
-
message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
|
|
174
|
-
range: vscode_languageserver_1.Range.create(7, 24, 7, 25)
|
|
175
|
-
}, {
|
|
176
|
-
message: DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall().message,
|
|
177
|
-
range: vscode_languageserver_1.Range.create(7, 33, 7, 34)
|
|
178
|
-
}]);
|
|
172
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall()), { range: vscode_languageserver_1.Range.create(7, 24, 7, 25) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classConstructorIllegalUseOfMBeforeSuperCall()), { range: vscode_languageserver_1.Range.create(7, 33, 7, 34) })]);
|
|
179
173
|
});
|
|
180
174
|
});
|
|
181
175
|
describe('transpile', () => {
|
|
@@ -660,8 +654,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
660
654
|
});
|
|
661
655
|
});
|
|
662
656
|
it('detects using `new` keyword on non-classes', () => {
|
|
663
|
-
|
|
664
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
657
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.brs' }, `
|
|
665
658
|
sub quack()
|
|
666
659
|
end sub
|
|
667
660
|
sub main()
|
|
@@ -669,11 +662,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
669
662
|
end sub
|
|
670
663
|
`);
|
|
671
664
|
program.validate();
|
|
672
|
-
(0,
|
|
665
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
666
|
+
DiagnosticMessages_1.DiagnosticMessages.expressionIsNotConstructable('sub')
|
|
667
|
+
]);
|
|
673
668
|
});
|
|
674
669
|
it('detects missing call to super', () => {
|
|
675
|
-
|
|
676
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
670
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.brs' }, `
|
|
677
671
|
class Animal
|
|
678
672
|
sub new()
|
|
679
673
|
end sub
|
|
@@ -684,11 +678,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
684
678
|
end class
|
|
685
679
|
`);
|
|
686
680
|
program.validate();
|
|
687
|
-
(0,
|
|
681
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
682
|
+
DiagnosticMessages_1.DiagnosticMessages.classConstructorMissingSuperCall()
|
|
683
|
+
]);
|
|
688
684
|
});
|
|
689
685
|
it.skip('detects calls to unknown m methods', () => {
|
|
690
|
-
|
|
691
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
686
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
692
687
|
class Animal
|
|
693
688
|
sub new()
|
|
694
689
|
m.methodThatDoesNotExist()
|
|
@@ -696,10 +691,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
696
691
|
end class
|
|
697
692
|
`);
|
|
698
693
|
program.validate();
|
|
699
|
-
(0,
|
|
694
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
695
|
+
DiagnosticMessages_1.DiagnosticMessages.methodDoesNotExistOnType('methodThatDoesNotExist', 'Animal')
|
|
696
|
+
]);
|
|
700
697
|
});
|
|
701
698
|
it('detects duplicate member names', () => {
|
|
702
|
-
program.
|
|
699
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
703
700
|
class Animal
|
|
704
701
|
public name
|
|
705
702
|
public name
|
|
@@ -713,32 +710,26 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
713
710
|
end class
|
|
714
711
|
`);
|
|
715
712
|
program.validate();
|
|
716
|
-
|
|
717
|
-
return {
|
|
718
|
-
code: x.code,
|
|
719
|
-
message: x.message,
|
|
720
|
-
range: x.range,
|
|
721
|
-
severity: vscode_languageserver_1.DiagnosticSeverity.Error
|
|
722
|
-
};
|
|
723
|
-
});
|
|
724
|
-
(0, chai_1.expect)(diagnostics).to.eql([Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(3, 23, 3, 27) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(4, 27, 4, 31) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(8, 27, 8, 30) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(10, 23, 10, 26) })]);
|
|
713
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(3, 23, 3, 27) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('name')), { range: vscode_languageserver_1.Range.create(4, 27, 4, 31) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(8, 27, 8, 30) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.duplicateIdentifier('age')), { range: vscode_languageserver_1.Range.create(10, 23, 10, 26) })]);
|
|
725
714
|
});
|
|
726
715
|
it('detects mismatched member type in child class', () => {
|
|
727
|
-
program.
|
|
716
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
728
717
|
class Animal
|
|
729
718
|
public name
|
|
730
719
|
end class
|
|
731
720
|
class Duck extends Animal
|
|
732
|
-
public function name()
|
|
721
|
+
public override function name()
|
|
733
722
|
return "Donald"
|
|
734
723
|
end function
|
|
735
724
|
end class
|
|
736
725
|
`);
|
|
737
726
|
program.validate();
|
|
738
|
-
(0,
|
|
727
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
728
|
+
DiagnosticMessages_1.DiagnosticMessages.classChildMemberDifferentMemberTypeThanAncestor('method', 'field', 'Animal')
|
|
729
|
+
]);
|
|
739
730
|
});
|
|
740
731
|
it('allows untyped overridden field in child class', () => {
|
|
741
|
-
program.
|
|
732
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
742
733
|
class Animal
|
|
743
734
|
public name
|
|
744
735
|
end class
|
|
@@ -750,7 +741,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
750
741
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
751
742
|
});
|
|
752
743
|
it('allows overridden property name in child class', () => {
|
|
753
|
-
program.
|
|
744
|
+
program.setFile('source/main.bs', `
|
|
754
745
|
class Bird
|
|
755
746
|
public name = "bird"
|
|
756
747
|
end class
|
|
@@ -762,7 +753,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
762
753
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
763
754
|
});
|
|
764
755
|
it('flags incompatible child field type changes', () => {
|
|
765
|
-
program.
|
|
756
|
+
program.setFile('source/main.bs', `
|
|
766
757
|
class Bird
|
|
767
758
|
public age = 12
|
|
768
759
|
public name = "bird"
|
|
@@ -775,15 +766,15 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
775
766
|
end class
|
|
776
767
|
`);
|
|
777
768
|
program.validate();
|
|
778
|
-
(0,
|
|
779
|
-
DiagnosticMessages_1.DiagnosticMessages.cannotFindType('Person')
|
|
780
|
-
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'age', 'float', 'integer')
|
|
781
|
-
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'name', 'integer', 'string')
|
|
782
|
-
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'owner', 'string', 'Person')
|
|
769
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
770
|
+
DiagnosticMessages_1.DiagnosticMessages.cannotFindType('Person'),
|
|
771
|
+
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'age', 'float', 'integer'),
|
|
772
|
+
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'name', 'integer', 'string'),
|
|
773
|
+
DiagnosticMessages_1.DiagnosticMessages.childFieldTypeNotAssignableToBaseProperty('Duck', 'Bird', 'owner', 'string', 'Person')
|
|
783
774
|
]);
|
|
784
775
|
});
|
|
785
776
|
it('detects overridden methods without override keyword', () => {
|
|
786
|
-
program.
|
|
777
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.brs' }, `
|
|
787
778
|
class Animal
|
|
788
779
|
sub speak()
|
|
789
780
|
end sub
|
|
@@ -794,10 +785,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
794
785
|
end class
|
|
795
786
|
`);
|
|
796
787
|
program.validate();
|
|
797
|
-
(0,
|
|
788
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
789
|
+
DiagnosticMessages_1.DiagnosticMessages.missingOverrideKeyword('Animal')
|
|
790
|
+
]);
|
|
798
791
|
});
|
|
799
792
|
it('detects overridden methods with different visibility', () => {
|
|
800
|
-
program.
|
|
793
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
801
794
|
class Animal
|
|
802
795
|
sub speakInPublic()
|
|
803
796
|
end sub
|
|
@@ -816,12 +809,14 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
816
809
|
end class
|
|
817
810
|
`);
|
|
818
811
|
program.validate();
|
|
819
|
-
(0,
|
|
820
|
-
|
|
821
|
-
|
|
812
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
813
|
+
DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakInPublic', 'private', 'public', 'Animal'),
|
|
814
|
+
DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFriends', 'public', 'protected', 'Animal'),
|
|
815
|
+
DiagnosticMessages_1.DiagnosticMessages.mismatchedOverriddenMemberVisibility('Duck', 'speakWithFamily', 'public', 'private', 'Animal')
|
|
816
|
+
]);
|
|
822
817
|
});
|
|
823
818
|
it('allows overridden methods with matching visibility', () => {
|
|
824
|
-
program.
|
|
819
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
825
820
|
class Animal
|
|
826
821
|
sub speakInPublic()
|
|
827
822
|
end sub
|
|
@@ -840,21 +835,96 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
840
835
|
end class
|
|
841
836
|
`);
|
|
842
837
|
program.validate();
|
|
843
|
-
(0,
|
|
838
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
844
839
|
});
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
840
|
+
describe('detects unknown parent class', () => {
|
|
841
|
+
it('non-namespaced parent from outside namespace', () => {
|
|
842
|
+
program.setFile('source/main.bs', `
|
|
843
|
+
class Duck extends Animal
|
|
844
|
+
sub speak()
|
|
845
|
+
end sub
|
|
846
|
+
end class
|
|
847
|
+
|
|
848
|
+
namespace Vertibrates
|
|
849
|
+
class Animal
|
|
850
|
+
end class
|
|
851
|
+
end namespace
|
|
852
|
+
`);
|
|
853
|
+
program.validate();
|
|
854
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')), { range: vscode_languageserver_1.Range.create(1, 35, 1, 41) })]);
|
|
855
|
+
});
|
|
856
|
+
it('non-namespaced parent from within namespace', () => {
|
|
857
|
+
program.setFile('source/main.bs', `
|
|
858
|
+
namespace Vertibrates
|
|
859
|
+
class Duck extends Animal
|
|
860
|
+
sub speak()
|
|
861
|
+
end sub
|
|
862
|
+
end class
|
|
863
|
+
end namespace
|
|
864
|
+
`);
|
|
865
|
+
program.validate();
|
|
866
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
867
|
+
DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')
|
|
868
|
+
]);
|
|
869
|
+
});
|
|
870
|
+
it('non-namespaced name from outside namespace alongside existing namespace', () => {
|
|
871
|
+
program.setFile('source/main.bs', `
|
|
872
|
+
namespace Vertibrates
|
|
873
|
+
class Animal
|
|
874
|
+
end class
|
|
875
|
+
end namespace
|
|
876
|
+
|
|
877
|
+
class Duck extends Animal
|
|
878
|
+
sub speak()
|
|
879
|
+
end sub
|
|
880
|
+
end class
|
|
881
|
+
`);
|
|
882
|
+
program.validate();
|
|
883
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
884
|
+
DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Animal', 'source')
|
|
885
|
+
]);
|
|
886
|
+
});
|
|
887
|
+
it('namespaced parent class from outside namespace', () => {
|
|
888
|
+
program.setFile('source/vertibrates.bs', `
|
|
889
|
+
namespace Vertibrates
|
|
890
|
+
class Bird
|
|
891
|
+
end class
|
|
892
|
+
end namespace
|
|
893
|
+
`);
|
|
894
|
+
program.setFile('source/Duck.bs', `
|
|
895
|
+
class Duck extends Vertibrates.GroundedBird
|
|
896
|
+
sub speak()
|
|
897
|
+
end sub
|
|
898
|
+
end class
|
|
899
|
+
`);
|
|
900
|
+
program.validate();
|
|
901
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
902
|
+
DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Vertibrates.GroundedBird', 'source')
|
|
903
|
+
]);
|
|
904
|
+
});
|
|
905
|
+
it('namespaced parent class from inside namespace', () => {
|
|
906
|
+
program.setFile('source/vertibrates.bs', `
|
|
907
|
+
namespace Vertibrates
|
|
908
|
+
class Bird
|
|
909
|
+
end class
|
|
910
|
+
end namespace
|
|
911
|
+
`);
|
|
912
|
+
program.setFile('source/Duck.bs', `
|
|
913
|
+
namespace Birdies
|
|
914
|
+
class Duck extends Vertibrates.GroundedBird
|
|
915
|
+
sub speak()
|
|
916
|
+
end sub
|
|
917
|
+
end class
|
|
918
|
+
end namespace
|
|
919
|
+
`);
|
|
920
|
+
program.validate();
|
|
921
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
922
|
+
DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Vertibrates.GroundedBird', 'source')
|
|
923
|
+
]);
|
|
924
|
+
});
|
|
854
925
|
});
|
|
855
926
|
it('catches newable class without namespace name', () => {
|
|
856
|
-
|
|
857
|
-
program.addOrReplaceFile('source/main.bs', `
|
|
927
|
+
program.setFile('source/main.bs', `
|
|
858
928
|
namespace NameA.NameB
|
|
859
929
|
class Duck
|
|
860
930
|
end class
|
|
@@ -865,11 +935,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
865
935
|
end sub
|
|
866
936
|
`);
|
|
867
937
|
program.validate();
|
|
868
|
-
(0,
|
|
938
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
939
|
+
DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('Duck', 'source')
|
|
940
|
+
]);
|
|
869
941
|
});
|
|
870
942
|
it('supports newable class namespace inference', () => {
|
|
871
|
-
|
|
872
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
943
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
873
944
|
namespace NameA.NameB
|
|
874
945
|
class Duck
|
|
875
946
|
end class
|
|
@@ -879,11 +950,10 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
879
950
|
end namespace
|
|
880
951
|
`);
|
|
881
952
|
program.validate();
|
|
882
|
-
(0,
|
|
953
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
883
954
|
});
|
|
884
955
|
it('catches extending unknown namespaced class', () => {
|
|
885
|
-
|
|
886
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
956
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
887
957
|
namespace NameA.NameB
|
|
888
958
|
class Animal
|
|
889
959
|
end class
|
|
@@ -892,11 +962,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
892
962
|
end namespace
|
|
893
963
|
`);
|
|
894
964
|
program.validate();
|
|
895
|
-
(0,
|
|
965
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
966
|
+
DiagnosticMessages_1.DiagnosticMessages.classCouldNotBeFound('NameA.NameB.Animal1', 'source')
|
|
967
|
+
]);
|
|
896
968
|
});
|
|
897
969
|
it('supports omitting namespace prefix for items in same namespace', () => {
|
|
898
|
-
|
|
899
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
970
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
900
971
|
namespace NameA.NameB
|
|
901
972
|
class Animal
|
|
902
973
|
end class
|
|
@@ -905,33 +976,36 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
905
976
|
end namespace
|
|
906
977
|
`);
|
|
907
978
|
program.validate();
|
|
908
|
-
(0,
|
|
979
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
909
980
|
});
|
|
910
981
|
it('catches duplicate root-level class declarations', () => {
|
|
911
|
-
|
|
912
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
982
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
913
983
|
class Animal
|
|
914
984
|
end class
|
|
915
985
|
class Animal
|
|
986
|
+
end class
|
|
916
987
|
`);
|
|
917
988
|
program.validate();
|
|
918
|
-
(0,
|
|
989
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
990
|
+
DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'Animal')
|
|
991
|
+
]);
|
|
919
992
|
});
|
|
920
993
|
it('catches duplicate namespace-level class declarations', () => {
|
|
921
|
-
|
|
922
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
994
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
923
995
|
namespace NameA.NameB
|
|
924
996
|
class Animal
|
|
925
997
|
end class
|
|
926
998
|
class Animal
|
|
999
|
+
end class
|
|
927
1000
|
end namespace
|
|
928
1001
|
`);
|
|
929
1002
|
program.validate();
|
|
930
|
-
(0,
|
|
1003
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1004
|
+
DiagnosticMessages_1.DiagnosticMessages.duplicateClassDeclaration('source', 'NameA.NameB.Animal')
|
|
1005
|
+
]);
|
|
931
1006
|
});
|
|
932
1007
|
it('catches namespaced class name which is the same as a global class', () => {
|
|
933
|
-
|
|
934
|
-
program.addOrReplaceFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
1008
|
+
program.setFile({ src: `${rootDir}/source/main.bs`, dest: 'source/main.bs' }, `
|
|
935
1009
|
namespace NameA.NameB
|
|
936
1010
|
class Animal
|
|
937
1011
|
end class
|
|
@@ -940,33 +1014,36 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
940
1014
|
end class
|
|
941
1015
|
`);
|
|
942
1016
|
program.validate();
|
|
943
|
-
(0,
|
|
1017
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1018
|
+
DiagnosticMessages_1.DiagnosticMessages.namespacedClassCannotShareNamewithNonNamespacedClass('Animal').message
|
|
1019
|
+
]);
|
|
944
1020
|
});
|
|
945
1021
|
it('catches class with same name as function', () => {
|
|
946
|
-
|
|
947
|
-
program.addOrReplaceFile('source/main.bs', `
|
|
1022
|
+
program.setFile('source/main.bs', `
|
|
948
1023
|
class Animal
|
|
949
1024
|
end class
|
|
950
1025
|
sub Animal()
|
|
951
1026
|
end sub
|
|
952
1027
|
`);
|
|
953
1028
|
program.validate();
|
|
954
|
-
(0,
|
|
1029
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1030
|
+
DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('Animal').message
|
|
1031
|
+
]);
|
|
955
1032
|
});
|
|
956
1033
|
it('catches class with same name (but different case) as function', () => {
|
|
957
|
-
|
|
958
|
-
program.addOrReplaceFile('source/main.bs', `
|
|
1034
|
+
program.setFile('source/main.bs', `
|
|
959
1035
|
class ANIMAL
|
|
960
1036
|
end class
|
|
961
1037
|
sub animal()
|
|
962
1038
|
end sub
|
|
963
1039
|
`);
|
|
964
1040
|
program.validate();
|
|
965
|
-
(0,
|
|
1041
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1042
|
+
DiagnosticMessages_1.DiagnosticMessages.functionCannotHaveSameNameAsClass('animal').message
|
|
1043
|
+
]);
|
|
966
1044
|
});
|
|
967
1045
|
it('catches variable with same name as class', () => {
|
|
968
|
-
|
|
969
|
-
program.addOrReplaceFile('source/main.bs', `
|
|
1046
|
+
program.setFile('source/main.bs', `
|
|
970
1047
|
class Animal
|
|
971
1048
|
end class
|
|
972
1049
|
sub main()
|
|
@@ -974,10 +1051,12 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
974
1051
|
end sub
|
|
975
1052
|
`);
|
|
976
1053
|
program.validate();
|
|
977
|
-
(0,
|
|
1054
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1055
|
+
DiagnosticMessages_1.DiagnosticMessages.localVarSameNameAsClass('Animal').message
|
|
1056
|
+
]);
|
|
978
1057
|
});
|
|
979
1058
|
it('allows extending classes with more than one dot in the filename', () => {
|
|
980
|
-
program.
|
|
1059
|
+
program.setFile('source/testclass.bs', `
|
|
981
1060
|
class Foo
|
|
982
1061
|
end class
|
|
983
1062
|
|
|
@@ -987,14 +1066,14 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
987
1066
|
end sub
|
|
988
1067
|
end class
|
|
989
1068
|
`);
|
|
990
|
-
program.
|
|
1069
|
+
program.setFile('source/testclass_no_testdot.bs', `
|
|
991
1070
|
class BarNoDot extends Foo
|
|
992
1071
|
sub new()
|
|
993
1072
|
super()
|
|
994
1073
|
end sub
|
|
995
1074
|
end class
|
|
996
1075
|
`);
|
|
997
|
-
program.
|
|
1076
|
+
program.setFile('source/testclass.dot.bs', `
|
|
998
1077
|
class BarDot extends Foo
|
|
999
1078
|
sub new()
|
|
1000
1079
|
super()
|
|
@@ -1005,7 +1084,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1005
1084
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
1006
1085
|
});
|
|
1007
1086
|
it('computes correct super index for grandchild class', () => {
|
|
1008
|
-
program.
|
|
1087
|
+
program.setFile('source/main.bs', `
|
|
1009
1088
|
sub Main()
|
|
1010
1089
|
c = new App.ClassC()
|
|
1011
1090
|
end sub
|
|
@@ -1043,7 +1122,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1043
1122
|
`, 'trim', 'source/App.ClassC.bs');
|
|
1044
1123
|
});
|
|
1045
1124
|
it('computes correct super index for namespaced child class and global parent class', () => {
|
|
1046
|
-
program.
|
|
1125
|
+
program.setFile('source/ClassA.bs', `
|
|
1047
1126
|
class ClassA
|
|
1048
1127
|
end class
|
|
1049
1128
|
`);
|
|
@@ -1069,7 +1148,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1069
1148
|
`, 'trim', 'source/App.ClassB.bs');
|
|
1070
1149
|
});
|
|
1071
1150
|
it('does not crash when parent class is missing', () => {
|
|
1072
|
-
const file = program.
|
|
1151
|
+
const file = program.setFile('source/ClassB.bs', `
|
|
1073
1152
|
class ClassB extends ClassA
|
|
1074
1153
|
end class
|
|
1075
1154
|
`);
|
|
@@ -1078,7 +1157,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1078
1157
|
});
|
|
1079
1158
|
});
|
|
1080
1159
|
it('does not crash when child has field with same name as sub in parent', () => {
|
|
1081
|
-
program.
|
|
1160
|
+
program.setFile('source/main.bs', `
|
|
1082
1161
|
class Parent
|
|
1083
1162
|
public function helloWorld()
|
|
1084
1163
|
end function
|
|
@@ -1090,7 +1169,7 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1090
1169
|
program.validate();
|
|
1091
1170
|
});
|
|
1092
1171
|
it('does not crash when child has method with same name as field in parent', () => {
|
|
1093
|
-
program.
|
|
1172
|
+
program.setFile('source/main.bs', `
|
|
1094
1173
|
class Parent
|
|
1095
1174
|
public helloWorld as string
|
|
1096
1175
|
end class
|
|
@@ -1101,5 +1180,30 @@ describe('BrsFile BrighterScript classes', () => {
|
|
|
1101
1180
|
`);
|
|
1102
1181
|
program.validate();
|
|
1103
1182
|
});
|
|
1183
|
+
it.skip('detects calling class constructors with too many parameters', () => {
|
|
1184
|
+
program.setFile('source/main.bs', `
|
|
1185
|
+
class Parameterless
|
|
1186
|
+
sub new()
|
|
1187
|
+
end sub
|
|
1188
|
+
end class
|
|
1189
|
+
|
|
1190
|
+
class OneParam
|
|
1191
|
+
sub new(param1)
|
|
1192
|
+
end sub
|
|
1193
|
+
end class
|
|
1194
|
+
|
|
1195
|
+
sub main()
|
|
1196
|
+
c1 = new Parameterless(1)
|
|
1197
|
+
c2 = new OneParam(1, 2)
|
|
1198
|
+
c2 = new OneParam()
|
|
1199
|
+
end sub
|
|
1200
|
+
`);
|
|
1201
|
+
program.validate();
|
|
1202
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
1203
|
+
DiagnosticMessages_1.DiagnosticMessages.mismatchArgumentCount(0, 1),
|
|
1204
|
+
DiagnosticMessages_1.DiagnosticMessages.mismatchArgumentCount(1, 2),
|
|
1205
|
+
DiagnosticMessages_1.DiagnosticMessages.mismatchArgumentCount(1, 0)
|
|
1206
|
+
]);
|
|
1207
|
+
});
|
|
1104
1208
|
});
|
|
1105
1209
|
//# sourceMappingURL=BrsFile.Class.spec.js.map
|