brighterscript 0.68.5 → 0.69.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/BusyStatusTracker.d.ts +37 -7
  3. package/dist/BusyStatusTracker.js +73 -8
  4. package/dist/BusyStatusTracker.js.map +1 -1
  5. package/dist/DiagnosticCollection.d.ts +19 -5
  6. package/dist/DiagnosticCollection.js +67 -16
  7. package/dist/DiagnosticCollection.js.map +1 -1
  8. package/dist/LanguageServer.d.ts +82 -132
  9. package/dist/LanguageServer.js +403 -940
  10. package/dist/LanguageServer.js.map +1 -1
  11. package/dist/Logger.d.ts +9 -4
  12. package/dist/Logger.js +30 -6
  13. package/dist/Logger.js.map +1 -1
  14. package/dist/PluginInterface.d.ts +1 -1
  15. package/dist/PluginInterface.js.map +1 -1
  16. package/dist/Program.d.ts +20 -2
  17. package/dist/Program.js +124 -49
  18. package/dist/Program.js.map +1 -1
  19. package/dist/ProgramBuilder.d.ts +13 -6
  20. package/dist/ProgramBuilder.js +25 -15
  21. package/dist/ProgramBuilder.js.map +1 -1
  22. package/dist/Scope.js +6 -3
  23. package/dist/Scope.js.map +1 -1
  24. package/dist/SemanticTokenUtils.js +1 -1
  25. package/dist/SemanticTokenUtils.js.map +1 -1
  26. package/dist/bscPlugin/CallExpressionInfo.js +2 -1
  27. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  28. package/dist/bscPlugin/completions/CompletionsProcessor.js +14 -4
  29. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  30. package/dist/bscPlugin/hover/HoverProcessor.js +1 -1
  31. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  32. package/dist/bscPlugin/validation/ScopeValidator.js +9 -9
  33. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  34. package/dist/common/Sequencer.d.ts +27 -0
  35. package/dist/common/Sequencer.js +113 -0
  36. package/dist/common/Sequencer.js.map +1 -0
  37. package/dist/common/Sequencer.spec.d.ts +1 -0
  38. package/dist/common/Sequencer.spec.js +75 -0
  39. package/dist/common/Sequencer.spec.js.map +1 -0
  40. package/dist/deferred.d.ts +2 -0
  41. package/dist/deferred.js +10 -0
  42. package/dist/deferred.js.map +1 -1
  43. package/dist/files/BrsFile.d.ts +1 -1
  44. package/dist/files/BrsFile.js +10 -15
  45. package/dist/files/BrsFile.js.map +1 -1
  46. package/dist/files/BrsFile.spec.js +8 -0
  47. package/dist/files/BrsFile.spec.js.map +1 -1
  48. package/dist/interfaces.d.ts +22 -2
  49. package/dist/lexer/Lexer.js +1 -1
  50. package/dist/lexer/Lexer.js.map +1 -1
  51. package/dist/logging.d.ts +6 -1
  52. package/dist/logging.js +14 -1
  53. package/dist/logging.js.map +1 -1
  54. package/dist/lsp/ActionQueue.d.ts +35 -0
  55. package/dist/lsp/ActionQueue.js +115 -0
  56. package/dist/lsp/ActionQueue.js.map +1 -0
  57. package/dist/lsp/ActionQueue.spec.d.ts +1 -0
  58. package/dist/lsp/ActionQueue.spec.js +80 -0
  59. package/dist/lsp/ActionQueue.spec.js.map +1 -0
  60. package/dist/lsp/DocumentManager.d.ts +63 -0
  61. package/dist/lsp/DocumentManager.js +122 -0
  62. package/dist/lsp/DocumentManager.js.map +1 -0
  63. package/dist/lsp/DocumentManager.spec.d.ts +1 -0
  64. package/dist/lsp/DocumentManager.spec.js +103 -0
  65. package/dist/lsp/DocumentManager.spec.js.map +1 -0
  66. package/dist/lsp/LspProject.d.ts +231 -0
  67. package/dist/lsp/LspProject.js +3 -0
  68. package/dist/lsp/LspProject.js.map +1 -0
  69. package/dist/lsp/PathFilterer.d.ts +75 -0
  70. package/dist/lsp/PathFilterer.js +196 -0
  71. package/dist/lsp/PathFilterer.js.map +1 -0
  72. package/dist/lsp/PathFilterer.spec.d.ts +1 -0
  73. package/dist/lsp/PathFilterer.spec.js +182 -0
  74. package/dist/lsp/PathFilterer.spec.js.map +1 -0
  75. package/dist/lsp/Project.d.ts +178 -0
  76. package/dist/lsp/Project.js +438 -0
  77. package/dist/lsp/Project.js.map +1 -0
  78. package/dist/lsp/Project.spec.d.ts +1 -0
  79. package/dist/lsp/Project.spec.js +236 -0
  80. package/dist/lsp/Project.spec.js.map +1 -0
  81. package/dist/lsp/ProjectManager.d.ts +221 -0
  82. package/dist/lsp/ProjectManager.js +735 -0
  83. package/dist/lsp/ProjectManager.js.map +1 -0
  84. package/dist/lsp/ProjectManager.spec.d.ts +1 -0
  85. package/dist/lsp/ProjectManager.spec.js +756 -0
  86. package/dist/lsp/ProjectManager.spec.js.map +1 -0
  87. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  88. package/dist/lsp/ReaderWriterManager.js +60 -0
  89. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  90. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  91. package/dist/lsp/worker/MessageHandler.js +138 -0
  92. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  93. package/dist/lsp/worker/MessageHandler.spec.d.ts +1 -0
  94. package/dist/lsp/worker/MessageHandler.spec.js +64 -0
  95. package/dist/lsp/worker/MessageHandler.spec.js.map +1 -0
  96. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  97. package/dist/lsp/worker/WorkerPool.js +78 -0
  98. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  99. package/dist/lsp/worker/WorkerPool.spec.d.ts +1 -0
  100. package/dist/lsp/worker/WorkerPool.spec.js +59 -0
  101. package/dist/lsp/worker/WorkerPool.spec.js.map +1 -0
  102. package/dist/lsp/worker/WorkerThreadProject.d.ts +144 -0
  103. package/dist/lsp/worker/WorkerThreadProject.js +183 -0
  104. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  105. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +2 -0
  106. package/dist/lsp/worker/WorkerThreadProject.spec.js +68 -0
  107. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -0
  108. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  109. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  110. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  111. package/dist/util.d.ts +32 -5
  112. package/dist/util.js +117 -19
  113. package/dist/util.js.map +1 -1
  114. package/package.json +13 -3
