@parcel/lsp 2.9.4-nightly.3003 → 2.9.4-nightly.3008
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/lib/LspServer.js +73 -74
- package/lib/LspServer.js.map +1 -1
- package/package.json +4 -4
package/lib/LspServer.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
var $
|
|
2
|
-
var $
|
|
3
|
-
var $
|
|
4
|
-
var $
|
|
5
|
-
var $
|
|
6
|
-
var $
|
|
7
|
-
var $
|
|
8
|
-
var $
|
|
9
|
-
var $
|
|
10
|
-
var $
|
|
1
|
+
var $eMcyD$path = require("path");
|
|
2
|
+
var $eMcyD$fs = require("fs");
|
|
3
|
+
var $eMcyD$os = require("os");
|
|
4
|
+
var $eMcyD$vscodelanguageservernode = require("vscode-languageserver/node");
|
|
5
|
+
var $eMcyD$vscodejsonrpcnode = require("vscode-jsonrpc/node");
|
|
6
|
+
var $eMcyD$assert = require("assert");
|
|
7
|
+
var $eMcyD$url = require("url");
|
|
8
|
+
var $eMcyD$commonpathprefix = require("common-path-prefix");
|
|
9
|
+
var $eMcyD$parcelwatcher = require("@parcel/watcher");
|
|
10
|
+
var $eMcyD$parcellspprotocol = require("@parcel/lsp-protocol");
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
@@ -19,29 +19,29 @@ var $7uaT0$parcellspprotocol = require("@parcel/lsp-protocol");
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
const $
|
|
22
|
+
const $5a69790e53b882fa$var$connection = (0, $eMcyD$vscodelanguageservernode.createConnection)((0, $eMcyD$vscodelanguageservernode.ProposedFeatures).all);
|
|
23
23
|
// Create a simple text document manager.
|
|
24
24
|
// const documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);
|
|
25
|
-
let $
|
|
26
|
-
let $
|
|
25
|
+
let $5a69790e53b882fa$var$hasConfigurationCapability = false;
|
|
26
|
+
let $5a69790e53b882fa$var$hasWorkspaceFolderCapability = false;
|
|
27
27
|
// let hasDiagnosticRelatedInformationCapability = false;
|
|
28
|
-
let $
|
|
29
|
-
$
|
|
28
|
+
let $5a69790e53b882fa$var$hasDiagnosticsRefreshSupport = false;
|
|
29
|
+
$5a69790e53b882fa$var$connection.onInitialize((params)=>{
|
|
30
30
|
var _capabilities_workspace_diagnostics, _capabilities_workspace;
|
|
31
31
|
const capabilities = params.capabilities;
|
|
32
32
|
// Does the client support the `workspace/configuration` request?
|
|
33
33
|
// If not, we fall back using global settings.
|
|
34
|
-
$
|
|
35
|
-
$
|
|
34
|
+
$5a69790e53b882fa$var$hasConfigurationCapability = !!(capabilities.workspace && !!capabilities.workspace.configuration);
|
|
35
|
+
$5a69790e53b882fa$var$hasWorkspaceFolderCapability = !!(capabilities.workspace && !!capabilities.workspace.workspaceFolders);
|
|
36
36
|
// hasDiagnosticRelatedInformationCapability = !!(
|
|
37
37
|
// capabilities.textDocument &&
|
|
38
38
|
// capabilities.textDocument.publishDiagnostics &&
|
|
39
39
|
// capabilities.textDocument.publishDiagnostics.relatedInformation
|
|
40
40
|
// );
|
|
41
|
-
$
|
|
41
|
+
$5a69790e53b882fa$var$hasDiagnosticsRefreshSupport = Boolean((_capabilities_workspace = capabilities.workspace) === null || _capabilities_workspace === void 0 ? void 0 : (_capabilities_workspace_diagnostics = _capabilities_workspace.diagnostics) === null || _capabilities_workspace_diagnostics === void 0 ? void 0 : _capabilities_workspace_diagnostics.refreshSupport);
|
|
42
42
|
const result = {
|
|
43
43
|
capabilities: {
|
|
44
|
-
textDocumentSync: (0, $
|
|
44
|
+
textDocumentSync: (0, $eMcyD$vscodelanguageservernode.TextDocumentSyncKind).Incremental,
|
|
45
45
|
// Tell the client that this server supports code completion.
|
|
46
46
|
diagnosticProvider: {
|
|
47
47
|
workspaceDiagnostics: false,
|
|
@@ -49,32 +49,31 @@ $6897e3d3c327789d$var$connection.onInitialize((params)=>{
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
if ($
|
|
52
|
+
if ($5a69790e53b882fa$var$hasWorkspaceFolderCapability) result.capabilities.workspace = {
|
|
53
53
|
workspaceFolders: {
|
|
54
54
|
supported: true
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
return result;
|
|
58
58
|
});
|
|
59
|
-
$
|
|
60
|
-
if ($
|
|
61
|
-
$
|
|
62
|
-
if ($
|
|
63
|
-
$
|
|
59
|
+
$5a69790e53b882fa$var$connection.onInitialized(()=>{
|
|
60
|
+
if ($5a69790e53b882fa$var$hasConfigurationCapability) // Register for all configuration changes.
|
|
61
|
+
$5a69790e53b882fa$var$connection.client.register((0, $eMcyD$vscodelanguageservernode.DidChangeConfigurationNotification).type, undefined);
|
|
62
|
+
if ($5a69790e53b882fa$var$hasWorkspaceFolderCapability) $5a69790e53b882fa$var$connection.workspace.onDidChangeWorkspaceFolders(()=>{
|
|
63
|
+
$5a69790e53b882fa$var$connection.console.log("Workspace folder change event received.");
|
|
64
64
|
});
|
|
65
65
|
});
|
|
66
66
|
// Proxy
|
|
67
|
-
$
|
|
68
|
-
let client = $
|
|
67
|
+
$5a69790e53b882fa$var$connection.onRequest((0, $eMcyD$parcellspprotocol.RequestImporters), async (params)=>{
|
|
68
|
+
let client = $5a69790e53b882fa$var$findClient(params);
|
|
69
69
|
if (client) {
|
|
70
|
-
let result = await client.connection.sendRequest((0, $
|
|
70
|
+
let result = await client.connection.sendRequest((0, $eMcyD$parcellspprotocol.RequestImporters), params);
|
|
71
71
|
return result;
|
|
72
72
|
}
|
|
73
73
|
return null;
|
|
74
74
|
});
|
|
75
|
-
$
|
|
76
|
-
var
|
|
77
|
-
let client = $6897e3d3c327789d$var$findClient(params.textDocument.uri);
|
|
75
|
+
$5a69790e53b882fa$var$connection.onRequest((0, $eMcyD$vscodelanguageservernode.DocumentDiagnosticRequest).type, async (params)=>{
|
|
76
|
+
let client = $5a69790e53b882fa$var$findClient(params.textDocument.uri);
|
|
78
77
|
let result;
|
|
79
78
|
if (client) {
|
|
80
79
|
// console.log(
|
|
@@ -83,23 +82,23 @@ $6897e3d3c327789d$var$connection.onRequest((0, $7uaT0$vscodelanguageservernode.D
|
|
|
83
82
|
// params.previousResultId === client.lastBuild,
|
|
84
83
|
// );
|
|
85
84
|
if (params.previousResultId === client.lastBuild) return {
|
|
86
|
-
kind: (0, $
|
|
85
|
+
kind: (0, $eMcyD$vscodelanguageservernode.DocumentDiagnosticReportKind).Unchanged,
|
|
87
86
|
resultId: client.lastBuild
|
|
88
87
|
};
|
|
89
|
-
result = await client.connection.sendRequest((0, $
|
|
88
|
+
result = await client.connection.sendRequest((0, $eMcyD$parcellspprotocol.RequestDocumentDiagnostics), params.textDocument.uri);
|
|
90
89
|
if (result) client.uris.add(params.textDocument.uri);
|
|
91
90
|
}
|
|
92
91
|
return {
|
|
93
|
-
kind: (0, $
|
|
94
|
-
resultId:
|
|
92
|
+
kind: (0, $eMcyD$vscodelanguageservernode.DocumentDiagnosticReportKind).Full,
|
|
93
|
+
resultId: client === null || client === void 0 ? void 0 : client.lastBuild,
|
|
95
94
|
items: result !== null && result !== void 0 ? result : []
|
|
96
95
|
};
|
|
97
96
|
});
|
|
98
|
-
$
|
|
99
|
-
class $
|
|
97
|
+
$5a69790e53b882fa$var$connection.listen();
|
|
98
|
+
class $5a69790e53b882fa$var$ProgressReporter {
|
|
100
99
|
begin() {
|
|
101
100
|
this.progressReporterPromise = (async ()=>{
|
|
102
|
-
let reporter = await $
|
|
101
|
+
let reporter = await $5a69790e53b882fa$var$connection.window.createWorkDoneProgress();
|
|
103
102
|
reporter.begin("Parcel");
|
|
104
103
|
return reporter;
|
|
105
104
|
})();
|
|
@@ -109,7 +108,7 @@ class $6897e3d3c327789d$var$ProgressReporter {
|
|
|
109
108
|
}
|
|
110
109
|
async done() {
|
|
111
110
|
if (this.progressReporterPromise == null) this.begin();
|
|
112
|
-
$
|
|
111
|
+
$eMcyD$assert(this.progressReporterPromise != null);
|
|
113
112
|
(await this.progressReporterPromise).done();
|
|
114
113
|
this.progressReporterPromise = null;
|
|
115
114
|
}
|
|
@@ -123,17 +122,17 @@ class $6897e3d3c327789d$var$ProgressReporter {
|
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
|
-
function $
|
|
127
|
-
if ($
|
|
125
|
+
function $5a69790e53b882fa$var$sendDiagnosticsRefresh() {
|
|
126
|
+
if ($5a69790e53b882fa$var$hasDiagnosticsRefreshSupport) $5a69790e53b882fa$var$connection.sendRequest((0, $eMcyD$vscodelanguageservernode.DiagnosticRefreshRequest).type);
|
|
128
127
|
}
|
|
129
|
-
let $
|
|
130
|
-
let $
|
|
131
|
-
function $
|
|
132
|
-
let filepath = $
|
|
128
|
+
let $5a69790e53b882fa$var$progressReporter = new $5a69790e53b882fa$var$ProgressReporter();
|
|
129
|
+
let $5a69790e53b882fa$var$clients = new Map();
|
|
130
|
+
function $5a69790e53b882fa$var$findClient(document) {
|
|
131
|
+
let filepath = $eMcyD$url.fileURLToPath(document);
|
|
133
132
|
let longestPrefix = 0;
|
|
134
133
|
let bestClient;
|
|
135
|
-
for (let [, client] of $
|
|
136
|
-
let prefix = $
|
|
134
|
+
for (let [, client] of $5a69790e53b882fa$var$clients){
|
|
135
|
+
let prefix = $eMcyD$commonpathprefix([
|
|
137
136
|
client.projectRoot,
|
|
138
137
|
filepath
|
|
139
138
|
]).length;
|
|
@@ -144,11 +143,11 @@ function $6897e3d3c327789d$var$findClient(document) {
|
|
|
144
143
|
}
|
|
145
144
|
return bestClient;
|
|
146
145
|
}
|
|
147
|
-
function $
|
|
148
|
-
let metafile = JSON.parse($
|
|
146
|
+
function $5a69790e53b882fa$var$createClient(metafilepath) {
|
|
147
|
+
let metafile = JSON.parse($eMcyD$fs.readFileSync(metafilepath, "utf8"));
|
|
149
148
|
let socketfilepath = metafilepath.slice(0, -5);
|
|
150
|
-
let [reader, writer] = (0, $
|
|
151
|
-
let client = (0, $
|
|
149
|
+
let [reader, writer] = (0, $eMcyD$vscodejsonrpcnode.createServerPipeTransport)(socketfilepath);
|
|
150
|
+
let client = (0, $eMcyD$vscodejsonrpcnode.createMessageConnection)(reader, writer);
|
|
152
151
|
client.listen();
|
|
153
152
|
let uris = new Set();
|
|
154
153
|
let result = {
|
|
@@ -157,66 +156,66 @@ function $6897e3d3c327789d$var$createClient(metafilepath) {
|
|
|
157
156
|
projectRoot: metafile.projectRoot,
|
|
158
157
|
lastBuild: "0"
|
|
159
158
|
};
|
|
160
|
-
client.onNotification((0, $
|
|
159
|
+
client.onNotification((0, $eMcyD$parcellspprotocol.NotificationBuildStatus), (state, message)=>{
|
|
161
160
|
// console.log('got NotificationBuildStatus', state, message);
|
|
162
161
|
if (state === "start") {
|
|
163
|
-
$
|
|
164
|
-
for (let uri of uris)$
|
|
162
|
+
$5a69790e53b882fa$var$progressReporter.begin();
|
|
163
|
+
for (let uri of uris)$5a69790e53b882fa$var$connection.sendDiagnostics({
|
|
165
164
|
uri: uri,
|
|
166
165
|
diagnostics: []
|
|
167
166
|
});
|
|
168
|
-
} else if (state === "progress" && message != null) $
|
|
167
|
+
} else if (state === "progress" && message != null) $5a69790e53b882fa$var$progressReporter.report(message);
|
|
169
168
|
else if (state === "end") {
|
|
170
169
|
result.lastBuild = String(Date.now());
|
|
171
|
-
$
|
|
172
|
-
$
|
|
173
|
-
$
|
|
170
|
+
$5a69790e53b882fa$var$sendDiagnosticsRefresh();
|
|
171
|
+
$5a69790e53b882fa$var$progressReporter.done();
|
|
172
|
+
$5a69790e53b882fa$var$connection.sendNotification((0, $eMcyD$parcellspprotocol.NotificationBuild));
|
|
174
173
|
}
|
|
175
174
|
});
|
|
176
|
-
client.onNotification((0, $
|
|
175
|
+
client.onNotification((0, $eMcyD$parcellspprotocol.NotificationWorkspaceDiagnostics), (diagnostics)=>{
|
|
177
176
|
// console.log('got NotificationWorkspaceDiagnostics', diagnostics);
|
|
178
177
|
for (let d of diagnostics){
|
|
179
178
|
uris.add(d.uri);
|
|
180
|
-
$
|
|
179
|
+
$5a69790e53b882fa$var$connection.sendDiagnostics(d);
|
|
181
180
|
}
|
|
182
181
|
});
|
|
183
182
|
client.onClose(()=>{
|
|
184
|
-
$
|
|
185
|
-
$
|
|
183
|
+
$5a69790e53b882fa$var$clients.delete(metafile);
|
|
184
|
+
$5a69790e53b882fa$var$sendDiagnosticsRefresh();
|
|
186
185
|
return Promise.all([
|
|
187
186
|
...uris
|
|
188
|
-
].map((uri)=>$
|
|
187
|
+
].map((uri)=>$5a69790e53b882fa$var$connection.sendDiagnostics({
|
|
189
188
|
uri: uri,
|
|
190
189
|
diagnostics: []
|
|
191
190
|
})));
|
|
192
191
|
});
|
|
193
|
-
$
|
|
194
|
-
$
|
|
192
|
+
$5a69790e53b882fa$var$sendDiagnosticsRefresh();
|
|
193
|
+
$5a69790e53b882fa$var$clients.set(metafile, result);
|
|
195
194
|
}
|
|
196
195
|
// Take realpath because to have consistent cache keys on macOS (/var -> /private/var)
|
|
197
|
-
const $
|
|
198
|
-
$
|
|
196
|
+
const $5a69790e53b882fa$var$BASEDIR = $eMcyD$path.join($eMcyD$fs.realpathSync($eMcyD$os.tmpdir()), "parcel-lsp");
|
|
197
|
+
$eMcyD$fs.mkdirSync($5a69790e53b882fa$var$BASEDIR, {
|
|
199
198
|
recursive: true
|
|
200
199
|
});
|
|
201
200
|
// Search for currently running Parcel processes in the parcel-lsp dir.
|
|
202
201
|
// Create an IPC client connection for each running process.
|
|
203
|
-
for (let filename of $
|
|
202
|
+
for (let filename of $eMcyD$fs.readdirSync($5a69790e53b882fa$var$BASEDIR)){
|
|
204
203
|
if (!filename.endsWith(".json")) continue;
|
|
205
|
-
let filepath = $
|
|
206
|
-
$
|
|
204
|
+
let filepath = $eMcyD$path.join($5a69790e53b882fa$var$BASEDIR, filename);
|
|
205
|
+
$5a69790e53b882fa$var$createClient(filepath);
|
|
207
206
|
// console.log('connected initial', filepath);
|
|
208
207
|
}
|
|
209
208
|
// Watch for new Parcel processes in the parcel-lsp dir, and disconnect the
|
|
210
209
|
// client for each corresponding connection when a Parcel process ends
|
|
211
|
-
$
|
|
210
|
+
$eMcyD$parcelwatcher.subscribe($5a69790e53b882fa$var$BASEDIR, async (err, events)=>{
|
|
212
211
|
if (err) throw err;
|
|
213
212
|
for (let event of events){
|
|
214
|
-
if (event.type === "create" && event.path.endsWith(".json")) $
|
|
213
|
+
if (event.type === "create" && event.path.endsWith(".json")) $5a69790e53b882fa$var$createClient(event.path);
|
|
215
214
|
else if (event.type === "delete" && event.path.endsWith(".json")) {
|
|
216
|
-
let existing = $
|
|
215
|
+
let existing = $5a69790e53b882fa$var$clients.get(event.path);
|
|
217
216
|
// console.log('existing', event.path, existing);
|
|
218
217
|
if (existing) {
|
|
219
|
-
$
|
|
218
|
+
$5a69790e53b882fa$var$clients.delete(event.path);
|
|
220
219
|
existing.connection.end();
|
|
221
220
|
// console.log('disconnected watched', event.path);
|
|
222
221
|
}
|
package/lib/LspServer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/utils/parcel-lsp/src/LspServer.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport {\n createConnection,\n DiagnosticRefreshRequest,\n DidChangeConfigurationNotification,\n DocumentDiagnosticParams,\n DocumentDiagnosticReport,\n DocumentDiagnosticReportKind,\n DocumentDiagnosticRequest,\n DocumentUri,\n InitializeParams,\n InitializeResult,\n ProposedFeatures,\n TextDocumentSyncKind,\n WorkDoneProgressServerReporter,\n} from 'vscode-languageserver/node';\n\nimport {\n createServerPipeTransport,\n createMessageConnection,\n MessageConnection,\n} from 'vscode-jsonrpc/node';\nimport * as invariant from 'assert';\nimport * as url from 'url';\nimport commonPathPrefix = require('common-path-prefix');\n\n// import {TextDocument} from 'vscode-languageserver-textdocument';\nimport * as watcher from '@parcel/watcher';\nimport {\n NotificationBuild,\n NotificationBuildStatus,\n NotificationWorkspaceDiagnostics,\n RequestDocumentDiagnostics,\n RequestImporters,\n} from '@parcel/lsp-protocol';\n\nconst connection = createConnection(ProposedFeatures.all);\n\n// Create a simple text document manager.\n// const documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);\n\nlet hasConfigurationCapability = false;\nlet hasWorkspaceFolderCapability = false;\n// let hasDiagnosticRelatedInformationCapability = false;\nlet hasDiagnosticsRefreshSupport = false;\n\nconnection.onInitialize((params: InitializeParams) => {\n const capabilities = params.capabilities;\n\n // Does the client support the `workspace/configuration` request?\n // If not, we fall back using global settings.\n hasConfigurationCapability = !!(\n capabilities.workspace && !!capabilities.workspace.configuration\n );\n hasWorkspaceFolderCapability = !!(\n capabilities.workspace && !!capabilities.workspace.workspaceFolders\n );\n // hasDiagnosticRelatedInformationCapability = !!(\n // capabilities.textDocument &&\n // capabilities.textDocument.publishDiagnostics &&\n // capabilities.textDocument.publishDiagnostics.relatedInformation\n // );\n hasDiagnosticsRefreshSupport = Boolean(\n capabilities.workspace?.diagnostics?.refreshSupport,\n );\n\n const result: InitializeResult = {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n // Tell the client that this server supports code completion.\n diagnosticProvider: {\n workspaceDiagnostics: false,\n interFileDependencies: true,\n },\n },\n };\n\n if (hasWorkspaceFolderCapability) {\n result.capabilities.workspace = {\n workspaceFolders: {\n supported: true,\n },\n };\n }\n return result;\n});\n\nconnection.onInitialized(() => {\n if (hasConfigurationCapability) {\n // Register for all configuration changes.\n connection.client.register(\n DidChangeConfigurationNotification.type,\n undefined,\n );\n }\n if (hasWorkspaceFolderCapability) {\n connection.workspace.onDidChangeWorkspaceFolders(_event => {\n connection.console.log('Workspace folder change event received.');\n });\n }\n});\n\n// Proxy\nconnection.onRequest(RequestImporters, async params => {\n let client = findClient(params);\n if (client) {\n let result = await client.connection.sendRequest(RequestImporters, params);\n return result;\n }\n return null;\n});\n\nconnection.onRequest(\n DocumentDiagnosticRequest.type,\n async (\n params: DocumentDiagnosticParams,\n ): Promise<DocumentDiagnosticReport> => {\n let client = findClient(params.textDocument.uri);\n let result;\n if (client) {\n // console.log(\n // 'DocumentDiagnosticRequest',\n // params.textDocument.uri,\n // params.previousResultId === client.lastBuild,\n // );\n\n if (params.previousResultId === client.lastBuild) {\n return {\n kind: DocumentDiagnosticReportKind.Unchanged,\n resultId: client.lastBuild,\n };\n }\n\n result = await client.connection.sendRequest(\n RequestDocumentDiagnostics,\n params.textDocument.uri,\n );\n\n if (result) {\n client.uris.add(params.textDocument.uri);\n }\n }\n\n return {\n kind: DocumentDiagnosticReportKind.Full,\n resultId: client?.lastBuild,\n items: result ?? [],\n };\n },\n);\n\nconnection.listen();\n\nclass ProgressReporter {\n progressReporterPromise?: Promise<WorkDoneProgressServerReporter> | null;\n lastMessage?: string;\n begin() {\n this.progressReporterPromise = (async () => {\n let reporter = await connection.window.createWorkDoneProgress();\n reporter.begin('Parcel');\n return reporter;\n })();\n this.progressReporterPromise.then(reporter => {\n if (this.lastMessage != null) {\n reporter.report(this.lastMessage);\n }\n });\n }\n async done() {\n if (this.progressReporterPromise == null) {\n this.begin();\n }\n invariant(this.progressReporterPromise != null);\n (await this.progressReporterPromise).done();\n this.progressReporterPromise = null;\n }\n async report(message: string) {\n if (this.progressReporterPromise == null) {\n this.lastMessage = message;\n this.begin();\n } else {\n let r = await this.progressReporterPromise;\n r.report(message);\n }\n }\n}\n\nfunction sendDiagnosticsRefresh() {\n if (hasDiagnosticsRefreshSupport) {\n connection.sendRequest(DiagnosticRefreshRequest.type);\n }\n}\n\ntype Client = {\n connection: MessageConnection;\n projectRoot: string;\n uris: Set<DocumentUri>;\n lastBuild: string;\n};\n\nlet progressReporter = new ProgressReporter();\nlet clients: Map<string, Client> = new Map();\n\nfunction findClient(document: DocumentUri): Client | undefined {\n let filepath = url.fileURLToPath(document);\n\n let longestPrefix = 0;\n let bestClient;\n for (let [, client] of clients) {\n let prefix = commonPathPrefix([client.projectRoot, filepath]).length;\n if (longestPrefix < prefix) {\n longestPrefix = prefix;\n bestClient = client;\n } else if (longestPrefix === prefix) {\n console.warn('Ambiguous client for ' + filepath);\n }\n }\n return bestClient;\n}\n\nfunction createClient(metafilepath: string) {\n let metafile = JSON.parse(fs.readFileSync(metafilepath, 'utf8'));\n\n let socketfilepath = metafilepath.slice(0, -5);\n let [reader, writer] = createServerPipeTransport(socketfilepath);\n let client = createMessageConnection(reader, writer);\n client.listen();\n\n let uris = new Set<DocumentUri>();\n\n let result = {\n connection: client,\n uris,\n projectRoot: metafile.projectRoot,\n lastBuild: '0',\n };\n\n client.onNotification(NotificationBuildStatus, (state, message) => {\n // console.log('got NotificationBuildStatus', state, message);\n if (state === 'start') {\n progressReporter.begin();\n for (let uri of uris) {\n connection.sendDiagnostics({uri, diagnostics: []});\n }\n } else if (state === 'progress' && message != null) {\n progressReporter.report(message);\n } else if (state === 'end') {\n result.lastBuild = String(Date.now());\n sendDiagnosticsRefresh();\n progressReporter.done();\n connection.sendNotification(NotificationBuild);\n }\n });\n\n client.onNotification(NotificationWorkspaceDiagnostics, diagnostics => {\n // console.log('got NotificationWorkspaceDiagnostics', diagnostics);\n for (let d of diagnostics) {\n uris.add(d.uri);\n connection.sendDiagnostics(d);\n }\n });\n\n client.onClose(() => {\n clients.delete(metafile);\n sendDiagnosticsRefresh();\n return Promise.all(\n [...uris].map(uri => connection.sendDiagnostics({uri, diagnostics: []})),\n );\n });\n\n sendDiagnosticsRefresh();\n clients.set(metafile, result);\n}\n\n// Take realpath because to have consistent cache keys on macOS (/var -> /private/var)\nconst BASEDIR = path.join(fs.realpathSync(os.tmpdir()), 'parcel-lsp');\nfs.mkdirSync(BASEDIR, {recursive: true});\n// Search for currently running Parcel processes in the parcel-lsp dir.\n// Create an IPC client connection for each running process.\nfor (let filename of fs.readdirSync(BASEDIR)) {\n if (!filename.endsWith('.json')) continue;\n let filepath = path.join(BASEDIR, filename);\n createClient(filepath);\n // console.log('connected initial', filepath);\n}\n\n// Watch for new Parcel processes in the parcel-lsp dir, and disconnect the\n// client for each corresponding connection when a Parcel process ends\nwatcher.subscribe(BASEDIR, async (err, events) => {\n if (err) {\n throw err;\n }\n\n for (let event of events) {\n if (event.type === 'create' && event.path.endsWith('.json')) {\n createClient(event.path);\n // console.log('connected watched', event.path);\n } else if (event.type === 'delete' && event.path.endsWith('.json')) {\n let existing = clients.get(event.path);\n // console.log('existing', event.path, existing);\n if (existing) {\n clients.delete(event.path);\n existing.connection.end();\n // console.log('disconnected watched', event.path);\n }\n }\n }\n});\n"],"names":["path","fs","os","createConnection","DiagnosticRefreshRequest","DidChangeConfigurationNotification","DocumentDiagnosticParams","DocumentDiagnosticReport","DocumentDiagnosticReportKind","DocumentDiagnosticRequest","DocumentUri","InitializeParams","InitializeResult","ProposedFeatures","TextDocumentSyncKind","WorkDoneProgressServerReporter","createServerPipeTransport","createMessageConnection","MessageConnection","invariant","url","commonPathPrefix","watcher","NotificationBuild","NotificationBuildStatus","NotificationWorkspaceDiagnostics","RequestDocumentDiagnostics","RequestImporters","connection","all","hasConfigurationCapability","hasWorkspaceFolderCapability","hasDiagnosticsRefreshSupport","onInitialize","params","capabilities","workspace","configuration","workspaceFolders","Boolean","diagnostics","refreshSupport","result","textDocumentSync","Incremental","diagnosticProvider","workspaceDiagnostics","interFileDependencies","supported","onInitialized","client","register","type","undefined","onDidChangeWorkspaceFolders","console","log","onRequest","findClient","sendRequest","Promise","textDocument","uri","previousResultId","lastBuild","kind","Unchanged","resultId","uris","add","Full","items","listen","ProgressReporter","begin","progressReporterPromise","reporter","window","createWorkDoneProgress","then","lastMessage","report","done","message","r","sendDiagnosticsRefresh","Client","projectRoot","Set","progressReporter","clients","Map","document","filepath","fileURLToPath","longestPrefix","bestClient","prefix","length","warn","createClient","metafilepath","metafile","JSON","parse","readFileSync","socketfilepath","slice","reader","writer","onNotification","state","sendDiagnostics","String","Date","now","sendNotification","d","onClose","delete","map","set","BASEDIR","join","realpathSync","tmpdir","mkdirSync","recursive","filename","readdirSync","endsWith","subscribe","err","events","event","existing","get","end"],"version":3,"file":"LspServer.js.map","sourceRoot":"../../../../"}
|
|
1
|
+
{"mappings":"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","sources":["packages/utils/parcel-lsp/src/LspServer.ts"],"sourcesContent":["import * as path from 'path';\nimport * as fs from 'fs';\nimport * as os from 'os';\nimport {\n createConnection,\n DiagnosticRefreshRequest,\n DidChangeConfigurationNotification,\n DocumentDiagnosticParams,\n DocumentDiagnosticReport,\n DocumentDiagnosticReportKind,\n DocumentDiagnosticRequest,\n DocumentUri,\n InitializeParams,\n InitializeResult,\n ProposedFeatures,\n TextDocumentSyncKind,\n WorkDoneProgressServerReporter,\n} from 'vscode-languageserver/node';\n\nimport {\n createServerPipeTransport,\n createMessageConnection,\n MessageConnection,\n} from 'vscode-jsonrpc/node';\nimport * as invariant from 'assert';\nimport * as url from 'url';\nimport commonPathPrefix = require('common-path-prefix');\n\n// import {TextDocument} from 'vscode-languageserver-textdocument';\nimport * as watcher from '@parcel/watcher';\nimport {\n NotificationBuild,\n NotificationBuildStatus,\n NotificationWorkspaceDiagnostics,\n RequestDocumentDiagnostics,\n RequestImporters,\n} from '@parcel/lsp-protocol';\n\nconst connection = createConnection(ProposedFeatures.all);\n\n// Create a simple text document manager.\n// const documents: TextDocuments<TextDocument> = new TextDocuments(TextDocument);\n\nlet hasConfigurationCapability = false;\nlet hasWorkspaceFolderCapability = false;\n// let hasDiagnosticRelatedInformationCapability = false;\nlet hasDiagnosticsRefreshSupport = false;\n\nconnection.onInitialize((params: InitializeParams) => {\n const capabilities = params.capabilities;\n\n // Does the client support the `workspace/configuration` request?\n // If not, we fall back using global settings.\n hasConfigurationCapability = !!(\n capabilities.workspace && !!capabilities.workspace.configuration\n );\n hasWorkspaceFolderCapability = !!(\n capabilities.workspace && !!capabilities.workspace.workspaceFolders\n );\n // hasDiagnosticRelatedInformationCapability = !!(\n // capabilities.textDocument &&\n // capabilities.textDocument.publishDiagnostics &&\n // capabilities.textDocument.publishDiagnostics.relatedInformation\n // );\n hasDiagnosticsRefreshSupport = Boolean(\n capabilities.workspace?.diagnostics?.refreshSupport,\n );\n\n const result: InitializeResult = {\n capabilities: {\n textDocumentSync: TextDocumentSyncKind.Incremental,\n // Tell the client that this server supports code completion.\n diagnosticProvider: {\n workspaceDiagnostics: false,\n interFileDependencies: true,\n },\n },\n };\n\n if (hasWorkspaceFolderCapability) {\n result.capabilities.workspace = {\n workspaceFolders: {\n supported: true,\n },\n };\n }\n return result;\n});\n\nconnection.onInitialized(() => {\n if (hasConfigurationCapability) {\n // Register for all configuration changes.\n connection.client.register(\n DidChangeConfigurationNotification.type,\n undefined,\n );\n }\n if (hasWorkspaceFolderCapability) {\n connection.workspace.onDidChangeWorkspaceFolders(_event => {\n connection.console.log('Workspace folder change event received.');\n });\n }\n});\n\n// Proxy\nconnection.onRequest(RequestImporters, async params => {\n let client = findClient(params);\n if (client) {\n let result = await client.connection.sendRequest(RequestImporters, params);\n return result;\n }\n return null;\n});\n\nconnection.onRequest(\n DocumentDiagnosticRequest.type,\n async (\n params: DocumentDiagnosticParams,\n ): Promise<DocumentDiagnosticReport> => {\n let client = findClient(params.textDocument.uri);\n let result;\n if (client) {\n // console.log(\n // 'DocumentDiagnosticRequest',\n // params.textDocument.uri,\n // params.previousResultId === client.lastBuild,\n // );\n\n if (params.previousResultId === client.lastBuild) {\n return {\n kind: DocumentDiagnosticReportKind.Unchanged,\n resultId: client.lastBuild,\n };\n }\n\n result = await client.connection.sendRequest(\n RequestDocumentDiagnostics,\n params.textDocument.uri,\n );\n\n if (result) {\n client.uris.add(params.textDocument.uri);\n }\n }\n\n return {\n kind: DocumentDiagnosticReportKind.Full,\n resultId: client?.lastBuild,\n items: result ?? [],\n };\n },\n);\n\nconnection.listen();\n\nclass ProgressReporter {\n progressReporterPromise?: Promise<WorkDoneProgressServerReporter> | null;\n lastMessage?: string;\n begin() {\n this.progressReporterPromise = (async () => {\n let reporter = await connection.window.createWorkDoneProgress();\n reporter.begin('Parcel');\n return reporter;\n })();\n this.progressReporterPromise.then(reporter => {\n if (this.lastMessage != null) {\n reporter.report(this.lastMessage);\n }\n });\n }\n async done() {\n if (this.progressReporterPromise == null) {\n this.begin();\n }\n invariant(this.progressReporterPromise != null);\n (await this.progressReporterPromise).done();\n this.progressReporterPromise = null;\n }\n async report(message: string) {\n if (this.progressReporterPromise == null) {\n this.lastMessage = message;\n this.begin();\n } else {\n let r = await this.progressReporterPromise;\n r.report(message);\n }\n }\n}\n\nfunction sendDiagnosticsRefresh() {\n if (hasDiagnosticsRefreshSupport) {\n connection.sendRequest(DiagnosticRefreshRequest.type);\n }\n}\n\ntype Client = {\n connection: MessageConnection;\n projectRoot: string;\n uris: Set<DocumentUri>;\n lastBuild: string;\n};\n\nlet progressReporter = new ProgressReporter();\nlet clients: Map<string, Client> = new Map();\n\nfunction findClient(document: DocumentUri): Client | undefined {\n let filepath = url.fileURLToPath(document);\n\n let longestPrefix = 0;\n let bestClient;\n for (let [, client] of clients) {\n let prefix = commonPathPrefix([client.projectRoot, filepath]).length;\n if (longestPrefix < prefix) {\n longestPrefix = prefix;\n bestClient = client;\n } else if (longestPrefix === prefix) {\n console.warn('Ambiguous client for ' + filepath);\n }\n }\n return bestClient;\n}\n\nfunction createClient(metafilepath: string) {\n let metafile = JSON.parse(fs.readFileSync(metafilepath, 'utf8'));\n\n let socketfilepath = metafilepath.slice(0, -5);\n let [reader, writer] = createServerPipeTransport(socketfilepath);\n let client = createMessageConnection(reader, writer);\n client.listen();\n\n let uris = new Set<DocumentUri>();\n\n let result = {\n connection: client,\n uris,\n projectRoot: metafile.projectRoot,\n lastBuild: '0',\n };\n\n client.onNotification(NotificationBuildStatus, (state, message) => {\n // console.log('got NotificationBuildStatus', state, message);\n if (state === 'start') {\n progressReporter.begin();\n for (let uri of uris) {\n connection.sendDiagnostics({uri, diagnostics: []});\n }\n } else if (state === 'progress' && message != null) {\n progressReporter.report(message);\n } else if (state === 'end') {\n result.lastBuild = String(Date.now());\n sendDiagnosticsRefresh();\n progressReporter.done();\n connection.sendNotification(NotificationBuild);\n }\n });\n\n client.onNotification(NotificationWorkspaceDiagnostics, diagnostics => {\n // console.log('got NotificationWorkspaceDiagnostics', diagnostics);\n for (let d of diagnostics) {\n uris.add(d.uri);\n connection.sendDiagnostics(d);\n }\n });\n\n client.onClose(() => {\n clients.delete(metafile);\n sendDiagnosticsRefresh();\n return Promise.all(\n [...uris].map(uri => connection.sendDiagnostics({uri, diagnostics: []})),\n );\n });\n\n sendDiagnosticsRefresh();\n clients.set(metafile, result);\n}\n\n// Take realpath because to have consistent cache keys on macOS (/var -> /private/var)\nconst BASEDIR = path.join(fs.realpathSync(os.tmpdir()), 'parcel-lsp');\nfs.mkdirSync(BASEDIR, {recursive: true});\n// Search for currently running Parcel processes in the parcel-lsp dir.\n// Create an IPC client connection for each running process.\nfor (let filename of fs.readdirSync(BASEDIR)) {\n if (!filename.endsWith('.json')) continue;\n let filepath = path.join(BASEDIR, filename);\n createClient(filepath);\n // console.log('connected initial', filepath);\n}\n\n// Watch for new Parcel processes in the parcel-lsp dir, and disconnect the\n// client for each corresponding connection when a Parcel process ends\nwatcher.subscribe(BASEDIR, async (err, events) => {\n if (err) {\n throw err;\n }\n\n for (let event of events) {\n if (event.type === 'create' && event.path.endsWith('.json')) {\n createClient(event.path);\n // console.log('connected watched', event.path);\n } else if (event.type === 'delete' && event.path.endsWith('.json')) {\n let existing = clients.get(event.path);\n // console.log('existing', event.path, existing);\n if (existing) {\n clients.delete(event.path);\n existing.connection.end();\n // console.log('disconnected watched', event.path);\n }\n }\n }\n});\n"],"names":["path","fs","os","createConnection","DiagnosticRefreshRequest","DidChangeConfigurationNotification","DocumentDiagnosticParams","DocumentDiagnosticReport","DocumentDiagnosticReportKind","DocumentDiagnosticRequest","DocumentUri","InitializeParams","InitializeResult","ProposedFeatures","TextDocumentSyncKind","WorkDoneProgressServerReporter","createServerPipeTransport","createMessageConnection","MessageConnection","invariant","url","commonPathPrefix","watcher","NotificationBuild","NotificationBuildStatus","NotificationWorkspaceDiagnostics","RequestDocumentDiagnostics","RequestImporters","connection","all","hasConfigurationCapability","hasWorkspaceFolderCapability","hasDiagnosticsRefreshSupport","onInitialize","params","capabilities","workspace","configuration","workspaceFolders","Boolean","diagnostics","refreshSupport","result","textDocumentSync","Incremental","diagnosticProvider","workspaceDiagnostics","interFileDependencies","supported","onInitialized","client","register","type","undefined","onDidChangeWorkspaceFolders","console","log","onRequest","findClient","sendRequest","Promise","textDocument","uri","previousResultId","lastBuild","kind","Unchanged","resultId","uris","add","Full","items","listen","ProgressReporter","begin","progressReporterPromise","reporter","window","createWorkDoneProgress","then","lastMessage","report","done","message","r","sendDiagnosticsRefresh","Client","projectRoot","Set","progressReporter","clients","Map","document","filepath","fileURLToPath","longestPrefix","bestClient","prefix","length","warn","createClient","metafilepath","metafile","JSON","parse","readFileSync","socketfilepath","slice","reader","writer","onNotification","state","sendDiagnostics","String","Date","now","sendNotification","d","onClose","delete","map","set","BASEDIR","join","realpathSync","tmpdir","mkdirSync","recursive","filename","readdirSync","endsWith","subscribe","err","events","event","existing","get","end"],"version":3,"file":"LspServer.js.map","sourceRoot":"../../../../"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parcel/lsp",
|
|
3
|
-
"version": "2.9.4-nightly.
|
|
3
|
+
"version": "2.9.4-nightly.3008+4499a71ba",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
},
|
|
23
23
|
"engines": {
|
|
24
24
|
"node": ">= 12.0.0",
|
|
25
|
-
"parcel": "2.0.0-nightly.
|
|
25
|
+
"parcel": "2.0.0-nightly.1383+4499a71ba"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@parcel/lsp-protocol": "2.9.4-nightly.
|
|
28
|
+
"@parcel/lsp-protocol": "2.9.4-nightly.3008+4499a71ba",
|
|
29
29
|
"@parcel/watcher": "^2.0.7",
|
|
30
30
|
"common-path-prefix": "^3.0.0",
|
|
31
31
|
"nullthrows": "^1.1.1",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"targets": {
|
|
45
45
|
"types": false
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "4499a71ba8ba8797117a07244f1c8848f2d5dedb"
|
|
48
48
|
}
|