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.
Files changed (113) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/Cache.d.ts +2 -7
  3. package/dist/Cache.js +4 -13
  4. package/dist/Cache.js.map +1 -1
  5. package/dist/DependencyGraph.js +5 -4
  6. package/dist/DependencyGraph.js.map +1 -1
  7. package/dist/DiagnosticMessages.d.ts +21 -1
  8. package/dist/DiagnosticMessages.js +20 -0
  9. package/dist/DiagnosticMessages.js.map +1 -1
  10. package/dist/LanguageServer.js +3 -3
  11. package/dist/LanguageServer.js.map +1 -1
  12. package/dist/Program.d.ts +21 -7
  13. package/dist/Program.js +14 -10
  14. package/dist/Program.js.map +1 -1
  15. package/dist/ProgramBuilder.js +3 -3
  16. package/dist/ProgramBuilder.js.map +1 -1
  17. package/dist/Scope.d.ts +13 -7
  18. package/dist/Scope.js +24 -1
  19. package/dist/Scope.js.map +1 -1
  20. package/dist/XmlScope.d.ts +3 -3
  21. package/dist/astUtils/AstEditor.d.ts +6 -0
  22. package/dist/astUtils/AstEditor.js +10 -0
  23. package/dist/astUtils/AstEditor.js.map +1 -1
  24. package/dist/astUtils/AstEditor.spec.js +37 -0
  25. package/dist/astUtils/AstEditor.spec.js.map +1 -1
  26. package/dist/astUtils/creators.d.ts +7 -3
  27. package/dist/astUtils/creators.js +86 -5
  28. package/dist/astUtils/creators.js.map +1 -1
  29. package/dist/astUtils/reflection.d.ts +3 -1
  30. package/dist/astUtils/reflection.js +10 -2
  31. package/dist/astUtils/reflection.js.map +1 -1
  32. package/dist/astUtils/reflection.spec.js +3 -2
  33. package/dist/astUtils/reflection.spec.js.map +1 -1
  34. package/dist/astUtils/visitors.d.ts +3 -1
  35. package/dist/astUtils/visitors.js.map +1 -1
  36. package/dist/astUtils/visitors.spec.js +6 -6
  37. package/dist/astUtils/visitors.spec.js.map +1 -1
  38. package/dist/bscPlugin/BscPlugin.d.ts +4 -1
  39. package/dist/bscPlugin/BscPlugin.js +16 -0
  40. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  41. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +16 -16
  42. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  43. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +1 -0
  44. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +36 -0
  45. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  46. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +30 -2
  47. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  48. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
  49. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +36 -0
  50. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
  51. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +9 -0
  52. package/dist/bscPlugin/validation/BrsFileValidator.js +66 -0
  53. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  54. package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
  55. package/dist/bscPlugin/validation/ScopeValidator.js +94 -0
  56. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  57. package/dist/diagnosticUtils.js +3 -3
  58. package/dist/diagnosticUtils.js.map +1 -1
  59. package/dist/files/BrsFile.Class.spec.js +47 -47
  60. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  61. package/dist/files/BrsFile.d.ts +9 -1
  62. package/dist/files/BrsFile.js +111 -29
  63. package/dist/files/BrsFile.js.map +1 -1
  64. package/dist/files/BrsFile.spec.js +164 -94
  65. package/dist/files/BrsFile.spec.js.map +1 -1
  66. package/dist/files/XmlFile.d.ts +5 -5
  67. package/dist/files/XmlFile.js +3 -3
  68. package/dist/files/XmlFile.js.map +1 -1
  69. package/dist/files/XmlFile.spec.js +80 -80
  70. package/dist/files/XmlFile.spec.js.map +1 -1
  71. package/dist/files/tests/imports.spec.js +23 -23
  72. package/dist/files/tests/imports.spec.js.map +1 -1
  73. package/dist/interfaces.d.ts +5 -5
  74. package/dist/lexer/Lexer.spec.js +8 -0
  75. package/dist/lexer/Lexer.spec.js.map +1 -1
  76. package/dist/lexer/TokenKind.d.ts +2 -0
  77. package/dist/lexer/TokenKind.js +5 -0
  78. package/dist/lexer/TokenKind.js.map +1 -1
  79. package/dist/parser/Expression.d.ts +0 -1
  80. package/dist/parser/Expression.js.map +1 -1
  81. package/dist/parser/Parser.d.ts +10 -1
  82. package/dist/parser/Parser.js +90 -4
  83. package/dist/parser/Parser.js.map +1 -1
  84. package/dist/parser/SGParser.spec.js +1 -1
  85. package/dist/parser/SGParser.spec.js.map +1 -1
  86. package/dist/parser/Statement.d.ts +52 -0
  87. package/dist/parser/Statement.js +159 -15
  88. package/dist/parser/Statement.js.map +1 -1
  89. package/dist/parser/Statement.spec.js +1 -1
  90. package/dist/parser/Statement.spec.js.map +1 -1
  91. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +1 -1
  92. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  93. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +1 -1
  94. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
  95. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +1 -1
  96. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  97. package/dist/parser/tests/expression/TernaryExpression.spec.js +1 -1
  98. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  99. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  100. package/dist/parser/tests/statement/Enum.spec.js +774 -0
  101. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  102. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  103. package/dist/parser/tests/statement/For.spec.js +46 -0
  104. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  105. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  106. package/dist/parser/tests/statement/ForEach.spec.js +37 -0
  107. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  108. package/dist/parser/tests/statement/InterfaceStatement.spec.js +1 -1
  109. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  110. package/dist/util.d.ts +10 -0
  111. package/dist/util.js +37 -0
  112. package/dist/util.js.map +1 -1
  113. 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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile(entry, `call(ModuleA.ModuleB.ModuleC.`);
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.addOrReplaceFile('source/main.brs', ``);
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile('source/main.brs', `i`);
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile(destPath, '');
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
625
+ let file = program.setFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
556
626
  sub main()
