brighterscript 0.57.2 → 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 +31 -0
- package/README.md +16 -6
- 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 +12 -2
- package/dist/Program.js +69 -24
- 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 +6 -3
- package/dist/Scope.js +24 -17
- package/dist/Scope.js.map +1 -1
- package/dist/astUtils/AstEditor.d.ts +2 -3
- package/dist/astUtils/AstEditor.js.map +1 -1
- package/dist/astUtils/creators.d.ts +4 -4
- package/dist/astUtils/creators.js +6 -6
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +67 -64
- package/dist/astUtils/reflection.js +10 -2
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +8 -3
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +33 -31
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.js +4 -0
- package/dist/bscPlugin/BscPlugin.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 +40 -34
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +2 -2
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.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 +2 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +166 -12
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +21 -19
- package/dist/bscPlugin/validation/ScopeValidator.js +164 -179
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
- package/dist/files/BrsFile.Class.spec.js +33 -35
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +11 -5
- package/dist/files/BrsFile.js +15 -47
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +107 -79
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +9 -4
- package/dist/files/XmlFile.js +6 -30
- package/dist/files/XmlFile.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 +10 -12
- package/dist/files/tests/optionalChaning.spec.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +2 -3
- 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.d.ts +65 -0
- package/dist/parser/AstNode.js +93 -0
- package/dist/parser/AstNode.js.map +1 -0
- package/dist/parser/AstNode.spec.d.ts +1 -0
- package/dist/parser/AstNode.spec.js +42 -0
- package/dist/parser/AstNode.spec.js.map +1 -0
- package/dist/parser/Expression.d.ts +6 -43
- package/dist/parser/Expression.js +53 -81
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.d.ts +15 -12
- package/dist/parser/Parser.js +130 -117
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.d.ts +1 -1
- package/dist/parser/Parser.spec.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 +28 -44
- package/dist/parser/Statement.js +118 -104
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +16 -10
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +37 -0
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +41 -0
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +109 -1
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +49 -4
- package/dist/parser/tests/expression/Indexing.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 +36 -9
- 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.d.ts +11 -5
- package/dist/util.js +57 -6
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +22 -19
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|
|
@@ -1186,6 +1185,29 @@ describe('BrsFile', () => {
|
|
|
1186
1185
|
(0, chai_1.expect)(file.functionCalls[1].range).to.eql(vscode_languageserver_1.Range.create(5, 20, 5, 25));
|
|
1187
1186
|
(0, chai_1.expect)(file.functionCalls[1].nameRange).to.eql(vscode_languageserver_1.Range.create(5, 20, 5, 23));
|
|
1188
1187
|
});
|
|
1188
|
+
it('finds function calls that are unfinished', () => {
|
|
1189
|
+
let file = new BrsFile_1.BrsFile('absolute_path/file.brs', 'relative_path/file.brs', program);
|
|
1190
|
+
file.parse(`
|
|
1191
|
+
function DoA()
|
|
1192
|
+
DoB("a"
|
|
1193
|
+
end function
|
|
1194
|
+
function DoB(a as string)
|
|
1195
|
+
DoC(
|
|
1196
|
+
end function
|
|
1197
|
+
`);
|
|
1198
|
+
(0, testHelpers_spec_1.expectDiagnostics)(file.parser.diagnostics, [
|
|
1199
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightParenAfterFunctionCallArguments(),
|
|
1200
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedNewlineOrColon(),
|
|
1201
|
+
DiagnosticMessages_1.DiagnosticMessages.unexpectedToken('end function'),
|
|
1202
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedRightParenAfterFunctionCallArguments(),
|
|
1203
|
+
DiagnosticMessages_1.DiagnosticMessages.expectedNewlineOrColon()
|
|
1204
|
+
]);
|
|
1205
|
+
(0, chai_1.expect)(file.functionCalls.length).to.equal(2);
|
|
1206
|
+
(0, chai_1.expect)(file.functionCalls[0].range).to.eql(vscode_languageserver_1.Range.create(2, 20, 2, 27));
|
|
1207
|
+
(0, chai_1.expect)(file.functionCalls[0].nameRange).to.eql(vscode_languageserver_1.Range.create(2, 20, 2, 23));
|
|
1208
|
+
(0, chai_1.expect)(file.functionCalls[1].range).to.eql(vscode_languageserver_1.Range.create(5, 20, 5, 24));
|
|
1209
|
+
(0, chai_1.expect)(file.functionCalls[1].nameRange).to.eql(vscode_languageserver_1.Range.create(5, 20, 5, 23));
|
|
1210
|
+
});
|
|
1189
1211
|
it('sanitizes brs errors', () => {
|
|
1190
1212
|
let file = new BrsFile_1.BrsFile('absolute_path/file.brs', 'relative_path/file.brs', program);
|
|
1191
1213
|
file.parse(`
|
|
@@ -1526,7 +1548,7 @@ describe('BrsFile', () => {
|
|
|
1526
1548
|
});
|
|
1527
1549
|
});
|
|
1528
1550
|
it('handles mixed case `then` partions of conditionals', () => {
|
|
1529
|
-
let mainFile = program.setFile(
|
|
1551
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1530
1552
|
sub Main()
|
|
1531
1553
|
if true then
|
|
1532
1554
|
print "works"
|
|
@@ -1534,7 +1556,7 @@ describe('BrsFile', () => {
|
|
|
1534
1556
|
end sub
|
|
1535
1557
|
`);
|
|
1536
1558
|
(0, chai_1.expect)(mainFile.getDiagnostics()).to.be.lengthOf(0);
|
|
1537
|
-
mainFile = program.setFile(
|
|
1559
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1538
1560
|
sub Main()
|
|
1539
1561
|
if true Then
|
|
1540
1562
|
print "works"
|
|
@@ -1542,7 +1564,7 @@ describe('BrsFile', () => {
|
|
|
1542
1564
|
end sub
|
|
1543
1565
|
`);
|
|
1544
1566
|
(0, chai_1.expect)(mainFile.getDiagnostics()).to.be.lengthOf(0);
|
|
1545
|
-
mainFile = program.setFile(
|
|
1567
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1546
1568
|
sub Main()
|
|
1547
1569
|
if true THEN
|
|
1548
1570
|
print "works"
|
|
@@ -1553,7 +1575,7 @@ describe('BrsFile', () => {
|
|
|
1553
1575
|
});
|
|
1554
1576
|
describe('getHover', () => {
|
|
1555
1577
|
it('works for param types', () => {
|
|
1556
|
-
let file = program.setFile(
|
|
1578
|
+
let file = program.setFile('source/main.brs', `
|
|
1557
1579
|
sub DoSomething(name as string)
|
|
1558
1580
|
name = 1
|
|
1559
1581
|
sayMyName = function(name as string)
|
|
@@ -1571,7 +1593,7 @@ describe('BrsFile', () => {
|
|
|
1571
1593
|
});
|
|
1572
1594
|
//ignore this for now...it's not a huge deal
|
|
1573
1595
|
it('does not match on keywords or data types', () => {
|
|
1574
|
-
let file = program.setFile(
|
|
1596
|
+
let file = program.setFile('source/main.brs', `
|
|
1575
1597
|
sub Main(name as string)
|
|
1576
1598
|
end sub
|
|
1577
1599
|
sub as()
|
|
@@ -1583,7 +1605,7 @@ describe('BrsFile', () => {
|
|
|
1583
1605
|
(0, chai_1.expect)(program.getHover(file.srcPath, vscode_languageserver_1.Position.create(1, 36))).to.be.empty;
|
|
1584
1606
|
});
|
|
1585
1607
|
it('finds declared function', () => {
|
|
1586
|
-
let file = program.setFile(
|
|
1608
|
+
let file = program.setFile('source/main.brs', `
|
|
1587
1609
|
function Main(count = 1)
|
|
1588
1610
|
firstName = "bob"
|
|
1589
1611
|
age = 21
|
|
@@ -1600,7 +1622,7 @@ describe('BrsFile', () => {
|
|
|
1600
1622
|
].join('\n'));
|
|
1601
1623
|
});
|
|
1602
1624
|
it('finds declared namespace function', () => {
|
|
1603
|
-
let file = program.setFile(
|
|
1625
|
+
let file = program.setFile('source/main.brs', `
|
|
1604
1626
|
namespace mySpace
|
|
1605
1627
|
function Main(count = 1)
|
|
1606
1628
|
firstName = "bob"
|
|
@@ -1619,7 +1641,7 @@ describe('BrsFile', () => {
|
|
|
1619
1641
|
].join('\n'));
|
|
1620
1642
|
});
|
|
1621
1643
|
it('finds variable function hover in same scope', () => {
|
|
1622
|
-
let file = program.setFile(
|
|
1644
|
+
let file = program.setFile('source/main.brs', `
|
|
1623
1645
|
sub Main()
|
|
1624
1646
|
sayMyName = sub(name as string)
|
|
1625
1647
|
end sub
|
|
@@ -1661,7 +1683,7 @@ describe('BrsFile', () => {
|
|
|
1661
1683
|
].join('\n'));
|
|
1662
1684
|
});
|
|
1663
1685
|
it('finds function hover in file scope', () => {
|
|
1664
|
-
let file = program.setFile(
|
|
1686
|
+
let file = program.setFile('source/main.brs', `
|
|
1665
1687
|
sub Main()
|
|
1666
1688
|
sayMyName()
|
|
1667
1689
|
end sub
|
|
@@ -1679,7 +1701,7 @@ describe('BrsFile', () => {
|
|
|
1679
1701
|
].join('\n'));
|
|
1680
1702
|
});
|
|
1681
1703
|
it('finds namespace function hover in file scope', () => {
|
|
1682
|
-
let file = program.setFile(
|
|
1704
|
+
let file = program.setFile('source/main.brs', `
|
|
1683
1705
|
namespace mySpace
|
|
1684
1706
|
sub Main()
|
|
1685
1707
|
sayMyName()
|
|
@@ -1703,12 +1725,12 @@ describe('BrsFile', () => {
|
|
|
1703
1725
|
program = new Program_1.Program({
|
|
1704
1726
|
rootDir: rootDir
|
|
1705
1727
|
});
|
|
1706
|
-
let mainFile = program.setFile(
|
|
1728
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1707
1729
|
sub Main()
|
|
1708
1730
|
sayMyName()
|
|
1709
1731
|
end sub
|
|
1710
1732
|
`);
|
|
1711
|
-
program.setFile(
|
|
1733
|
+
program.setFile('source/lib.brs', `
|
|
1712
1734
|
sub sayMyName(name as string)
|
|
1713
1735
|
|
|
1714
1736
|
end sub
|
|
@@ -1727,12 +1749,12 @@ describe('BrsFile', () => {
|
|
|
1727
1749
|
program = new Program_1.Program({
|
|
1728
1750
|
rootDir: rootDir
|
|
1729
1751
|
});
|
|
1730
|
-
let mainFile = program.setFile(
|
|
1752
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1731
1753
|
sub Main()
|
|
1732
1754
|
mySpace.sayMyName()
|
|
1733
1755
|
end sub
|
|
1734
1756
|
`);
|
|
1735
|
-
program.setFile(
|
|
1757
|
+
program.setFile('source/lib.brs', `
|
|
1736
1758
|
namespace mySpace
|
|
1737
1759
|
sub sayMyName(name as string)
|
|
1738
1760
|
end sub
|
|
@@ -1790,7 +1812,7 @@ describe('BrsFile', () => {
|
|
|
1790
1812
|
`);
|
|
1791
1813
|
});
|
|
1792
1814
|
it('handles mixed case `then` partions of conditionals', () => {
|
|
1793
|
-
let mainFile = program.setFile(
|
|
1815
|
+
let mainFile = program.setFile('source/main.brs', `
|
|
1794
1816
|
sub Main()
|
|
1795
1817
|
if true then
|
|
1796
1818
|
print "works"
|
|
@@ -1798,7 +1820,7 @@ describe('BrsFile', () => {
|
|
|
1798
1820
|
end sub
|
|
1799
1821
|
`);
|
|
1800
1822
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(mainFile);
|
|
1801
|
-
mainFile = program.setFile(
|
|
1823
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1802
1824
|
sub Main()
|
|
1803
1825
|
if true Then
|
|
1804
1826
|
print "works"
|
|
@@ -1806,7 +1828,7 @@ describe('BrsFile', () => {
|
|
|
1806
1828
|
end sub
|
|
1807
1829
|
`);
|
|
1808
1830
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(mainFile);
|
|
1809
|
-
mainFile = program.setFile(
|
|
1831
|
+
mainFile = program.setFile('source/main.brs', `
|
|
1810
1832
|
sub Main()
|
|
1811
1833
|
if true THEN
|
|
1812
1834
|
print "works"
|
|
@@ -1817,7 +1839,7 @@ describe('BrsFile', () => {
|
|
|
1817
1839
|
});
|
|
1818
1840
|
});
|
|
1819
1841
|
it('does not throw when encountering incomplete import statement', () => {
|
|
1820
|
-
program.setFile(
|
|
1842
|
+
program.setFile('source/main.brs', `
|
|
1821
1843
|
import
|
|
1822
1844
|
sub main()
|
|
1823
1845
|
end sub
|
|
@@ -2241,7 +2263,7 @@ describe('BrsFile', () => {
|
|
|
2241
2263
|
return consumer.generatedPositionFor({
|
|
2242
2264
|
line: 3,
|
|
2243
2265
|
column: 0,
|
|
2244
|
-
source: (0, util_1.standardizePath) `${rootDir}/source/main.bs`,
|
|
2266
|
+
source: (0, util_1.standardizePath) `${testHelpers_spec_2.rootDir}/source/main.bs`,
|
|
2245
2267
|
bias: source_map_1.SourceMapConsumer.LEAST_UPPER_BOUND
|
|
2246
2268
|
});
|
|
2247
2269
|
});
|
|
@@ -2528,12 +2550,14 @@ describe('BrsFile', () => {
|
|
|
2528
2550
|
it('sets invalid on empty callfunc', () => {
|
|
2529
2551
|
testTranspile(`
|
|
2530
2552
|
sub main()
|
|
2553
|
+
node = invalid
|
|
2531
2554
|
node@.doSomething()
|
|
2532
2555
|
m.top.node@.doSomething()
|
|
2533
2556
|
m.top.node@.doSomething(1)
|
|
2534
2557
|
end sub
|
|
2535
2558
|
`, `
|
|
2536
2559
|
sub main()
|
|
2560
|
+
node = invalid
|
|
2537
2561
|
node.callfunc("doSomething", invalid)
|
|
2538
2562
|
m.top.node.callfunc("doSomething", invalid)
|
|
2539
2563
|
m.top.node.callfunc("doSomething", 1)
|
|
@@ -2543,10 +2567,12 @@ describe('BrsFile', () => {
|
|
|
2543
2567
|
it('includes original arguments', () => {
|
|
2544
2568
|
testTranspile(`
|
|
2545
2569
|
sub main()
|
|
2570
|
+
node = invalid
|
|
2546
2571
|
node@.doSomething(1, true, m.top.someVal)
|
|
2547
2572
|
end sub
|
|
2548
2573
|
`, `
|
|
2549
2574
|
sub main()
|
|
2575
|
+
node = invalid
|
|
2550
2576
|
node.callfunc("doSomething", 1, true, m.top.someVal)
|
|
2551
2577
|
end sub
|
|
2552
2578
|
`);
|
|
@@ -2563,7 +2589,7 @@ describe('BrsFile', () => {
|
|
|
2563
2589
|
name: 'transform callback',
|
|
2564
2590
|
afterFileParse: onParsed
|
|
2565
2591
|
});
|
|
2566
|
-
file = program.setFile(
|
|
2592
|
+
file = program.setFile(`source/file${ext}`, `
|
|
2567
2593
|
sub Sum()
|
|
2568
2594
|
print "hello world"
|
|
2569
2595
|
end sub
|
|
@@ -2584,7 +2610,7 @@ describe('BrsFile', () => {
|
|
|
2584
2610
|
});
|
|
2585
2611
|
describe('typedefKey', () => {
|
|
2586
2612
|
it('works for .brs files', () => {
|
|
2587
|
-
(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`);
|
|
2588
2614
|
});
|
|
2589
2615
|
it('returns undefined for files that should not have a typedef', () => {
|
|
2590
2616
|
(0, chai_1.expect)((program.setFile('source/main.bs', '')).typedefKey).to.be.undefined;
|
|
@@ -2635,14 +2661,14 @@ describe('BrsFile', () => {
|
|
|
2635
2661
|
`);
|
|
2636
2662
|
(0, chai_1.expect)(file.hasTypedef).to.be.true;
|
|
2637
2663
|
(0, chai_1.expect)(file.typedefFile).to.exist;
|
|
2638
|
-
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`);
|
|
2639
2665
|
(0, chai_1.expect)(file.hasTypedef).to.be.false;
|
|
2640
2666
|
(0, chai_1.expect)(file.typedefFile).not.to.exist;
|
|
2641
2667
|
});
|
|
2642
2668
|
});
|
|
2643
2669
|
describe('typedef', () => {
|
|
2644
2670
|
it('sets typedef path properly', () => {
|
|
2645
|
-
(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());
|
|
2646
2672
|
(0, chai_1.expect)((program.setFile('source/main2.d.bs', '')).typedefKey).to.equal(undefined);
|
|
2647
2673
|
(0, chai_1.expect)((program.setFile('source/main3.bs', '')).typedefKey).to.equal(undefined);
|
|
2648
2674
|
//works for dest with `.brs` extension
|
|
@@ -2672,6 +2698,7 @@ describe('BrsFile', () => {
|
|
|
2672
2698
|
describe('getTypedef', () => {
|
|
2673
2699
|
function testTypedef(original, expected) {
|
|
2674
2700
|
let file = program.setFile('source/main.brs', original);
|
|
2701
|
+
program.validate();
|
|
2675
2702
|
(0, chai_1.expect)(file.getTypedef().trimEnd()).to.eql(expected);
|
|
2676
2703
|
}
|
|
2677
2704
|
it('includes namespace on extend class names', () => {
|
|
@@ -2988,7 +3015,7 @@ describe('BrsFile', () => {
|
|
|
2988
3015
|
let idx = 1;
|
|
2989
3016
|
beforeEach(() => {
|
|
2990
3017
|
pluginFileName = `plugin-${idx++}.js`;
|
|
2991
|
-
fsExtra.outputFileSync((0, util_1.standardizePath) `${tempDir}/plugins/${pluginFileName}`, `
|
|
3018
|
+
fsExtra.outputFileSync((0, util_1.standardizePath) `${testHelpers_spec_2.tempDir}/plugins/${pluginFileName}`, `
|
|
2992
3019
|
function plugin() {
|
|
2993
3020
|
return {
|
|
2994
3021
|
name: 'lower-file-name',
|
|
@@ -3001,14 +3028,14 @@ describe('BrsFile', () => {
|
|
|
3001
3028
|
`);
|
|
3002
3029
|
});
|
|
3003
3030
|
it('can load an absolute plugin which receives callbacks', () => {
|
|
3004
|
-
program.plugins = new PluginInterface_1.default(util_1.default.loadPlugins(tempDir, [
|
|
3005
|
-
(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}`
|
|
3006
3033
|
]), new Logger_1.Logger());
|
|
3007
3034
|
const file = program.setFile('source/MAIN.brs', '');
|
|
3008
3035
|
(0, chai_1.expect)(file._customProp).to.exist;
|
|
3009
3036
|
});
|
|
3010
3037
|
it('can load a relative plugin which receives callbacks', () => {
|
|
3011
|
-
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, [
|
|
3012
3039
|
`./plugins/${pluginFileName}`
|
|
3013
3040
|
]), new Logger_1.Logger());
|
|
3014
3041
|
const file = program.setFile('source/MAIN.brs', '');
|
|
@@ -3025,6 +3052,7 @@ describe('BrsFile', () => {
|
|
|
3025
3052
|
const CHARLIE = true
|
|
3026
3053
|
end namespace
|
|
3027
3054
|
`);
|
|
3055
|
+
program.validate();
|
|
3028
3056
|
//print alpha.beta.char|lie
|
|
3029
3057
|
(0, chai_1.expect)(program.getDefinition(file.srcPath, vscode_languageserver_1.Position.create(2, 41))).to.eql([{
|
|
3030
3058
|
uri: vscode_uri_1.URI.file(file.srcPath).toString(),
|