brighterscript 0.58.0 → 0.59.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 +12 -0
- package/README.md +15 -7
- package/bsconfig.schema.json +11 -0
- package/dist/BsConfig.d.ts +11 -0
- package/dist/DiagnosticMessages.d.ts +7 -2
- package/dist/DiagnosticMessages.js +7 -2
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/Program.d.ts +5 -1
- package/dist/Program.js +39 -25
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +1 -1
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +4 -2
- package/dist/Scope.js +16 -9
- package/dist/Scope.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/reflection.spec.js +5 -0
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +2 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +6 -6
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +34 -34
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +2 -2
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +4 -5
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +48 -6
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +33 -35
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.spec.js +78 -79
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.spec.js +57 -90
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +13 -15
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/files/tests/optionalChaning.spec.js +8 -11
- package/dist/files/tests/optionalChaning.spec.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +6 -0
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +1 -0
- package/dist/lexer/TokenKind.js +6 -2
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.spec.js +5 -7
- package/dist/parser/AstNode.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +4 -0
- package/dist/parser/Parser.js +12 -0
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +2 -3
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/Statement.d.ts +13 -0
- package/dist/parser/Statement.js +28 -3
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +2 -3
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +7 -7
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
- package/dist/parser/tests/statement/Continue.spec.js +92 -0
- package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
- package/dist/parser/tests/statement/Enum.spec.js +29 -5
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/For.spec.js +3 -4
- package/dist/parser/tests/statement/For.spec.js.map +1 -1
- package/dist/parser/tests/statement/ForEach.spec.js +4 -5
- package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +4 -5
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +3 -4
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/util.js +7 -6
- package/dist/util.js.map +1 -1
- package/package.json +1 -1
|
@@ -24,18 +24,17 @@ const creators_1 = require("../astUtils/creators");
|
|
|
24
24
|
const fsExtra = require("fs-extra");
|
|
25
25
|
const vscode_uri_1 = require("vscode-uri");
|
|
26
26
|
const undent_1 = require("undent");
|
|
27
|
+
const testHelpers_spec_2 = require("../testHelpers.spec");
|
|
27
28
|
let sinon = sinonImport.createSandbox();
|
|
28
29
|
describe('BrsFile', () => {
|
|
29
|
-
let tempDir = (0, util_1.standardizePath) `${process.cwd()}/.tmp`;
|
|
30
|
-
let rootDir = (0, util_1.standardizePath) `${tempDir}/rootDir`;
|
|
31
30
|
let program;
|
|
32
|
-
let srcPath = (0, util_1.standardizePath) `${rootDir}/source/main.brs`;
|
|
31
|
+
let srcPath = (0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main.brs`;
|
|
33
32
|
let destPath = 'source/main.brs';
|
|
34
33
|
let file;
|
|
35
|
-
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, rootDir]);
|
|
34
|
+
let testTranspile = (0, testHelpers_spec_1.getTestTranspile)(() => [program, testHelpers_spec_2.rootDir]);
|
|
36
35
|
beforeEach(() => {
|
|
37
|
-
fsExtra.emptyDirSync(tempDir);
|
|
38
|
-
program = new Program_1.Program({ rootDir: rootDir, sourceMap: true });
|
|
36
|
+
fsExtra.emptyDirSync(testHelpers_spec_2.tempDir);
|
|
37
|
+
program = new Program_1.Program({ rootDir: testHelpers_spec_2.rootDir, sourceMap: true });
|
|
39
38
|
file = new BrsFile_1.BrsFile(srcPath, destPath, program);
|
|
40
39
|
});
|
|
41
40
|
afterEach(() => {
|
|
@@ -81,9 +80,9 @@ describe('BrsFile', () => {
|
|
|
81
80
|
});
|
|
82
81
|
it('sets needsTranspiled to true for .bs files', () => {
|
|
83
82
|
//BrightScript
|
|
84
|
-
(0, chai_1.expect)(new BrsFile_1.BrsFile(`${rootDir}/source/main.brs`, 'source/main.brs', program).needsTranspiled).to.be.false;
|
|
83
|
+
(0, chai_1.expect)(new BrsFile_1.BrsFile(`${testHelpers_spec_2.rootDir}/source/main.brs`, 'source/main.brs', program).needsTranspiled).to.be.false;
|
|
85
84
|
//BrighterScript
|
|
86
|
-
(0, chai_1.expect)(new BrsFile_1.BrsFile(`${rootDir}/source/main.bs`, 'source/main.bs', program).needsTranspiled).to.be.true;
|
|
85
|
+
(0, chai_1.expect)(new BrsFile_1.BrsFile(`${testHelpers_spec_2.rootDir}/source/main.bs`, 'source/main.bs', program).needsTranspiled).to.be.true;
|
|
87
86
|
});
|
|
88
87
|
it('computes new import statements after clearing parser references', () => {
|
|
89
88
|
const file = program.setFile('source/main.bs', ``);
|
|
@@ -104,7 +103,7 @@ describe('BrsFile', () => {
|
|
|
104
103
|
});
|
|
105
104
|
describe('getPartialVariableName', () => {
|
|
106
105
|
let entry = {
|
|
107
|
-
src: `${rootDir}/source/lib.brs`,
|
|
106
|
+
src: `${testHelpers_spec_2.rootDir}/source/lib.brs`,
|
|
108
107
|
dest: `source/lib.brs`
|
|
109
108
|
};
|
|
110
109
|
it('creates proper tokens', () => {
|
|
@@ -141,7 +140,7 @@ describe('BrsFile', () => {
|
|
|
141
140
|
print "pkg:"
|
|
142
141
|
end sub
|
|
143
142
|
`);
|
|
144
|
-
const result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
|
|
143
|
+
const result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
|
|
145
144
|
const names = result.map(x => x.label);
|
|
146
145
|
(0, chai_1.expect)(names.sort()).to.eql([
|
|
147
146
|
'pkg:/source/main.brs'
|
|
@@ -153,7 +152,7 @@ describe('BrsFile', () => {
|
|
|
153
152
|
print "libpkg:"
|
|
154
153
|
end sub
|
|
155
154
|
`);
|
|
156
|
-
const result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
|
|
155
|
+
const result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
|
|
157
156
|
const names = result.map(x => x.label);
|
|
158
157
|
(0, chai_1.expect)(names.sort()).to.eql([
|
|
159
158
|
'libpkg:/source/main.brs'
|
|
@@ -165,7 +164,7 @@ describe('BrsFile', () => {
|
|
|
165
164
|
print \`pkg:\`
|
|
166
165
|
end sub
|
|
167
166
|
`);
|
|
168
|
-
const result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
|
|
167
|
+
const result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 31));
|
|
169
168
|
const names = result.map(x => x.label);
|
|
170
169
|
(0, chai_1.expect)(names.sort()).to.eql([
|
|
171
170
|
'pkg:/source/main.brs'
|
|
@@ -182,7 +181,7 @@ describe('BrsFile', () => {
|
|
|
182
181
|
sub SayHello()
|
|
183
182
|
end sub
|
|
184
183
|
`);
|
|
185
|
-
let result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 23));
|
|
184
|
+
let result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 23));
|
|
186
185
|
let names = result.map(x => x.label);
|
|
187
186
|
(0, chai_1.expect)(names).to.includes('Main');
|
|
188
187
|
(0, chai_1.expect)(names).to.includes('SayHello');
|
|
@@ -231,7 +230,7 @@ describe('BrsFile', () => {
|
|
|
231
230
|
class Person
|
|
232
231
|
end class
|
|
233
232
|
`);
|
|
234
|
-
const result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 24)).map(x => x.label);
|
|
233
|
+
const result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 24)).map(x => x.label);
|
|
235
234
|
(0, chai_1.expect)(result).includes('main');
|
|
236
235
|
(0, chai_1.expect)(result).includes('foo');
|
|
237
236
|
(0, chai_1.expect)(result).includes('Person');
|
|
@@ -249,22 +248,22 @@ describe('BrsFile', () => {
|
|
|
249
248
|
foo.bar.
|
|
250
249
|
end sub
|
|
251
250
|
`);
|
|
252
|
-
let result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(8, 30));
|
|
251
|
+
let result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(8, 30));
|
|
253
252
|
let names = result.map(x => x.label);
|
|
254
253
|
(0, chai_1.expect)(names).to.includes('bar');
|
|
255
|
-
result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(9, 32));
|
|
254
|
+
result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(9, 32));
|
|
256
255
|
names = result.map(x => x.label);
|
|
257
256
|
(0, chai_1.expect)(names).to.includes('sayHello');
|
|
258
257
|
});
|
|
259
258
|
});
|
|
260
259
|
it('always includes `m`', () => {
|
|
261
260
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
262
|
-
program.setFile(
|
|
261
|
+
program.setFile('source/main.brs', `
|
|
263
262
|
sub Main()
|
|
264
263
|
|
|
265
264
|
end sub
|
|
266
265
|
`);
|
|
267
|
-
let result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
|
|
266
|
+
let result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
|
|
268
267
|
let names = result.map(x => x.label);
|
|
269
268
|
(0, chai_1.expect)(names).to.contain('m');
|
|
270
269
|
});
|
|
@@ -272,25 +271,25 @@ describe('BrsFile', () => {
|
|
|
272
271
|
//add a single character to the file, and get completions after it
|
|
273
272
|
program.setFile('source/main.brs', `i`);
|
|
274
273
|
(0, chai_1.expect)(() => {
|
|
275
|
-
program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(0, 1)).map(x => x.label);
|
|
274
|
+
program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(0, 1)).map(x => x.label);
|
|
276
275
|
}).not.to.throw;
|
|
277
276
|
});
|
|
278
277
|
it('includes all keywords`', () => {
|
|
279
278
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
280
|
-
program.setFile(
|
|
279
|
+
program.setFile('source/main.brs', `
|
|
281
280
|
sub Main()
|
|
282
281
|
|
|
283
282
|
end sub
|
|
284
283
|
`);
|
|
285
284
|
let keywords = Object.keys(TokenKind_1.Keywords).filter(x => !x.includes(' '));
|
|
286
285
|
//inside the function
|
|
287
|
-
let result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
|
|
286
|
+
let result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
|
|
288
287
|
let names = result.map(x => x.label);
|
|
289
288
|
for (let keyword of keywords) {
|
|
290
289
|
(0, chai_1.expect)(names).to.include(keyword);
|
|
291
290
|
}
|
|
292
291
|
//outside the function
|
|
293
|
-
result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(4, 8));
|
|
292
|
+
result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(4, 8));
|
|
294
293
|
names = result.map(x => x.label);
|
|
295
294
|
for (let keyword of keywords) {
|
|
296
295
|
(0, chai_1.expect)(names).to.include(keyword);
|
|
@@ -298,25 +297,25 @@ describe('BrsFile', () => {
|
|
|
298
297
|
});
|
|
299
298
|
it('does not provide completions within a comment', () => {
|
|
300
299
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
301
|
-
program.setFile(
|
|
300
|
+
program.setFile('source/main.brs', `
|
|
302
301
|
sub Main()
|
|
303
302
|
'some comment
|
|
304
303
|
end sub
|
|
305
304
|
`);
|
|
306
305
|
//inside the function
|
|
307
|
-
let result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 33));
|
|
306
|
+
let result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 33));
|
|
308
307
|
(0, chai_1.expect)(result).to.be.lengthOf(0);
|
|
309
308
|
});
|
|
310
309
|
it('does not provide duplicate entries for variables', () => {
|
|
311
310
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
312
|
-
program.setFile(
|
|
311
|
+
program.setFile('source/main.brs', `
|
|
313
312
|
sub Main()
|
|
314
313
|
name = "bob"
|
|
315
314
|
age = 12
|
|
316
315
|
name = "john"
|
|
317
316
|
end sub
|
|
318
317
|
`);
|
|
319
|
-
let result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 23));
|
|
318
|
+
let result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 23));
|
|
320
319
|
let count = result.reduce((total, x) => {
|
|
321
320
|
return x.label === 'name' ? total + 1 : total;
|
|
322
321
|
}, 0);
|
|
@@ -324,34 +323,34 @@ describe('BrsFile', () => {
|
|
|
324
323
|
});
|
|
325
324
|
it('does not include `as` and `string` text options when used in function params', () => {
|
|
326
325
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
327
|
-
program.setFile(
|
|
326
|
+
program.setFile('source/main.brs', `
|
|
328
327
|
sub Main(name as string)
|
|
329
328
|
|
|
330
329
|
end sub
|
|
331
330
|
`);
|
|
332
|
-
let result = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
|
|
331
|
+
let result = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 23));
|
|
333
332
|
(0, chai_1.expect)(result.filter(x => x.kind === vscode_languageserver_1.CompletionItemKind.Text)).not.to.contain('as');
|
|
334
333
|
(0, chai_1.expect)(result.filter(x => x.kind === vscode_languageserver_1.CompletionItemKind.Text)).not.to.contain('string');
|
|
335
334
|
});
|
|
336
335
|
it('does not provide intellisense results when inside a comment', () => {
|
|
337
336
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
338
|
-
program.setFile(
|
|
337
|
+
program.setFile('source/main.brs', `
|
|
339
338
|
sub Main(name as string)
|
|
340
339
|
'this is a comment
|
|
341
340
|
end sub
|
|
342
341
|
`);
|
|
343
|
-
let results = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 30));
|
|
342
|
+
let results = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(2, 30));
|
|
344
343
|
(0, chai_1.expect)(results).to.be.empty;
|
|
345
344
|
});
|
|
346
345
|
it('does provide intellisence for labels only after a goto keyword', () => {
|
|
347
346
|
var _a;
|
|
348
347
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
349
|
-
program.setFile(
|
|
348
|
+
program.setFile('source/main.brs', `
|
|
350
349
|
sub Main(name as string)
|
|
351
350
|
something:
|
|
352
351
|
goto \nend sub
|
|
353
352
|
`);
|
|
354
|
-
let results = program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 25));
|
|
353
|
+
let results = program.getCompletions(`${testHelpers_spec_2.rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(3, 25));
|
|
355
354
|
(0, chai_1.expect)(results.length).to.equal(1);
|
|
356
355
|
(0, chai_1.expect)((_a = results[0]) === null || _a === void 0 ? void 0 : _a.label).to.equal('something');
|
|
357
356
|
});
|
|
@@ -389,7 +388,7 @@ describe('BrsFile', () => {
|
|
|
389
388
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
390
389
|
});
|
|
391
390
|
it('works for all', () => {
|
|
392
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
391
|
+
let file = program.setFile({ src: `${testHelpers_spec_2.rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
393
392
|
sub Main()
|
|
394
393
|
'bs:disable-next-line
|
|
395
394
|
name = "bob
|
|
@@ -406,7 +405,7 @@ describe('BrsFile', () => {
|
|
|
406
405
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
407
406
|
});
|
|
408
407
|
it('works for specific codes', () => {
|
|
409
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
408
|
+
let file = program.setFile({ src: `${testHelpers_spec_2.rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
410
409
|
sub Main()
|
|
411
410
|
'bs:disable-next-line: 1083, 1001
|
|
412
411
|
name = "bob
|
|
@@ -422,7 +421,7 @@ describe('BrsFile', () => {
|
|
|
422
421
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
423
422
|
});
|
|
424
423
|
it('recognizes non-numeric codes', () => {
|
|
425
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
424
|
+
let file = program.setFile({ src: `${testHelpers_spec_2.rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
426
425
|
sub Main()
|
|
427
426
|
'bs:disable-next-line: LINT9999
|
|
428
427
|
name = "bob
|
|
@@ -448,7 +447,7 @@ describe('BrsFile', () => {
|
|
|
448
447
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(scope);
|
|
449
448
|
});
|
|
450
449
|
it('adds diagnostics for unknown numeric diagnostic codes', () => {
|
|
451
|
-
program.setFile(
|
|
450
|
+
program.setFile('source/main.brs', `
|
|
452
451
|
sub main()
|
|
453
452
|
print "hi" 'bs:disable-line: 123456 999999 aaaab
|
|
454
453
|
end sub
|
|
@@ -459,7 +458,7 @@ describe('BrsFile', () => {
|
|
|
459
458
|
});
|
|
460
459
|
describe('bs:disable-line', () => {
|
|
461
460
|
it('works for all', () => {
|
|
462
|
-
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
461
|
+
let file = program.setFile({ src: `${testHelpers_spec_2.rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
463
462
|
sub Main()
|
|
464
463
|
z::;;%%%%%% 'bs:disable-line
|
|
465
464
|
end sub
|
|
@@ -475,7 +474,7 @@ describe('BrsFile', () => {
|
|
|
475
474
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
476
475
|
});
|
|
477
476
|
it('works for specific codes', () => {
|
|
478
|
-
program.setFile(
|
|
477
|
+
program.setFile('source/main.brs', `
|
|
479
478
|
sub main()
|
|
480
479
|
'should not have any errors
|
|
481
480
|
DoSomething(1) 'bs:disable-line:1002
|
|
@@ -494,7 +493,7 @@ describe('BrsFile', () => {
|
|
|
494
493
|
//the current version of BRS causes parse errors after the `parse` keyword, showing error in comments
|
|
495
494
|
//the program should ignore all diagnostics found in brs:* comment lines EXCEPT
|
|
496
495
|
//for the diagnostics about using unknown error codes
|
|
497
|
-
program.setFile(
|
|
496
|
+
program.setFile('source/main.brs', `
|
|
498
497
|
sub main()
|
|
499
498
|
stop 'bs:disable-line
|
|
500
499
|
print "need a valid line to fix stop error"
|
|
@@ -567,7 +566,7 @@ describe('BrsFile', () => {
|
|
|
567
566
|
testParseMode('source/main.spec.bs', Parser_1.ParseMode.BrighterScript);
|
|
568
567
|
});
|
|
569
568
|
it('supports labels and goto statements', () => {
|
|
570
|
-
let file = program.setFile(
|
|
569
|
+
let file = program.setFile('source/main.brs', `
|
|
571
570
|
sub Main()
|
|
572
571
|
'multiple goto statements on one line
|
|
573
572
|
goto myLabel : goto myLabel
|
|
@@ -577,7 +576,7 @@ describe('BrsFile', () => {
|
|
|
577
576
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
578
577
|
});
|
|
579
578
|
it('supports empty print statements', () => {
|
|
580
|
-
let file = program.setFile(
|
|
579
|
+
let file = program.setFile('source/main.brs', `
|
|
581
580
|
sub main()
|
|
582
581
|
print
|
|
583
582
|
end sub
|
|
@@ -586,7 +585,7 @@ describe('BrsFile', () => {
|
|
|
586
585
|
});
|
|
587
586
|
describe('conditional compile', () => {
|
|
588
587
|
it('supports case-insensitive bs_const variables', () => {
|
|
589
|
-
fsExtra.outputFileSync(`${rootDir}/manifest`, (0, undent_1.default) `
|
|
588
|
+
fsExtra.outputFileSync(`${testHelpers_spec_2.rootDir}/manifest`, (0, undent_1.default) `
|
|
590
589
|
bs_const=SomeKey=true
|
|
591
590
|
`);
|
|
592
591
|
program.setFile('source/main.brs', `
|
|
@@ -606,7 +605,7 @@ describe('BrsFile', () => {
|
|
|
606
605
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
607
606
|
});
|
|
608
607
|
it('works for upper case keywords', () => {
|
|
609
|
-
let file = program.setFile(
|
|
608
|
+
let file = program.setFile('source/main.brs', `
|
|
610
609
|
sub main()
|
|
611
610
|
#CONST someFlag = true
|
|
612
611
|
#IF someFlag
|
|
@@ -621,7 +620,7 @@ describe('BrsFile', () => {
|
|
|
621
620
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
622
621
|
});
|
|
623
622
|
it('supports single-word #elseif and #endif', () => {
|
|
624
|
-
let file = program.setFile(
|
|
623
|
+
let file = program.setFile('source/main.brs', `
|
|
625
624
|
sub main()
|
|
626
625
|
#const someFlag = true
|
|
627
626
|
#if someFlag
|
|
@@ -634,7 +633,7 @@ describe('BrsFile', () => {
|
|
|
634
633
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
635
634
|
});
|
|
636
635
|
it('supports multi-word #else if and #end if', () => {
|
|
637
|
-
let file = program.setFile(
|
|
636
|
+
let file = program.setFile('source/main.brs', `
|
|
638
637
|
sub main()
|
|
639
638
|
#const someFlag = true
|
|
640
639
|
#if someFlag
|
|
@@ -647,7 +646,7 @@ describe('BrsFile', () => {
|
|
|
647
646
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
648
647
|
});
|
|
649
648
|
it('does not choke on invalid code inside a false conditional compile', () => {
|
|
650
|
-
let file = program.setFile(
|
|
649
|
+
let file = program.setFile('source/main.brs', `
|
|
651
650
|
sub main()
|
|
652
651
|
#if false
|
|
653
652
|
non-commented code here should not cause parse errors
|
|
@@ -657,7 +656,7 @@ describe('BrsFile', () => {
|
|
|
657
656
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
658
657
|
});
|
|
659
658
|
it('detects syntax error in #if', () => {
|
|
660
|
-
let file = program.setFile(
|
|
659
|
+
let file = program.setFile('source/main.brs', `
|
|
661
660
|
sub main()
|
|
662
661
|
#if true1
|
|
663
662
|
print "true"
|
|
@@ -669,7 +668,7 @@ describe('BrsFile', () => {
|
|
|
669
668
|
]);
|
|
670
669
|
});
|
|
671
670
|
it('detects syntax error in #const', () => {
|
|
672
|
-
let file = program.setFile(
|
|
671
|
+
let file = program.setFile('source/main.brs', `
|
|
673
672
|
sub main()
|
|
674
673
|
#if %
|
|
675
674
|
print "true"
|
|
@@ -682,7 +681,7 @@ describe('BrsFile', () => {
|
|
|
682
681
|
]);
|
|
683
682
|
});
|
|
684
683
|
it('detects #const name using reserved word', () => {
|
|
685
|
-
let file = program.setFile(
|
|
684
|
+
let file = program.setFile('source/main.brs', `
|
|
686
685
|
sub main()
|
|
687
686
|
#const function = true
|
|
688
687
|
end sub
|
|
@@ -693,7 +692,7 @@ describe('BrsFile', () => {
|
|
|
693
692
|
]);
|
|
694
693
|
});
|
|
695
694
|
it('detects syntax error in #const', () => {
|
|
696
|
-
let file = program.setFile(
|
|
695
|
+
let file = program.setFile('source/main.brs', `
|
|
697
696
|
sub main()
|
|
698
697
|
#const someConst = 123
|
|
699
698
|
end sub
|
|
@@ -704,7 +703,7 @@ describe('BrsFile', () => {
|
|
|
704
703
|
});
|
|
705
704
|
});
|
|
706
705
|
it('supports stop statement', () => {
|
|
707
|
-
let file = program.setFile(
|
|
706
|
+
let file = program.setFile('source/main.brs', `
|
|
708
707
|
sub main()
|
|
709
708
|
stop
|
|
710
709
|
end sub
|
|
@@ -712,7 +711,7 @@ describe('BrsFile', () => {
|
|
|
712
711
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
713
712
|
});
|
|
714
713
|
it('supports single-line if statements', () => {
|
|
715
|
-
let file = program.setFile(
|
|
714
|
+
let file = program.setFile('source/main.brs', `
|
|
716
715
|
sub main()
|
|
717
716
|
if 1 < 2: return true: end if
|
|
718
717
|
if 1 < 2: return true
|
|
@@ -1549,7 +1548,7 @@ describe('BrsFile', () => {
|
|
|
1549
1548
|
});
|
|
1550
1549
|
});
|
|
1551
1550
|
it('handles mixed case `then` partions of conditionals', () => {
|
|
1552
|
-
let mainFile = program.setFile(
|
|
1551
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1553
1552
|
sub Main()
|
|
1554
1553
|
if true then
|
|
1555
1554
|
print "works"
|
|
@@ -1557,7 +1556,7 @@ describe('BrsFile', () => {
|
|
|
1557
1556
|
end sub
|
|
1558
1557
|
`);
|
|
1559
1558
|
(0, chai_1.expect)(mainFile.getDiagnostics()).to.be.lengthOf(0);
|
|
1560
|
-
mainFile = program.setFile(
|
|
1559
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1561
1560
|
sub Main()
|
|
1562
1561
|
if true Then
|
|
1563
1562
|
print "works"
|
|
@@ -1565,7 +1564,7 @@ describe('BrsFile', () => {
|
|
|
1565
1564
|
end sub
|
|
1566
1565
|
`);
|
|
1567
1566
|
(0, chai_1.expect)(mainFile.getDiagnostics()).to.be.lengthOf(0);
|
|
1568
|
-
mainFile = program.setFile(
|
|
1567
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1569
1568
|
sub Main()
|
|
1570
1569
|
if true THEN
|
|
1571
1570
|
print "works"
|
|
@@ -1576,7 +1575,7 @@ describe('BrsFile', () => {
|
|
|
1576
1575
|
});
|
|
1577
1576
|
describe('getHover', () => {
|
|
1578
1577
|
it('works for param types', () => {
|
|
1579
|
-
let file = program.setFile(
|
|
1578
|
+
let file = program.setFile('source/main.brs', `
|
|
1580
1579
|
sub DoSomething(name as string)
|
|
1581
1580
|
name = 1
|
|
1582
1581
|
sayMyName = function(name as string)
|
|
@@ -1594,7 +1593,7 @@ describe('BrsFile', () => {
|
|
|
1594
1593
|
});
|
|
1595
1594
|
//ignore this for now...it's not a huge deal
|
|
1596
1595
|
it('does not match on keywords or data types', () => {
|
|
1597
|
-
let file = program.setFile(
|
|
1596
|
+
let file = program.setFile('source/main.brs', `
|
|
1598
1597
|
sub Main(name as string)
|
|
1599
1598
|
end sub
|
|
1600
1599
|
sub as()
|
|
@@ -1606,7 +1605,7 @@ describe('BrsFile', () => {
|
|
|
1606
1605
|
(0, chai_1.expect)(program.getHover(file.srcPath, vscode_languageserver_1.Position.create(1, 36))).to.be.empty;
|
|
1607
1606
|
});
|
|
1608
1607
|
it('finds declared function', () => {
|
|
1609
|
-
let file = program.setFile(
|
|
1608
|
+
let file = program.setFile('source/main.brs', `
|
|
1610
1609
|
function Main(count = 1)
|
|
1611
1610
|
firstName = "bob"
|
|
1612
1611
|
age = 21
|
|
@@ -1623,7 +1622,7 @@ describe('BrsFile', () => {
|
|
|
1623
1622
|
].join('\n'));
|
|
1624
1623
|
});
|
|
1625
1624
|
it('finds declared namespace function', () => {
|
|
1626
|
-
let file = program.setFile(
|
|
1625
|
+
let file = program.setFile('source/main.brs', `
|
|
1627
1626
|
namespace mySpace
|
|
1628
1627
|
function Main(count = 1)
|
|
1629
1628
|
firstName = "bob"
|
|
@@ -1642,7 +1641,7 @@ describe('BrsFile', () => {
|
|
|
1642
1641
|
].join('\n'));
|
|
1643
1642
|
});
|
|
1644
1643
|
it('finds variable function hover in same scope', () => {
|
|
1645
|
-
let file = program.setFile(
|
|
1644
|
+
let file = program.setFile('source/main.brs', `
|
|
1646
1645
|
sub Main()
|
|
1647
1646
|
sayMyName = sub(name as string)
|
|
1648
1647
|
end sub
|
|
@@ -1684,7 +1683,7 @@ describe('BrsFile', () => {
|
|
|
1684
1683
|
].join('\n'));
|
|
1685
1684
|
});
|
|
1686
1685
|
it('finds function hover in file scope', () => {
|
|
1687
|
-
let file = program.setFile(
|
|
1686
|
+
let file = program.setFile('source/main.brs', `
|
|
1688
1687
|
sub Main()
|
|
1689
1688
|
sayMyName()
|
|
1690
1689
|
end sub
|
|
@@ -1702,7 +1701,7 @@ describe('BrsFile', () => {
|
|
|
1702
1701
|
].join('\n'));
|
|
1703
1702
|
});
|
|
1704
1703
|
it('finds namespace function hover in file scope', () => {
|
|
1705
|
-
let file = program.setFile(
|
|
1704
|
+
let file = program.setFile('source/main.brs', `
|
|
1706
1705
|
namespace mySpace
|
|
1707
1706
|
sub Main()
|
|
1708
1707
|
sayMyName()
|
|
@@ -1726,12 +1725,12 @@ describe('BrsFile', () => {
|
|
|
1726
1725
|
program = new Program_1.Program({
|
|
1727
1726
|
rootDir: rootDir
|
|
1728
1727
|
});
|
|
1729
|
-
let mainFile = program.setFile(
|
|
1728
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1730
1729
|
sub Main()
|
|
1731
1730
|
sayMyName()
|
|
1732
1731
|
end sub
|
|
1733
1732
|
`);
|
|
1734
|
-
program.setFile(
|
|
1733
|
+
program.setFile('source/lib.brs', `
|
|
1735
1734
|
sub sayMyName(name as string)
|
|
1736
1735
|
|
|
1737
1736
|
end sub
|
|
@@ -1750,12 +1749,12 @@ describe('BrsFile', () => {
|
|
|
1750
1749
|
program = new Program_1.Program({
|
|
1751
1750
|
rootDir: rootDir
|
|
1752
1751
|
});
|
|
1753
|
-
let mainFile = program.setFile(
|
|
1752
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1754
1753
|
sub Main()
|
|
1755
1754
|
mySpace.sayMyName()
|
|
1756
1755
|
end sub
|
|
1757
1756
|
`);
|
|
1758
|
-
program.setFile(
|
|
1757
|
+
program.setFile('source/lib.brs', `
|
|
1759
1758
|
namespace mySpace
|
|
1760
1759
|
sub sayMyName(name as string)
|
|
1761
1760
|
end sub
|
|
@@ -1813,7 +1812,7 @@ describe('BrsFile', () => {
|
|
|
1813
1812
|
`);
|
|
1814
1813
|
});
|
|
1815
1814
|
it('handles mixed case `then` partions of conditionals', () => {
|
|
1816
|
-
let mainFile = program.setFile(
|
|
1815
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1817
1816
|
sub Main()
|
|
1818
1817
|
if true then
|
|
1819
1818
|
print "works"
|
|
@@ -1821,7 +1820,7 @@ describe('BrsFile', () => {
|
|
|
1821
1820
|
end sub
|
|
1822
1821
|
`);
|
|
1823
1822
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(mainFile);
|
|
1824
|
-
mainFile = program.setFile(
|
|
1823
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1825
1824
|
sub Main()
|
|
1826
1825
|
if true Then
|
|
1827
1826
|
print "works"
|
|
@@ -1829,7 +1828,7 @@ describe('BrsFile', () => {
|
|
|
1829
1828
|
end sub
|
|
1830
1829
|
`);
|
|
1831
1830
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(mainFile);
|
|
1832
|
-
mainFile = program.setFile(
|
|
1831
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1833
1832
|
sub Main()
|
|
1834
1833
|
if true THEN
|
|
1835
1834
|
print "works"
|
|
@@ -1840,7 +1839,7 @@ describe('BrsFile', () => {
|
|
|
1840
1839
|
});
|
|
1841
1840
|
});
|
|
1842
1841
|
it('does not throw when encountering incomplete import statement', () => {
|
|
1843
|
-
program.setFile(
|
|
1842
|
+
program.setFile('source/main.brs', `
|
|
1844
1843
|
import
|
|
1845
1844
|
sub main()
|
|
1846
1845
|
end sub
|
|
@@ -2264,7 +2263,7 @@ describe('BrsFile', () => {
|
|
|
2264
2263
|
return consumer.generatedPositionFor({
|
|
2265
2264
|
line: 3,
|
|
2266
2265
|
column: 0,
|
|
2267
|
-
source: (0, util_1.standardizePath) `${rootDir}/source/main.bs`,
|
|
2266
|
+
source: (0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main.bs`,
|
|
2268
2267
|
bias: source_map_1.SourceMapConsumer.LEAST_UPPER_BOUND
|
|
2269
2268
|
});
|
|
2270
2269
|
});
|
|
@@ -2590,7 +2589,7 @@ describe('BrsFile', () => {
|
|
|
2590
2589
|
name: 'transform callback',
|
|
2591
2590
|
afterFileParse: onParsed
|
|
2592
2591
|
});
|
|
2593
|
-
file = program.setFile(
|
|
2592
|
+
file = program.setFile(`source/file${ext}`, `
|
|
2594
2593
|
sub Sum()
|
|
2595
2594
|
print "hello world"
|
|
2596
2595
|
end sub
|
|
@@ -2611,7 +2610,7 @@ describe('BrsFile', () => {
|
|
|
2611
2610
|
});
|
|
2612
2611
|
describe('typedefKey', () => {
|
|
2613
2612
|
it('works for .brs files', () => {
|
|
2614
|
-
(0, chai_1.expect)((0, util_1.standardizePath)((program.setFile('source/main.brs', '')).typedefKey)).to.equal((0, util_1.standardizePath) `${rootDir.toLowerCase()}/source/main.d.bs`);
|
|
2613
|
+
(0, chai_1.expect)((0, util_1.standardizePath)((program.setFile('source/main.brs', '')).typedefKey)).to.equal((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir.toLowerCase()}/source/main.d.bs`);
|
|
2615
2614
|
});
|
|
2616
2615
|
it('returns undefined for files that should not have a typedef', () => {
|
|
2617
2616
|
(0, chai_1.expect)((program.setFile('source/main.bs', '')).typedefKey).to.be.undefined;
|
|
@@ -2662,14 +2661,14 @@ describe('BrsFile', () => {
|
|
|
2662
2661
|
`);
|
|
2663
2662
|
(0, chai_1.expect)(file.hasTypedef).to.be.true;
|
|
2664
2663
|
(0, chai_1.expect)(file.typedefFile).to.exist;
|
|
2665
|
-
program.removeFile((0, util_1.standardizePath) `${rootDir}/source/main.d.bs`);
|
|
2664
|
+
program.removeFile((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main.d.bs`);
|
|
2666
2665
|
(0, chai_1.expect)(file.hasTypedef).to.be.false;
|
|
2667
2666
|
(0, chai_1.expect)(file.typedefFile).not.to.exist;
|
|
2668
2667
|
});
|
|
2669
2668
|
});
|
|
2670
2669
|
describe('typedef', () => {
|
|
2671
2670
|
it('sets typedef path properly', () => {
|
|
2672
|
-
(0, chai_1.expect)((program.setFile('source/main1.brs', '')).typedefKey).to.equal((0, util_1.standardizePath) `${rootDir}/source/main1.d.bs`.toLowerCase());
|
|
2671
|
+
(0, chai_1.expect)((program.setFile('source/main1.brs', '')).typedefKey).to.equal((0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main1.d.bs`.toLowerCase());
|
|
2673
2672
|
(0, chai_1.expect)((program.setFile('source/main2.d.bs', '')).typedefKey).to.equal(undefined);
|
|
2674
2673
|
(0, chai_1.expect)((program.setFile('source/main3.bs', '')).typedefKey).to.equal(undefined);
|
|
2675
2674
|
//works for dest with `.brs` extension
|
|
@@ -3016,7 +3015,7 @@ describe('BrsFile', () => {
|
|
|
3016
3015
|
let idx = 1;
|
|
3017
3016
|
beforeEach(() => {
|
|
3018
3017
|
pluginFileName = `plugin-${idx++}.js`;
|
|
3019
|
-
fsExtra.outputFileSync((0, util_1.standardizePath) `${tempDir}/plugins/${pluginFileName}`, `
|
|
3018
|
+
fsExtra.outputFileSync((0, util_1.standardizePath) `${testHelpers_spec_2.tempDir}/plugins/${pluginFileName}`, `
|
|
3020
3019
|
function plugin() {
|
|
3021
3020
|
return {
|
|
3022
3021
|
name: 'lower-file-name',
|
|
@@ -3029,14 +3028,14 @@ describe('BrsFile', () => {
|
|
|
3029
3028
|
`);
|
|
3030
3029
|
});
|
|
3031
3030
|
it('can load an absolute plugin which receives callbacks', () => {
|
|
3032
|
-
program.plugins = new PluginInterface_1.default(util_1.default.loadPlugins(tempDir, [
|
|
3033
|
-
(0, util_1.standardizePath) `${tempDir}/plugins/${pluginFileName}`
|
|
3031
|
+
program.plugins = new PluginInterface_1.default(util_1.default.loadPlugins(testHelpers_spec_2.tempDir, [
|
|
3032
|
+
(0, util_1.standardizePath) `${testHelpers_spec_2.tempDir}/plugins/${pluginFileName}`
|
|
3034
3033
|
]), new Logger_1.Logger());
|
|
3035
3034
|
const file = program.setFile('source/MAIN.brs', '');
|
|
3036
3035
|
(0, chai_1.expect)(file._customProp).to.exist;
|
|
3037
3036
|
});
|
|
3038
3037
|
it('can load a relative plugin which receives callbacks', () => {
|
|
3039
|
-
program.plugins = new PluginInterface_1.default(util_1.default.loadPlugins(tempDir, [
|
|
3038
|
+
program.plugins = new PluginInterface_1.default(util_1.default.loadPlugins(testHelpers_spec_2.tempDir, [
|
|
3040
3039
|
`./plugins/${pluginFileName}`
|
|
3041
3040
|
]), new Logger_1.Logger());
|
|
3042
3041
|
const file = program.setFile('source/MAIN.brs', '');
|