@@ -0,0 +1,438 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Project = void 0;
4
+ const ProgramBuilder_1 = require("../ProgramBuilder");
5
+ const EventEmitter = require("eventemitter3");
6
+ const util_1 = require("../util");
7
+ const path = require("path");
8
+ const DiagnosticMessages_1 = require("../DiagnosticMessages");
9
+ const vscode_uri_1 = require("vscode-uri");
10
+ const deferred_1 = require("../deferred");
11
+ const roku_deploy_1 = require("roku-deploy");
12
+ const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
13
+ const vscode_languageserver_protocol_2 = require("vscode-languageserver-protocol");
14
+ const logging_1 = require("../logging");
15
+ const fsExtra = require("fs-extra");
16
+ class Project {
17
+ constructor(options) {
18
+ var _a, _b;
19
+ this.isStandaloneProject = false;
20
+ /**
21
+ * Gets resolved when the project has finished activating
22
+ */
23
+ this.activationDeferred = new deferred_1.Deferred();
24
+ this.emitter = new EventEmitter();
25
+ this.disposables = [];
26
+ this.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) !== null && _a !== void 0 ? _a : (0, logging_1.createLogger)({
27
+ //when running inside a worker thread, we don't want to use colors
28
+ enableColor: false
29
+ });
30
+ this.projectIdentifier = (_b = options === null || options === void 0 ? void 0 : options.projectIdentifier) !== null && _b !== void 0 ? _b : '';
31
+ }
32
+ /**
33
+ * Activates this project. Every call to `activate` should completely reset the project, clear all used ram and start from scratch.
34
+ */
35
+ async activate(options) {
36
+ this.logger.info('Project.activate', options.projectPath);
37
+ this.activateOptions = options;
38
+ this.projectPath = options.projectPath ? util_1.default.standardizePath(options.projectPath) : options.projectPath;
39
+ this.workspaceFolder = options.workspaceFolder ? util_1.default.standardizePath(options.workspaceFolder) : options.workspaceFolder;
40
+ this.projectNumber = options.projectNumber;
41
+ this.bsconfigPath = await this.getConfigFilePath(options);
42
+ this.builder = new ProgramBuilder_1.ProgramBuilder({
43
+ //share our logger with ProgramBuilder, which will keep our level in sync with the one in the program
44
+ logger: this.logger
45
+ });
46
+ this.builder.logger.prefix = `[${this.projectIdentifier}]`;
47
+ this.disposables.push(this.builder);
48
+ let cwd;
49
+ //if the config file exists, use it and its folder as cwd
50
+ if (this.bsconfigPath && await util_1.default.pathExists(this.bsconfigPath)) {
51
+ cwd = path.dirname(this.bsconfigPath);
52
+ //load the bsconfig file contents (used for performance optimizations externally)
53
+ try {
54
+ this.bsconfigFileContents = (await fsExtra.readFile(this.bsconfigPath)).toString();
55
+ }
56
+ catch (_a) { }
57
+ }
58
+ else {
59
+ cwd = this.projectPath;
60
+ //config file doesn't exist...let `brighterscript` resolve the default way
61
+ this.bsconfigPath = undefined;
62
+ }
63
+ const builderOptions = {
64
+ cwd: cwd,
65
+ project: this.bsconfigPath,
66
+ watch: false,
67
+ createPackage: false,
68
+ deploy: false,
69
+ copyToStaging: false,
70
+ showDiagnosticsInConsole: false,
71
+ validate: false
72
+ };
73
+ //Assign .files (mostly used for standalone projects) if available, as a dedicated assignment because `undefined` overrides the default value in the `bsconfig.json`
74
+ if (options.files) {
75
+ builderOptions.files = roku_deploy_1.rokuDeploy.normalizeFilesArray(options.files);
76
+ }
77
+ //run the builder to initialize the program. Skip validation for now, we'll trigger it soon in a more cancellable way
78
+ await this.builder.run(Object.assign(Object.assign({}, builderOptions), { validate: false,
79
+ //don't show diagnostics in the console since this is run via the language server, they're presented in a different way
80
+ showDiagnosticsInConsole: false }));
81
+ //flush diagnostics every time the program finishes validating
82
+ //this plugin must be added LAST to the program to ensure we can see all diagnostics
83
+ this.builder.plugins.add({
84
+ name: 'bsc-language-server',
85
+ afterProgramValidate: () => {
86
+ const diagnostics = this.getDiagnostics();
87
+ this.emit('diagnostics', {
88
+ diagnostics: diagnostics
89
+ });
90
+ }
91
+ });
92
+ //if we found a deprecated brsconfig.json, add a diagnostic warning the user
93
+ if (this.bsconfigPath && path.basename(this.bsconfigPath) === 'brsconfig.json') {
94
+ this.builder.addDiagnostic(this.bsconfigPath, Object.assign(Object.assign({}, DiagnosticMessages_1.DiagnosticMessages.brsConfigJsonIsDeprecated()), { range: util_1.default.createRange(0, 0, 0, 0) }));
95
+ }
96
+ //trigger a validation (but don't wait for it. That way we can cancel it sooner if we get new incoming data or requests)
97
+ void this.validate();
98
+ this.activationDeferred.resolve();
99
+ return {
100
+ bsconfigPath: this.bsconfigPath,
101
+ logLevel: this.builder.program.options.logLevel,
102
+ rootDir: this.builder.program.options.rootDir,
103
+ filePatterns: this.filePatterns
104
+ };
105
+ }
106
+ get rootDir() {
107
+ return this.builder.program.options.rootDir;
108
+ }
109
+ /**
110
+ * The file patterns from bsconfig.json that were used to find all files for this project
111
+ */
112
+ get filePatterns() {
113
+ if (!this.builder) {
114
+ return undefined;
115
+ }
116
+ const patterns = roku_deploy_1.rokuDeploy.normalizeFilesArray(this.builder.program.options.files);
117
+ return patterns.map(x => {
118
+ return typeof x === 'string' ? x : x.src;
119
+ });
120
+ }
121
+ /**
122
+ * Promise that resolves when the project finishes activating
123
+ * @returns a promise that resolves when the project finishes activating
124
+ */
125
+ whenActivated() {
126
+ return this.activationDeferred.promise;
127
+ }
128
+ /**
129
+ * Validate the project. This will trigger a full validation on any scopes that were changed since the last validation,
130
+ * and will also eventually emit a new 'diagnostics' event that includes all diagnostics for the project.
131
+ *
132
+ * This will cancel any currently running validation and then run a new one.
133
+ */
134
+ async validate() {
135
+ this.logger.debug('Project.validate');
136
+ this.cancelValidate();
137
+ //store
138
+ this.validationCancelToken = new vscode_languageserver_protocol_2.CancellationTokenSource();
139
+ try {
140
+ this.emit('validate-begin', {});
141
+ await this.builder.program.validate({
142
+ async: true,
143
+ cancellationToken: this.validationCancelToken.token
144
+ });
145
+ }
146
+ finally {
147
+ this.emit('validate-end', {});
148
+ }
149
+ }
150
+ /**
151
+ * Cancel any active running validation
152
+ */
153
+ cancelValidate() {
154
+ var _a;
155
+ (_a = this.validationCancelToken) === null || _a === void 0 ? void 0 : _a.cancel();
156
+ delete this.validationCancelToken;
157
+ }
158
+ getDiagnostics() {
159
+ const diagnostics = this.builder.getDiagnostics();
160
+ return diagnostics.map(x => {
161
+ const uri = vscode_uri_1.URI.file(x.file.srcPath).toString();
162
+ return Object.assign(Object.assign({}, util_1.default.toDiagnostic(x, uri)), { uri: uri });
163
+ });
164
+ }
165
+ /**
166
+ * Promise that resolves the next time the system is idle. If the system is already idle, it will resolve immediately
167
+ */
168
+ async onIdle() {
169
+ await Promise.all([
170
+ this.activationDeferred.promise
171
+ ]);
172
+ }
173
+ /**
174
+ * Add or replace the in-memory contents of the file at the specified path. This is typically called as the user is typing.
175
+ * This will cancel any pending validation cycles and queue a future validation cycle instead.
176
+ */
177
+ async applyFileChanges(documentActions) {
178
+ var _a, _b;
179
+ this.logger.debug('Project.applyFileChanges', documentActions.map(x => x.srcPath));
180
+ await this.onIdle();
181
+ let didChangeFiles = false;
182
+ const result = [...documentActions];
183
+ // eslint-disable-next-line @typescript-eslint/prefer-for-of
184
+ for (let i = 0; i < result.length; i++) {
185
+ const action = result[i];
186
+ let didChangeThisFile = false;
187
+ //if this is a `set` and the file matches the project's files array, set it
188
+ if (action.type === 'set' && Project.willAcceptFile(action.srcPath, this.builder.program.options.files, this.builder.program.options.rootDir)) {
189
+ //load the file contents from disk if we don't have an in memory copy
190
+ const fileContents = (_a = action.fileContents) !== null && _a !== void 0 ? _a : (_b = util_1.default.readFileSync(action.srcPath)) === null || _b === void 0 ? void 0 : _b.toString();
191
+ //if we got file contents, set the file on the program
192
+ if (fileContents !== undefined) {
193
+ didChangeThisFile = this.setFile(action.srcPath, fileContents);
194
+ //this file was accepted by the program
195
+ action.status = 'accepted';
196
+ //if we can't get file contents, apply this as a delete
197
+ }
198
+ else {
199
+ action.status = 'accepted';
200
+ result.push({
201
+ id: action.id,
202
+ srcPath: action.srcPath,
203
+ type: 'delete',
204
+ status: undefined,
205
+ allowStandaloneProject: false
206
+ });
207
+ continue;
208
+ }
209
+ //try to delete the file or directory
210
+ }
211
+ else if (action.type === 'delete') {
212
+ didChangeThisFile = this.removeFileOrDirectory(action.srcPath);
213
+ //if we deleted at least one file, mark this action as accepted
214
+ action.status = didChangeThisFile ? 'accepted' : 'rejected';
215
+ //we did not handle this action, so reject
216
+ }
217
+ else {
218
+ action.status = 'rejected';
219
+ }
220
+ didChangeFiles = didChangeFiles || didChangeThisFile;
221
+ }
222
+ if (didChangeFiles) {
223
+ //trigger a validation (but don't wait for it. That way we can cancel it sooner if we get new incoming data or requests)
224
+ this.validate().catch(e => this.logger.error(e));
225
+ }
226
+ this.logger.debug('project.applyFileChanges done', documentActions.map(x => x.srcPath));
227
+ return result;
228
+ }
229
+ /**
230
+ * Determine if this project will accept the file at the specified path (i.e. does it match a pattern in the project's files array)
231
+ */
232
+ static willAcceptFile(srcPath, files, rootDir) {
233
+ srcPath = util_1.default.standardizePath(srcPath);
234
+ if (roku_deploy_1.rokuDeploy.getDestPath(srcPath, files, rootDir) !== undefined) {
235
+ return true;
236
+ //is this exact path in the `files` array? (this check is mostly for standalone projects)
237
+ }
238
+ else if (files.find(x => (0, util_1.standardizePath) `${x.src}` === srcPath)) {
239
+ return true;
240
+ }
241
+ return false;
242
+ }
243
+ /**
244
+ * Set new contents for a file. This is safe to call any time. Changes will be queued and flushed at the correct times
245
+ * during the program's lifecycle flow
246
+ * @param srcPath absolute source path of the file
247
+ * @param fileContents the text contents of the file
248
+ * @returns true if this program accepted and added the file. false if the program didn't want the file, or if the contents didn't change
249
+ */
250
+ setFile(srcPath, fileContents) {
251
+ this.logger.debug('Project.setFile', { srcPath: srcPath, fileContentsLength: fileContents.length });
252
+ const { files, rootDir } = this.builder.program.options;
253
+ //get the dest path for this file.
254
+ let destPath = roku_deploy_1.rokuDeploy.getDestPath(srcPath, files, rootDir);
255
+ //if we have a file and the contents haven't changed
256
+ let file = this.builder.program.getFile(destPath);
257
+ if (file && file.fileContents === fileContents) {
258
+ return false;
259
+ }
260
+ //if we got a dest path, then the program wants this file
261
+ if (destPath) {
262
+ this.builder.program.setFile({
263
+ src: srcPath,
264
+ dest: destPath
265
+ }, fileContents);
266
+ return true;
267
+ }
268
+ return false;
269
+ }
270
+ /**
271
+ * Remove the in-memory file at the specified path. This is typically called when the user (or file system watcher) triggers a file delete
272
+ * @param srcPath absolute path to the File
273
+ * @returns true if we found and removed at least one file, or false if no files were removed
274
+ */
275
+ removeFileOrDirectory(srcPath) {
276
+ var _a;
277
+ this.logger.debug('Project.removeFileOrDirectory', srcPath);
278
+ srcPath = util_1.default.standardizePath(srcPath);
279
+ //if this is a direct file match, remove the file
280
+ if (this.builder.program.hasFile(srcPath)) {
281
+ this.builder.program.removeFile(srcPath);
282
+ return true;
283
+ }
284
+ //maybe this is a directory. Remove all files that start with this path
285
+ let removedSomeFiles = false;
286
+ let lowerSrcPath = srcPath.toLowerCase();
287
+ for (let file of Object.values(this.builder.program.files)) {
288
+ //if the file path starts with the parent path and the file path does not exactly match the folder path
289
+ if ((_a = file.srcPath) === null || _a === void 0 ? void 0 : _a.toLowerCase().startsWith(lowerSrcPath)) {
290
+ this.logger.debug('Project.removeFileOrDirectory removing file because it matches the given directory', { dir: srcPath, srcPath: file.srcPath });
291
+ this.builder.program.removeFile(file.srcPath, false);
292
+ removedSomeFiles = true;
293
+ }
294
+ }
295
+ //return true if we removed at least one file
296
+ return removedSomeFiles;
297
+ }
298
+ /**
299
+ * Get the full list of semantic tokens for the given file path
300
+ * @param options options for getting semantic tokens
301
+ * @param options.srcPath absolute path to the source file
302
+ */
303
+ async getSemanticTokens(options) {
304
+ await this.onIdle();
305
+ if (this.builder.program.hasFile(options.srcPath)) {
306
+ return this.builder.program.getSemanticTokens(options.srcPath);
307
+ }
308
+ }
309
+ async transpileFile(options) {
310
+ await this.onIdle();
311
+ if (this.builder.program.hasFile(options.srcPath)) {
312
+ return this.builder.program.getTranspiledFileContents(options.srcPath);
313
+ }
314
+ }
315
+ async getHover(options) {
316
+ await this.onIdle();
317
+ if (this.builder.program.hasFile(options.srcPath)) {
318
+ return this.builder.program.getHover(options.srcPath, options.position);
319
+ }
320
+ }
321
+ async getDefinition(options) {
322
+ await this.onIdle();
323
+ if (this.builder.program.hasFile(options.srcPath)) {
324
+ return this.builder.program.getDefinition(options.srcPath, options.position);
325
+ }
326
+ }
327
+ async getSignatureHelp(options) {
328
+ await this.onIdle();
329
+ if (this.builder.program.hasFile(options.srcPath)) {
330
+ return this.builder.program.getSignatureHelp(options.srcPath, options.position);
331
+ }
332
+ }
333
+ async getDocumentSymbol(options) {
334
+ await this.onIdle();
335
+ if (this.builder.program.hasFile(options.srcPath)) {
336
+ return this.builder.program.getDocumentSymbols(options.srcPath);
337
+ }
338
+ }
339
+ async getWorkspaceSymbol() {
340
+ await this.onIdle();
341
+ const result = this.builder.program.getWorkspaceSymbols();
342
+ return result;
343
+ }
344
+ async getReferences(options) {
345
+ await this.onIdle();
346
+ if (this.builder.program.hasFile(options.srcPath)) {
347
+ return this.builder.program.getReferences(options.srcPath, options.position);
348
+ }
349
+ }
350
+ async getCodeActions(options) {
351
+ var _a;
352
+ await this.onIdle();
353
+ if (this.builder.program.hasFile(options.srcPath)) {
354
+ const codeActions = this.builder.program.getCodeActions(options.srcPath, options.range);
355
+ //clone each diagnostic since certain diagnostics can have circular reference properties that kill the language server if serialized
356
+ for (const codeAction of codeActions !== null && codeActions !== void 0 ? codeActions : []) {
357
+ if (codeAction.diagnostics) {
358
+ codeAction.diagnostics = (_a = codeAction.diagnostics) === null || _a === void 0 ? void 0 : _a.map(x => util_1.default.toDiagnostic(x, options.srcPath));
359
+ }
360
+ }
361
+ return codeActions;
362
+ }
363
+ }
364
+ async getCompletions(options) {
365
+ await this.onIdle();
366
+ this.logger.debug('Project.getCompletions', options.srcPath, options.position);
367
+ if (this.builder.program.hasFile(options.srcPath)) {
368
+ const completions = this.builder.program.getCompletions(options.srcPath, options.position);
369
+ const result = vscode_languageserver_protocol_1.CompletionList.create(completions);
370
+ result.itemDefaults = {
371
+ commitCharacters: ['.']
372
+ };
373
+ return result;
374
+ }
375
+ return undefined;
376
+ }
377
+ /**
378
+ * Find the path to the bsconfig.json file for this project
379
+ * @returns path to bsconfig.json, or undefined if unable to find it
380
+ */
381
+ async getConfigFilePath(config) {
382
+ let configFilePath;
383
+ //if there's a setting, we need to find the file or show error if it can't be found
384
+ if (config === null || config === void 0 ? void 0 : config.configFilePath) {
385
+ configFilePath = path.resolve(config.projectPath, config.configFilePath);
386
+ if (await util_1.default.pathExists(configFilePath)) {
387
+ return util_1.default.standardizePath(configFilePath);
388
+ }
389
+ else {
390
+ this.emit('critical-failure', {
391
+ message: `Cannot find config file specified in user or workspace settings at '${configFilePath}'`
392
+ });
393
+ }
394
+ }
395
+ //the rest of these require a projectPath, so return early if we don't have one
396
+ if (!(config === null || config === void 0 ? void 0 : config.projectPath)) {
397
+ return undefined;
398
+ }
399
+ //default to config file path found in the root of the workspace
400
+ configFilePath = (0, util_1.standardizePath) `${config.projectPath}/bsconfig.json`;
401
+ if (await util_1.default.pathExists(configFilePath)) {
402
+ return util_1.default.standardizePath(configFilePath);
403
+ }
404
+ //look for the deprecated `brsconfig.json` file
405
+ configFilePath = (0, util_1.standardizePath) `${config.projectPath}/brsconfig.json`;
406
+ if (await util_1.default.pathExists(configFilePath)) {
407
+ return util_1.default.standardizePath(configFilePath);
408
+ }
409
+ //no config file could be found
410
+ return undefined;
411
+ }
412
+ on(eventName, handler) {
413
+ this.emitter.on(eventName, handler);
414
+ return () => {
415
+ this.emitter.removeListener(eventName, handler);
416
+ };
417
+ }
418
+ async emit(eventName, data) {
419
+ //emit these events on next tick, otherwise they will be processed immediately which could cause issues
420
+ await util_1.default.sleep(0);
421
+ this.emitter.emit(eventName, data);
422
+ //emit the 'all' event
423
+ this.emitter.emit('all', eventName, data);
424
+ }
425
+ dispose() {
426
+ var _a, _b, _c, _d;
427
+ for (let disposable of (_a = this.disposables) !== null && _a !== void 0 ? _a : []) {
428
+ (_b = disposable === null || disposable === void 0 ? void 0 : disposable.dispose) === null || _b === void 0 ? void 0 : _b.call(disposable);
429
+ }
430
+ this.disposables = [];
431
+ (_c = this.emitter) === null || _c === void 0 ? void 0 : _c.removeAllListeners();
432
+ if (((_d = this.activationDeferred) === null || _d === void 0 ? void 0 : _d.isCompleted) === false) {
433
+ this.activationDeferred.reject(new Error('Project was disposed, activation has been cancelled'));
434
+ }
435
+ }
436
+ }
437
+ exports.Project = Project;
438
+ //# sourceMappingURL=Project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Project.js","sourceRoot":"","sources":["../../src/lsp/Project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};