brighterscript 0.43.0 → 0.45.1
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 +37 -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 -3
- 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 +67 -24
- package/dist/Program.js +155 -88
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +3 -3
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +16 -10
- package/dist/Scope.js +28 -1
- 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/astUtils/visitors.spec.js +6 -6
- 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.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/diagnosticUtils.js +3 -3
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +47 -47
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +16 -3
- package/dist/files/BrsFile.js +112 -30
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +194 -95
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +10 -5
- package/dist/files/XmlFile.js +6 -1
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +83 -81
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +23 -23
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/interfaces.d.ts +29 -8
- 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 +10 -1
- package/dist/parser/Parser.js +90 -1
- package/dist/parser/Parser.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 +52 -0
- package/dist/parser/Statement.js +154 -1
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +1 -1
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.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 +1 -1
- package/dist/parser/tests/expression/TernaryExpression.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/InterfaceStatement.spec.js +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.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 +22 -0
- package/dist/util.js +60 -0
- package/dist/util.js.map +1 -1
- package/package.json +2 -3
- 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
|
@@ -46,7 +46,7 @@ describe('XmlFile', () => {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
|
-
file = program.
|
|
49
|
+
file = program.setFile('components/ChildScene.xml', (0, testHelpers_spec_1.trim) `
|
|
50
50
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
51
51
|
<component name="ChildScene" extends="Scene">
|
|
52
52
|
</component>
|
|
@@ -83,7 +83,7 @@ describe('XmlFile', () => {
|
|
|
83
83
|
`);
|
|
84
84
|
});
|
|
85
85
|
it('supports importing BrighterScript files', () => {
|
|
86
|
-
file = program.
|
|
86
|
+
file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, (0, testHelpers_spec_1.trim) `
|
|
87
87
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
88
88
|
<component name="ChildScene" extends="Scene">
|
|
89
89
|
<script type="text/brightscript" uri="ChildScene.bs" />
|
|
@@ -93,7 +93,7 @@ describe('XmlFile', () => {
|
|
|
93
93
|
});
|
|
94
94
|
it('does not include commented-out script imports', () => {
|
|
95
95
|
var _a, _b;
|
|
96
|
-
file = program.
|
|
96
|
+
file = program.setFile({ src: `${rootDir}/components/custom.xml`, dest: 'components/custom.xml' }, (0, testHelpers_spec_1.trim) `
|
|
97
97
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
98
98
|
<component name="ChildScene" extends="Scene">
|
|
99
99
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
@@ -167,14 +167,15 @@ describe('XmlFile', () => {
|
|
|
167
167
|
(0, chai_1.expect)(file.diagnostics[1]).to.deep.include(Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('unexpectedToo')), { range: vscode_languageserver_1.Range.create(5, 5, 5, 18) }));
|
|
168
168
|
});
|
|
169
169
|
it('Adds error when no component is declared in xml', () => {
|
|
170
|
-
|
|
170
|
+
program.setFile('components/comp.xml', '<script type="text/brightscript" uri="ChildScene.brs" />');
|
|
171
|
+
program.validate();
|
|
171
172
|
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
172
173
|
Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.xmlUnexpectedTag('script')), { range: vscode_languageserver_1.Range.create(0, 1, 0, 7) }),
|
|
173
174
|
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingComponentDeclaration()
|
|
174
175
|
]);
|
|
175
176
|
});
|
|
176
177
|
it('adds error when component does not declare a name', () => {
|
|
177
|
-
file = program.
|
|
178
|
+
file = program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
178
179
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
179
180
|
<component extends="ParentScene">
|
|
180
181
|
<script type="text/brightscript" uri="ChildScene.brs" />
|
|
@@ -188,7 +189,7 @@ describe('XmlFile', () => {
|
|
|
188
189
|
});
|
|
189
190
|
});
|
|
190
191
|
it('catches xml parse errors', () => {
|
|
191
|
-
file = program.
|
|
192
|
+
file = program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
192
193
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
193
194
|
<component 1extends="ParentScene">
|
|
194
195
|
</component>
|
|
@@ -229,7 +230,7 @@ describe('XmlFile', () => {
|
|
|
229
230
|
}
|
|
230
231
|
});
|
|
231
232
|
it('resolves relative paths', () => {
|
|
232
|
-
file = program.
|
|
233
|
+
file = program.setFile({
|
|
233
234
|
src: `${rootDir}/components/comp1.xml`,
|
|
234
235
|
dest: 'components/comp1.xml'
|
|
235
236
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -246,7 +247,7 @@ describe('XmlFile', () => {
|
|
|
246
247
|
});
|
|
247
248
|
it('finds correct position for empty uri in script tag', () => {
|
|
248
249
|
var _a;
|
|
249
|
-
file = program.
|
|
250
|
+
file = program.setFile({
|
|
250
251
|
src: `${rootDir}/components/comp1.xml`,
|
|
251
252
|
dest: 'components/comp1.xml'
|
|
252
253
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -261,7 +262,7 @@ describe('XmlFile', () => {
|
|
|
261
262
|
});
|
|
262
263
|
describe('doesReferenceFile', () => {
|
|
263
264
|
it('compares case insensitive', () => {
|
|
264
|
-
let xmlFile = program.
|
|
265
|
+
let xmlFile = program.setFile({
|
|
265
266
|
src: `${rootDir}/components/comp1.xml`,
|
|
266
267
|
dest: 'components/comp1.xml'
|
|
267
268
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -270,7 +271,7 @@ describe('XmlFile', () => {
|
|
|
270
271
|
<script type="text/brightscript" uri="HeroGrid.brs" />
|
|
271
272
|
</component>
|
|
272
273
|
`);
|
|
273
|
-
let brsFile = program.
|
|
274
|
+
let brsFile = program.setFile({
|
|
274
275
|
src: `${rootDir}/components/HEROGRID.brs`,
|
|
275
276
|
dest: `components/HEROGRID.brs`
|
|
276
277
|
}, ``);
|
|
@@ -279,17 +280,17 @@ describe('XmlFile', () => {
|
|
|
279
280
|
});
|
|
280
281
|
describe('autoImportComponentScript', () => {
|
|
281
282
|
it('is not enabled by default', () => {
|
|
282
|
-
program.
|
|
283
|
+
program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
283
284
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
284
285
|
<component name="ParentScene" extends="GrandparentScene">
|
|
285
286
|
<script type="text/brightscript" uri="./lib.brs" />
|
|
286
287
|
</component>
|
|
287
288
|
`);
|
|
288
|
-
program.
|
|
289
|
+
program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
|
|
289
290
|
function libFunc()
|
|
290
291
|
end function
|
|
291
292
|
`);
|
|
292
|
-
program.
|
|
293
|
+
program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
|
|
293
294
|
function init()
|
|
294
295
|
libFunc()
|
|
295
296
|
end function
|
|
@@ -304,17 +305,17 @@ describe('XmlFile', () => {
|
|
|
304
305
|
rootDir: rootDir,
|
|
305
306
|
autoImportComponentScript: true
|
|
306
307
|
});
|
|
307
|
-
program.
|
|
308
|
+
program.setFile({ src: `${rootDir}/components/comp1.xml`, dest: 'components/comp1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
308
309
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
309
310
|
<component name="ParentScene" extends="GrandparentScene">
|
|
310
311
|
<script type="text/brightscript" uri="./lib.brs" />
|
|
311
312
|
</component>
|
|
312
313
|
`);
|
|
313
|
-
program.
|
|
314
|
+
program.setFile({ src: `${rootDir}/components/lib.brs`, dest: 'components/lib.brs' }, `
|
|
314
315
|
function libFunc()
|
|
315
316
|
end function
|
|
316
317
|
`);
|
|
317
|
-
program.
|
|
318
|
+
program.setFile({ src: `${rootDir}/components/comp1.bs`, dest: 'components/comp1.bs' }, `
|
|
318
319
|
function init()
|
|
319
320
|
libFunc()
|
|
320
321
|
end function
|
|
@@ -344,13 +345,13 @@ describe('XmlFile', () => {
|
|
|
344
345
|
});
|
|
345
346
|
});
|
|
346
347
|
it('returns empty set when out of range', () => {
|
|
347
|
-
program.
|
|
348
|
+
program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
|
|
348
349
|
(0, chai_1.expect)(file.getCompletions(vscode_languageserver_1.Position.create(99, 99))).to.be.empty;
|
|
349
350
|
});
|
|
350
351
|
//TODO - refine this test once cdata scripts are supported
|
|
351
352
|
it('prevents scope completions entirely', () => {
|
|
352
|
-
program.
|
|
353
|
-
let xmlFile = program.
|
|
353
|
+
program.setFile({ src: `${rootDir}/components/Component1.brs`, dest: 'components/component1.brs' }, ``);
|
|
354
|
+
let xmlFile = program.setFile({ src: `${rootDir}/components/Component1.xml`, dest: 'components/component1.xml' }, (0, testHelpers_spec_1.trim) `
|
|
354
355
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
355
356
|
<component name="ParentScene" extends="GrandparentScene">
|
|
356
357
|
<script type="text/brightscript" uri="./Component1.brs" />
|
|
@@ -361,7 +362,7 @@ describe('XmlFile', () => {
|
|
|
361
362
|
});
|
|
362
363
|
describe('getAllDependencies', () => {
|
|
363
364
|
it('returns own imports', () => {
|
|
364
|
-
file = program.
|
|
365
|
+
file = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
365
366
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
366
367
|
<component name="ChildScene" extends="BaseScene">
|
|
367
368
|
<script type="text/brightscript" uri="pkg:/source/lib.brs" />
|
|
@@ -374,7 +375,7 @@ describe('XmlFile', () => {
|
|
|
374
375
|
});
|
|
375
376
|
});
|
|
376
377
|
it('invalidates dependent scopes on change', () => {
|
|
377
|
-
let xmlFile = program.
|
|
378
|
+
let xmlFile = program.setFile({
|
|
378
379
|
src: `${rootDir}/components/comp1.xml`,
|
|
379
380
|
dest: `components/comp1.xml`
|
|
380
381
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -388,7 +389,7 @@ describe('XmlFile', () => {
|
|
|
388
389
|
//scope should be validated
|
|
389
390
|
(0, chai_1.expect)(scope.isValidated);
|
|
390
391
|
//add lib1
|
|
391
|
-
program.
|
|
392
|
+
program.setFile({
|
|
392
393
|
src: `${rootDir}/source/lib.bs`,
|
|
393
394
|
dest: `source/lib.bs`
|
|
394
395
|
}, ``);
|
|
@@ -397,7 +398,7 @@ describe('XmlFile', () => {
|
|
|
397
398
|
program.validate();
|
|
398
399
|
(0, chai_1.expect)(scope.isValidated).to.be.true;
|
|
399
400
|
//update lib1 to include an import
|
|
400
|
-
program.
|
|
401
|
+
program.setFile({
|
|
401
402
|
src: `${rootDir}/source/lib.bs`,
|
|
402
403
|
dest: `source/lib.bs`
|
|
403
404
|
}, `
|
|
@@ -408,7 +409,7 @@ describe('XmlFile', () => {
|
|
|
408
409
|
program.validate();
|
|
409
410
|
(0, chai_1.expect)(scope.isValidated).to.be.true;
|
|
410
411
|
//add the lib2 imported from lib
|
|
411
|
-
program.
|
|
412
|
+
program.setFile({
|
|
412
413
|
src: `${rootDir}/source/lib2.bs`,
|
|
413
414
|
dest: `source/lib2.bs`
|
|
414
415
|
}, ``);
|
|
@@ -420,7 +421,7 @@ describe('XmlFile', () => {
|
|
|
420
421
|
(0, chai_1.expect)(scope.isValidated).to.be.false;
|
|
421
422
|
});
|
|
422
423
|
it('does not invalidate unrelated scopes on change', () => {
|
|
423
|
-
let xmlFile1 = program.
|
|
424
|
+
let xmlFile1 = program.setFile({
|
|
424
425
|
src: `${rootDir}/components/comp1.xml`,
|
|
425
426
|
dest: `components/comp1.xml`
|
|
426
427
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -429,7 +430,7 @@ describe('XmlFile', () => {
|
|
|
429
430
|
<script type="text/brightscript" uri="pkg:/source/lib.brs" />
|
|
430
431
|
</component>
|
|
431
432
|
`);
|
|
432
|
-
let xmlFile2 = program.
|
|
433
|
+
let xmlFile2 = program.setFile({
|
|
433
434
|
src: `${rootDir}/components/comp2.xml`,
|
|
434
435
|
dest: `components/comp2.xml`
|
|
435
436
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -442,7 +443,7 @@ describe('XmlFile', () => {
|
|
|
442
443
|
(0, chai_1.expect)(program.getScopesForFile(xmlFile1)[0].isValidated).to.be.true;
|
|
443
444
|
(0, chai_1.expect)(program.getScopesForFile(xmlFile2)[0].isValidated).to.be.true;
|
|
444
445
|
//add the lib file
|
|
445
|
-
program.
|
|
446
|
+
program.setFile({
|
|
446
447
|
src: `${rootDir}/source/lib.brs`,
|
|
447
448
|
dest: `source/lib.brs`
|
|
448
449
|
}, ``);
|
|
@@ -460,7 +461,7 @@ describe('XmlFile', () => {
|
|
|
460
461
|
});
|
|
461
462
|
describe('component extends', () => {
|
|
462
463
|
it('works for single-line', () => {
|
|
463
|
-
file = program.
|
|
464
|
+
file = program.setFile({
|
|
464
465
|
src: `${rootDir}/components/comp1.xml`,
|
|
465
466
|
dest: `components/comp1.xml`
|
|
466
467
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -471,7 +472,7 @@ describe('XmlFile', () => {
|
|
|
471
472
|
(0, chai_1.expect)(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(1, 38, 1, 47));
|
|
472
473
|
});
|
|
473
474
|
it('works for multi-line', () => {
|
|
474
|
-
file = program.
|
|
475
|
+
file = program.setFile({
|
|
475
476
|
src: `${rootDir}/components/comp1.xml`,
|
|
476
477
|
dest: `components/comp1.xml`
|
|
477
478
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -483,7 +484,7 @@ describe('XmlFile', () => {
|
|
|
483
484
|
(0, chai_1.expect)(file.parentComponentName.range).to.eql(vscode_languageserver_1.Range.create(2, 13, 2, 22));
|
|
484
485
|
});
|
|
485
486
|
it('does not throw when unable to find extends', () => {
|
|
486
|
-
file = program.
|
|
487
|
+
file = program.setFile({
|
|
487
488
|
src: `${rootDir}/components/comp1.xml`,
|
|
488
489
|
dest: `components/comp1.xml`
|
|
489
490
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -494,7 +495,7 @@ describe('XmlFile', () => {
|
|
|
494
495
|
(0, chai_1.expect)(file.parentComponentName).to.not.exist;
|
|
495
496
|
});
|
|
496
497
|
it('adds warning when no "extends" attribute is found', () => {
|
|
497
|
-
|
|
498
|
+
program.setFile({
|
|
498
499
|
src: `${rootDir}/components/comp1.xml`,
|
|
499
500
|
dest: `components/comp1.xml`
|
|
500
501
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -502,7 +503,8 @@ describe('XmlFile', () => {
|
|
|
502
503
|
<component name="ChildScene">
|
|
503
504
|
</component>
|
|
504
505
|
`);
|
|
505
|
-
(
|
|
506
|
+
program.validate();
|
|
507
|
+
(0, testHelpers_spec_1.expectDiagnostics)(program, [
|
|
506
508
|
DiagnosticMessages_1.DiagnosticMessages.xmlComponentMissingExtendsAttribute()
|
|
507
509
|
]);
|
|
508
510
|
});
|
|
@@ -512,11 +514,11 @@ describe('XmlFile', () => {
|
|
|
512
514
|
autoImportComponentScript: true,
|
|
513
515
|
rootDir: rootDir
|
|
514
516
|
});
|
|
515
|
-
program.
|
|
517
|
+
program.setFile({
|
|
516
518
|
src: `${rootDir}/components/SimpleScene.bs`,
|
|
517
519
|
dest: `components/SimpleScene.bs`
|
|
518
520
|
}, '');
|
|
519
|
-
program.
|
|
521
|
+
program.setFile({
|
|
520
522
|
src: `${rootDir}/components/SimpleScene.xml`,
|
|
521
523
|
dest: `components/SimpleScene.xml`
|
|
522
524
|
}, (0, testHelpers_spec_1.trim) `
|
|
@@ -571,7 +573,7 @@ describe('XmlFile', () => {
|
|
|
571
573
|
file.needsTranspiled = true;
|
|
572
574
|
}
|
|
573
575
|
});
|
|
574
|
-
const file = program.
|
|
576
|
+
const file = program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
575
577
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
576
578
|
<component name="Comp" extends="Group">
|
|
577
579
|
</component>
|
|
@@ -604,8 +606,8 @@ describe('XmlFile', () => {
|
|
|
604
606
|
`, 'none', 'components/child.xml');
|
|
605
607
|
});
|
|
606
608
|
it('does not include bslib script if already there from ropm', () => {
|
|
607
|
-
program.
|
|
608
|
-
program.
|
|
609
|
+
program.setFile('source/roku_modules/bslib/bslib.brs', ``);
|
|
610
|
+
program.setFile('source/lib.bs', ``);
|
|
609
611
|
//include a bs file to force transpile for the xml file
|
|
610
612
|
testTranspile((0, testHelpers_spec_1.trim) `
|
|
611
613
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
@@ -622,7 +624,7 @@ describe('XmlFile', () => {
|
|
|
622
624
|
`, 'none', 'components/child.xml');
|
|
623
625
|
});
|
|
624
626
|
it('does not transpile xml file when bslib script is already present', () => {
|
|
625
|
-
const file = program.
|
|
627
|
+
const file = program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
626
628
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
627
629
|
<component name="Comp" extends="Group">
|
|
628
630
|
<script type="text/brightscript" uri="pkg:/source/bslib.brs" />
|
|
@@ -636,8 +638,8 @@ describe('XmlFile', () => {
|
|
|
636
638
|
* There was a bug that would incorrectly replace one of the script paths on the second or third transpile, so this test verifies it doesn't do that anymore
|
|
637
639
|
*/
|
|
638
640
|
it('does not mangle scripts on multiple transpile', async () => {
|
|
639
|
-
program.
|
|
640
|
-
program.
|
|
641
|
+
program.setFile('components/SimpleScene.bs', ``);
|
|
642
|
+
program.setFile(`components/SimpleScene.xml`, (0, testHelpers_spec_1.trim) `
|
|
641
643
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
642
644
|
<component name="SimpleScene" extends="Scene">
|
|
643
645
|
<script type="text/brightscript" uri="SimpleScene.bs" />
|
|
@@ -658,7 +660,7 @@ describe('XmlFile', () => {
|
|
|
658
660
|
(0, chai_1.expect)(fsExtra.readFileSync(`${stagingDir}/components/SimpleScene.xml`).toString()).to.eql(expected);
|
|
659
661
|
});
|
|
660
662
|
it('keeps all content of the XML', () => {
|
|
661
|
-
program.
|
|
663
|
+
program.setFile(`components/SimpleScene.bs`, `
|
|
662
664
|
sub b()
|
|
663
665
|
end sub
|
|
664
666
|
`);
|
|
@@ -698,10 +700,10 @@ describe('XmlFile', () => {
|
|
|
698
700
|
`, 'none', 'components/SimpleScene.xml');
|
|
699
701
|
});
|
|
700
702
|
it('changes file extensions from bs to brs', () => {
|
|
701
|
-
program.
|
|
703
|
+
program.setFile(`components/SimpleScene.bs`, `
|
|
702
704
|
import "pkg:/source/lib.bs"
|
|
703
705
|
`);
|
|
704
|
-
program.
|
|
706
|
+
program.setFile('source/lib.bs', ``);
|
|
705
707
|
testTranspile((0, testHelpers_spec_1.trim) `
|
|
706
708
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
707
709
|
<component name="SimpleScene" extends="Scene">
|
|
@@ -717,7 +719,7 @@ describe('XmlFile', () => {
|
|
|
717
719
|
`, 'none', 'components/SimpleScene.xml');
|
|
718
720
|
});
|
|
719
721
|
it('does not fail on missing script type', () => {
|
|
720
|
-
program.
|
|
722
|
+
program.setFile('components/SimpleScene.brs', '');
|
|
721
723
|
testTranspile((0, testHelpers_spec_1.trim) `
|
|
722
724
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
723
725
|
<component name="SimpleScene" extends="Scene">
|
|
@@ -732,7 +734,7 @@ describe('XmlFile', () => {
|
|
|
732
734
|
`, null, 'components/comp.xml');
|
|
733
735
|
});
|
|
734
736
|
it('returns the XML unmodified if needsTranspiled is false', () => {
|
|
735
|
-
let file = program.
|
|
737
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
736
738
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
737
739
|
<!-- should stay as-is -->
|
|
738
740
|
<component name="SimpleScene" extends="Scene" >
|
|
@@ -750,7 +752,7 @@ describe('XmlFile', () => {
|
|
|
750
752
|
`);
|
|
751
753
|
});
|
|
752
754
|
it('needsTranspiled is false by default', () => {
|
|
753
|
-
let file = program.
|
|
755
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
754
756
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
755
757
|
<component name="SimpleScene" extends="Scene" >
|
|
756
758
|
</component>
|
|
@@ -758,7 +760,7 @@ describe('XmlFile', () => {
|
|
|
758
760
|
(0, chai_1.expect)(file.needsTranspiled).to.be.false;
|
|
759
761
|
});
|
|
760
762
|
it('needsTranspiled is true if an import is brighterscript', () => {
|
|
761
|
-
let file = program.
|
|
763
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
762
764
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
763
765
|
<component name="SimpleScene" extends="Scene" >
|
|
764
766
|
<script type="text/brightscript" uri="SimpleScene.bs"/>
|
|
@@ -768,7 +770,7 @@ describe('XmlFile', () => {
|
|
|
768
770
|
});
|
|
769
771
|
it('simple source mapping includes sourcemap reference', () => {
|
|
770
772
|
program.options.sourceMap = true;
|
|
771
|
-
let file = program.
|
|
773
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
772
774
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
773
775
|
<component name="SimpleScene" extends="Scene">
|
|
774
776
|
</component>
|
|
@@ -780,7 +782,7 @@ describe('XmlFile', () => {
|
|
|
780
782
|
});
|
|
781
783
|
it('AST-based source mapping includes sourcemap reference', () => {
|
|
782
784
|
program.options.sourceMap = true;
|
|
783
|
-
let file = program.
|
|
785
|
+
let file = program.setFile({ src: (0, util_1.standardizePath) `${rootDir}/components/SimpleScene.xml`, dest: 'components/SimpleScene.xml' }, (0, testHelpers_spec_1.trim) `
|
|
784
786
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
785
787
|
<component name="SimpleScene" extends="Scene">
|
|
786
788
|
</component>
|
|
@@ -800,7 +802,7 @@ describe('XmlFile', () => {
|
|
|
800
802
|
name: 'Transform plugins',
|
|
801
803
|
afterFileParse: file => validateXml(file)
|
|
802
804
|
});
|
|
803
|
-
file = program.
|
|
805
|
+
file = program.setFile('components/component.xml', (0, testHelpers_spec_1.trim) `
|
|
804
806
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
805
807
|
<component name="Cmp1" extends="Scene">
|
|
806
808
|
</component>
|
|
@@ -829,7 +831,7 @@ describe('XmlFile', () => {
|
|
|
829
831
|
}
|
|
830
832
|
}
|
|
831
833
|
});
|
|
832
|
-
program.
|
|
834
|
+
program.setFile('components/comp.xml', (0, testHelpers_spec_1.trim) `
|
|
833
835
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
834
836
|
<component name="Cmp1" extends="Scene">
|
|
835
837
|
</component>
|
|
@@ -842,40 +844,40 @@ describe('XmlFile', () => {
|
|
|
842
844
|
});
|
|
843
845
|
describe('typedef', () => {
|
|
844
846
|
it('loads d.bs files from parent scope', () => {
|
|
845
|
-
program.
|
|
847
|
+
program.setFile('components/ParentComponent.xml', (0, testHelpers_spec_1.trim) `
|
|
846
848
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
847
849
|
<component name="ParentComponent" extends="Scene">
|
|
848
850
|
<script uri="ParentComponent.brs" />
|
|
849
851
|
</component>
|
|
850
852
|
`);
|
|
851
|
-
program.
|
|
853
|
+
program.setFile('components/ParentComponent.d.bs', `
|
|
852
854
|
import "Lib.brs"
|
|
853
855
|
namespace Parent
|
|
854
856
|
sub log()
|
|
855
857
|
end sub
|
|
856
858
|
end namespace
|
|
857
859
|
`);
|
|
858
|
-
program.
|
|
860
|
+
program.setFile('components/ParentComponent.brs', `
|
|
859
861
|
sub Parent_log()
|
|
860
862
|
end sub
|
|
861
863
|
`);
|
|
862
|
-
program.
|
|
864
|
+
program.setFile('components/Lib.d.bs', `
|
|
863
865
|
namespace Lib
|
|
864
866
|
sub log()
|
|
865
867
|
end sub
|
|
866
868
|
end namespace
|
|
867
869
|
`);
|
|
868
|
-
program.
|
|
870
|
+
program.setFile('components/Lib.brs', `
|
|
869
871
|
sub Lib_log()
|
|
870
872
|
end sub
|
|
871
873
|
`);
|
|
872
|
-
program.
|
|
874
|
+
program.setFile('components/ChildComponent.xml', (0, testHelpers_spec_1.trim) `
|
|
873
875
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
874
876
|
<component name="ChildComponent" extends="ParentComponent">
|
|
875
877
|
<script uri="ChildComponent.bs" />
|
|
876
878
|
</component>
|
|
877
879
|
`);
|
|
878
|
-
program.
|
|
880
|
+
program.setFile('components/ChildComponent.bs', `
|
|
879
881
|
sub init()
|
|
880
882
|
Parent.log()
|
|
881
883
|
Lib.log()
|
|
@@ -890,28 +892,28 @@ describe('XmlFile', () => {
|
|
|
890
892
|
]);
|
|
891
893
|
});
|
|
892
894
|
it('loads `d.bs` files into scope', () => {
|
|
893
|
-
const xmlFile = program.
|
|
895
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
894
896
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
895
897
|
<component name="Component1" extends="Scene">
|
|
896
898
|
<script uri="Component1.brs" />
|
|
897
899
|
</component>
|
|
898
900
|
`);
|
|
899
|
-
program.
|
|
901
|
+
program.setFile('components/Component1.d.bs', `
|
|
900
902
|
sub logInfo()
|
|
901
903
|
end sub
|
|
902
904
|
`);
|
|
903
905
|
(0, chai_1.expect)(program.getScopesForFile(xmlFile)[0].getAllCallables().map(x => x.callable.name)).to.include('logInfo');
|
|
904
906
|
});
|
|
905
907
|
it('does not include `d.bs` script during transpile', () => {
|
|
906
|
-
program.
|
|
908
|
+
program.setFile('source/logger.d.bs', `
|
|
907
909
|
sub logInfo()
|
|
908
910
|
end sub
|
|
909
911
|
`);
|
|
910
|
-
program.
|
|
912
|
+
program.setFile('source/logger.brs', `
|
|
911
913
|
sub logInfo()
|
|
912
914
|
end sub
|
|
913
915
|
`);
|
|
914
|
-
program.
|
|
916
|
+
program.setFile('components/Component1.bs', `
|
|
915
917
|
import "pkg:/source/logger.brs"
|
|
916
918
|
sub init()
|
|
917
919
|
end sub
|
|
@@ -931,7 +933,7 @@ describe('XmlFile', () => {
|
|
|
931
933
|
`, 'none', 'components/Component1.xml');
|
|
932
934
|
});
|
|
933
935
|
it('does not load .brs information into scope if related d.bs is in scope', () => {
|
|
934
|
-
const xmlFile = program.
|
|
936
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
935
937
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
936
938
|
<component name="Component1" extends="Scene">
|
|
937
939
|
<script uri="Component1.brs" />
|
|
@@ -939,7 +941,7 @@ describe('XmlFile', () => {
|
|
|
939
941
|
`);
|
|
940
942
|
const scope = program.getScopesForFile(xmlFile)[0];
|
|
941
943
|
//load brs file
|
|
942
|
-
program.
|
|
944
|
+
program.setFile('components/Component1.brs', `
|
|
943
945
|
sub logInfo()
|
|
944
946
|
end sub
|
|
945
947
|
sub logWarning()
|
|
@@ -949,7 +951,7 @@ describe('XmlFile', () => {
|
|
|
949
951
|
(0, chai_1.expect)(functionNames).to.include('logInfo');
|
|
950
952
|
(0, chai_1.expect)(functionNames).to.include('logWarning');
|
|
951
953
|
//load d.bs file, which should shadow out the .brs file
|
|
952
|
-
program.
|
|
954
|
+
program.setFile('components/Component1.d.bs', `
|
|
953
955
|
sub logError()
|
|
954
956
|
end sub
|
|
955
957
|
`);
|
|
@@ -959,7 +961,7 @@ describe('XmlFile', () => {
|
|
|
959
961
|
(0, chai_1.expect)(functionNames).not.to.include('logWarning');
|
|
960
962
|
});
|
|
961
963
|
it('updates xml scope when typedef disappears', () => {
|
|
962
|
-
const xmlFile = program.
|
|
964
|
+
const xmlFile = program.setFile('components/Component1.xml', (0, testHelpers_spec_1.trim) `
|
|
963
965
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
964
966
|
<component name="Component1" extends="Scene">
|
|
965
967
|
<script uri="Component1.brs" />
|
|
@@ -967,12 +969,12 @@ describe('XmlFile', () => {
|
|
|
967
969
|
`);
|
|
968
970
|
const scope = program.getScopesForFile(xmlFile)[0];
|
|
969
971
|
//load brs file
|
|
970
|
-
program.
|
|
972
|
+
program.setFile('components/Component1.brs', `
|
|
971
973
|
sub logBrs()
|
|
972
974
|
end sub
|
|
973
975
|
`);
|
|
974
976
|
//load d.bs file, which should shadow out the .brs file
|
|
975
|
-
const typedef = program.
|
|
977
|
+
const typedef = program.setFile('components/Component1.d.bs', `
|
|
976
978
|
sub logTypedef()
|
|
977
979
|
end sub
|
|
978
980
|
`);
|
|
@@ -990,7 +992,7 @@ describe('XmlFile', () => {
|
|
|
990
992
|
});
|
|
991
993
|
it('finds script imports for single-quoted script tags', () => {
|
|
992
994
|
var _a;
|
|
993
|
-
const file = program.
|
|
995
|
+
const file = program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
994
996
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
995
997
|
<component name="Cmp1" extends="Scene">
|
|
996
998
|
<script uri='SingleQuotedFile.brs' />
|
|
@@ -1001,7 +1003,7 @@ describe('XmlFile', () => {
|
|
|
1001
1003
|
describe('commentFlags', () => {
|
|
1002
1004
|
it('ignores warning from previous line comment', () => {
|
|
1003
1005
|
//component without a name attribute
|
|
1004
|
-
program.
|
|
1006
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1005
1007
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1006
1008
|
<!--bs:disable-next-line-->
|
|
1007
1009
|
<component>
|
|
@@ -1012,7 +1014,7 @@ describe('XmlFile', () => {
|
|
|
1012
1014
|
});
|
|
1013
1015
|
it('ignores warning from previous line just for the specified code', () => {
|
|
1014
1016
|
//component without a name attribute
|
|
1015
|
-
program.
|
|
1017
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1016
1018
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1017
1019
|
<!--bs:disable-next-line 1006-->
|
|
1018
1020
|
<component>
|
|
@@ -1025,7 +1027,7 @@ describe('XmlFile', () => {
|
|
|
1025
1027
|
});
|
|
1026
1028
|
it('ignores warning from previous line comment', () => {
|
|
1027
1029
|
//component without a name attribute
|
|
1028
|
-
program.
|
|
1030
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1029
1031
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1030
1032
|
<component> <!--bs:disable-line-->
|
|
1031
1033
|
</component>
|
|
@@ -1035,7 +1037,7 @@ describe('XmlFile', () => {
|
|
|
1035
1037
|
});
|
|
1036
1038
|
it('ignores warning from previous line just for the specified code', () => {
|
|
1037
1039
|
//component without a name attribute
|
|
1038
|
-
program.
|
|
1040
|
+
program.setFile('components/file.xml', (0, testHelpers_spec_1.trim) `
|
|
1039
1041
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1040
1042
|
<component> <!--bs:disable-line 1006-->
|
|
1041
1043
|
</component>
|
|
@@ -1048,16 +1050,16 @@ describe('XmlFile', () => {
|
|
|
1048
1050
|
});
|
|
1049
1051
|
describe('duplicate components', () => {
|
|
1050
1052
|
it('more gracefully handles multiple components with the same name', () => {
|
|
1051
|
-
program.
|
|
1052
|
-
program.
|
|
1053
|
+
program.setFile('components/comp1.brs', ``);
|
|
1054
|
+
program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
1053
1055
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1054
1056
|
<component name="comp1" extends="Group">
|
|
1055
1057
|
<script uri="comp1.brs" />
|
|
1056
1058
|
</component>
|
|
1057
1059
|
`);
|
|
1058
1060
|
//add another component with the same name
|
|
1059
|
-
program.
|
|
1060
|
-
program.
|
|
1061
|
+
program.setFile('components/comp2.brs', ``);
|
|
1062
|
+
program.setFile('components/comp2.xml', (0, testHelpers_spec_1.trim) `
|
|
1061
1063
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1062
1064
|
<component name="comp1" extends="Group">
|
|
1063
1065
|
<script uri="comp2.brs" />
|
|
@@ -1071,14 +1073,14 @@ describe('XmlFile', () => {
|
|
|
1071
1073
|
});
|
|
1072
1074
|
it('maintains consistent component selection', () => {
|
|
1073
1075
|
//add comp2 first
|
|
1074
|
-
const comp2 = program.
|
|
1076
|
+
const comp2 = program.setFile('components/comp2.xml', (0, testHelpers_spec_1.trim) `
|
|
1075
1077
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1076
1078
|
<component name="comp1">
|
|
1077
1079
|
</component>
|
|
1078
1080
|
`);
|
|
1079
1081
|
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1080
1082
|
//add comp1. it should become the main component with this name
|
|
1081
|
-
const comp1 = program.
|
|
1083
|
+
const comp1 = program.setFile('components/comp1.xml', (0, testHelpers_spec_1.trim) `
|
|
1082
1084
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1083
1085
|
<component name="comp1" extends="Group">
|
|
1084
1086
|
</component>
|
|
@@ -1088,7 +1090,7 @@ describe('XmlFile', () => {
|
|
|
1088
1090
|
program.removeFile((0, util_1.standardizePath) `${rootDir}/components/comp1.xml`);
|
|
1089
1091
|
(0, chai_1.expect)(program.getComponent('comp1').file.pkgPath).to.equal(comp2.pkgPath);
|
|
1090
1092
|
//add comp3
|
|
1091
|
-
program.
|
|
1093
|
+
program.setFile('components/comp3.xml', (0, testHelpers_spec_1.trim) `
|
|
1092
1094
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
1093
1095
|
<component name="comp1">
|
|
1094
1096
|
</component>
|