557
627
  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.addOrReplaceFile('source/file.brs', ``);
905
- program.addOrReplaceFile('source/main.bs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile(`source/main.brs`, `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/lib.brs`, dest: 'source/lib.brs' }, `
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.addOrReplaceFile('source/lib.brs', `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile({ src: `${rootDir}/source/main.brs`, dest: 'source/main.brs' }, `
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.addOrReplaceFile('source/logger.brs', (0, testHelpers_spec_1.trim) `
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.addOrReplaceFile('source/logger.brs', (0, testHelpers_spec_1.trim) `
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.addOrReplaceFile('source/SomeKlass.bs', `
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.addOrReplaceFile('source/main.bs', `
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.addOrReplaceFile({ src: `absolute_path/file${ext}`, dest: `relative_path/file${ext}` }, `
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.addOrReplaceFile('source/main.brs', '')).typedefKey)).to.equal((0, util_1.standardizePath) `${rootDir.toLowerCase()}/source/main.d.bs`);
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.addOrReplaceFile('source/main.bs', '')).typedefKey).to.be.undefined;
2202
- (0, chai_1.expect)((program.addOrReplaceFile('source/main.d.bs', '')).typedefKey).to.be.undefined;
2203
- const xmlFile = program.addOrReplaceFile('components/comp.xml', '');
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.d.bs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.d.bs', `
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main1.brs', '')).typedefKey).to.equal((0, util_1.standardizePath) `${rootDir}/source/main1.d.bs`.toLowerCase());
2257
- (0, chai_1.expect)((program.addOrReplaceFile('source/main2.d.bs', '')).typedefKey).to.equal(undefined);
2258
- (0, chai_1.expect)((program.addOrReplaceFile('source/main3.bs', '')).typedefKey).to.equal(undefined);
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.addOrReplaceFile({ src: 'source/main4.bs', dest: 'source/main4.brs' }, '')).typedefKey).to.equal(undefined);
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.addOrReplaceFile('source/main.brs', ``);
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.addOrReplaceFile('source/main.d.bs', ``);
2268
- const file = program.addOrReplaceFile('source/main.brs', ``);
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.addOrReplaceFile('source/main.brs', ``);
2273
- const typedef = program.addOrReplaceFile('source/main.d.bs', ``);
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.addOrReplaceFile('source/main.d.bs', ``);
2278
- const file = program.addOrReplaceFile('source/main.brs', ``);
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.addOrReplaceFile('source/main.brs', original);
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.addOrReplaceFile('source/main.brs', `
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.addOrReplaceFile('source/main.d.bs', `'typedef
2620
+ program.setFile('source/main.d.bs', `'typedef
2551
2621
  sub main()
2552
2622
  end sub
2553
2623
  `);
2554
- const file = program.addOrReplaceFile('source/main.brs', `'source
2624
+ const file = program.setFile('source/main.brs', `'source
2555
2625
  sub main()
2556
2626
  end sub
2557
2627
  `);