brighterscript 1.0.0-alpha.14 → 1.0.0-alpha.15
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 +18 -1
- package/dist/Cache.d.ts +2 -7
- package/dist/Cache.js +4 -13
- package/dist/Cache.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +21 -1
- package/dist/DiagnosticMessages.js +21 -1
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/Program.d.ts +1 -1
- package/dist/Program.js +4 -4
- package/dist/Program.js.map +1 -1
- package/dist/Scope.d.ts +16 -11
- package/dist/Scope.js +25 -2
- 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 +3 -1
- package/dist/astUtils/reflection.js +10 -2
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +3 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +4 -1
- package/dist/bscPlugin/BscPlugin.js +16 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +36 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +28 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- 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 +21 -22
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +9 -1
- package/dist/files/BrsFile.js +99 -25
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +128 -59
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +5 -5
- package/dist/files/XmlFile.spec.js +9 -9
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/interfaces.d.ts +29 -37
- package/dist/lexer/Lexer.spec.js +8 -0
- 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/Parser.d.ts +11 -2
- package/dist/parser/Parser.js +92 -3
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Statement.d.ts +52 -0
- package/dist/parser/Statement.js +154 -1
- package/dist/parser/Statement.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/util.d.ts +10 -0
- package/dist/util.js +37 -0
- package/dist/util.js.map +1 -1
- package/package.json +1 -1
|
@@ -158,6 +158,76 @@ describe('BrsFile', () => {
|
|
|
158
158
|
(0, chai_1.expect)(names).to.includes('Main');
|
|
159
159
|
(0, chai_1.expect)(names).to.includes('SayHello');
|
|
160
160
|
});
|
|
161
|
+
it('includes every type of item at base level', () => {
|
|
162
|
+
program.setFile('source/main.bs', `
|
|
163
|
+
sub main()
|
|
164
|
+
print
|
|
165
|
+
end sub
|
|
166
|
+
sub speak()
|
|
167
|
+
end sub
|
|
168
|
+
namespace stuff
|
|
169
|
+
end namespace
|
|
170
|
+
class Person
|
|
171
|
+
end class
|
|
172
|
+
enum Direction
|
|
173
|
+
end enum
|
|
174
|
+
`);
|
|
175
|
+
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 26)), [{
|
|
176
|
+
label: 'main',
|
|
177
|
+
kind: vscode_languageserver_1.CompletionItemKind.Function
|
|
178
|
+
}, {
|
|
179
|
+
label: 'speak',
|
|
180
|
+
kind: vscode_languageserver_1.CompletionItemKind.Function
|
|
181
|
+
}, {
|
|
182
|
+
label: 'stuff',
|
|
183
|
+
kind: vscode_languageserver_1.CompletionItemKind.Module
|
|
184
|
+
}, {
|
|
185
|
+
label: 'Person',
|
|
186
|
+
kind: vscode_languageserver_1.CompletionItemKind.Class
|
|
187
|
+
}, {
|
|
188
|
+
label: 'Direction',
|
|
189
|
+
kind: vscode_languageserver_1.CompletionItemKind.Enum
|
|
190
|
+
}]);
|
|
191
|
+
});
|
|
192
|
+
describe('namespaces', () => {
|
|
193
|
+
it('gets full namespace completions at any point through the leading identifier', () => {
|
|
194
|
+
program.setFile('source/main.bs', `
|
|
195
|
+
sub main()
|
|
196
|
+
foo.bar
|
|
197
|
+
end sub
|
|
198
|
+
|
|
199
|
+
namespace foo.bar
|
|
200
|
+
end namespace
|
|
201
|
+
|
|
202
|
+
class Person
|
|
203
|
+
end class
|
|
204
|
+
`);
|
|
205
|
+
const result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 24)).map(x => x.label);
|
|
206
|
+
(0, chai_1.expect)(result).includes('main');
|
|
207
|
+
(0, chai_1.expect)(result).includes('foo');
|
|
208
|
+
(0, chai_1.expect)(result).includes('Person');
|
|
209
|
+
});
|
|
210
|
+
it('gets namespace completions', () => {
|
|
211
|
+
program.setFile('source/main.bs', `
|
|
212
|
+
namespace foo.bar
|
|
213
|
+
function sayHello()
|
|
214
|
+
end function
|
|
215
|
+
end namespace
|
|
216
|
+
|
|
217
|
+
sub Main()
|
|
218
|
+
print "hello"
|
|
219
|
+
foo.ba
|
|
220
|
+
foo.bar.
|
|
221
|
+
end sub
|
|
222
|
+
`);
|
|
223
|
+
let result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(8, 30));
|
|
224
|
+
let names = result.map(x => x.label);
|
|
225
|
+
(0, chai_1.expect)(names).to.includes('bar');
|
|
226
|
+
result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(9, 32));
|
|
227
|
+
names = result.map(x => x.label);
|
|
228
|
+
(0, chai_1.expect)(names).to.includes('sayHello');
|
|
229
|
+
});
|
|
230
|
+
});
|
|
161
231
|
it('always includes `m`', () => {
|
|
162
232
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
163
233
|
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
@@ -354,7 +424,7 @@ describe('BrsFile', () => {
|
|
|
354
424
|
'bs:disable-next-line: LINT9999
|
|
355
425
|
name = "bob
|
|
356
426
|
end sub
|
|
357
|
-
|
|
427
|
+
`);
|
|
358
428
|
(0, chai_1.expect)(file.commentFlags[0]).to.exist;
|
|
359
429
|
(0, testHelpers_spec_1.expectHasDiagnostics)(program);
|
|
360
430
|
});
|
|
@@ -364,7 +434,7 @@ describe('BrsFile', () => {
|
|
|
364
434
|
sub main()
|
|
365
435
|
something = true 'bs:disable-line: LINT1005
|
|
366
436
|
end sub
|
|
367
|
-
|
|
437
|
+
`);
|
|
368
438
|
file.addDiagnostics([{
|
|
369
439
|
code: 'LINT1005',
|
|
370
440
|
file: file,
|
|
@@ -375,18 +445,18 @@ describe('BrsFile', () => {
|
|
|
375
445
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(scope);
|
|
376
446
|
});
|
|
377
447
|
it('adds diagnostics for unknown numeric diagnostic codes', () => {
|
|
378
|
-
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
448
|
+
program.setFile({ src: `${rootDir} / source / main.brs`, dest: 'source/main.brs' }, `
|
|
379
449
|
sub main()
|
|
380
450
|
print "hi" 'bs:disable-line: 123456 999999 aaaab
|
|
381
451
|
end sub
|
|
382
|
-
|
|
452
|
+
`);
|
|
383
453
|
program.validate();
|
|
384
454
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownDiagnosticCode(123456)), { range: vscode_languageserver_1.Range.create(2, 53, 2, 59) }), Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.unknownDiagnosticCode(999999)), { range: vscode_languageserver_1.Range.create(2, 60, 2, 66) })]);
|
|
385
455
|
});
|
|
386
456
|
});
|
|
387
457
|
describe('bs:disable-line', () => {
|
|
388
458
|
it('works for all', () => {
|
|
389
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
459
|
+
let file = program.setFile({ src: `${rootDir} / source / main.brs`, dest: 'source/main.brs' }, `
|
|
390
460
|
sub Main()
|
|
391
461
|
z::;;%%%%%% 'bs:disable-line
|
|
392
462
|
end sub
|
|
@@ -402,7 +472,7 @@ describe('BrsFile', () => {
|
|
|
402
472
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
403
473
|
});
|
|
404
474
|
it('works for specific codes', () => {
|
|
405
|
-
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
475
|
+
program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
406
476
|
sub main()
|
|
407
477
|
'should not have any errors
|
|
408
478
|
DoSomething(1) 'bs:disable-line:1002
|
|
@@ -421,12 +491,12 @@ describe('BrsFile', () => {
|
|
|
421
491
|
//the current version of BRS causes parse errors after the `parse` keyword, showing error in comments
|
|
422
492
|
//the program should ignore all diagnostics found in brs:* comment lines EXCEPT
|
|
423
493
|
//for the diagnostics about using unknown error codes
|
|
424
|
-
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
494
|
+
program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
425
495
|
sub main()
|
|
426
496
|
stop 'bs:disable-line
|
|
427
497
|
print "need a valid line to fix stop error"
|
|
428
498
|
end sub
|
|
429
|
-
|
|
499
|
+
`);
|
|
430
500
|
program.validate();
|
|
431
501
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
432
502
|
});
|
|
@@ -436,9 +506,9 @@ describe('BrsFile', () => {
|
|
|
436
506
|
it('supports iife in assignment', () => {
|
|
437
507
|
program.setFile('source/main.brs', `
|
|
438
508
|
sub main()
|
|
439
|
-
|
|
509
|
+
result = sub()
|
|
440
510
|
end sub()
|
|
441
|
-
|
|
511
|
+
result = (sub()
|
|
442
512
|
end sub)()
|
|
443
513
|
end sub
|
|
444
514
|
`);
|
|
@@ -457,26 +527,26 @@ describe('BrsFile', () => {
|
|
|
457
527
|
testParseMode('source/main.spec.bs', Parser_1.ParseMode.BrighterScript);
|
|
458
528
|
});
|
|
459
529
|
it('supports labels and goto statements', () => {
|
|
460
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
530
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
461
531
|
sub Main()
|
|
462
532
|
'multiple goto statements on one line
|
|
463
|
-
goto myLabel
|
|
533
|
+
goto myLabel: goto myLabel
|
|
464
534
|
myLabel:
|
|
465
535
|
end sub
|
|
466
536
|
`);
|
|
467
537
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
468
538
|
});
|
|
469
539
|
it('supports empty print statements', () => {
|
|
470
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
540
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
471
541
|
sub main()
|
|
472
|
-
|
|
542
|
+
print
|
|
473
543
|
end sub
|
|
474
544
|
`);
|
|
475
545
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
476
546
|
});
|
|
477
547
|
describe('conditional compile', () => {
|
|
478
548
|
it('works for upper case keywords', () => {
|
|
479
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
549
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
480
550
|
sub main()
|
|
481
551
|
#CONST someFlag = true
|
|
482
552
|
#IF someFlag
|
|
@@ -491,7 +561,7 @@ describe('BrsFile', () => {
|
|
|
491
561
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
492
562
|
});
|
|
493
563
|
it('supports single-word #elseif and #endif', () => {
|
|
494
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
564
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
495
565
|
sub main()
|
|
496
566
|
#const someFlag = true
|
|
497
567
|
#if someFlag
|
|
@@ -504,7 +574,7 @@ describe('BrsFile', () => {
|
|
|
504
574
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
505
575
|
});
|
|
506
576
|
it('supports multi-word #else if and #end if', () => {
|
|
507
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
577
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
508
578
|
sub main()
|
|
509
579
|
#const someFlag = true
|
|
510
580
|
#if someFlag
|
|
@@ -517,17 +587,17 @@ describe('BrsFile', () => {
|
|
|
517
587
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
518
588
|
});
|
|
519
589
|
it('does not choke on invalid code inside a false conditional compile', () => {
|
|
520
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
590
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
521
591
|
sub main()
|
|
522
592
|
#if false
|
|
523
|
-
non-commented code here should not cause parse errors
|
|
593
|
+
non - commented code here should not cause parse errors
|
|
524
594
|
#end if
|
|
525
595
|
end sub
|
|
526
596
|
`);
|
|
527
597
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
528
598
|
});
|
|
529
599
|
it('detects syntax error in #if', () => {
|
|
530
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
600
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
531
601
|
sub main()
|
|
532
602
|
#if true1
|
|
533
603
|
print "true"
|
|
@@ -539,7 +609,7 @@ describe('BrsFile', () => {
|
|
|
539
609
|
]);
|
|
540
610
|
});
|
|
541
611
|
it('detects syntax error in #const', () => {
|
|
542
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
612
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
543
613
|
sub main()
|
|
544
614
|
#if %
|
|
545
615
|
print "true"
|
|
@@ -552,7 +622,7 @@ describe('BrsFile', () => {
|
|
|
552
622
|
]);
|
|
553
623
|
});
|
|
554
624
|
it('detects #const name using reserved word', () => {
|
|
555
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
625
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
556
626
|
sub main()
|
|
557
627
|
#const function = true
|
|
558
628
|
end sub
|
|
@@ -563,7 +633,7 @@ describe('BrsFile', () => {
|
|
|
563
633
|
]);
|
|
564
634
|
});
|
|
565
635
|
it('detects syntax error in #const', () => {
|
|
566
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
636
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
567
637
|
sub main()
|
|
568
638
|
#const someConst = 123
|
|
569
639
|
end sub
|
|
@@ -574,22 +644,22 @@ describe('BrsFile', () => {
|
|
|
574
644
|
});
|
|
575
645
|
});
|
|
576
646
|
it('supports stop statement', () => {
|
|
577
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
647
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
578
648
|
sub main()
|
|
579
|
-
|
|
649
|
+
stop
|
|
580
650
|
end sub
|
|
581
651
|
`);
|
|
582
652
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
583
653
|
});
|
|
584
654
|
it('supports single-line if statements', () => {
|
|
585
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
655
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
586
656
|
sub main()
|
|
587
657
|
if 1 < 2: return true: end if
|
|
588
658
|
if 1 < 2: return true
|
|
589
659
|
end if
|
|
590
660
|
if false : print "true" : end if
|
|
591
661
|
if true: print "8 worked": else if true: print "not run": else: print "not run": end if
|
|
592
|
-
if true then
|
|
662
|
+
if true then: test = sub() : print "yes" : end sub: end if
|
|
593
663
|
end sub
|
|
594
664
|
`);
|
|
595
665
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
@@ -674,7 +744,7 @@ describe('BrsFile', () => {
|
|
|
674
744
|
print &he2
|
|
675
745
|
print 1.2E+2
|
|
676
746
|
print 2!
|
|
677
|
-
print 12D-12
|
|
747
|
+
print 12D - 12
|
|
678
748
|
print 2.3#
|
|
679
749
|
print &hFEDCBA9876543210&
|
|
680
750
|
print 9876543210&
|
|
@@ -741,11 +811,11 @@ describe('BrsFile', () => {
|
|
|
741
811
|
it('supports variable names ending with type designators', () => {
|
|
742
812
|
file.parse(`
|
|
743
813
|
sub main()
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
814
|
+
name$ = "bob"
|
|
815
|
+
age% = 1
|
|
816
|
+
height! = 5.5
|
|
817
|
+
salary# = 9.87654321
|
|
818
|
+
someHex& = 13
|
|
749
819
|
end sub
|
|
750
820
|
`);
|
|
751
821
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
@@ -755,7 +825,7 @@ describe('BrsFile', () => {
|
|
|
755
825
|
sub main()
|
|
756
826
|
if true then
|
|
757
827
|
print "true"
|
|
758
|
-
else
|
|
828
|
+
else if true then
|
|
759
829
|
print "also true"
|
|
760
830
|
end if
|
|
761
831
|
end sub
|
|
@@ -766,9 +836,9 @@ describe('BrsFile', () => {
|
|
|
766
836
|
file.parse(`
|
|
767
837
|
function GetObject()
|
|
768
838
|
obj = {
|
|
769
|
-
|
|
839
|
+
stop: function () as void
|
|
770
840
|
|
|
771
|
-
|
|
841
|
+
end function
|
|
772
842
|
}
|
|
773
843
|
return obj
|
|
774
844
|
end function
|
|
@@ -779,10 +849,10 @@ describe('BrsFile', () => {
|
|
|
779
849
|
file.parse(`
|
|
780
850
|
function GetObject()
|
|
781
851
|
obj = {
|
|
782
|
-
run: function() as void
|
|
852
|
+
run: function () as void
|
|
783
853
|
|
|
784
854
|
end function
|
|
785
|
-
|
|
855
|
+
}
|
|
786
856
|
return obj
|
|
787
857
|
end function
|
|
788
858
|
`);
|
|
@@ -810,7 +880,7 @@ describe('BrsFile', () => {
|
|
|
810
880
|
function Main()
|
|
811
881
|
promise = {
|
|
812
882
|
then: sub()
|
|
813
|
-
|
|
883
|
+
end sub
|
|
814
884
|
}
|
|
815
885
|
promise.then()
|
|
816
886
|
end function
|
|
@@ -820,7 +890,7 @@ describe('BrsFile', () => {
|
|
|
820
890
|
it('supports function as parameter type', () => {
|
|
821
891
|
file.parse(`
|
|
822
892
|
sub Main()
|
|
823
|
-
doWork = function(callback as function)
|
|
893
|
+
doWork = function (callback as function)
|
|
824
894
|
end function
|
|
825
895
|
end sub
|
|
826
896
|
`);
|
|
@@ -936,7 +1006,7 @@ describe('BrsFile', () => {
|
|
|
936
1006
|
sub main()
|
|
937
1007
|
end sub
|
|
938
1008
|
import "file.brs"
|
|
939
|
-
|
|
1009
|
+
`);
|
|
940
1010
|
program.validate();
|
|
941
1011
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
942
1012
|
DiagnosticMessages_1.DiagnosticMessages.importStatementMustBeDeclaredAtTopOfFile()
|
|
@@ -973,7 +1043,7 @@ describe('BrsFile', () => {
|
|
|
973
1043
|
it('supports colons as separators in associative array properties', () => {
|
|
974
1044
|
file.parse(`
|
|
975
1045
|
sub Main()
|
|
976
|
-
obj = {x:0 : y: 1}
|
|
1046
|
+
obj = { x: 0 : y: 1 }
|
|
977
1047
|
end sub
|
|
978
1048
|
`);
|
|
979
1049
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
@@ -991,8 +1061,8 @@ describe('BrsFile', () => {
|
|
|
991
1061
|
});
|
|
992
1062
|
it('succeeds when finding variables with the word "function" in them', () => {
|
|
993
1063
|
file.parse(`
|
|
994
|
-
|
|
995
|
-
|
|
1064
|
+
function Test()
|
|
1065
|
+
typeCheckFunction = RBS_CMN_GetFunction(invalid, methodName)
|
|
996
1066
|
end function
|
|
997
1067
|
`);
|
|
998
1068
|
});
|
|
@@ -1003,14 +1073,14 @@ describe('BrsFile', () => {
|
|
|
1003
1073
|
print "A"
|
|
1004
1074
|
end function
|
|
1005
1075
|
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1076
|
+
function DoB()
|
|
1077
|
+
print "B"
|
|
1078
|
+
end function
|
|
1009
1079
|
`);
|
|
1010
1080
|
(0, chai_1.expect)(file.callables[0].name).to.equal('DoA');
|
|
1011
1081
|
(0, chai_1.expect)(file.callables[0].nameRange).to.eql(vscode_languageserver_1.Range.create(1, 25, 1, 28));
|
|
1012
1082
|
(0, chai_1.expect)(file.callables[1].name).to.equal('DoB');
|
|
1013
|
-
(0, chai_1.expect)(file.callables[1].nameRange).to.eql(vscode_languageserver_1.Range.create(5,
|
|
1083
|
+
(0, chai_1.expect)(file.callables[1].nameRange).to.eql(vscode_languageserver_1.Range.create(5, 25, 5, 28));
|
|
1014
1084
|
});
|
|
1015
1085
|
it('throws an error if the file has already been parsed', () => {
|
|
1016
1086
|
let file = new BrsFile_1.BrsFile('abspath', 'relpath', program);
|
|
@@ -1341,13 +1411,13 @@ describe('BrsFile', () => {
|
|
|
1341
1411
|
it('finds variable type from other variable', () => {
|
|
1342
1412
|
file.parse(`
|
|
1343
1413
|
sub Main()
|
|
1344
|
-
|
|
1345
|
-
|
|
1414
|
+
name = "bob"
|
|
1415
|
+
nameCopy = name
|
|
1346
1416
|
end sub
|
|
1347
1417
|
`);
|
|
1348
1418
|
(0, testHelpers_spec_1.expectSymbolTableEquals)(file.parser.references.functionExpressions[0].symbolTable, [
|
|
1349
|
-
['name', new StringType_1.StringType(), util_1.default.createRange(2,
|
|
1350
|
-
['nameCopy', new StringType_1.StringType(), util_1.default.createRange(3,
|
|
1419
|
+
['name', new StringType_1.StringType(), util_1.default.createRange(2, 20, 2, 24)],
|
|
1420
|
+
['nameCopy', new StringType_1.StringType(), util_1.default.createRange(3, 20, 3, 28)]
|
|
1351
1421
|
]);
|
|
1352
1422
|
});
|
|
1353
1423
|
it('sets proper range for functions', () => {
|
|
@@ -1358,7 +1428,6 @@ describe('BrsFile', () => {
|
|
|
1358
1428
|
end function
|
|
1359
1429
|
end sub
|
|
1360
1430
|
`);
|
|
1361
|
-
(0, chai_1.expect)(file.parser.references.functionExpressions).to.be.length(2);
|
|
1362
1431
|
(0, chai_1.expect)(file.parser.references.functionExpressions.map(x => x.range)).to.eql([
|
|
1363
1432
|
util_1.default.createRange(1, 16, 5, 23),
|
|
1364
1433
|
util_1.default.createRange(2, 30, 4, 32)
|
|
@@ -1367,10 +1436,10 @@ describe('BrsFile', () => {
|
|
|
1367
1436
|
});
|
|
1368
1437
|
describe('getHover', () => {
|
|
1369
1438
|
it('works for param types', () => {
|
|
1370
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1439
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
1371
1440
|
sub DoSomething(name as string)
|
|
1372
1441
|
name = 1
|
|
1373
|
-
sayMyName = function(name as string)
|
|
1442
|
+
sayMyName = function (name as string)
|
|
1374
1443
|
end function
|
|
1375
1444
|
end sub
|
|
1376
1445
|
`);
|
|
@@ -1385,19 +1454,19 @@ describe('BrsFile', () => {
|
|
|
1385
1454
|
});
|
|
1386
1455
|
//ignore this for now...it's not a huge deal
|
|
1387
1456
|
it('does not match on keywords or data types', () => {
|
|
1388
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1457
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
1389
1458
|
sub Main(name as string)
|
|
1390
1459
|
end sub
|
|
1391
|
-
sub as()
|
|
1460
|
+
sub as ()
|
|
1392
1461
|
end sub
|
|
1393
1462
|
`);
|
|
1394
|
-
//hover over the `as`
|
|
1463
|
+
//hover over the `as `
|
|
1395
1464
|
(0, chai_1.expect)(file.getHover(vscode_languageserver_1.Position.create(1, 31))).not.to.exist;
|
|
1396
1465
|
//hover over the `string`
|
|
1397
1466
|
(0, chai_1.expect)(file.getHover(vscode_languageserver_1.Position.create(1, 36))).not.to.exist;
|
|
1398
1467
|
});
|
|
1399
1468
|
it('finds declared function', () => {
|
|
1400
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1469
|
+
let file = program.setFile({ src: `${rootDir} /source/main.brs`, dest: 'source/main.brs' }, `
|
|
1401
1470
|
function Main(count = 1)
|
|
1402
1471
|
firstName = "bob"
|
|
1403
1472
|
age = 21
|