brighterscript 1.0.0-alpha.41 → 1.0.0-alpha.42
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 +62 -2
- package/dist/AstValidationSegmenter.d.ts +3 -0
- package/dist/AstValidationSegmenter.js +62 -2
- package/dist/AstValidationSegmenter.js.map +1 -1
- package/dist/BsConfig.d.ts +7 -7
- package/dist/CrossScopeValidator.js +3 -3
- package/dist/CrossScopeValidator.js.map +1 -1
- package/dist/DiagnosticFilterer.d.ts +5 -1
- package/dist/DiagnosticFilterer.js +92 -33
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticManager.js +12 -9
- package/dist/DiagnosticManager.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +374 -225
- package/dist/DiagnosticMessages.js +641 -424
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/DiagnosticSeverityAdjuster.js +4 -0
- package/dist/DiagnosticSeverityAdjuster.js.map +1 -1
- package/dist/LanguageServer.js +0 -7
- package/dist/LanguageServer.js.map +1 -1
- package/dist/PluginInterface.js +2 -0
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +22 -1
- package/dist/Program.js +206 -49
- package/dist/Program.js.map +1 -1
- package/dist/SymbolTable.d.ts +3 -0
- package/dist/SymbolTable.js +19 -1
- package/dist/SymbolTable.js.map +1 -1
- package/dist/XmlScope.js +3 -6
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/creators.d.ts +35 -3
- package/dist/astUtils/creators.js +52 -1
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +4 -2
- package/dist/astUtils/reflection.js +12 -3
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +3 -2
- package/dist/astUtils/visitors.js +37 -14
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +172 -6
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +0 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +0 -13
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +2 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.js +5 -5
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +106 -2
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +51 -3
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +149 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.js +15 -8
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +80 -9
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +7 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +149 -79
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.js +1227 -27
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
- package/dist/bscPlugin/validation/XmlFileValidator.js +0 -8
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
- package/dist/diagnosticUtils.js +6 -5
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +87 -28
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +1 -0
- package/dist/files/BrsFile.js +20 -8
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +133 -34
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.js +2 -2
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +3 -20
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/globalCallables.js +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.js +24 -16
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +18 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Lexer.js +17 -11
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +21 -3
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +9 -0
- package/dist/lexer/TokenKind.js +11 -1
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +2 -1
- package/dist/parser/AstNode.js +3 -2
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/Expression.d.ts +22 -2
- package/dist/parser/Expression.js +76 -48
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +3 -3
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.js +73 -61
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +198 -15
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.js +9 -9
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +3 -2
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/Statement.d.ts +16 -18
- package/dist/parser/Statement.js +136 -82
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +3 -3
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +3 -3
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +9 -9
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +3 -3
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +353 -71
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/Dim.spec.js +10 -3
- package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +2 -2
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +3 -5
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +3 -3
- package/dist/parser/tests/statement/TryCatch.spec.js +1 -1
- package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
- package/dist/roku-types/data.json +430 -235
- package/dist/roku-types/index.d.ts +30 -37
- package/dist/types/ArrayType.d.ts +2 -0
- package/dist/types/ArrayType.js +14 -4
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/AssociativeArrayType.d.ts +1 -0
- package/dist/types/AssociativeArrayType.js +1 -0
- package/dist/types/AssociativeArrayType.js.map +1 -1
- package/dist/types/BaseFunctionType.d.ts +1 -0
- package/dist/types/BaseFunctionType.js +1 -0
- package/dist/types/BaseFunctionType.js.map +1 -1
- package/dist/types/BooleanType.d.ts +1 -0
- package/dist/types/BooleanType.js +1 -0
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BscType.d.ts +8 -1
- package/dist/types/BscType.js +12 -3
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BuiltInInterfaceAdder.js +10 -6
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -1
- package/dist/types/ClassType.d.ts +1 -0
- package/dist/types/ClassType.js +5 -2
- package/dist/types/ClassType.js.map +1 -1
- package/dist/types/ComponentType.d.ts +11 -4
- package/dist/types/ComponentType.js +100 -8
- package/dist/types/ComponentType.js.map +1 -1
- package/dist/types/DoubleType.d.ts +2 -0
- package/dist/types/DoubleType.js +2 -0
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DynamicType.d.ts +1 -0
- package/dist/types/DynamicType.js +4 -0
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/EnumType.d.ts +2 -0
- package/dist/types/EnumType.js +20 -2
- package/dist/types/EnumType.js.map +1 -1
- package/dist/types/FloatType.d.ts +2 -0
- package/dist/types/FloatType.js +2 -0
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/InheritableType.js +8 -0
- package/dist/types/InheritableType.js.map +1 -1
- package/dist/types/IntegerType.d.ts +2 -0
- package/dist/types/IntegerType.js +2 -0
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/InterfaceType.js +4 -1
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InvalidType.d.ts +2 -1
- package/dist/types/InvalidType.js +1 -0
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +2 -0
- package/dist/types/LongIntegerType.js +2 -0
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/ObjectType.d.ts +1 -0
- package/dist/types/ObjectType.js +1 -0
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +20 -2
- package/dist/types/ReferenceType.js +106 -5
- package/dist/types/ReferenceType.js.map +1 -1
- package/dist/types/StringType.d.ts +1 -0
- package/dist/types/StringType.js +1 -0
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/TypedFunctionType.d.ts +1 -1
- package/dist/types/TypedFunctionType.js +8 -2
- package/dist/types/TypedFunctionType.js.map +1 -1
- package/dist/types/UninitializedType.d.ts +2 -0
- package/dist/types/UninitializedType.js +5 -6
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.js +8 -2
- package/dist/types/UnionType.js.map +1 -1
- package/dist/types/VoidType.d.ts +4 -1
- package/dist/types/VoidType.js +5 -0
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/helpers.js +8 -1
- package/dist/types/helpers.js.map +1 -1
- package/dist/util.d.ts +15 -5
- package/dist/util.js +281 -14
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +13 -5
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -2
|
@@ -45,6 +45,22 @@ describe('parser', () => {
|
|
|
45
45
|
(0, chai_config_spec_1.expect)((_e = (_d = (_c = (_b = parser.ast.statements[0]) === null || _b === void 0 ? void 0 : _b.func) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.statements[0]) === null || _e === void 0 ? void 0 : _e.expression).to.be.instanceof(Expression_1.CallfuncExpression);
|
|
46
46
|
});
|
|
47
47
|
});
|
|
48
|
+
it('flags function names with invalid characters', () => {
|
|
49
|
+
const { diagnostics } = Parser_1.Parser.parse(`
|
|
50
|
+
function alpha$() : end function
|
|
51
|
+
function beta%() : end function
|
|
52
|
+
function charlie!() : end function
|
|
53
|
+
function delta#() : end function
|
|
54
|
+
function echo&() : end function
|
|
55
|
+
`);
|
|
56
|
+
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
57
|
+
DiagnosticMessages_1.DiagnosticMessages.invalidIdentifier('alpha$', '$'),
|
|
58
|
+
DiagnosticMessages_1.DiagnosticMessages.invalidIdentifier('beta%', '%'),
|
|
59
|
+
DiagnosticMessages_1.DiagnosticMessages.invalidIdentifier('charlie!', '!'),
|
|
60
|
+
DiagnosticMessages_1.DiagnosticMessages.invalidIdentifier('delta#', '#'),
|
|
61
|
+
DiagnosticMessages_1.DiagnosticMessages.invalidIdentifier('echo&', '&')
|
|
62
|
+
]);
|
|
63
|
+
});
|
|
48
64
|
describe('optional chaining operator', () => {
|
|
49
65
|
function getExpression(text, options) {
|
|
50
66
|
const parser = parse(text, options === null || options === void 0 ? void 0 : options.parseMode);
|
|
@@ -148,7 +164,7 @@ describe('parser', () => {
|
|
|
148
164
|
return "6c5cdf1"
|
|
149
165
|
end functionasdf
|
|
150
166
|
`).diagnostics;
|
|
151
|
-
(0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist.and.to.eql(DiagnosticMessages_1.DiagnosticMessages.
|
|
167
|
+
(0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist.and.to.eql(DiagnosticMessages_1.DiagnosticMessages.expectedStatement().message);
|
|
152
168
|
(0, chai_config_spec_1.expect)((_b = diagnostics[0]) === null || _b === void 0 ? void 0 : _b.location.range).to.eql(vscode_languageserver_1.Range.create(3, 20, 3, 32));
|
|
153
169
|
});
|
|
154
170
|
});
|
|
@@ -195,11 +211,92 @@ describe('parser', () => {
|
|
|
195
211
|
const parser = parse(`
|
|
196
212
|
sub test(param1 as unknownType)
|
|
197
213
|
end sub
|
|
198
|
-
|
|
214
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
199
215
|
// type validation happens at scope validation, not at the parser
|
|
200
216
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
201
217
|
(0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(parser.ast.statements[0])).to.be.true;
|
|
202
218
|
});
|
|
219
|
+
it('does not scrap the entire function when encountering unknown parameter type in brightscript mode', () => {
|
|
220
|
+
const parser = parse(`
|
|
221
|
+
sub test(param1 as unknownType)
|
|
222
|
+
end sub
|
|
223
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
224
|
+
// type validation happens at scope validation, not at the parser
|
|
225
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser, DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('custom types'));
|
|
226
|
+
(0, chai_config_spec_1.expect)((0, reflection_1.isFunctionStatement)(parser.ast.statements[0])).to.be.true;
|
|
227
|
+
});
|
|
228
|
+
it('adds diagnostics when missing end for statements', () => {
|
|
229
|
+
let parser = parse(`
|
|
230
|
+
sub test1(x)
|
|
231
|
+
for each item in x
|
|
232
|
+
print item
|
|
233
|
+
end sub
|
|
234
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
235
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser, [
|
|
236
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedEndForOrNextToTerminateForLoop('for each')
|
|
237
|
+
]);
|
|
238
|
+
parser = parse(`
|
|
239
|
+
sub test2()
|
|
240
|
+
for i = 0 to 10
|
|
241
|
+
print i
|
|
242
|
+
end sub
|
|
243
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
244
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser, [
|
|
245
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedEndForOrNextToTerminateForLoop('for')
|
|
246
|
+
]);
|
|
247
|
+
parser = parse(`
|
|
248
|
+
sub test3(x )
|
|
249
|
+
for each item in x
|
|
250
|
+
print item
|
|
251
|
+
next
|
|
252
|
+
|
|
253
|
+
for i = 0 to 10
|
|
254
|
+
print i
|
|
255
|
+
next ' next works the same as "end for"
|
|
256
|
+
end sub
|
|
257
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
258
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
259
|
+
});
|
|
260
|
+
it('does not allow return type as invalid', () => {
|
|
261
|
+
let parser = parse(`
|
|
262
|
+
function test(x) as invalid
|
|
263
|
+
return invalid
|
|
264
|
+
end function
|
|
265
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
266
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser, [
|
|
267
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier('as').message
|
|
268
|
+
]);
|
|
269
|
+
});
|
|
270
|
+
it('does not allow param type as invalid', () => {
|
|
271
|
+
let parser = parse(`
|
|
272
|
+
function test(x as invalid)
|
|
273
|
+
return invalid
|
|
274
|
+
end function
|
|
275
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
276
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser, [
|
|
277
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier('as').message
|
|
278
|
+
]);
|
|
279
|
+
});
|
|
280
|
+
it('validates when theres a fraction hex', () => {
|
|
281
|
+
let parser = parse(`
|
|
282
|
+
function test()
|
|
283
|
+
x = &HFF.01234
|
|
284
|
+
return x
|
|
285
|
+
end function
|
|
286
|
+
`);
|
|
287
|
+
(0, testHelpers_spec_1.expectDiagnostics)(parser, [
|
|
288
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedStatement(),
|
|
289
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedNewlineOrColon()
|
|
290
|
+
]);
|
|
291
|
+
});
|
|
292
|
+
it('allows print statement with hex followed by dot <number>', () => {
|
|
293
|
+
let parser = parse(`
|
|
294
|
+
function test()
|
|
295
|
+
print &HFF.01234
|
|
296
|
+
end function
|
|
297
|
+
`);
|
|
298
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(parser);
|
|
299
|
+
});
|
|
203
300
|
describe('namespace', () => {
|
|
204
301
|
it('allows namespaces declared inside other namespaces', () => {
|
|
205
302
|
const parser = parse(`
|
|
@@ -261,7 +358,7 @@ describe('parser', () => {
|
|
|
261
358
|
namespace
|
|
262
359
|
end namespace
|
|
263
360
|
`, Parser_1.ParseMode.BrighterScript);
|
|
264
|
-
(0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.
|
|
361
|
+
(0, chai_config_spec_1.expect)((_a = diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.equal(DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier('namespace').message);
|
|
265
362
|
});
|
|
266
363
|
it('recovers after missing `end namespace`', () => {
|
|
267
364
|
var _a, _b, _c;
|
|
@@ -342,7 +439,7 @@ describe('parser', () => {
|
|
|
342
439
|
function log() as UNKNOWN_TYPE
|
|
343
440
|
end function
|
|
344
441
|
`, Parser_1.ParseMode.BrightScript);
|
|
345
|
-
(0, testHelpers_spec_1.
|
|
442
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('custom types').message); // type validation happens at scope validation step
|
|
346
443
|
(0, chai_config_spec_1.expect)(ast.statements[0]).to.exist;
|
|
347
444
|
});
|
|
348
445
|
it('unknown function type is not a problem in Brighterscript mode', () => {
|
|
@@ -350,7 +447,7 @@ describe('parser', () => {
|
|
|
350
447
|
function log() as UNKNOWN_TYPE
|
|
351
448
|
end function
|
|
352
449
|
`, Parser_1.ParseMode.BrighterScript);
|
|
353
|
-
(0,
|
|
450
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
354
451
|
(0, chai_config_spec_1.expect)(ast.statements[0]).to.exist;
|
|
355
452
|
});
|
|
356
453
|
it('allows namespaced function type in Brighterscript mode', () => {
|
|
@@ -369,12 +466,12 @@ describe('parser', () => {
|
|
|
369
466
|
(0, chai_config_spec_1.expect)(diagnostics.length).to.equal(0);
|
|
370
467
|
(0, chai_config_spec_1.expect)(ast.statements[0]).to.exist;
|
|
371
468
|
});
|
|
372
|
-
it('does
|
|
469
|
+
it('does cause diagnostics when custom parameter types are used in Brightscript Mode', () => {
|
|
373
470
|
let { diagnostics } = parse(`
|
|
374
471
|
sub foo(value as UNKNOWN_TYPE)
|
|
375
472
|
end sub
|
|
376
473
|
`, Parser_1.ParseMode.BrightScript);
|
|
377
|
-
(0,
|
|
474
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('custom types').message);
|
|
378
475
|
});
|
|
379
476
|
it('allows custom namespaced parameter types in BrighterscriptMode', () => {
|
|
380
477
|
let { ast, diagnostics } = parse(`
|
|
@@ -427,7 +524,7 @@ describe('parser', () => {
|
|
|
427
524
|
let { tokens } = Lexer_1.Lexer.scan(`print a.`);
|
|
428
525
|
let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
429
526
|
let printStatement = ast.statements[0];
|
|
430
|
-
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.
|
|
527
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier());
|
|
431
528
|
(0, chai_config_spec_1.expect)(printStatement).to.be.instanceof(Statement_1.PrintStatement);
|
|
432
529
|
(0, chai_config_spec_1.expect)(printStatement.expressions[0]).to.be.instanceof(Expression_1.VariableExpression);
|
|
433
530
|
});
|
|
@@ -435,7 +532,7 @@ describe('parser', () => {
|
|
|
435
532
|
let { tokens } = Lexer_1.Lexer.scan(`print a.b.`);
|
|
436
533
|
let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
437
534
|
let printStatement = ast.statements[0];
|
|
438
|
-
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.
|
|
535
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.expectedIdentifier());
|
|
439
536
|
(0, chai_config_spec_1.expect)(printStatement).to.be.instanceof(Statement_1.PrintStatement);
|
|
440
537
|
(0, chai_config_spec_1.expect)(printStatement.expressions[0]).to.be.instanceof(Expression_1.DottedGetExpression);
|
|
441
538
|
});
|
|
@@ -452,7 +549,7 @@ describe('parser', () => {
|
|
|
452
549
|
end namespace
|
|
453
550
|
`);
|
|
454
551
|
let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
455
|
-
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.
|
|
552
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.expectedStatement());
|
|
456
553
|
let stmt = ast.statements[0].func.body.statements[0];
|
|
457
554
|
(0, chai_config_spec_1.expect)((0, reflection_1.isExpressionStatement)(stmt)).to.be.true;
|
|
458
555
|
(0, chai_config_spec_1.expect)((0, reflection_1.isVariableExpression)((stmt).expression)).to.be.true;
|
|
@@ -526,12 +623,24 @@ describe('parser', () => {
|
|
|
526
623
|
end function
|
|
527
624
|
`);
|
|
528
625
|
let { ast, diagnostics } = Parser_1.Parser.parse(tokens);
|
|
529
|
-
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.
|
|
626
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, DiagnosticMessages_1.DiagnosticMessages.expectedStatement());
|
|
530
627
|
for (const stmt of ast.statements[0].func.body.statements) {
|
|
531
628
|
(0, chai_config_spec_1.expect)((0, reflection_1.isExpressionStatement)(stmt)).to.be.true;
|
|
532
629
|
(0, chai_config_spec_1.expect)((0, reflection_1.isBinaryExpression)((stmt).expression)).to.be.true;
|
|
533
630
|
}
|
|
534
631
|
});
|
|
632
|
+
it('adds callfunc expressions', () => {
|
|
633
|
+
var _a;
|
|
634
|
+
let parser = parse(`
|
|
635
|
+
sub foo(thing)
|
|
636
|
+
thing@.
|
|
637
|
+
end sub
|
|
638
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
639
|
+
(0, chai_config_spec_1.expect)((_a = parser.diagnostics[0]) === null || _a === void 0 ? void 0 : _a.message).to.exist;
|
|
640
|
+
let body = parser.ast.statements[0].func.body;
|
|
641
|
+
let callFunc = body.findChild(reflection_1.isCallfuncExpression);
|
|
642
|
+
(0, chai_config_spec_1.expect)(callFunc).to.exist;
|
|
643
|
+
});
|
|
535
644
|
});
|
|
536
645
|
describe('comments', () => {
|
|
537
646
|
it('does not include comments', () => {
|
|
@@ -1284,7 +1393,7 @@ describe('parser', () => {
|
|
|
1284
1393
|
print param
|
|
1285
1394
|
end sub
|
|
1286
1395
|
`, Parser_1.ParseMode.BrightScript);
|
|
1287
|
-
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser.diagnostics, [DiagnosticMessages_1.DiagnosticMessages.
|
|
1396
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(parser.diagnostics, [DiagnosticMessages_1.DiagnosticMessages.expectedStatement()]);
|
|
1288
1397
|
});
|
|
1289
1398
|
it('allows union types in parameters', () => {
|
|
1290
1399
|
let { diagnostics } = parse(`
|
|
@@ -1968,7 +2077,7 @@ describe('parser', () => {
|
|
|
1968
2077
|
end sub
|
|
1969
2078
|
`, Parser_1.ParseMode.BrighterScript, { debug: true });
|
|
1970
2079
|
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
1971
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
2080
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedTerminator('end if', 'if').message,
|
|
1972
2081
|
DiagnosticMessages_1.DiagnosticMessages.unexpectedToken('end if').message
|
|
1973
2082
|
]);
|
|
1974
2083
|
});
|
|
@@ -2042,7 +2151,7 @@ describe('parser', () => {
|
|
|
2042
2151
|
#const test
|
|
2043
2152
|
`, Parser_1.ParseMode.BrighterScript);
|
|
2044
2153
|
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
2045
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
2154
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedOperator([TokenKind_1.TokenKind.Equal], 'test').message
|
|
2046
2155
|
]);
|
|
2047
2156
|
});
|
|
2048
2157
|
it('has diagnostic if invalid operator', () => {
|
|
@@ -2050,7 +2159,7 @@ describe('parser', () => {
|
|
|
2050
2159
|
#const test += other
|
|
2051
2160
|
`, Parser_1.ParseMode.BrighterScript);
|
|
2052
2161
|
(0, testHelpers_spec_1.expectDiagnostics)(diagnostics, [
|
|
2053
|
-
DiagnosticMessages_1.DiagnosticMessages.
|
|
2162
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedOperator([TokenKind_1.TokenKind.Equal], 'test').message
|
|
2054
2163
|
]);
|
|
2055
2164
|
});
|
|
2056
2165
|
it('has diagnostic if invalid lhs', () => {
|
|
@@ -2192,6 +2301,80 @@ describe('parser', () => {
|
|
|
2192
2301
|
(0, chai_config_spec_1.expect)(exitStmt.tokens.loopType.text).to.eq('for');
|
|
2193
2302
|
});
|
|
2194
2303
|
});
|
|
2304
|
+
describe('custom types', () => {
|
|
2305
|
+
it('built-in interface param types disallowed in brightscript mode', () => {
|
|
2306
|
+
let { diagnostics } = parse(`
|
|
2307
|
+
sub test(foo as roAssociativeArray)
|
|
2308
|
+
print foo.x
|
|
2309
|
+
end sub
|
|
2310
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
2311
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
2312
|
+
DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('custom types')
|
|
2313
|
+
]);
|
|
2314
|
+
});
|
|
2315
|
+
it('built-in interface types disallowed in brightscript mode', () => {
|
|
2316
|
+
let { diagnostics } = parse(`
|
|
2317
|
+
function test(foo) as roAssociativeArray
|
|
2318
|
+
return foo.x
|
|
2319
|
+
end function
|
|
2320
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
2321
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
2322
|
+
DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('custom types')
|
|
2323
|
+
]);
|
|
2324
|
+
});
|
|
2325
|
+
it('custom param types disallowed in brightscript mode', () => {
|
|
2326
|
+
let { diagnostics } = parse(`
|
|
2327
|
+
sub test(foo as Whatever)
|
|
2328
|
+
print foo.x
|
|
2329
|
+
end sub
|
|
2330
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
2331
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
2332
|
+
DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('custom types')
|
|
2333
|
+
]);
|
|
2334
|
+
});
|
|
2335
|
+
it('custom return types disallowed in brightscript mode', () => {
|
|
2336
|
+
let { diagnostics } = parse(`
|
|
2337
|
+
function test(foo) as Whatever
|
|
2338
|
+
return foo.x
|
|
2339
|
+
end function
|
|
2340
|
+
`, Parser_1.ParseMode.BrightScript);
|
|
2341
|
+
(0, testHelpers_spec_1.expectDiagnosticsIncludes)(diagnostics, [
|
|
2342
|
+
DiagnosticMessages_1.DiagnosticMessages.bsFeatureNotSupportedInBrsFiles('custom types')
|
|
2343
|
+
]);
|
|
2344
|
+
});
|
|
2345
|
+
it('built-in interface param types allowed in brighterscript mode', () => {
|
|
2346
|
+
let { diagnostics } = parse(`
|
|
2347
|
+
sub test(foo as roAssociativeArray)
|
|
2348
|
+
print foo.x
|
|
2349
|
+
end sub
|
|
2350
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
2351
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
2352
|
+
});
|
|
2353
|
+
it('built-in interface types allowed in brighterscript mode', () => {
|
|
2354
|
+
let { diagnostics } = parse(`
|
|
2355
|
+
function test(foo) as roAssociativeArray
|
|
2356
|
+
return foo.x
|
|
2357
|
+
end function
|
|
2358
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
2359
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
2360
|
+
});
|
|
2361
|
+
it('custom param types allowed in brighterscript mode', () => {
|
|
2362
|
+
let { diagnostics } = parse(`
|
|
2363
|
+
sub test(foo as Whatever)
|
|
2364
|
+
print foo.x
|
|
2365
|
+
end sub
|
|
2366
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
2367
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
2368
|
+
});
|
|
2369
|
+
it('custom return types allowed in brighterscript mode', () => {
|
|
2370
|
+
let { diagnostics } = parse(`
|
|
2371
|
+
function test(foo) as Whatever
|
|
2372
|
+
return foo.x
|
|
2373
|
+
end function
|
|
2374
|
+
`, Parser_1.ParseMode.BrighterScript);
|
|
2375
|
+
(0, testHelpers_spec_1.expectZeroDiagnostics)(diagnostics);
|
|
2376
|
+
});
|
|
2377
|
+
});
|
|
2195
2378
|
});
|
|
2196
2379
|
function parse(text, mode, bsConsts = {}) {
|
|
2197
2380
|
let { tokens } = Lexer_1.Lexer.scan(text);
|