@usethesource/rascal-vscode-dsl-lsp-server 0.6.0

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 (51) hide show
  1. package/LICENSE.txt +24 -0
  2. package/README.md +9 -0
  3. package/assets/jars/.gitignore +1 -0
  4. package/assets/jars/rascal-lsp.jar +0 -0
  5. package/assets/jars/rascal.jar +0 -0
  6. package/lib/RascalExtension.d.ts +23 -0
  7. package/lib/RascalExtension.js +147 -0
  8. package/lib/RascalExtension.js.map +1 -0
  9. package/lib/RascalTerminalLinkProvider.d.ts +22 -0
  10. package/lib/RascalTerminalLinkProvider.js +142 -0
  11. package/lib/RascalTerminalLinkProvider.js.map +1 -0
  12. package/lib/auto-jvm/JavaLookup.d.ts +2 -0
  13. package/lib/auto-jvm/JavaLookup.js +181 -0
  14. package/lib/auto-jvm/JavaLookup.js.map +1 -0
  15. package/lib/auto-jvm/downloaders.d.ts +18 -0
  16. package/lib/auto-jvm/downloaders.js +332 -0
  17. package/lib/auto-jvm/downloaders.js.map +1 -0
  18. package/lib/extension.d.ts +7 -0
  19. package/lib/extension.js +43 -0
  20. package/lib/extension.js.map +1 -0
  21. package/lib/fs/RascalFileSystemProviders.d.ts +34 -0
  22. package/lib/fs/RascalFileSystemProviders.js +69 -0
  23. package/lib/fs/RascalFileSystemProviders.js.map +1 -0
  24. package/lib/fs/VSCodeURIResolver.d.ts +71 -0
  25. package/lib/fs/VSCodeURIResolver.js +383 -0
  26. package/lib/fs/VSCodeURIResolver.js.map +1 -0
  27. package/lib/lsp/ParameterizedLanguageServer.d.ts +26 -0
  28. package/lib/lsp/ParameterizedLanguageServer.js +135 -0
  29. package/lib/lsp/ParameterizedLanguageServer.js.map +1 -0
  30. package/lib/lsp/RascalLSPConnection.d.ts +13 -0
  31. package/lib/lsp/RascalLSPConnection.js +187 -0
  32. package/lib/lsp/RascalLSPConnection.js.map +1 -0
  33. package/lib/lsp/RascalLanguageServer.d.ts +9 -0
  34. package/lib/lsp/RascalLanguageServer.js +32 -0
  35. package/lib/lsp/RascalLanguageServer.js.map +1 -0
  36. package/lib/lsp/library.d.ts +2 -0
  37. package/lib/lsp/library.js +35 -0
  38. package/lib/lsp/library.js.map +1 -0
  39. package/lib/test/normal-suite/JavaDownload.test.d.ts +1 -0
  40. package/lib/test/normal-suite/JavaDownload.test.js +105 -0
  41. package/lib/test/normal-suite/JavaDownload.test.js.map +1 -0
  42. package/lib/test/runVSCodeTests.d.ts +1 -0
  43. package/lib/test/runVSCodeTests.js +48 -0
  44. package/lib/test/runVSCodeTests.js.map +1 -0
  45. package/lib/test/vscode-suite/extension.test.d.ts +1 -0
  46. package/lib/test/vscode-suite/extension.test.js +44 -0
  47. package/lib/test/vscode-suite/extension.test.js.map +1 -0
  48. package/lib/test/vscode-suite/index.d.ts +1 -0
  49. package/lib/test/vscode-suite/index.js +66 -0
  50. package/lib/test/vscode-suite/index.js.map +1 -0
  51. package/package.json +61 -0
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchAndUnpackTemurin = exports.fetchAndUnpackCorretto = exports.fetchAndUnpackMicrosoftJDK = exports.identifyLatestTemurinLTSRelease = exports.downloadMicrosoftJDK = exports.downloadCorretto = exports.downloadTemurin = exports.microsoftSupported = exports.correttoSupported = exports.temurinSupported = void 0;
4
+ /*
5
+ * Copyright (c) 2018-2021, NWO-I CWI and Swat.engineering
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright notice,
12
+ * this list of conditions and the following disclaimer.
13
+ *
14
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
15
+ * this list of conditions and the following disclaimer in the documentation
16
+ * and/or other materials provided with the distribution.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ * POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+ const os = require("os");
31
+ const path = require("path");
32
+ const node_fetch_1 = require("node-fetch");
33
+ const tar = require("tar");
34
+ const stream_1 = require("stream");
35
+ const util_1 = require("util");
36
+ const fs = require("fs");
37
+ const promises_1 = require("fs/promises");
38
+ const yauzl = require("yauzl");
39
+ const ppipeline = (0, util_1.promisify)(stream_1.pipeline);
40
+ function temurinSupported(jdkVersion) {
41
+ switch (os.arch()) {
42
+ case 'x32': return true;
43
+ case 'x64': return true;
44
+ case 'arm': return os.platform() === "linux";
45
+ case 'arm64':
46
+ switch (os.platform()) {
47
+ case 'linux': return true;
48
+ case 'darwin': return jdkVersion === 17;
49
+ default: return false;
50
+ }
51
+ default: return false;
52
+ }
53
+ }
54
+ exports.temurinSupported = temurinSupported;
55
+ function correttoSupported(jdkVersion) {
56
+ switch (os.arch()) {
57
+ case 'x32': return true;
58
+ case 'x64': return true;
59
+ case 'arm': return os.platform() === "linux" && jdkVersion === 11;
60
+ case 'arm64':
61
+ switch (os.platform()) {
62
+ case 'linux': return true;
63
+ case 'darwin': return jdkVersion === 17;
64
+ default: return false;
65
+ }
66
+ default: return false;
67
+ }
68
+ }
69
+ exports.correttoSupported = correttoSupported;
70
+ function microsoftSupported(jdkVersion) {
71
+ if (jdkVersion === 8) {
72
+ return false;
73
+ }
74
+ switch (os.arch()) {
75
+ case 'x32': return true;
76
+ case 'x64': return true;
77
+ case 'arm64':
78
+ switch (os.platform()) {
79
+ case 'linux': return true;
80
+ case 'win32': return true;
81
+ case 'darwin': return jdkVersion === 17;
82
+ default: return false;
83
+ }
84
+ default: return false;
85
+ }
86
+ }
87
+ exports.microsoftSupported = microsoftSupported;
88
+ async function downloadTemurin(mainJVMPath, jdkVersion, progress) {
89
+ const jdkRelease = await identifyLatestTemurinLTSRelease(jdkVersion);
90
+ const arch = mapTemuringCorrettoArch();
91
+ let platform;
92
+ switch (os.platform()) { // again, it's the compile-time platform, not the runtime one
93
+ case 'darwin':
94
+ platform = "mac";
95
+ break;
96
+ case 'linux':
97
+ platform = "linux";
98
+ break;
99
+ case 'win32':
100
+ platform = "windows";
101
+ break;
102
+ default: throw new Error("Unsupported platform: " + os.platform());
103
+ }
104
+ return fetchAndUnpackTemurin(arch, platform, jdkRelease, mainJVMPath, progress);
105
+ }
106
+ exports.downloadTemurin = downloadTemurin;
107
+ async function downloadCorretto(mainJVMPath, jdkVersion, progress) {
108
+ const arch = mapTemuringCorrettoArch();
109
+ let platform;
110
+ switch (os.platform()) { // again, it's the compile-time platform, not the runtime one
111
+ case 'darwin':
112
+ platform = "macos";
113
+ break;
114
+ case 'linux':
115
+ platform = "linux";
116
+ break;
117
+ case 'win32':
118
+ platform = "windows";
119
+ break;
120
+ default: throw new Error("Unsupported platform: " + os.platform());
121
+ }
122
+ return fetchAndUnpackCorretto(arch, platform, jdkVersion, mainJVMPath, progress);
123
+ }
124
+ exports.downloadCorretto = downloadCorretto;
125
+ async function downloadMicrosoftJDK(mainJVMPath, jdkVersion, progress) {
126
+ let arch;
127
+ switch (os.arch()) { // warning, nodejs arch gives the compile-time arch, not the runtime cpu one.
128
+ case "arm64":
129
+ arch = "aarch64";
130
+ break;
131
+ case "x32": // fall through since vscode might be running 32bit version of node
132
+ case "x64":
133
+ arch = "x64";
134
+ break;
135
+ default: throw new Error("Unsupported architecture: " + os.arch());
136
+ }
137
+ let platform;
138
+ switch (os.platform()) { // again, it's the compile-time platform, not the runtime one
139
+ case 'darwin':
140
+ platform = "macOS";
141
+ break;
142
+ case 'linux':
143
+ platform = "linux";
144
+ break;
145
+ case 'win32':
146
+ platform = "windows";
147
+ break;
148
+ default: throw new Error("Unsupported platform: " + os.platform());
149
+ }
150
+ return fetchAndUnpackMicrosoftJDK(arch, platform, jdkVersion, mainJVMPath, progress);
151
+ }
152
+ exports.downloadMicrosoftJDK = downloadMicrosoftJDK;
153
+ // locate newest java <version> release
154
+ async function identifyLatestTemurinLTSRelease(version) {
155
+ const releaseRange = encodeURIComponent(`[${version}.0,${version}.999]`);
156
+ const releasesRaw = await (0, node_fetch_1.default)(`https://api.adoptium.net/v3/info/release_versions?heap_size=normal&image_type=jdk&jvm_impl=hotspot&lts=true&page=0&page_size=1&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC&vendor=eclipse&version=${releaseRange}`);
157
+ if (!releasesRaw.ok) {
158
+ throw new Error(`unexpected response ${releasesRaw.statusText}`);
159
+ }
160
+ const releases = await releasesRaw.json();
161
+ if (releases.versions.length <= 0) {
162
+ throw new Error("Adoptium returned no releases");
163
+ }
164
+ const rel = releases.versions[0];
165
+ if (version === 8) {
166
+ return `jdk8u${rel.security}-b${rel.build.toString().padStart(2, '0')}`;
167
+ }
168
+ return `jdk-${rel.openjdk_version}`;
169
+ }
170
+ exports.identifyLatestTemurinLTSRelease = identifyLatestTemurinLTSRelease;
171
+ function mapTemuringCorrettoArch() {
172
+ switch (os.arch()) { // warning, nodejs arch gives the compile-time arch, not the runtime cpu one.
173
+ case "arm": return "arm";
174
+ case "arm64": return "aarch64";
175
+ case "x32": // fall through since vscode might be running 32bit version of node
176
+ case "x64": return "x64";
177
+ default: throw new Error("Unsupported architecture: " + os.arch());
178
+ }
179
+ }
180
+ async function fetchAndUnpackMicrosoftJDK(arch, platform, jdkVersion, mainJVMPath, progress) {
181
+ // https://aka.ms/download-jdk/microsoft-jdk-17-linux-x64.tar.gz
182
+ const url = `https://aka.ms/download-jdk/microsoft-jdk-${jdkVersion}-${platform}-${arch}.${platform === "windows" ? "zip" : "tar.gz"}`;
183
+ switch (platform) {
184
+ case "windows": return fetchUnpackZipInMemory(url, path.join("bin", "java.exe"), mainJVMPath, progress);
185
+ case "macOS": return fetchUnpackTarGZ(url, path.join("Contents", "Home", "bin", "java"), mainJVMPath, progress, 1);
186
+ case "linux": return fetchUnpackTarGZ(url, path.join("bin", "java"), mainJVMPath, progress);
187
+ default: return "";
188
+ }
189
+ }
190
+ exports.fetchAndUnpackMicrosoftJDK = fetchAndUnpackMicrosoftJDK;
191
+ async function fetchAndUnpackCorretto(arch, platform, jdkVersion, mainJVMPath, progress) {
192
+ // https://corretto.aws/[latest/latest_checksum]/amazon-corretto-[corretto_version]-[cpu_arch]-[os]-[package_type].[file_extension]
193
+ // https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.tar.gz
194
+ const url = `https://corretto.aws/downloads/latest/amazon-corretto-${jdkVersion}-${arch}-${platform}-jdk.${platform === "windows" ? "zip" : "tar.gz"}`;
195
+ switch (platform) {
196
+ case "windows": return fetchUnpackZipInMemory(url, path.join("bin", "java.exe"), mainJVMPath, progress);
197
+ case "macos": return fetchUnpackTarGZ(url, path.join("Contents", "Home", "bin", "java"), mainJVMPath, progress);
198
+ case "linux": return fetchUnpackTarGZ(url, path.join("bin", "java"), mainJVMPath, progress);
199
+ default: return "";
200
+ }
201
+ }
202
+ exports.fetchAndUnpackCorretto = fetchAndUnpackCorretto;
203
+ async function fetchAndUnpackTemurin(arch, platform, jdk11Release, mainJVMPath, progress) {
204
+ // https://api.adoptium.net/v3/binary/version/jdk-11.0.13%2B8/linux/x64/jdk/hotspot/normal/eclipse?project=jdk
205
+ const url = `https://api.adoptium.net/v3/binary/version/${encodeURIComponent(jdk11Release)}/${platform}/${arch}/jdk/hotspot/normal/eclipse?project=jdk`;
206
+ switch (platform) {
207
+ case "windows": return fetchUnpackZipInMemory(url, path.join("bin", "java.exe"), mainJVMPath, progress);
208
+ case "mac": return fetchUnpackTarGZ(url, path.join("Contents", "Home", "bin", "java"), mainJVMPath, progress);
209
+ case "linux": return fetchUnpackTarGZ(url, path.join("bin", "java"), mainJVMPath, progress);
210
+ default: return "";
211
+ }
212
+ }
213
+ exports.fetchAndUnpackTemurin = fetchAndUnpackTemurin;
214
+ // unpack
215
+ async function fetchUnpackTarGZ(url, subpath, mainJVMPath, progress, strip = 0) {
216
+ const response = await (0, node_fetch_1.default)(url);
217
+ if (!response.ok) {
218
+ throw new Error(`unexpected response ${response.statusText}`);
219
+ }
220
+ await (0, promises_1.mkdir)(mainJVMPath, { recursive: true });
221
+ return new Promise((resolve, reject) => {
222
+ if (!response.body) {
223
+ reject(new Error("Empty body in response"));
224
+ }
225
+ let detectedRootPath = "";
226
+ const size = Number(response.headers.get("Content-Length") || "0");
227
+ (0, stream_1.pipeline)(response.body, new stream_1.Transform({
228
+ transform: function (chunk, encoding, callback) {
229
+ progress(100 * (chunk.length / size), "Downloading and extracting tar");
230
+ this.push(chunk);
231
+ callback();
232
+ }
233
+ }), tar.extract({
234
+ cwd: mainJVMPath,
235
+ strip: strip,
236
+ onentry: e => {
237
+ if ((detectedRootPath === "" || detectedRootPath === ".") && !e.meta) {
238
+ detectedRootPath = e.path.split('/')[strip];
239
+ }
240
+ }
241
+ }), e => { if (e) {
242
+ reject(e);
243
+ } }).on("close", () => {
244
+ const jdkPath = path.join(mainJVMPath, detectedRootPath);
245
+ fs.createWriteStream(path.join(jdkPath, "rascal-auto-download")).close();
246
+ resolve(path.join(jdkPath, subpath));
247
+ })
248
+ .on("error", e => {
249
+ reject(e);
250
+ });
251
+ });
252
+ }
253
+ async function streamToBuffer(response, progress) {
254
+ const size = Number(response.headers.get("Content-Length") || "0");
255
+ if (size === 0) {
256
+ console.log("No content-length found");
257
+ return new Promise((resolve, reject) => {
258
+ const data = [];
259
+ response.body.on('data', (chunk) => {
260
+ data.push(chunk);
261
+ });
262
+ response.body.on('end', () => {
263
+ resolve(Buffer.concat(data));
264
+ });
265
+ response.body.on('error', (err) => {
266
+ progress(50, "Downloaded zip");
267
+ reject(err);
268
+ });
269
+ });
270
+ }
271
+ return new Promise((resolve, reject) => {
272
+ const data = Buffer.alloc(size);
273
+ let written = 0;
274
+ response.body.on('data', (chunk) => {
275
+ const wrote = chunk.copy(data, written, 0);
276
+ progress(50 * (wrote / size), "Downloading zip");
277
+ written += wrote;
278
+ });
279
+ response.body.on('end', () => {
280
+ resolve(data);
281
+ });
282
+ response.body.on('error', (err) => {
283
+ reject(err);
284
+ });
285
+ });
286
+ }
287
+ const zipFromBuffer = (0, util_1.promisify)(yauzl.fromBuffer);
288
+ // unpack zip and detect root folder
289
+ async function fetchUnpackZipInMemory(url, subpath, mainJVMPath, progress) {
290
+ const response = await (0, node_fetch_1.default)(url);
291
+ if (!response.ok || !response.body) {
292
+ throw new Error(`unexpected response ${response.statusText} || body: ${response.body}`);
293
+ }
294
+ const zipFileInMemory = await streamToBuffer(response, progress);
295
+ await (0, promises_1.mkdir)(mainJVMPath, { recursive: true });
296
+ const zipFile = await zipFromBuffer(zipFileInMemory, { lazyEntries: true, autoClose: true });
297
+ if (!zipFile) {
298
+ throw new Error("Error opening zip file from stream");
299
+ }
300
+ return new Promise((resolve, reject) => {
301
+ let detectedRootPath = "";
302
+ zipFile.on("entry", async (entry) => {
303
+ progress(50 / zipFile.entryCount, "Unpacking zip file");
304
+ if (detectedRootPath === "" && entry.fileName.includes('/')) {
305
+ detectedRootPath = entry.fileName.split('/')[0];
306
+ }
307
+ const destFile = path.join(mainJVMPath, entry.fileName);
308
+ await (0, promises_1.mkdir)(path.dirname(destFile), { recursive: true });
309
+ const mode = (entry.externalFileAttributes >> 16) & 0xFFFF;
310
+ if ((mode & 0xF000) === 0x4000 || entry.fileName.endsWith('/')) {
311
+ zipFile.readEntry(); // skip directory entries
312
+ return;
313
+ }
314
+ const readStream = await (0, util_1.promisify)(zipFile.openReadStream.bind(zipFile))(entry);
315
+ if (!readStream) {
316
+ reject("Error opening stream: " + entry.fileName);
317
+ zipFile.close();
318
+ return;
319
+ }
320
+ await ppipeline(readStream, fs.createWriteStream(destFile));
321
+ zipFile.readEntry(); // continue to next entry
322
+ });
323
+ zipFile.on("error", (e) => reject(e));
324
+ zipFile.on("end", () => {
325
+ const jdkPath = path.join(mainJVMPath, detectedRootPath);
326
+ fs.createWriteStream(path.join(jdkPath, "rascal-auto-download")).close();
327
+ resolve(path.join(jdkPath, subpath));
328
+ });
329
+ zipFile.readEntry(); // start chain
330
+ });
331
+ }
332
+ //# sourceMappingURL=downloaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloaders.js","sourceRoot":"","sources":["../../src/auto-jvm/downloaders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import * as vscode from 'vscode';
2
+ export declare function activate(context: vscode.ExtensionContext): {
3
+ registerLanguage: (lang: import("./lsp/ParameterizedLanguageServer").LanguageParameter) => Promise<void>;
4
+ unregisterLanguage: (lang: import("./lsp/ParameterizedLanguageServer").LanguageParameter) => Promise<void>;
5
+ getRascalExtensionDeploymode: () => boolean;
6
+ };
7
+ export declare function deactivate(): void;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deactivate = exports.activate = void 0;
4
+ /*
5
+ * Copyright (c) 2018-2021, NWO-I CWI and Swat.engineering
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright notice,
12
+ * this list of conditions and the following disclaimer.
13
+ *
14
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
15
+ * this list of conditions and the following disclaimer in the documentation
16
+ * and/or other materials provided with the distribution.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28
+ * POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+ const path = require("path");
31
+ const RascalExtension_1 = require("./RascalExtension");
32
+ const testDeployMode = (process.env.RASCAL_LSP_DEV_DEPLOY || "false") === "true";
33
+ const deployMode = (process.env.RASCAL_LSP_DEV || "false") !== "true";
34
+ function activate(context) {
35
+ const jars = context.asAbsolutePath(path.join('.', 'assets', 'jars'));
36
+ const extension = new RascalExtension_1.RascalExtension(context, jars, (deployMode || testDeployMode));
37
+ context.subscriptions.push(extension);
38
+ return extension.externalLanguageRegistry();
39
+ }
40
+ exports.activate = activate;
41
+ function deactivate() { }
42
+ exports.deactivate = deactivate;
43
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,6BAA6B;AAG7B,uDAAoD;AAEpD,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,KAAK,MAAM,CAAC;AACjF,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,KAAK,MAAM,CAAC;AAGtE,SAAgB,QAAQ,CAAC,OAAgC;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,IAAI,iCAAe,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,SAAS,CAAC,wBAAwB,EAAE,CAAC;AAChD,CAAC;AALD,4BAKC;AAGD,SAAgB,UAAU,KAAI,CAAC;AAA/B,gCAA+B"}
@@ -0,0 +1,34 @@
1
+ import * as vscode from 'vscode';
2
+ import { LanguageClient } from 'vscode-languageclient/node';
3
+ export declare class RascalFileSystemProvider implements vscode.FileSystemProvider {
4
+ readonly client: LanguageClient;
5
+ private readonly _emitter;
6
+ readonly onDidChangeFile: vscode.Event<vscode.FileChangeEvent[]>;
7
+ private readonly protectedSchemes;
8
+ /**
9
+ * Registers a single FileSystemProvider for every URI scheme that Rascal supports, except
10
+ * for file, http and https.
11
+ *
12
+ * @param client to use as a server for the file system provider methods
13
+ */
14
+ constructor(client: LanguageClient);
15
+ registerSchemes(schemes: string[]): void;
16
+ watch(uri: vscode.Uri, options: {
17
+ recursive: boolean;
18
+ excludes: string[];
19
+ }): vscode.Disposable;
20
+ stat(uri: vscode.Uri): vscode.FileStat | Thenable<vscode.FileStat>;
21
+ readDirectory(uri: vscode.Uri): [string, vscode.FileType][] | Thenable<[string, vscode.FileType][]>;
22
+ createDirectory(uri: vscode.Uri): void | Thenable<void>;
23
+ readFile(uri: vscode.Uri): Uint8Array | Thenable<Uint8Array>;
24
+ writeFile(uri: vscode.Uri, content: Uint8Array, options: {
25
+ create: boolean;
26
+ overwrite: boolean;
27
+ }): void | Thenable<void>;
28
+ delete(uri: vscode.Uri, options: {
29
+ recursive: boolean;
30
+ }): void | Thenable<void>;
31
+ rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: {
32
+ overwrite: boolean;
33
+ }): void | Thenable<void>;
34
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RascalFileSystemProvider = void 0;
4
+ const vscode = require("vscode");
5
+ class RascalFileSystemProvider {
6
+ /**
7
+ * Registers a single FileSystemProvider for every URI scheme that Rascal supports, except
8
+ * for file, http and https.
9
+ *
10
+ * @param client to use as a server for the file system provider methods
11
+ */
12
+ constructor(client) {
13
+ this._emitter = new vscode.EventEmitter();
14
+ this.onDidChangeFile = this._emitter.event;
15
+ this.protectedSchemes = ["file", "http", "https", "unknown"];
16
+ this.client = client;
17
+ client.onNotification("rascal/filesystem/onDidChangeFile", (event) => {
18
+ this._emitter.fire([event]);
19
+ });
20
+ }
21
+ registerSchemes(schemes) {
22
+ schemes
23
+ .filter(s => !this.protectedSchemes.includes(s))
24
+ .forEach(s => vscode.workspace.registerFileSystemProvider(s, this));
25
+ }
26
+ watch(uri, options) {
27
+ // TODO: fix this
28
+ this.client.sendRequest("rascal/filesystem/watch", {
29
+ uri: uri.toString(),
30
+ recursive: options.recursive,
31
+ excludes: options.excludes
32
+ });
33
+ return new vscode.Disposable(() => {
34
+ this.client.sendRequest("rascal/filesystem/unwatch", {
35
+ uri: uri.toString()
36
+ });
37
+ });
38
+ }
39
+ stat(uri) {
40
+ return this.client.sendRequest("rascal/filesystem/stat", { uri: uri.toString() });
41
+ }
42
+ readDirectory(uri) {
43
+ return this.client.sendRequest("rascal/filesystem/readDirectory", { uri: uri.toString() });
44
+ }
45
+ createDirectory(uri) {
46
+ return this.client.sendRequest("rascal/filesystem/createDirectory", { uri: uri.toString() });
47
+ }
48
+ readFile(uri) {
49
+ return this.client.sendRequest("rascal/filesystem/readFile", { uri: uri.toString() })
50
+ .then(content => content.content)
51
+ .then(str => Buffer.from(str, "base64"));
52
+ }
53
+ writeFile(uri, content, options) {
54
+ return this.client.sendRequest("rascal/filesystem/writeFile", {
55
+ uri: uri.toString(),
56
+ create: options.create,
57
+ overwrite: options.overwrite,
58
+ content: Buffer.from(content).toString("base64")
59
+ });
60
+ }
61
+ delete(uri, options) {
62
+ return this.client.sendRequest("rascal/filesystem/delete", { uri: uri.toString(), recursive: options.recursive });
63
+ }
64
+ rename(oldUri, newUri, options) {
65
+ return this.client.sendRequest("rascal/filesystem/rename", { oldUri: oldUri.toString(), newUri: newUri.toString(), overwrite: options.overwrite });
66
+ }
67
+ }
68
+ exports.RascalFileSystemProvider = RascalFileSystemProvider;
69
+ //# sourceMappingURL=RascalFileSystemProviders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RascalFileSystemProviders.js","sourceRoot":"","sources":["../../src/fs/RascalFileSystemProviders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { Disposable } from "vscode";
2
+ import { integer, URI } from "vscode-languageclient";
3
+ declare type ISourceLocation = URI;
4
+ export interface WatchEventReceiver {
5
+ emitWatch(event: ISourceLocationChanged): void;
6
+ }
7
+ interface ISourceLocationRequest {
8
+ uri: ISourceLocation;
9
+ }
10
+ interface IOResult {
11
+ /**
12
+ * Error type occurred (or 0 if success)
13
+ */
14
+ errorCode: integer;
15
+ errorMessage?: string;
16
+ }
17
+ export interface BooleanResult extends IOResult {
18
+ result?: boolean;
19
+ }
20
+ export interface TimestampResult extends IOResult {
21
+ /**
22
+ * Epoch seconds
23
+ */
24
+ timestamp?: number;
25
+ }
26
+ export interface DirectoryListingResult extends IOResult {
27
+ entries?: string[];
28
+ areDirectory?: boolean[];
29
+ }
30
+ export interface WriteFileRequest extends ISourceLocationRequest {
31
+ content: string;
32
+ append: boolean;
33
+ }
34
+ export interface RenameRequest {
35
+ from: ISourceLocation;
36
+ to: ISourceLocation;
37
+ overwrite: boolean;
38
+ }
39
+ export interface WatchRequest extends ISourceLocationRequest {
40
+ /**
41
+ * subscription id, this helps the calling in linking up to the original request
42
+ * as the watches are recursive
43
+ */
44
+ watcher: string;
45
+ }
46
+ export declare enum ISourceLocationChangeType {
47
+ created = 1,
48
+ deleted = 2,
49
+ modified = 3
50
+ }
51
+ export declare enum ISourceLocationType {
52
+ file = 1,
53
+ directory = 2
54
+ }
55
+ export interface ISourceLocationChanged {
56
+ watchId: string;
57
+ location: ISourceLocation;
58
+ changeType: ISourceLocationChangeType;
59
+ type: ISourceLocationType;
60
+ }
61
+ export declare class VSCodeUriResolverServer implements Disposable {
62
+ private readonly server;
63
+ private activeClients;
64
+ private rascalNativeSchemes;
65
+ constructor(debug: boolean);
66
+ ignoreSchemes(toIgnore: string[]): void;
67
+ dispose(): void;
68
+ private handleNewClient;
69
+ get port(): number;
70
+ }
71
+ export {};