brighterscript 0.44.0 → 0.45.2
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 +26 -0
- package/dist/Cache.d.ts +2 -7
- package/dist/Cache.js +4 -13
- package/dist/Cache.js.map +1 -1
- package/dist/DependencyGraph.js +5 -4
- package/dist/DependencyGraph.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.js +3 -3
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Program.d.ts +21 -7
- package/dist/Program.js +14 -10
- 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 +13 -7
- package/dist/Scope.js +24 -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/creators.d.ts +7 -3
- package/dist/astUtils/creators.js +86 -5
- package/dist/astUtils/creators.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 +3 -2
- package/dist/astUtils/reflection.spec.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 +16 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +16 -16
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +36 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +30 -2
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +36 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +9 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +66 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +94 -0
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
- package/dist/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 +9 -1
- package/dist/files/BrsFile.js +111 -29
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +164 -94
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +5 -5
- package/dist/files/XmlFile.js +3 -3
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +80 -80
- 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 +5 -5
- 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/Expression.d.ts +0 -1
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.d.ts +10 -1
- package/dist/parser/Parser.js +90 -4
- 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 +159 -15
- 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/For.spec.d.ts +1 -0
- package/dist/parser/tests/statement/For.spec.js +46 -0
- package/dist/parser/tests/statement/For.spec.js.map +1 -0
- package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
- package/dist/parser/tests/statement/ForEach.spec.js +37 -0
- package/dist/parser/tests/statement/ForEach.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/util.d.ts +10 -0
- package/dist/util.js +37 -0
- package/dist/util.js.map +1 -1
- package/package.json +2 -3
|
@@ -37,7 +37,7 @@ describe('BrsFile', () => {
|
|
|
37
37
|
program.dispose();
|
|
38
38
|
});
|
|
39
39
|
it('supports the third parameter in CreateObject', () => {
|
|
40
|
-
program.
|
|
40
|
+
program.setFile('source/main.brs', `
|
|
41
41
|
sub main()
|
|
42
42
|
regexp = CreateObject("roRegex", "[a-z]+", "i")
|
|
43
43
|
end sub
|
|
@@ -46,7 +46,7 @@ describe('BrsFile', () => {
|
|
|
46
46
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
47
47
|
});
|
|
48
48
|
it('supports the 6 params in CreateObject for roRegion', () => {
|
|
49
|
-
program.
|
|
49
|
+
program.setFile('source/main.brs', `
|
|
50
50
|
sub createRegion(bitmap as object)
|
|
51
51
|
region = CreateObject("roRegion", bitmap, 20, 40, 100, 200)
|
|
52
52
|
end sub
|
|
@@ -75,7 +75,7 @@ describe('BrsFile', () => {
|
|
|
75
75
|
dest: `source/lib.brs`
|
|
76
76
|
};
|
|
77
77
|
it('creates proper tokens', () => {
|
|
78
|
-
file = program.
|
|
78
|
+
file = program.setFile(entry, `call(ModuleA.ModuleB.ModuleC.`);
|
|
79
79
|
(0, chai_1.expect)(file['getPartialVariableName'](file.parser.tokens[7])).to.equal('ModuleA.ModuleB.ModuleC.');
|
|
80
80
|
(0, chai_1.expect)(file['getPartialVariableName'](file.parser.tokens[6])).to.equal('ModuleA.ModuleB.ModuleC');
|
|
81
81
|
(0, chai_1.expect)(file['getPartialVariableName'](file.parser.tokens[5])).to.equal('ModuleA.ModuleB.');
|
|
@@ -87,13 +87,13 @@ describe('BrsFile', () => {
|
|
|
87
87
|
describe('getScopesForFile', () => {
|
|
88
88
|
it('finds the scope for the file', () => {
|
|
89
89
|
var _a;
|
|
90
|
-
let file = program.
|
|
90
|
+
let file = program.setFile('source/main.brs', ``);
|
|
91
91
|
(0, chai_1.expect)((_a = program.getScopesForFile(file)[0]) === null || _a === void 0 ? void 0 : _a.name).to.equal('source');
|
|
92
92
|
});
|
|
93
93
|
});
|
|
94
94
|
describe('getCompletions', () => {
|
|
95
95
|
it('does not crash for callfunc on a function call', () => {
|
|
96
|
-
const file = program.
|
|
96
|
+
const file = program.setFile('source/main.brs', `
|
|
97
97
|
sub main()
|
|
98
98
|
getManager()@.
|
|
99
99
|
end sub
|
|
@@ -103,7 +103,7 @@ describe('BrsFile', () => {
|
|
|
103
103
|
}).not.to.throw;
|
|
104
104
|
});
|
|
105
105
|
it('suggests pkg paths in strings that match that criteria', () => {
|
|
106
|
-
program.
|
|
106
|
+
program.setFile('source/main.brs', `
|
|
107
107
|
sub main()
|
|
108
108
|
print "pkg:"
|
|
109
109
|
end sub
|
|
@@ -115,7 +115,7 @@ describe('BrsFile', () => {
|
|
|
115
115
|
]);
|
|
116
116
|
});
|
|
117
117
|
it('suggests libpkg paths in strings that match that criteria', () => {
|
|
118
|
-
program.
|
|
118
|
+
program.setFile('source/main.brs', `
|
|
119
119
|
sub main()
|
|
120
120
|
print "libpkg:"
|
|
121
121
|
end sub
|
|
@@ -127,7 +127,7 @@ describe('BrsFile', () => {
|
|
|
127
127
|
]);
|
|
128
128
|
});
|
|
129
129
|
it('suggests pkg paths in template strings', () => {
|
|
130
|
-
program.
|
|
130
|
+
program.setFile('source/main.brs', `
|
|
131
131
|
sub main()
|
|
132
132
|
print \`pkg:\`
|
|
133
133
|
end sub
|
|
@@ -140,7 +140,7 @@ describe('BrsFile', () => {
|
|
|
140
140
|
});
|
|
141
141
|
it('waits for the file to be processed before collecting completions', () => {
|
|
142
142
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
143
|
-
program.
|
|
143
|
+
program.setFile('source/main.brs', `
|
|
144
144
|
sub Main()
|
|
145
145
|
print "hello"
|
|
146
146
|
Say
|
|
@@ -154,9 +154,79 @@ describe('BrsFile', () => {
|
|
|
154
154
|
(0, chai_1.expect)(names).to.includes('Main');
|
|
155
155
|
(0, chai_1.expect)(names).to.includes('SayHello');
|
|
156
156
|
});
|
|
157
|
+
it('includes every type of item at base level', () => {
|
|
158
|
+
program.setFile('source/main.bs', `
|
|
159
|
+
sub main()
|
|
160
|
+
print
|
|
161
|
+
end sub
|
|
162
|
+
sub speak()
|
|
163
|
+
end sub
|
|
164
|
+
namespace stuff
|
|
165
|
+
end namespace
|
|
166
|
+
class Person
|
|
167
|
+
end class
|
|
168
|
+
enum Direction
|
|
169
|
+
end enum
|
|
170
|
+
`);
|
|
171
|
+
(0, testHelpers_spec_1.expectCompletionsIncludes)(program.getCompletions('source/main.bs', util_1.default.createPosition(2, 26)), [{
|
|
172
|
+
label: 'main',
|
|
173
|
+
kind: vscode_languageserver_1.CompletionItemKind.Function
|
|
174
|
+
}, {
|
|
175
|
+
label: 'speak',
|
|
176
|
+
kind: vscode_languageserver_1.CompletionItemKind.Function
|
|
177
|
+
}, {
|
|
178
|
+
label: 'stuff',
|
|
179
|
+
kind: vscode_languageserver_1.CompletionItemKind.Module
|
|
180
|
+
}, {
|
|
181
|
+
label: 'Person',
|
|
182
|
+
kind: vscode_languageserver_1.CompletionItemKind.Class
|
|
183
|
+
}, {
|
|
184
|
+
label: 'Direction',
|
|
185
|
+
kind: vscode_languageserver_1.CompletionItemKind.Enum
|
|
186
|
+
}]);
|
|
187
|
+
});
|
|
188
|
+
describe('namespaces', () => {
|
|
189
|
+
it('gets full namespace completions at any point through the leading identifier', () => {
|
|
190
|
+
program.setFile('source/main.bs', `
|
|
191
|
+
sub main()
|
|
192
|
+
foo.bar
|
|
193
|
+
end sub
|
|
194
|
+
|
|
195
|
+
namespace foo.bar
|
|
196
|
+
end namespace
|
|
197
|
+
|
|
198
|
+
class Person
|
|
199
|
+
end class
|
|
200
|
+
`);
|
|
201
|
+
const result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(2, 24)).map(x => x.label);
|
|
202
|
+
(0, chai_1.expect)(result).includes('main');
|
|
203
|
+
(0, chai_1.expect)(result).includes('foo');
|
|
204
|
+
(0, chai_1.expect)(result).includes('Person');
|
|
205
|
+
});
|
|
206
|
+
it('gets namespace completions', () => {
|
|
207
|
+
program.setFile('source/main.bs', `
|
|
208
|
+
namespace foo.bar
|
|
209
|
+
function sayHello()
|
|
210
|
+
end function
|
|
211
|
+
end namespace
|
|
212
|
+
|
|
213
|
+
sub Main()
|
|
214
|
+
print "hello"
|
|
215
|
+
foo.ba
|
|
216
|
+
foo.bar.
|
|
217
|
+
end sub
|
|
218
|
+
`);
|
|
219
|
+
let result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(8, 30));
|
|
220
|
+
let names = result.map(x => x.label);
|
|
221
|
+
(0, chai_1.expect)(names).to.includes('bar');
|
|
222
|
+
result = program.getCompletions(`${rootDir}/source/main.bs`, vscode_languageserver_1.Position.create(9, 32));
|
|
223
|
+
names = result.map(x => x.label);
|
|
224
|
+
(0, chai_1.expect)(names).to.includes('sayHello');
|
|
225
|
+
});
|
|
226
|
+
});
|
|
157
227
|
it('always includes `m`', () => {
|
|
158
228
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
159
|
-
program.
|
|
229
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
160
230
|
sub Main()
|
|
161
231
|
|
|
162
232
|
end sub
|
|
@@ -167,14 +237,14 @@ describe('BrsFile', () => {
|
|
|
167
237
|
});
|
|
168
238
|
it('does not fail for missing previousToken', () => {
|
|
169
239
|
//add a single character to the file, and get completions after it
|
|
170
|
-
program.
|
|
240
|
+
program.setFile('source/main.brs', `i`);
|
|
171
241
|
(0, chai_1.expect)(() => {
|
|
172
242
|
program.getCompletions(`${rootDir}/source/main.brs`, vscode_languageserver_1.Position.create(0, 1)).map(x => x.label);
|
|
173
243
|
}).not.to.throw;
|
|
174
244
|
});
|
|
175
245
|
it('includes all keywords`', () => {
|
|
176
246
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
177
|
-
program.
|
|
247
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
178
248
|
sub Main()
|
|
179
249
|
|
|
180
250
|
end sub
|
|
@@ -195,7 +265,7 @@ describe('BrsFile', () => {
|
|
|
195
265
|
});
|
|
196
266
|
it('does not provide completions within a comment', () => {
|
|
197
267
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
198
|
-
program.
|
|
268
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
199
269
|
sub Main()
|
|
200
270
|
'some comment
|
|
201
271
|
end sub
|
|
@@ -206,7 +276,7 @@ describe('BrsFile', () => {
|
|
|
206
276
|
});
|
|
207
277
|
it('does not provide duplicate entries for variables', () => {
|
|
208
278
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
209
|
-
program.
|
|
279
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
210
280
|
sub Main()
|
|
211
281
|
name = "bob"
|
|
212
282
|
age = 12
|
|
@@ -221,7 +291,7 @@ describe('BrsFile', () => {
|
|
|
221
291
|
});
|
|
222
292
|
it('does not include `as` and `string` text options when used in function params', () => {
|
|
223
293
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
224
|
-
program.
|
|
294
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
225
295
|
sub Main(name as string)
|
|
226
296
|
|
|
227
297
|
end sub
|
|
@@ -232,7 +302,7 @@ describe('BrsFile', () => {
|
|
|
232
302
|
});
|
|
233
303
|
it('does not provide intellisense results when inside a comment', () => {
|
|
234
304
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
235
|
-
program.
|
|
305
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
236
306
|
sub Main(name as string)
|
|
237
307
|
'this is a comment
|
|
238
308
|
end sub
|
|
@@ -243,7 +313,7 @@ describe('BrsFile', () => {
|
|
|
243
313
|
it('does provide intellisence for labels only after a goto keyword', () => {
|
|
244
314
|
var _a;
|
|
245
315
|
//eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
246
|
-
program.
|
|
316
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
247
317
|
sub Main(name as string)
|
|
248
318
|
something:
|
|
249
319
|
goto \nend sub
|
|
@@ -256,7 +326,7 @@ describe('BrsFile', () => {
|
|
|
256
326
|
describe('comment flags', () => {
|
|
257
327
|
describe('bs:disable-next-line', () => {
|
|
258
328
|
it('disables critical diagnostic issues', () => {
|
|
259
|
-
program.
|
|
329
|
+
program.setFile('source/main.brs', `
|
|
260
330
|
sub main()
|
|
261
331
|
Dim requestData
|
|
262
332
|
end sub
|
|
@@ -264,7 +334,7 @@ describe('BrsFile', () => {
|
|
|
264
334
|
//should have an error
|
|
265
335
|
program.validate();
|
|
266
336
|
(0, testHelpers_spec_1.expectHasDiagnostics)(program);
|
|
267
|
-
program.
|
|
337
|
+
program.setFile('source/main.brs', `
|
|
268
338
|
sub main()
|
|
269
339
|
'bs:disable-next-line
|
|
270
340
|
Dim requestData
|
|
@@ -275,7 +345,7 @@ describe('BrsFile', () => {
|
|
|
275
345
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
276
346
|
});
|
|
277
347
|
it('works with leading whitespace', () => {
|
|
278
|
-
program.
|
|
348
|
+
program.setFile('source/main.brs', `
|
|
279
349
|
sub main()
|
|
280
350
|
' bs:disable-next-line
|
|
281
351
|
=asdf=sadf=
|
|
@@ -286,7 +356,7 @@ describe('BrsFile', () => {
|
|
|
286
356
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
287
357
|
});
|
|
288
358
|
it('works for all', () => {
|
|
289
|
-
let file = program.
|
|
359
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
290
360
|
sub Main()
|
|
291
361
|
'bs:disable-next-line
|
|
292
362
|
name = "bob
|
|
@@ -303,7 +373,7 @@ describe('BrsFile', () => {
|
|
|
303
373
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
304
374
|
});
|
|
305
375
|
it('works for specific codes', () => {
|
|
306
|
-
let file = program.
|
|
376
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
307
377
|
sub Main()
|
|
308
378
|
'bs:disable-next-line: 1083, 1001
|
|
309
379
|
name = "bob
|
|
@@ -319,7 +389,7 @@ describe('BrsFile', () => {
|
|
|
319
389
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
320
390
|
});
|
|
321
391
|
it('recognizes non-numeric codes', () => {
|
|
322
|
-
let file = program.
|
|
392
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
323
393
|
sub Main()
|
|
324
394
|
'bs:disable-next-line: LINT9999
|
|
325
395
|
name = "bob
|
|
@@ -330,7 +400,7 @@ describe('BrsFile', () => {
|
|
|
330
400
|
});
|
|
331
401
|
it('supports disabling non-numeric error codes', () => {
|
|
332
402
|
const program = new Program_1.Program({});
|
|
333
|
-
const file = program.
|
|
403
|
+
const file = program.setFile('source/main.brs', `
|
|
334
404
|
sub main()
|
|
335
405
|
something = true 'bs:disable-line: LINT1005
|
|
336
406
|
end sub
|
|
@@ -345,7 +415,7 @@ describe('BrsFile', () => {
|
|
|
345
415
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(scope);
|
|
346
416
|
});
|
|
347
417
|
it('adds diagnostics for unknown numeric diagnostic codes', () => {
|
|
348
|
-
program.
|
|
418
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
349
419
|
sub main()
|
|
350
420
|
print "hi" 'bs:disable-line: 123456 999999 aaaab
|
|
351
421
|
end sub
|
|
@@ -356,7 +426,7 @@ describe('BrsFile', () => {
|
|
|
356
426
|
});
|
|
357
427
|
describe('bs:disable-line', () => {
|
|
358
428
|
it('works for all', () => {
|
|
359
|
-
let file = program.
|
|
429
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
360
430
|
sub Main()
|
|
361
431
|
z::;;%%%%%% 'bs:disable-line
|
|
362
432
|
end sub
|
|
@@ -372,7 +442,7 @@ describe('BrsFile', () => {
|
|
|
372
442
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
373
443
|
});
|
|
374
444
|
it('works for specific codes', () => {
|
|
375
|
-
program.
|
|
445
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
376
446
|
sub main()
|
|
377
447
|
'should not have any errors
|
|
378
448
|
DoSomething(1) 'bs:disable-line:1002
|
|
@@ -391,7 +461,7 @@ describe('BrsFile', () => {
|
|
|
391
461
|
//the current version of BRS causes parse errors after the `parse` keyword, showing error in comments
|
|
392
462
|
//the program should ignore all diagnostics found in brs:* comment lines EXCEPT
|
|
393
463
|
//for the diagnostics about using unknown error codes
|
|
394
|
-
program.
|
|
464
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
395
465
|
sub main()
|
|
396
466
|
stop 'bs:disable-line
|
|
397
467
|
print "need a valid line to fix stop error"
|
|
@@ -404,7 +474,7 @@ describe('BrsFile', () => {
|
|
|
404
474
|
});
|
|
405
475
|
describe('parse', () => {
|
|
406
476
|
it('supports iife in assignment', () => {
|
|
407
|
-
program.
|
|
477
|
+
program.setFile('source/main.brs', `
|
|
408
478
|
sub main()
|
|
409
479
|
result = sub()
|
|
410
480
|
end sub()
|
|
@@ -416,7 +486,7 @@ describe('BrsFile', () => {
|
|
|
416
486
|
});
|
|
417
487
|
it('uses the proper parse mode based on file extension', () => {
|
|
418
488
|
function testParseMode(destPath, expectedParseMode) {
|
|
419
|
-
const file = program.
|
|
489
|
+
const file = program.setFile(destPath, '');
|
|
420
490
|
(0, chai_1.expect)(file.parseMode).to.equal(expectedParseMode);
|
|
421
491
|
}
|
|
422
492
|
testParseMode('source/main.brs', Parser_1.ParseMode.BrightScript);
|
|
@@ -427,7 +497,7 @@ describe('BrsFile', () => {
|
|
|
427
497
|
testParseMode('source/main.spec.bs', Parser_1.ParseMode.BrighterScript);
|
|
428
498
|
});
|
|
429
499
|
it('supports labels and goto statements', () => {
|
|
430
|
-
let file = program.
|
|
500
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
431
501
|
sub Main()
|
|
432
502
|
'multiple goto statements on one line
|
|
433
503
|
goto myLabel : goto myLabel
|
|
@@ -437,7 +507,7 @@ describe('BrsFile', () => {
|
|
|
437
507
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
438
508
|
});
|
|
439
509
|
it('supports empty print statements', () => {
|
|
440
|
-
let file = program.
|
|
510
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
441
511
|
sub main()
|
|
442
512
|
print
|
|
443
513
|
end sub
|
|
@@ -446,7 +516,7 @@ describe('BrsFile', () => {
|
|
|
446
516
|
});
|
|
447
517
|
describe('conditional compile', () => {
|
|
448
518
|
it('works for upper case keywords', () => {
|
|
449
|
-
let file = program.
|
|
519
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
450
520
|
sub main()
|
|
451
521
|
#CONST someFlag = true
|
|
452
522
|
#IF someFlag
|
|
@@ -461,7 +531,7 @@ describe('BrsFile', () => {
|
|
|
461
531
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
462
532
|
});
|
|
463
533
|
it('supports single-word #elseif and #endif', () => {
|
|
464
|
-
let file = program.
|
|
534
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
465
535
|
sub main()
|
|
466
536
|
#const someFlag = true
|
|
467
537
|
#if someFlag
|
|
@@ -474,7 +544,7 @@ describe('BrsFile', () => {
|
|
|
474
544
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
475
545
|
});
|
|
476
546
|
it('supports multi-word #else if and #end if', () => {
|
|
477
|
-
let file = program.
|
|
547
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
478
548
|
sub main()
|
|
479
549
|
#const someFlag = true
|
|
480
550
|
#if someFlag
|
|
@@ -487,7 +557,7 @@ describe('BrsFile', () => {
|
|
|
487
557
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
488
558
|
});
|
|
489
559
|
it('does not choke on invalid code inside a false conditional compile', () => {
|
|
490
|
-
let file = program.
|
|
560
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
491
561
|
sub main()
|
|
492
562
|
#if false
|
|
493
563
|
non-commented code here should not cause parse errors
|
|
@@ -497,7 +567,7 @@ describe('BrsFile', () => {
|
|
|
497
567
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
498
568
|
});
|
|
499
569
|
it('detects syntax error in #if', () => {
|
|
500
|
-
let file = program.
|
|
570
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
501
571
|
sub main()
|
|
502
572
|
#if true1
|
|
503
573
|
print "true"
|
|
@@ -509,7 +579,7 @@ describe('BrsFile', () => {
|
|
|
509
579
|
]);
|
|
510
580
|
});
|
|
511
581
|
it('detects syntax error in #const', () => {
|
|
512
|
-
let file = program.
|
|
582
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
513
583
|
sub main()
|
|
514
584
|
#if %
|
|
515
585
|
print "true"
|
|
@@ -522,7 +592,7 @@ describe('BrsFile', () => {
|
|
|
522
592
|
]);
|
|
523
593
|
});
|
|
524
594
|
it('detects #const name using reserved word', () => {
|
|
525
|
-
let file = program.
|
|
595
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
526
596
|
sub main()
|
|
527
597
|
#const function = true
|
|
528
598
|
end sub
|
|
@@ -533,7 +603,7 @@ describe('BrsFile', () => {
|
|
|
533
603
|
]);
|
|
534
604
|
});
|
|
535
605
|
it('detects syntax error in #const', () => {
|
|
536
|
-
let file = program.
|
|
606
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
537
607
|
sub main()
|
|
538
608
|
#const someConst = 123
|
|
539
609
|
end sub
|
|
@@ -544,7 +614,7 @@ describe('BrsFile', () => {
|
|
|
544
614
|
});
|
|
545
615
|
});
|
|
546
616
|
it('supports stop statement', () => {
|
|
547
|
-
let file = program.
|
|
617
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
548
618
|
sub main()
|
|
549
619
|
stop
|
|
550
620
|
end sub
|
|
@@ -552,7 +622,7 @@ describe('BrsFile', () => {
|
|
|
552
622
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
553
623
|
});
|
|
554
624
|
it('supports single-line if statements', () => {
|
|
555
|
-
let file = program.
|
|
625
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
556
626
|
sub main()
|
|
557
627
|
if 1 < 2: return true: end if
|
|
558
628
|
if 1 < 2: return true
|
|
@@ -901,8 +971,8 @@ describe('BrsFile', () => {
|
|
|
901
971
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
902
972
|
});
|
|
903
973
|
it('adds error for library statements NOT at top of file', () => {
|
|
904
|
-
program.
|
|
905
|
-
program.
|
|
974
|
+
program.setFile('source/file.brs', ``);
|
|
975
|
+
program.setFile('source/main.bs', `
|
|
906
976
|
sub main()
|
|
907
977
|
end sub
|
|
908
978
|
import "file.brs"
|
|
@@ -913,13 +983,13 @@ describe('BrsFile', () => {
|
|
|
913
983
|
]);
|
|
914
984
|
});
|
|
915
985
|
it('supports library imports', () => {
|
|
916
|
-
program.
|
|
986
|
+
program.setFile('source/main.brs', `
|
|
917
987
|
Library "v30/bslCore.brs"
|
|
918
988
|
`);
|
|
919
989
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(program);
|
|
920
990
|
});
|
|
921
991
|
it('adds error for library statements NOT at top of file', () => {
|
|
922
|
-
program.
|
|
992
|
+
program.setFile('source/main.brs', `
|
|
923
993
|
sub main()
|
|
924
994
|
end sub
|
|
925
995
|
Library "v30/bslCore.brs"
|
|
@@ -930,7 +1000,7 @@ describe('BrsFile', () => {
|
|
|
930
1000
|
]);
|
|
931
1001
|
});
|
|
932
1002
|
it('adds error for library statements inside of function body', () => {
|
|
933
|
-
program.
|
|
1003
|
+
program.setFile('source/main.brs', `
|
|
934
1004
|
sub main()
|
|
935
1005
|
Library "v30/bslCore.brs"
|
|
936
1006
|
end sub
|
|
@@ -949,7 +1019,7 @@ describe('BrsFile', () => {
|
|
|
949
1019
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(file);
|
|
950
1020
|
});
|
|
951
1021
|
it('succeeds when finding variables with "sub" in them', () => {
|
|
952
|
-
let file = program.
|
|
1022
|
+
let file = program.setFile('source/main.brs', `
|
|
953
1023
|
function DoSomething()
|
|
954
1024
|
return value.subType()
|
|
955
1025
|
end function
|
|
@@ -1179,7 +1249,7 @@ describe('BrsFile', () => {
|
|
|
1179
1249
|
}]);
|
|
1180
1250
|
});
|
|
1181
1251
|
it('finds function calls nested inside statements', () => {
|
|
1182
|
-
program.
|
|
1252
|
+
program.setFile(`source/main.brs`, `
|
|
1183
1253
|
sub main()
|
|
1184
1254
|
if true then
|
|
1185
1255
|
DoesNotExist(1, 2)
|
|
@@ -1224,7 +1294,7 @@ describe('BrsFile', () => {
|
|
|
1224
1294
|
(0, chai_1.expect)(file.callables.length).to.equal(0);
|
|
1225
1295
|
});
|
|
1226
1296
|
it('finds return type', () => {
|
|
1227
|
-
let file = program.
|
|
1297
|
+
let file = program.setFile('source/main.brs', `
|
|
1228
1298
|
function DoSomething() as string
|
|
1229
1299
|
end function
|
|
1230
1300
|
`);
|
|
@@ -1318,7 +1388,7 @@ describe('BrsFile', () => {
|
|
|
1318
1388
|
(0, chai_1.expect)(scope.variableDeclarations[0].name).to.equal('theLength');
|
|
1319
1389
|
});
|
|
1320
1390
|
it('finds value from global return', () => {
|
|
1321
|
-
let file = program.
|
|
1391
|
+
let file = program.setFile('source/main.brs', `
|
|
1322
1392
|
sub Main()
|
|
1323
1393
|
myName = GetName()
|
|
1324
1394
|
end sub
|
|
@@ -1363,7 +1433,7 @@ describe('BrsFile', () => {
|
|
|
1363
1433
|
});
|
|
1364
1434
|
describe('getHover', () => {
|
|
1365
1435
|
it('works for param types', () => {
|
|
1366
|
-
let file = program.
|
|
1436
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1367
1437
|
sub DoSomething(name as string)
|
|
1368
1438
|
name = 1
|
|
1369
1439
|
sayMyName = function(name as string)
|
|
@@ -1381,7 +1451,7 @@ describe('BrsFile', () => {
|
|
|
1381
1451
|
});
|
|
1382
1452
|
//ignore this for now...it's not a huge deal
|
|
1383
1453
|
it('does not match on keywords or data types', () => {
|
|
1384
|
-
let file = program.
|
|
1454
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1385
1455
|
sub Main(name as string)
|
|
1386
1456
|
end sub
|
|
1387
1457
|
sub as()
|
|
@@ -1393,7 +1463,7 @@ describe('BrsFile', () => {
|
|
|
1393
1463
|
(0, chai_1.expect)(file.getHover(vscode_languageserver_1.Position.create(1, 36))).not.to.exist;
|
|
1394
1464
|
});
|
|
1395
1465
|
it('finds declared function', () => {
|
|
1396
|
-
let file = program.
|
|
1466
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1397
1467
|
function Main(count = 1)
|
|
1398
1468
|
firstName = "bob"
|
|
1399
1469
|
age = 21
|
|
@@ -1410,7 +1480,7 @@ describe('BrsFile', () => {
|
|
|
1410
1480
|
].join('\n'));
|
|
1411
1481
|
});
|
|
1412
1482
|
it('finds variable function hover in same scope', () => {
|
|
1413
|
-
let file = program.
|
|
1483
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1414
1484
|
sub Main()
|
|
1415
1485
|
sayMyName = sub(name as string)
|
|
1416
1486
|
end sub
|
|
@@ -1427,7 +1497,7 @@ describe('BrsFile', () => {
|
|
|
1427
1497
|
].join('\n'));
|
|
1428
1498
|
});
|
|
1429
1499
|
it('does not crash when hovering on built-in functions', async () => {
|
|
1430
|
-
let file = program.
|
|
1500
|
+
let file = program.setFile('source/main.brs', `
|
|
1431
1501
|
function doUcase(text)
|
|
1432
1502
|
return ucase(text)
|
|
1433
1503
|
end function
|
|
@@ -1439,7 +1509,7 @@ describe('BrsFile', () => {
|
|
|
1439
1509
|
].join('\n'));
|
|
1440
1510
|
});
|
|
1441
1511
|
it('does not crash when hovering on object method call', async () => {
|
|
1442
|
-
let file = program.
|
|
1512
|
+
let file = program.setFile('source/main.brs', `
|
|
1443
1513
|
function getInstr(url, text)
|
|
1444
1514
|
return url.instr(text)
|
|
1445
1515
|
end function
|
|
@@ -1452,7 +1522,7 @@ describe('BrsFile', () => {
|
|
|
1452
1522
|
].join('\n'));
|
|
1453
1523
|
});
|
|
1454
1524
|
it('finds function hover in file scope', () => {
|
|
1455
|
-
let file = program.
|
|
1525
|
+
let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1456
1526
|
sub Main()
|
|
1457
1527
|
sayMyName()
|
|
1458
1528
|
end sub
|
|
@@ -1474,12 +1544,12 @@ describe('BrsFile', () => {
|
|
|
1474
1544
|
program = new Program_1.Program({
|
|
1475
1545
|
rootDir: rootDir
|
|
1476
1546
|
});
|
|
1477
|
-
let mainFile = program.
|
|
1547
|
+
let mainFile = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1478
1548
|
sub Main()
|
|
1479
1549
|
sayMyName()
|
|
1480
1550
|
end sub
|
|
1481
1551
|
`);
|
|
1482
|
-
program.
|
|
1552
|
+
program.setFile({ src: `${rootDir}/source/lib.brs`, dest: 'source/lib.brs' }, `
|
|
1483
1553
|
sub sayMyName(name as string)
|
|
1484
1554
|
|
|
1485
1555
|
end sub
|
|
@@ -1498,7 +1568,7 @@ describe('BrsFile', () => {
|
|
|
1498
1568
|
program = new Program_1.Program({
|
|
1499
1569
|
rootDir: rootDir
|
|
1500
1570
|
});
|
|
1501
|
-
const file = program.
|
|
1571
|
+
const file = program.setFile('source/lib.brs', `
|
|
1502
1572
|
'
|
|
1503
1573
|
' The main function
|
|
1504
1574
|
'
|
|
@@ -1536,7 +1606,7 @@ describe('BrsFile', () => {
|
|
|
1536
1606
|
`);
|
|
1537
1607
|
});
|
|
1538
1608
|
it('handles mixed case `then` partions of conditionals', () => {
|
|
1539
|
-
let mainFile = program.
|
|
1609
|
+
let mainFile = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1540
1610
|
sub Main()
|
|
1541
1611
|
if true then
|
|
1542
1612
|
print "works"
|
|
@@ -1544,7 +1614,7 @@ describe('BrsFile', () => {
|
|
|
1544
1614
|
end sub
|
|
1545
1615
|
`);
|
|
1546
1616
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(mainFile);
|
|
1547
|
-
mainFile = program.
|
|
1617
|
+
mainFile = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1548
1618
|
sub Main()
|
|
1549
1619
|
if true Then
|
|
1550
1620
|
print "works"
|
|
@@ -1552,7 +1622,7 @@ describe('BrsFile', () => {
|
|
|
1552
1622
|
end sub
|
|
1553
1623
|
`);
|
|
1554
1624
|
(0, testHelpers_spec_1.expectZeroDiagnostics)(mainFile);
|
|
1555
|
-
mainFile = program.
|
|
1625
|
+
mainFile = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1556
1626
|
sub Main()
|
|
1557
1627
|
if true THEN
|
|
1558
1628
|
print "works"
|
|
@@ -1563,7 +1633,7 @@ describe('BrsFile', () => {
|
|
|
1563
1633
|
});
|
|
1564
1634
|
});
|
|
1565
1635
|
it('does not throw when encountering incomplete import statement', () => {
|
|
1566
|
-
program.
|
|
1636
|
+
program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
|
|
1567
1637
|
import
|
|
1568
1638
|
sub main()
|
|
1569
1639
|
end sub
|
|
@@ -2086,7 +2156,7 @@ describe('BrsFile', () => {
|
|
|
2086
2156
|
`);
|
|
2087
2157
|
});
|
|
2088
2158
|
it('simple mapped files include a reference to the source map', () => {
|
|
2089
|
-
let file = program.
|
|
2159
|
+
let file = program.setFile('source/logger.brs', (0, testHelpers_spec_1.trim) `
|
|
2090
2160
|
sub logInfo()
|
|
2091
2161
|
end sub
|
|
2092
2162
|
`);
|
|
@@ -2095,7 +2165,7 @@ describe('BrsFile', () => {
|
|
|
2095
2165
|
(0, chai_1.expect)(code.endsWith(`'//# sourceMappingURL=./logger.brs.map`)).to.be.true;
|
|
2096
2166
|
});
|
|
2097
2167
|
it('AST generated files include a reference to the source map', () => {
|
|
2098
|
-
let file = program.
|
|
2168
|
+
let file = program.setFile('source/logger.brs', (0, testHelpers_spec_1.trim) `
|
|
2099
2169
|
sub logInfo()
|
|
2100
2170
|
end sub
|
|
2101
2171
|
`);
|
|
@@ -2104,7 +2174,7 @@ describe('BrsFile', () => {
|
|
|
2104
2174
|
(0, chai_1.expect)(code.endsWith(`'//# sourceMappingURL=./logger.brs.map`)).to.be.true;
|
|
2105
2175
|
});
|
|
2106
2176
|
it('replaces custom types in parameter types and return types', () => {
|
|
2107
|
-
program.
|
|
2177
|
+
program.setFile('source/SomeKlass.bs', `
|
|
2108
2178
|
class SomeKlass
|
|
2109
2179
|
end class
|
|
2110
2180
|
`);
|
|
@@ -2128,7 +2198,7 @@ describe('BrsFile', () => {
|
|
|
2128
2198
|
describe('callfunc operator', () => {
|
|
2129
2199
|
describe('transpile', () => {
|
|
2130
2200
|
it('does not produce diagnostics', () => {
|
|
2131
|
-
program.
|
|
2201
|
+
program.setFile('source/main.bs', `
|
|
2132
2202
|
sub main()
|
|
2133
2203
|
someObject@.someFunction(paramObject.value)
|
|
2134
2204
|
end sub
|
|
@@ -2174,7 +2244,7 @@ describe('BrsFile', () => {
|
|
|
2174
2244
|
name: 'transform callback',
|
|
2175
2245
|
afterFileParse: onParsed
|
|
2176
2246
|
});
|
|
2177
|
-
file = program.
|
|
2247
|
+
file = program.setFile({ src: `absolute_path/file${ext}`, dest: `relative_path/file${ext}` }, `
|
|
2178
2248
|
sub Sum()
|
|
2179
2249
|
print "hello world"
|
|
2180
2250
|
end sub
|
|
@@ -2195,25 +2265,25 @@ describe('BrsFile', () => {
|
|
|
2195
2265
|
});
|
|
2196
2266
|
describe('typedefKey', () => {
|
|
2197
2267
|
it('works for .brs files', () => {
|
|
2198
|
-
(0, chai_1.expect)((0, util_1.standardizePath)((program.
|
|
2268
|
+
(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`);
|
|
2199
2269
|
});
|
|
2200
2270
|
it('returns undefined for files that should not have a typedef', () => {
|
|
2201
|
-
(0, chai_1.expect)((program.
|
|
2202
|
-
(0, chai_1.expect)((program.
|
|
2203
|
-
const xmlFile = program.
|
|
2271
|
+
(0, chai_1.expect)((program.setFile('source/main.bs', '')).typedefKey).to.be.undefined;
|
|
2272
|
+
(0, chai_1.expect)((program.setFile('source/main.d.bs', '')).typedefKey).to.be.undefined;
|
|
2273
|
+
const xmlFile = program.setFile('components/comp.xml', '');
|
|
2204
2274
|
(0, chai_1.expect)(xmlFile.typedefKey).to.be.undefined;
|
|
2205
2275
|
});
|
|
2206
2276
|
});
|
|
2207
2277
|
describe('type definitions', () => {
|
|
2208
2278
|
it('only exposes defined functions even if source has more', () => {
|
|
2209
2279
|
//parse the .brs file first so it doesn't know about the typedef
|
|
2210
|
-
program.
|
|
2280
|
+
program.setFile('source/main.brs', `
|
|
2211
2281
|
sub main()
|
|
2212
2282
|
end sub
|
|
2213
2283
|
sub speak()
|
|
2214
2284
|
end sub
|
|
2215
2285
|
`);
|
|
2216
|
-
program.
|
|
2286
|
+
program.setFile('source/main.d.bs', `
|
|
2217
2287
|
sub main()
|
|
2218
2288
|
end sub
|
|
2219
2289
|
`);
|
|
@@ -2223,7 +2293,7 @@ describe('BrsFile', () => {
|
|
|
2223
2293
|
(0, chai_1.expect)(functionNames).not.to.include('speak');
|
|
2224
2294
|
});
|
|
2225
2295
|
it('reacts to typedef file changes', () => {
|
|
2226
|
-
let file = program.
|
|
2296
|
+
let file = program.setFile('source/main.brs', `
|
|
2227
2297
|
sub main()
|
|
2228
2298
|
end sub
|
|
2229
2299
|
sub speak()
|
|
@@ -2231,14 +2301,14 @@ describe('BrsFile', () => {
|
|
|
2231
2301
|
`);
|
|
2232
2302
|
(0, chai_1.expect)(file.hasTypedef).to.be.false;
|
|
2233
2303
|
(0, chai_1.expect)(file.typedefFile).not.to.exist;
|
|
2234
|
-
program.
|
|
2304
|
+
program.setFile('source/main.d.bs', `
|
|
2235
2305
|
sub main()
|
|
2236
2306
|
end sub
|
|
2237
2307
|
`);
|
|
2238
2308
|
(0, chai_1.expect)(file.hasTypedef).to.be.true;
|
|
2239
2309
|
(0, chai_1.expect)(file.typedefFile).to.exist;
|
|
2240
2310
|
//add replace file, does it still find the typedef
|
|
2241
|
-
file = program.
|
|
2311
|
+
file = program.setFile('source/main.brs', `
|
|
2242
2312
|
sub main()
|
|
2243
2313
|
end sub
|
|
2244
2314
|
sub speak()
|
|
@@ -2253,36 +2323,36 @@ describe('BrsFile', () => {
|
|
|
2253
2323
|
});
|
|
2254
2324
|
describe('typedef', () => {
|
|
2255
2325
|
it('sets typedef path properly', () => {
|
|
2256
|
-
(0, chai_1.expect)((program.
|
|
2257
|
-
(0, chai_1.expect)((program.
|
|
2258
|
-
(0, chai_1.expect)((program.
|
|
2326
|
+
(0, chai_1.expect)((program.setFile('source/main1.brs', '')).typedefKey).to.equal((0, util_1.standardizePath) `${rootDir}/source/main1.d.bs`.toLowerCase());
|
|
2327
|
+
(0, chai_1.expect)((program.setFile('source/main2.d.bs', '')).typedefKey).to.equal(undefined);
|
|
2328
|
+
(0, chai_1.expect)((program.setFile('source/main3.bs', '')).typedefKey).to.equal(undefined);
|
|
2259
2329
|
//works for dest with `.brs` extension
|
|
2260
|
-
(0, chai_1.expect)((program.
|
|
2330
|
+
(0, chai_1.expect)((program.setFile({ src: 'source/main4.bs', dest: 'source/main4.brs' }, '')).typedefKey).to.equal(undefined);
|
|
2261
2331
|
});
|
|
2262
2332
|
it('does not link when missing from program', () => {
|
|
2263
|
-
const file = program.
|
|
2333
|
+
const file = program.setFile('source/main.brs', ``);
|
|
2264
2334
|
(0, chai_1.expect)(file.typedefFile).not.to.exist;
|
|
2265
2335
|
});
|
|
2266
2336
|
it('links typedef when added BEFORE .brs file', () => {
|
|
2267
|
-
const typedef = program.
|
|
2268
|
-
const file = program.
|
|
2337
|
+
const typedef = program.setFile('source/main.d.bs', ``);
|
|
2338
|
+
const file = program.setFile('source/main.brs', ``);
|
|
2269
2339
|
(0, chai_1.expect)(file.typedefFile).to.equal(typedef);
|
|
2270
2340
|
});
|
|
2271
2341
|
it('links typedef when added AFTER .brs file', () => {
|
|
2272
|
-
const file = program.
|
|
2273
|
-
const typedef = program.
|
|
2342
|
+
const file = program.setFile('source/main.brs', ``);
|
|
2343
|
+
const typedef = program.setFile('source/main.d.bs', ``);
|
|
2274
2344
|
(0, chai_1.expect)(file.typedefFile).to.eql(typedef);
|
|
2275
2345
|
});
|
|
2276
2346
|
it('removes typedef link when typedef is removed', () => {
|
|
2277
|
-
const typedef = program.
|
|
2278
|
-
const file = program.
|
|
2347
|
+
const typedef = program.setFile('source/main.d.bs', ``);
|
|
2348
|
+
const file = program.setFile('source/main.brs', ``);
|
|
2279
2349
|
program.removeFile(typedef.pathAbsolute);
|
|
2280
2350
|
(0, chai_1.expect)(file.typedefFile).to.be.undefined;
|
|
2281
2351
|
});
|
|
2282
2352
|
});
|
|
2283
2353
|
describe('getTypedef', () => {
|
|
2284
2354
|
function testTypedef(original, expected) {
|
|
2285
|
-
let file = program.
|
|
2355
|
+
let file = program.setFile('source/main.brs', original);
|
|
2286
2356
|
(0, chai_1.expect)(file.getTypedef()).to.eql(expected);
|
|
2287
2357
|
}
|
|
2288
2358
|
it('includes namespace on extend class names', () => {
|
|
@@ -2533,7 +2603,7 @@ describe('BrsFile', () => {
|
|
|
2533
2603
|
});
|
|
2534
2604
|
describe('parser getter', () => {
|
|
2535
2605
|
it('recreates the parser when missing', () => {
|
|
2536
|
-
const file = program.
|
|
2606
|
+
const file = program.setFile('source/main.brs', `
|
|
2537
2607
|
sub main()
|
|
2538
2608
|
end sub
|
|
2539
2609
|
`);
|
|
@@ -2547,11 +2617,11 @@ describe('BrsFile', () => {
|
|
|
2547
2617
|
(0, chai_1.expect)(file.parser).to.equal(newParser);
|
|
2548
2618
|
});
|
|
2549
2619
|
it('call parse when previously skipped', () => {
|
|
2550
|
-
program.
|
|
2620
|
+
program.setFile('source/main.d.bs', `'typedef
|
|
2551
2621
|
sub main()
|
|
2552
2622
|
end sub
|
|
2553
2623
|
`);
|
|
2554
|
-
const file = program.
|
|
2624
|
+
const file = program.setFile('source/main.brs', `'source
|
|
2555
2625
|
sub main()
|
|
2556
2626
|
end sub
|
|
2557
2627
|
`);
|