brighterscript 0.72.5 → 0.73.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.
- package/dist/DiagnosticFilterer.js +10 -3
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +68 -1
- package/dist/DiagnosticMessages.js +60 -1
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +14 -2
- package/dist/LanguageServer.js +50 -5
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.js +2 -2
- package/dist/Logger.js.map +1 -1
- package/dist/Program.d.ts +87 -0
- package/dist/Program.js +197 -0
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/RokuConstants.d.ts +88 -0
- package/dist/RokuConstants.js +58 -0
- package/dist/RokuConstants.js.map +1 -0
- package/dist/Stopwatch.js +2 -2
- package/dist/Stopwatch.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +27 -6
- package/dist/bscPlugin/validation/BrsFileValidator.js +68 -10
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ProgramValidator.d.ts +10 -0
- package/dist/bscPlugin/validation/ProgramValidator.js +54 -0
- package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -1
- package/dist/bscPlugin/validation/XmlFileValidator.d.ts +7 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +19 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
- package/dist/files/BrsFile.js +1 -2
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/XmlFile.d.ts +45 -0
- package/dist/files/XmlFile.js +257 -2
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/formatUtils.d.ts +20 -0
- package/dist/formatUtils.js +38 -0
- package/dist/formatUtils.js.map +1 -0
- package/dist/globalCallables.d.ts +1 -1
- package/dist/globalCallables.js +4 -1
- package/dist/globalCallables.js.map +1 -1
- package/dist/interfaces.d.ts +11 -0
- package/dist/lexer/Lexer.js +4 -1
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lsp/ActionQueue.js +1 -2
- package/dist/lsp/ActionQueue.js.map +1 -1
- package/dist/lsp/ProjectManager.d.ts +5 -0
- package/dist/lsp/ProjectManager.js.map +1 -1
- package/dist/lsp/worker/MessageHandler.d.ts +1 -0
- package/dist/lsp/worker/MessageHandler.js +9 -0
- package/dist/lsp/worker/MessageHandler.js.map +1 -1
- package/dist/lsp/worker/WorkerPool.d.ts +38 -17
- package/dist/lsp/worker/WorkerPool.js +87 -39
- package/dist/lsp/worker/WorkerPool.js.map +1 -1
- package/dist/lsp/worker/WorkerThreadProject.d.ts +14 -1
- package/dist/lsp/worker/WorkerThreadProject.js +39 -9
- package/dist/lsp/worker/WorkerThreadProject.js.map +1 -1
- package/dist/lsp/worker/WorkerThreadProjectRunner.js +6 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -1
- package/dist/lsp/worker/run.js +20 -3
- package/dist/lsp/worker/run.js.map +1 -1
- package/dist/parser/Expression.js +2 -3
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.js +4 -4
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/SGParser.d.ts +6 -0
- package/dist/parser/SGParser.js +24 -16
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +18 -8
- package/dist/parser/SGTypes.js +42 -15
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +16 -0
- package/dist/preprocessor/Manifest.js +21 -5
- package/dist/preprocessor/Manifest.js.map +1 -1
- package/dist/roku-types/index.d.ts +4 -0
- package/dist/util.d.ts +16 -0
- package/dist/util.js +103 -1
- package/dist/util.js.map +1 -1
- package/package.json +8 -18
|
@@ -1,77 +1,125 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkerPool = void 0;
|
|
4
|
+
const worker_threads_1 = require("worker_threads");
|
|
4
5
|
const logging_1 = require("../../logging");
|
|
6
|
+
const os = require("os");
|
|
5
7
|
class WorkerPool {
|
|
6
8
|
constructor(factory) {
|
|
7
9
|
this.factory = factory;
|
|
8
10
|
this.logger = (0, logging_1.createLogger)();
|
|
9
11
|
/**
|
|
10
|
-
*
|
|
12
|
+
* The maximum number of worker threads (i.e. separate V8 isolates) this pool will create.
|
|
13
|
+
* Once this limit is reached, additional projects are multiplexed onto existing workers
|
|
14
|
+
* (each project still gets its own dedicated MessagePort) instead of spawning new threads.
|
|
11
15
|
*/
|
|
12
|
-
this.
|
|
16
|
+
this.maxWorkers = Math.max(1, os.cpus().length);
|
|
13
17
|
/**
|
|
14
|
-
*
|
|
18
|
+
* Every worker thread currently in the pool, along with how many projects are attached to it
|
|
15
19
|
*/
|
|
16
|
-
this.
|
|
20
|
+
this.workers = [];
|
|
17
21
|
}
|
|
18
22
|
/**
|
|
19
|
-
*
|
|
20
|
-
* @param count the number of total free workers that should exist when this function exits
|
|
23
|
+
* Create a new worker and add it to the pool
|
|
21
24
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this.
|
|
25
|
+
createWorker() {
|
|
26
|
+
const entry = {
|
|
27
|
+
worker: this.factory(),
|
|
28
|
+
projectCount: 0
|
|
29
|
+
};
|
|
30
|
+
this.workers.push(entry);
|
|
31
|
+
//stop tracking a worker once it unexpectedly exits, so it can't be reused and doesn't consume a maxWorkers slot forever
|
|
32
|
+
entry.worker.once('exit', () => this.removeWorker(entry.worker));
|
|
33
|
+
return entry;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Stop tracking a worker in this pool. Does NOT terminate the worker (it's assumed to already be gone,
|
|
37
|
+
* e.g. because it exited/crashed). Safe to call even if the worker is already untracked (e.g. because
|
|
38
|
+
* `releaseProject()` already removed it as part of an intentional shutdown).
|
|
39
|
+
*/
|
|
40
|
+
removeWorker(worker) {
|
|
41
|
+
const index = this.workers.findIndex(x => x.worker === worker);
|
|
42
|
+
if (index > -1) {
|
|
43
|
+
this.workers.splice(index, 1);
|
|
25
44
|
}
|
|
26
45
|
}
|
|
27
46
|
/**
|
|
28
|
-
*
|
|
47
|
+
* Find the worker entry with the fewest attached projects
|
|
29
48
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
this.allWorkers.push(worker);
|
|
33
|
-
return worker;
|
|
49
|
+
getLeastLoadedEntry() {
|
|
50
|
+
return this.workers.reduce((least, current) => (current.projectCount < least.projectCount ? current : least), this.workers[0]);
|
|
34
51
|
}
|
|
35
52
|
/**
|
|
36
|
-
*
|
|
37
|
-
* @
|
|
53
|
+
* Ensure that there are at least `count` workers created in the pool
|
|
54
|
+
* @param count the minimum number of workers that should exist when this function exits
|
|
38
55
|
*/
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
56
|
+
preload(count) {
|
|
57
|
+
while (this.workers.length < Math.min(count, this.maxWorkers)) {
|
|
58
|
+
this.createWorker();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Assign a new project to a worker thread. Prefers reusing an existing idle (zero-project) worker
|
|
63
|
+
* (e.g. one created via `preload()`). If none is available and the pool hasn't yet reached `maxWorkers`,
|
|
64
|
+
* a new worker is created for this project. Otherwise, the project is attached to the least-loaded
|
|
65
|
+
* existing worker via its own dedicated `MessagePort`, so multiple projects can share a single worker
|
|
66
|
+
* thread/isolate.
|
|
67
|
+
* @returns the worker thread hosting this project, and the MessagePort dedicated to it
|
|
68
|
+
*/
|
|
69
|
+
assignProject() {
|
|
70
|
+
let entry = this.workers.find(x => x.projectCount === 0);
|
|
71
|
+
if (!entry) {
|
|
72
|
+
//the `=== 0` check guards against a nonsensical maxWorkers (0, negative, NaN) stranding the pool at zero workers
|
|
73
|
+
if (this.workers.length === 0 || this.workers.length < this.maxWorkers) {
|
|
74
|
+
this.logger.log('Creating new worker thread');
|
|
75
|
+
entry = this.createWorker();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.logger.log('Reusing existing worker thread');
|
|
79
|
+
entry = this.getLeastLoadedEntry();
|
|
80
|
+
}
|
|
44
81
|
}
|
|
45
82
|
else {
|
|
46
|
-
|
|
47
|
-
this.logger.log('Reusing existing worker thread');
|
|
48
|
-
return this.freeWorkers.pop();
|
|
83
|
+
this.logger.log('Reusing preloaded/idle worker thread');
|
|
49
84
|
}
|
|
85
|
+
entry.projectCount++;
|
|
86
|
+
const { port1, port2 } = new worker_threads_1.MessageChannel();
|
|
87
|
+
entry.worker.postMessage({ type: 'attachProject', port: port2 }, [port2]);
|
|
88
|
+
return { worker: entry.worker, port: port1 };
|
|
50
89
|
}
|
|
51
90
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
91
|
+
* Release a project from its worker. If that worker has no more attached projects, it is
|
|
92
|
+
* terminated and removed from the pool so its memory can be reclaimed.
|
|
93
|
+
* @param worker the worker the project was assigned to (from `assignProject()`)
|
|
54
94
|
*/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (
|
|
58
|
-
|
|
95
|
+
releaseProject(worker) {
|
|
96
|
+
const index = this.workers.findIndex(x => x.worker === worker);
|
|
97
|
+
if (index === -1) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const entry = this.workers[index];
|
|
101
|
+
entry.projectCount--;
|
|
102
|
+
if (entry.projectCount <= 0) {
|
|
103
|
+
this.workers.splice(index, 1);
|
|
104
|
+
this.terminateWorker(worker);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
terminateWorker(worker) {
|
|
108
|
+
try {
|
|
109
|
+
Promise.resolve(worker.terminate()).catch(e => console.error(e));
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
console.error(e);
|
|
59
113
|
}
|
|
60
114
|
}
|
|
61
115
|
/**
|
|
62
116
|
* Shut down all active worker pools
|
|
63
117
|
*/
|
|
64
118
|
dispose() {
|
|
65
|
-
for (const
|
|
66
|
-
|
|
67
|
-
Promise.resolve(worker.terminate()).catch(e => console.error(e));
|
|
68
|
-
}
|
|
69
|
-
catch (e) {
|
|
70
|
-
console.error(e);
|
|
71
|
-
}
|
|
119
|
+
for (const entry of this.workers) {
|
|
120
|
+
this.terminateWorker(entry.worker);
|
|
72
121
|
}
|
|
73
|
-
this.
|
|
74
|
-
this.freeWorkers = [];
|
|
122
|
+
this.workers = [];
|
|
75
123
|
}
|
|
76
124
|
}
|
|
77
125
|
exports.WorkerPool = WorkerPool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerPool.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerPool.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"WorkerPool.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,9 +53,22 @@ export declare class WorkerThreadProject implements LspProject {
|
|
|
53
53
|
*/
|
|
54
54
|
manifestSrcPath?: string;
|
|
55
55
|
/**
|
|
56
|
-
* The worker thread where the actual project will execute
|
|
56
|
+
* The worker thread where the actual project will execute. May be shared with other projects.
|
|
57
57
|
*/
|
|
58
58
|
private worker;
|
|
59
|
+
/**
|
|
60
|
+
* This project's dedicated MessagePort on `worker`, used for all request/response/update traffic
|
|
61
|
+
*/
|
|
62
|
+
private port;
|
|
63
|
+
/**
|
|
64
|
+
* True once `dispose()` has run. Used to distinguish an intentional worker shutdown from an unexpected crash.
|
|
65
|
+
*/
|
|
66
|
+
private isDisposed;
|
|
67
|
+
/**
|
|
68
|
+
* Called if this project's worker thread exits. If we didn't cause that ourselves via `dispose()`,
|
|
69
|
+
* treat it as a critical failure so the user finds out instead of every request just hanging forever.
|
|
70
|
+
*/
|
|
71
|
+
private handleWorkerExit;
|
|
59
72
|
/**
|
|
60
73
|
* Path to the project. For directory-only projects, this is the path to the dir. For bsconfig.json projects, this is the path to the config.
|
|
61
74
|
*/
|
|
@@ -38,6 +38,27 @@ class WorkerThreadProject {
|
|
|
38
38
|
var _a;
|
|
39
39
|
this.isStandaloneProject = false;
|
|
40
40
|
this.activationDeferred = new deferred_1.Deferred();
|
|
41
|
+
/**
|
|
42
|
+
* True once `dispose()` has run. Used to distinguish an intentional worker shutdown from an unexpected crash.
|
|
43
|
+
*/
|
|
44
|
+
this.isDisposed = false;
|
|
45
|
+
/**
|
|
46
|
+
* Called if this project's worker thread exits. If we didn't cause that ourselves via `dispose()`,
|
|
47
|
+
* treat it as a critical failure so the user finds out instead of every request just hanging forever.
|
|
48
|
+
*/
|
|
49
|
+
this.handleWorkerExit = (code) => {
|
|
50
|
+
var _a;
|
|
51
|
+
if (this.isDisposed) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.logger.error(`Worker thread for project #${this.projectNumber} exited unexpectedly with code ${code}`);
|
|
55
|
+
//emit() is async; this handler can't be, so void it
|
|
56
|
+
void this.emit('critical-failure', {
|
|
57
|
+
message: `The BrighterScript language server's worker thread crashed unexpectedly (exit code ${code}). This project (and any others sharing its worker thread) will stop responding until the language server is reloaded - there is currently no automatic recovery for a crashed worker thread.`
|
|
58
|
+
});
|
|
59
|
+
//reject any in-flight requests instead of leaving callers hanging forever on a worker that's gone
|
|
60
|
+
(_a = this.messageHandler) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
61
|
+
};
|
|
41
62
|
this.emitter = new EventEmitter();
|
|
42
63
|
this.disposables = [];
|
|
43
64
|
this.logger = (_a = options === null || options === void 0 ? void 0 : options.logger) !== null && _a !== void 0 ? _a : (0, logging_1.createLogger)();
|
|
@@ -50,11 +71,14 @@ class WorkerThreadProject {
|
|
|
50
71
|
this.projectKey = options.projectKey ? util_1.default.standardizePath(options.projectKey) : (_a = options.bsconfigPath) !== null && _a !== void 0 ? _a : options.projectDir;
|
|
51
72
|
this.workspaceFolder = options.workspaceFolder ? util_1.default.standardizePath(options.workspaceFolder) : options.workspaceFolder;
|
|
52
73
|
this.projectNumber = options.projectNumber;
|
|
53
|
-
//
|
|
54
|
-
|
|
74
|
+
// get a dedicated MessagePort on a (possibly shared) worker thread
|
|
75
|
+
const assignment = exports.workerPool.assignProject();
|
|
76
|
+
this.worker = assignment.worker;
|
|
77
|
+
this.port = assignment.port;
|
|
78
|
+
this.worker.on('exit', this.handleWorkerExit);
|
|
55
79
|
this.messageHandler = new MessageHandler_1.MessageHandler({
|
|
56
80
|
name: 'MainThread',
|
|
57
|
-
port: this.
|
|
81
|
+
port: this.port,
|
|
58
82
|
onRequest: this.processRequest.bind(this),
|
|
59
83
|
onUpdate: this.processUpdate.bind(this)
|
|
60
84
|
});
|
|
@@ -192,16 +216,22 @@ class WorkerThreadProject {
|
|
|
192
216
|
this.emitter.emit('all', eventName, data);
|
|
193
217
|
}
|
|
194
218
|
dispose() {
|
|
195
|
-
var _a, _b, _c;
|
|
196
|
-
|
|
197
|
-
|
|
219
|
+
var _a, _b, _c, _d, _e;
|
|
220
|
+
if (this.isDisposed) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
this.isDisposed = true;
|
|
224
|
+
(_a = this.worker) === null || _a === void 0 ? void 0 : _a.off('exit', this.handleWorkerExit);
|
|
225
|
+
for (let disposable of (_b = this.disposables) !== null && _b !== void 0 ? _b : []) {
|
|
226
|
+
(_c = disposable === null || disposable === void 0 ? void 0 : disposable.dispose) === null || _c === void 0 ? void 0 : _c.call(disposable);
|
|
198
227
|
}
|
|
199
228
|
this.disposables = [];
|
|
200
|
-
//
|
|
229
|
+
//close our dedicated port and release our slot on the worker (which terminates the worker if it's now empty)
|
|
230
|
+
(_d = this.port) === null || _d === void 0 ? void 0 : _d.close();
|
|
201
231
|
if (this.worker) {
|
|
202
|
-
exports.workerPool.
|
|
232
|
+
exports.workerPool.releaseProject(this.worker);
|
|
203
233
|
}
|
|
204
|
-
(
|
|
234
|
+
(_e = this.emitter) === null || _e === void 0 ? void 0 : _e.removeAllListeners();
|
|
205
235
|
}
|
|
206
236
|
}
|
|
207
237
|
exports.WorkerThreadProject = WorkerThreadProject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerThreadProject.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerThreadProject.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAC9C,mDAAwC;
|
|
1
|
+
{"version":3,"file":"WorkerThreadProject.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerThreadProject.ts"],"names":[],"mappings":";;;AAAA,8CAA8C;AAC9C,mDAAwC;AAGxC,qDAAkD;AAClD,qCAA8B;AAG9B,6CAA0C;AAG1C,6CAA0C;AAI1C,2CAA6C;AAC7C,oCAAoC;AACpC,6BAA6B;AAC7B,qCAAkD;AAGrC,QAAA,UAAU,GAAG,IAAI,uBAAU,CAAC,GAAG,EAAE;;IAC1C,oFAAoF;IACpF,MAAM,aAAa,GAAG,IAAA,sBAAC,EAAA,GAAG,SAAS,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;IAErE,yCAAyC;IACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,0CAA0C;IAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;QAC9B,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;KAClD;IAED,4EAA4E;IAC5E,sEAAsE;IACtE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,KAAI,MAAA,OAAO,CAAC,GAAG,CAAC,YAAY,0CAAE,QAAQ,CAAC,WAAW,CAAC,CAAA,CAAC;IAEjI,IAAI,WAAW,EAAE;QACb,yFAAyF;QACzF,+DAA+D;QAC/D,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KAChC;IAED,OAAO,IAAI,uBAAM,CACb,aAAa,EACb;QACI,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACvD,CACJ,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,MAAa,mBAAmB;IAC5B,YACI,OAEC;;QAmDE,wBAAmB,GAAG,KAAK,CAAC;QAE3B,uBAAkB,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAwD5C;;WAEG;QACK,eAAU,GAAG,KAAK,CAAC;QAE3B;;;WAGG;QACK,qBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE;;YACxC,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,OAAO;aACV;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,IAAI,CAAC,aAAa,kCAAkC,IAAI,EAAE,CAAC,CAAC;YAC5G,oDAAoD;YACpD,KAAK,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC/B,OAAO,EAAE,sFAAsF,IAAI,+LAA+L;aACrS,CAAC,CAAC;YACH,kGAAkG;YAClG,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,EAAE,CAAC;QACnC,CAAC,CAAC;QAyKM,YAAO,GAAG,IAAI,YAAY,EAAE,CAAC;QAE9B,gBAAW,GAA8B,EAAE,CAAC;QA1S/C,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,IAAA,sBAAY,GAAE,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,OAAsB;;QACxC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,cAAI,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QAC7G,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,cAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACrG,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,cAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAA,OAAO,CAAC,YAAY,mCAAI,OAAO,CAAC,UAAU,CAAC;QAC7H,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,cAAI,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;QACzH,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAE3C,mEAAmE;QACnE,MAAM,UAAU,GAAG,kBAAU,CAAC,aAAa,EAAE,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAa;YACjD,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE3C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAmB,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtD,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;QAE7D,iFAAiF;QACjF,IAAI;YACA,IAAI,CAAC,oBAAoB,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SACtF;QAAC,WAAM,GAAG;QAEX,yFAAyF;QACzF,oHAAoH;QACpH,IAAI;YACA,IAAI,CAAC,oBAAoB,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SACzF;QAAC,WAAM,GAAG;QAGX,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,gBAAgB,CAAC,IAAI,CAAC;IACjC,CAAC;IAwGD;;;OAGG;IACI,aAAa;QAChB,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;IAC3C,CAAC;IAGD;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAO,UAAU,CAAC,CAAC;QACzE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,cAAc;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAO,gBAAgB,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,cAAc;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAkB,gBAAgB,CAAC,CAAC;QAC1F,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB,CAAC,eAAiC;QAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAA6B,kBAAkB,EAAE;YACnG,IAAI,EAAE,CAAC,eAAe,CAAC;SAC1B,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,mBAAmB,CAAI,IAAY,EAAE,GAAG,IAAW;QAC7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAI,IAAW,EAAE;YACnE,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,iBAAiB,CAAC,OAA4B;QACvD,OAAO,IAAI,CAAC,mBAAmB,CAAkB,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAA4B;QACnD,OAAO,IAAI,CAAC,mBAAmB,CAAsB,eAAe,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,OAAgD;QAClE,OAAO,IAAI,CAAC,mBAAmB,CAAU,UAAU,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAAgD;QACvE,OAAO,IAAI,CAAC,mBAAmB,CAAa,eAAe,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,OAAgD;QAC1E,OAAO,IAAI,CAAC,mBAAmB,CAAqB,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAA4B;QACvD,OAAO,IAAI,CAAC,mBAAmB,CAAmB,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAoB,oBAAoB,CAAC,CAAC;IAC7E,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAAgD;QACvE,OAAO,IAAI,CAAC,mBAAmB,CAAa,eAAe,EAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,OAAmD;QAC/E,OAAO,IAAI,CAAC,mBAAmB,CAAuB,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACzF,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,OAA0C;QAClE,OAAO,IAAI,CAAC,mBAAmB,CAAe,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAEM,KAAK,CAAC,0BAA0B,CAAC,OAA4B;QAChE,OAAO,IAAI,CAAC,mBAAmB,CAAe,4BAA4B,EAAE,OAAO,CAAC,CAAC;IACzF,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,OAAmD;QAC/E,OAAO,IAAI,CAAC,mBAAmB,CAAmB,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAA0C;QACjE,OAAO,IAAI,CAAC,mBAAmB,CAAc,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,OAAgD;QACxE,OAAO,IAAI,CAAC,mBAAmB,CAAiB,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC/E,CAAC;IAOO,cAAc,CAAC,OAAsB;IAE7C,CAAC;IAEO,aAAa,CAAC,MAAqB;QACvC,gDAAgD;QAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAKM,EAAE,CAAC,SAAiB,EAAE,OAA+C;QACxE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAc,CAAC,CAAC;QAC3C,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,OAAc,CAAC,CAAC;QAC3D,CAAC,CAAC;IACN,CAAC;IAIO,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,IAAK;QACvC,uGAAuG;QACvG,MAAM,cAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnC,sBAAsB;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAKM,OAAO;;QACV,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO;SACV;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEhD,KAAK,IAAI,UAAU,IAAI,MAAA,IAAI,CAAC,WAAW,mCAAI,EAAE,EAAE;YAC3C,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,0DAAI,CAAC;SAC3B;QACD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAEtB,6GAA6G;QAC7G,MAAA,IAAI,CAAC,IAAI,0CAAE,KAAK,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,kBAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1C;QACD,MAAA,IAAI,CAAC,OAAO,0CAAE,kBAAkB,EAAE,CAAC;IACvC,CAAC;CACJ;AArUD,kDAqUC"}
|
|
@@ -37,6 +37,12 @@ class WorkerThreadProjectRunner {
|
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
39
|
this.requestInterceptors.activate = this.onActivate.bind(this);
|
|
40
|
+
//dispose this project's Program when its dedicated port closes, even though the shared worker keeps running
|
|
41
|
+
parentPort.on('close', () => {
|
|
42
|
+
var _a, _b;
|
|
43
|
+
(_a = this.project) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
44
|
+
(_b = this.messageHandler) === null || _b === void 0 ? void 0 : _b.dispose();
|
|
45
|
+
});
|
|
40
46
|
}
|
|
41
47
|
/**
|
|
42
48
|
* Fired anytime we get an `activate` request from the client. This allows us to clean up the previous project and make a new one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerThreadProjectRunner.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerThreadProjectRunner.ts"],"names":[],"mappings":";;;AAAA,2CAAkD;AAElD,wCAAqC;AAErC,qDAAkD;AAGlD;;GAEG;AACH,MAAa,yBAAyB;IAAtC;QACI,sEAAsE;QAC9D,wBAAmB,GAAG,EAAyD,CAAC;
|
|
1
|
+
{"version":3,"file":"WorkerThreadProjectRunner.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerThreadProjectRunner.ts"],"names":[],"mappings":";;;AAAA,2CAAkD;AAElD,wCAAqC;AAErC,qDAAkD;AAGlD;;GAEG;AACH,MAAa,yBAAyB;IAAtC;QACI,sEAAsE;QAC9D,wBAAmB,GAAG,EAAyD,CAAC;IA0D5F,CAAC;IApDU,GAAG,CAAC,UAAuB;QAC9B,8CAA8C;QAC9C,IAAA,2BAAiB,GAAE,CAAC;QAEpB,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC;YACrC,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;;gBACxC,IAAI;oBACA,qEAAqE;oBACrE,MAAA,MAAA,IAAI,CAAC,mBAAmB,EAAC,OAAO,CAAC,IAAI,CAAC,mDAAG,OAAO,CAAC,IAAI,CAAC,CAAC;oBAEvD,wIAAwI;oBACxI,IAAI,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAA,OAAO,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC;oBAC3E,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;oBAElE,uFAAuF;iBAC1F;gBAAC,OAAO,CAAC,EAAE;oBACR,MAAM,KAAK,GAAU,CAAQ,CAAC;oBAC9B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC/D;YACL,CAAC;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAErB,CAAC;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,4GAA4G;QAC5G,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;;YACxB,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;YACxB,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,EAAE,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,UAAU;;QACd,+BAA+B;QAC/B,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,EAAE,CAAC;QAExB,0FAA0F;QAC1F,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;QAE7B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,SAAiB,EAAE,IAAS,EAAE,EAAE;YACpD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE;gBACtC,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA5DD,8DA4DC"}
|
package/dist/lsp/worker/run.js
CHANGED
|
@@ -2,13 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
/**
|
|
4
4
|
* This script is the entry point for worker threads that run LSP Projects.
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
|
+
* A worker thread can host multiple projects at once (see `WorkerPool.assignProject()`): each project
|
|
7
|
+
* gets its own dedicated `MessagePort`, delivered to this worker as an `attachProject` message on
|
|
8
|
+
* `parentPort`. For every such message, we spin up a new `WorkerThreadProjectRunner` bound to that
|
|
9
|
+
* project's port, so each project's request/response traffic stays fully independent even though they
|
|
10
|
+
* share this worker's JS realm (and its module-level caches).
|
|
6
11
|
*/
|
|
7
12
|
const worker_threads_1 = require("worker_threads");
|
|
8
13
|
const WorkerThreadProjectRunner_1 = require("./WorkerThreadProjectRunner");
|
|
9
|
-
const runner = new WorkerThreadProjectRunner_1.WorkerThreadProjectRunner();
|
|
10
14
|
if (!worker_threads_1.parentPort) {
|
|
11
15
|
throw new Error('This script must be run as a worker thread');
|
|
12
16
|
}
|
|
13
|
-
|
|
17
|
+
worker_threads_1.parentPort.on('message', (message) => {
|
|
18
|
+
if ((message === null || message === void 0 ? void 0 : message.type) === 'attachProject') {
|
|
19
|
+
try {
|
|
20
|
+
const runner = new WorkerThreadProjectRunner_1.WorkerThreadProjectRunner();
|
|
21
|
+
runner.run(message.port);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
//don't let one project's setup failure crash this worker thread and take down every other project sharing it
|
|
25
|
+
console.error('Failed to attach project to worker thread', e);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
//tell the main thread this worker has booted and is actually ready to receive `attachProject` messages (see WorkerPool)
|
|
30
|
+
worker_threads_1.parentPort.postMessage({ type: 'ready' });
|
|
14
31
|
//# sourceMappingURL=run.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/lsp/worker/run.ts"],"names":[],"mappings":";;AAAA
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/lsp/worker/run.ts"],"names":[],"mappings":";;AAAA;;;;;;;;GAQG;AACH,mDAA4C;AAE5C,2EAAwE;AAExE,IAAI,CAAC,2BAAU,EAAE;IACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;CACjE;AAED,2BAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAA4C,EAAE,EAAE;IACtE,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,MAAK,eAAe,EAAE;QACnC,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,qDAAyB,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5B;QAAC,OAAO,CAAC,EAAE;YACR,6GAA6G;YAC7G,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;SACjE;KACJ;AACL,CAAC,CAAC,CAAC;AAEH,wHAAwH;AACxH,2BAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC"}
|
|
@@ -4,7 +4,6 @@ exports.TypeCastExpression = exports.RegexLiteralExpression = exports.NullCoales
|
|
|
4
4
|
const TokenKind_1 = require("../lexer/TokenKind");
|
|
5
5
|
const util_1 = require("../util");
|
|
6
6
|
const Parser_1 = require("./Parser");
|
|
7
|
-
const fileUrl = require("file-url");
|
|
8
7
|
const visitors_1 = require("../astUtils/visitors");
|
|
9
8
|
const visitors_2 = require("../astUtils/visitors");
|
|
10
9
|
const reflection_1 = require("../astUtils/reflection");
|
|
@@ -939,7 +938,7 @@ class SourceLiteralExpression extends AstNode_1.Expression {
|
|
|
939
938
|
let text;
|
|
940
939
|
switch (this.token.kind) {
|
|
941
940
|
case TokenKind_1.TokenKind.SourceFilePathLiteral:
|
|
942
|
-
const pathUrl = fileUrl(state.srcPath);
|
|
941
|
+
const pathUrl = util_1.default.fileUrl(state.srcPath);
|
|
943
942
|
text = `"${pathUrl.substring(0, 4)}" + "${pathUrl.substring(4)}"`;
|
|
944
943
|
break;
|
|
945
944
|
case TokenKind_1.TokenKind.SourceLineNumLiteral:
|
|
@@ -964,7 +963,7 @@ class SourceLiteralExpression extends AstNode_1.Expression {
|
|
|
964
963
|
text = `"${rootNamespace}"`;
|
|
965
964
|
break;
|
|
966
965
|
case TokenKind_1.TokenKind.SourceLocationLiteral:
|
|
967
|
-
const locationUrl = fileUrl(state.srcPath);
|
|
966
|
+
const locationUrl = util_1.default.fileUrl(state.srcPath);
|
|
968
967
|
//TODO find first parent that has range, or default to -1
|
|
969
968
|
text = `"${locationUrl.substring(0, 4)}" + "${locationUrl.substring(4)}:${this.getClosestLineNumber()}"`;
|
|
970
969
|
break;
|