diff --git a/package.json b/package.json index 71dadc91178..bf115f5bb54 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.50.0", - "distro": "97bd451b684ef610d9752cf941451085fc6e0d91", + "distro": "57c4155f1a0b2e51e10a76baea6e6be23088fb55", "author": { "name": "Microsoft Corporation" }, @@ -48,7 +48,7 @@ }, "dependencies": { "applicationinsights": "1.0.8", - "chokidar": "3.2.3", + "chokidar": "3.4.2", "graceful-fs": "4.2.3", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.3", @@ -71,10 +71,10 @@ "vscode-ripgrep": "^1.8.0", "vscode-sqlite3": "4.0.10", "vscode-textmate": "5.2.0", - "xterm": "4.9.0-beta.8", + "xterm": "4.9.0-beta.25", "xterm-addon-search": "0.7.0", "xterm-addon-unicode11": "0.2.0", - "xterm-addon-webgl": "0.8.0", + "xterm-addon-webgl": "0.9.0-beta.1", "yauzl": "^2.9.2", "yazl": "^2.4.3" }, @@ -156,7 +156,7 @@ "opn": "^6.0.0", "optimist": "0.3.5", "p-all": "^1.0.0", - "playwright": "1.0.1", + "playwright": "1.3.0", "pump": "^1.0.1", "queue": "3.0.6", "rcedit": "^1.1.0", diff --git a/remote/package.json b/remote/package.json index c10fbe792c2..187c951af64 100644 --- a/remote/package.json +++ b/remote/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "dependencies": { "applicationinsights": "1.0.8", - "chokidar": "3.2.3", + "chokidar": "3.4.2", "cookie": "^0.4.0", "graceful-fs": "4.2.3", "http-proxy-agent": "^2.1.0", @@ -20,10 +20,10 @@ "vscode-proxy-agent": "^0.5.2", "vscode-ripgrep": "^1.8.0", "vscode-textmate": "5.2.0", - "xterm": "4.9.0-beta.8", + "xterm": "4.9.0-beta.25", "xterm-addon-search": "0.7.0", "xterm-addon-unicode11": "0.2.0", - "xterm-addon-webgl": "0.8.0", + "xterm-addon-webgl": "0.9.0-beta.1", "yauzl": "^2.9.2", "yazl": "^2.4.3" }, diff --git a/remote/web/package.json b/remote/web/package.json index de712cfdeb3..fc4855b4ab7 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -7,9 +7,9 @@ "semver-umd": "^5.5.7", "vscode-oniguruma": "1.3.1", "vscode-textmate": "5.2.0", - "xterm": "4.9.0-beta.8", + "xterm": "4.9.0-beta.25", "xterm-addon-search": "0.7.0", "xterm-addon-unicode11": "0.2.0", - "xterm-addon-webgl": "0.8.0" + "xterm-addon-webgl": "0.9.0-beta.1" } } diff --git a/remote/web/yarn.lock b/remote/web/yarn.lock index 15fb0958eea..a5498289c43 100644 --- a/remote/web/yarn.lock +++ b/remote/web/yarn.lock @@ -37,12 +37,12 @@ xterm-addon-unicode11@0.2.0: resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c" integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q== -xterm-addon-webgl@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f" - integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ== +xterm-addon-webgl@0.9.0-beta.1: + version "0.9.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2" + integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ== -xterm@4.9.0-beta.8: - version "4.9.0-beta.8" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.8.tgz#ca121934d63f88668d2d5b11d9b2fc3bde7bd805" - integrity sha512-EEonYBLANDUBfEeEnHG632bZdgBaAUWst8LFr6oC6f2uLFfJGHQvVJuLaEkPtRvS+jOeoorEXZRPmso1/ANHXA== +xterm@4.9.0-beta.25: + version "4.9.0-beta.25" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b" + integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg== diff --git a/remote/yarn.lock b/remote/yarn.lock index 499dc73ca5c..748e983bd3c 100644 --- a/remote/yarn.lock +++ b/remote/yarn.lock @@ -69,10 +69,10 @@ buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -chokidar@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.3.tgz#b9270a565d14f02f6bfdd537a6a2bbf5549b8c8c" - integrity sha512-GtrxGuRf6bzHQmXWRepvsGnXpkQkVU+D2/9a7dAe4a7v1NhrfZOZ2oKf76M3nOs46fFYL8D+Q8JYA4GYeJ8Cjw== +chokidar@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -80,9 +80,9 @@ chokidar@3.2.3: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.4.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.1.2" cookie@^0.4.0: version "0.4.0" @@ -155,10 +155,10 @@ fs-extra@^7.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fsevents@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.1.tgz#74c64e21df71721845d0c44fe54b7f56b82995a9" - integrity sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw== +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== glob-parent@~5.1.0: version "5.1.0" @@ -316,17 +316,22 @@ picomatch@^2.0.4: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== +picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== dependencies: - picomatch "^2.0.4" + picomatch "^2.2.1" semver-umd@^5.5.7: version "5.5.7" @@ -440,15 +445,15 @@ xterm-addon-unicode11@0.2.0: resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c" integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q== -xterm-addon-webgl@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f" - integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ== +xterm-addon-webgl@0.9.0-beta.1: + version "0.9.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2" + integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ== -xterm@4.9.0-beta.8: - version "4.9.0-beta.8" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.8.tgz#ca121934d63f88668d2d5b11d9b2fc3bde7bd805" - integrity sha512-EEonYBLANDUBfEeEnHG632bZdgBaAUWst8LFr6oC6f2uLFfJGHQvVJuLaEkPtRvS+jOeoorEXZRPmso1/ANHXA== +xterm@4.9.0-beta.25: + version "4.9.0-beta.25" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b" + integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg== yauzl@^2.9.2: version "2.10.0" diff --git a/resources/web/code-web.js b/resources/web/code-web.js index 1ab1b7cde51..450e2c0159f 100644 --- a/resources/web/code-web.js +++ b/resources/web/code-web.js @@ -395,8 +395,7 @@ async function handleRoot(req, res) { .replace('{{WORKBENCH_WEB_CONFIGURATION}}', () => escapeAttribute(JSON.stringify(webConfigJSON))) // use a replace function to avoid that regexp replace patterns ($&, $0, ...) are applied .replace('{{WORKBENCH_BUILTIN_EXTENSIONS}}', () => escapeAttribute(JSON.stringify(dedupedBuiltInExtensions))) .replace('{{WORKBENCH_CREDENTIALS}}', () => escapeAttribute(JSON.stringify(credentials))) - .replace('{{WEBVIEW_ENDPOINT}}', '') - .replace('{{REMOTE_USER_DATA_URI}}', ''); + .replace('{{WEBVIEW_ENDPOINT}}', ''); const headers = { 'Content-Type': 'text/html' }; diff --git a/src/vs/base/parts/ipc/node/ipc.cp.ts b/src/vs/base/parts/ipc/node/ipc.cp.ts index a5632fdd069..7bc2a589c68 100644 --- a/src/vs/base/parts/ipc/node/ipc.cp.ts +++ b/src/vs/base/parts/ipc/node/ipc.cp.ts @@ -14,6 +14,7 @@ import { isRemoteConsoleLog, log } from 'vs/base/common/console'; import { CancellationToken } from 'vs/base/common/cancellation'; import * as errors from 'vs/base/common/errors'; import { VSBuffer } from 'vs/base/common/buffer'; +import { isMacintosh } from 'vs/base/common/platform'; /** * This implementation doesn't perform well since it uses base64 encoding for buffers. @@ -197,6 +198,12 @@ export class Client implements IChannelClient, IDisposable { forkOpts.execArgv = ['--nolazy', '--inspect-brk=' + this.options.debugBrk]; } + if (isMacintosh && forkOpts.env) { + // Unset `DYLD_LIBRARY_PATH`, as it leads to process crashes + // See https://github.com/microsoft/vscode/issues/105848 + delete forkOpts.env['DYLD_LIBRARY_PATH']; + } + this.child = fork(this.modulePath, args, forkOpts); const onMessageEmitter = new Emitter(); diff --git a/src/vs/code/browser/workbench/workbench-dev.html b/src/vs/code/browser/workbench/workbench-dev.html index 25e7b05fe16..8cf808998eb 100644 --- a/src/vs/code/browser/workbench/workbench-dev.html +++ b/src/vs/code/browser/workbench/workbench-dev.html @@ -20,9 +20,6 @@ - - - diff --git a/src/vs/code/browser/workbench/workbench.html b/src/vs/code/browser/workbench/workbench.html index f9c46333e2e..38535768348 100644 --- a/src/vs/code/browser/workbench/workbench.html +++ b/src/vs/code/browser/workbench/workbench.html @@ -14,9 +14,6 @@ - - - diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index 2b046ac4a59..bfbf6074d35 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -856,6 +856,7 @@ export function whenProviderRegistered(file: URI, fileService: IFileService): Pr if (fileService.canHandleResource(URI.from({ scheme: file.scheme }))) { return Promise.resolve(); } + return new Promise((c, e) => { const disposable = fileService.onDidChangeFileSystemProviderRegistrations(e => { if (e.scheme === file.scheme && e.added) { diff --git a/src/vs/platform/files/node/watcher/nodejs/watcherService.ts b/src/vs/platform/files/node/watcher/nodejs/watcherService.ts index 1475b56d004..16c5428714b 100644 --- a/src/vs/platform/files/node/watcher/nodejs/watcherService.ts +++ b/src/vs/platform/files/node/watcher/nodejs/watcherService.ts @@ -85,7 +85,7 @@ export class FileWatcher extends Disposable { } // Handle emit through delayer to accommodate for bulk changes and thus reduce spam - this.fileChangesDelayer.trigger(() => { + this.fileChangesDelayer.trigger(async () => { const fileChanges = this.fileChangesBuffer; this.fileChangesBuffer = []; @@ -103,8 +103,6 @@ export class FileWatcher extends Disposable { if (normalizedFileChanges.length > 0) { this.onDidFilesChange(normalizedFileChanges); } - - return Promise.resolve(); }); } diff --git a/src/vs/platform/files/node/watcher/nsfw/nsfwWatcherService.ts b/src/vs/platform/files/node/watcher/nsfw/nsfwWatcherService.ts index d2ea2f048a6..b57cdd85009 100644 --- a/src/vs/platform/files/node/watcher/nsfw/nsfwWatcherService.ts +++ b/src/vs/platform/files/node/watcher/nsfw/nsfwWatcherService.ts @@ -22,8 +22,8 @@ nsfwActionToRawChangeType[nsfw.actions.MODIFIED] = FileChangeType.UPDATED; nsfwActionToRawChangeType[nsfw.actions.DELETED] = FileChangeType.DELETED; interface IWatcherObjet { - start(): any; - stop(): any; + start(): void; + stop(): void; } interface IPathWatcher { @@ -142,7 +142,7 @@ export class NsfwWatcherService implements IWatcherService { } // Delay and send buffer - fileEventDelayer.trigger(() => { + fileEventDelayer.trigger(async () => { const events = undeliveredFileEvents; undeliveredFileEvents = []; @@ -169,8 +169,6 @@ export class NsfwWatcherService implements IWatcherService { this.log(` >> normalized ${r.type === FileChangeType.ADDED ? '[ADDED]' : r.type === FileChangeType.DELETED ? '[DELETED]' : '[CHANGED]'} ${r.path}`); }); } - - return Promise.resolve(undefined); }); }).then(watcher => { this._pathWatchers[request.path].watcher = watcher; @@ -180,8 +178,7 @@ export class NsfwWatcherService implements IWatcherService { }); } - public setRoots(roots: IWatcherRequest[]): Promise { - const promises: Promise[] = []; + async setRoots(roots: IWatcherRequest[]): Promise { const normalizedRoots = this._normalizeRoots(roots); // Gather roots that are not currently being watched @@ -214,23 +211,19 @@ export class NsfwWatcherService implements IWatcherService { this._pathWatchers[root.path].ignored = Array.isArray(root.excludes) ? root.excludes.map(ignored => glob.parse(ignored)) : []; } }); - - return Promise.all(promises).then(() => undefined); } - public setVerboseLogging(enabled: boolean): Promise { + async setVerboseLogging(enabled: boolean): Promise { this._verboseLogging = enabled; - return Promise.resolve(undefined); } - public stop(): Promise { + async stop(): Promise { for (let path in this._pathWatchers) { let watcher = this._pathWatchers[path]; watcher.ready.then(watcher => watcher.stop()); delete this._pathWatchers[path]; } this._pathWatchers = Object.create(null); - return Promise.resolve(); } /** diff --git a/src/vs/platform/files/node/watcher/nsfw/test/nsfwWatcherService.test.ts b/src/vs/platform/files/node/watcher/nsfw/test/nsfwWatcherService.test.ts index e7c28c9d760..20f000d6e76 100644 --- a/src/vs/platform/files/node/watcher/nsfw/test/nsfwWatcherService.test.ts +++ b/src/vs/platform/files/node/watcher/nsfw/test/nsfwWatcherService.test.ts @@ -10,11 +10,14 @@ import { NsfwWatcherService } from 'vs/platform/files/node/watcher/nsfw/nsfwWatc import { IWatcherRequest } from 'vs/platform/files/node/watcher/nsfw/watcher'; class TestNsfwWatcherService extends NsfwWatcherService { - public normalizeRoots(roots: string[]): string[] { + + normalizeRoots(roots: string[]): string[] { + // Work with strings as paths to simplify testing const requests: IWatcherRequest[] = roots.map(r => { return { path: r, excludes: [] }; }); + return this._normalizeRoots(requests).map(r => r.path); } } diff --git a/src/vs/platform/files/node/watcher/unix/chokidarWatcherService.ts b/src/vs/platform/files/node/watcher/unix/chokidarWatcherService.ts index 0ad9904baf2..4e82c266f27 100644 --- a/src/vs/platform/files/node/watcher/unix/chokidarWatcherService.ts +++ b/src/vs/platform/files/node/watcher/unix/chokidarWatcherService.ts @@ -23,7 +23,7 @@ process.noAsar = true; // disable ASAR support in watcher process interface IWatcher { requests: ExtendedWatcherRequest[]; - stop(): any; + stop(): Promise; } interface ExtendedWatcherRequest extends IWatcherRequest { @@ -61,13 +61,11 @@ export class ChokidarWatcherService implements IWatcherService { return this.onWatchEvent; } - setVerboseLogging(enabled: boolean): Promise { + async setVerboseLogging(enabled: boolean): Promise { this._verboseLogging = enabled; - - return Promise.resolve(); } - setRoots(requests: IWatcherRequest[]): Promise { + async setRoots(requests: IWatcherRequest[]): Promise { const watchers = Object.create(null); const newRequests: string[] = []; @@ -86,7 +84,7 @@ export class ChokidarWatcherService implements IWatcherService { // stop all old watchers for (const path in this._watchers) { - this._watchers[path].stop(); + await this._watchers[path].stop(); } // start all new watchers @@ -96,7 +94,6 @@ export class ChokidarWatcherService implements IWatcherService { } this._watchers = watchers; - return Promise.resolve(); } // for test purposes @@ -166,13 +163,13 @@ export class ChokidarWatcherService implements IWatcherService { const watcher: IWatcher = { requests, - stop: () => { + stop: async () => { try { if (this._verboseLogging) { this.log(`Stop watching: ${basePath}]`); } if (chokidarWatcher) { - chokidarWatcher.close(); + await chokidarWatcher.close(); this._watcherCount--; chokidarWatcher = null; } @@ -248,8 +245,9 @@ export class ChokidarWatcherService implements IWatcherService { undeliveredFileEvents.push(event); if (fileEventDelayer) { + // Delay and send buffer - fileEventDelayer.trigger(() => { + fileEventDelayer.trigger(async () => { const events = undeliveredFileEvents; undeliveredFileEvents = []; @@ -264,7 +262,7 @@ export class ChokidarWatcherService implements IWatcherService { }); } - return Promise.resolve(undefined); + return undefined; }); } }); @@ -291,15 +289,13 @@ export class ChokidarWatcherService implements IWatcherService { return watcher; } - stop(): Promise { + async stop(): Promise { for (const path in this._watchers) { const watcher = this._watchers[path]; - watcher.stop(); + await watcher.stop(); } this._watchers = Object.create(null); - - return Promise.resolve(); } private log(message: string) { diff --git a/src/vs/platform/files/node/watcher/win32/csharpWatcherService.ts b/src/vs/platform/files/node/watcher/win32/csharpWatcherService.ts index 0b4ea4ca211..9eda54b3c90 100644 --- a/src/vs/platform/files/node/watcher/win32/csharpWatcherService.ts +++ b/src/vs/platform/files/node/watcher/win32/csharpWatcherService.ts @@ -131,7 +131,7 @@ export class OutOfProcessWin32FolderWatcher { this.logCallback({ type: 'trace', message: `[File Watcher (C#)] ${message}` }); } - public dispose(): void { + dispose(): void { if (this.handle) { this.handle.kill(); this.handle = undefined; diff --git a/src/vs/platform/files/test/common/nullFileSystemProvider.ts b/src/vs/platform/files/test/common/nullFileSystemProvider.ts index 27250d0a7d1..7f47f2006d0 100644 --- a/src/vs/platform/files/test/common/nullFileSystemProvider.ts +++ b/src/vs/platform/files/test/common/nullFileSystemProvider.ts @@ -26,16 +26,16 @@ export class NullFileSystemProvider implements IFileSystemProvider { constructor(private disposableFactory: () => IDisposable = () => Disposable.None) { } watch(resource: URI, opts: IWatchOptions): IDisposable { return this.disposableFactory(); } - stat(resource: URI): Promise { return Promise.resolve(undefined!); } - mkdir(resource: URI): Promise { return Promise.resolve(undefined!); } - readdir(resource: URI): Promise<[string, FileType][]> { return Promise.resolve(undefined!); } - delete(resource: URI, opts: FileDeleteOptions): Promise { return Promise.resolve(undefined!); } - rename(from: URI, to: URI, opts: FileOverwriteOptions): Promise { return Promise.resolve(undefined!); } - copy?(from: URI, to: URI, opts: FileOverwriteOptions): Promise { return Promise.resolve(undefined!); } - readFile?(resource: URI): Promise { return Promise.resolve(undefined!); } - writeFile?(resource: URI, content: Uint8Array, opts: FileWriteOptions): Promise { return Promise.resolve(undefined!); } - open?(resource: URI, opts: FileOpenOptions): Promise { return Promise.resolve(undefined!); } - close?(fd: number): Promise { return Promise.resolve(undefined!); } - read?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return Promise.resolve(undefined!); } - write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return Promise.resolve(undefined!); } + async stat(resource: URI): Promise { return undefined!; } + async mkdir(resource: URI): Promise { return undefined; } + async readdir(resource: URI): Promise<[string, FileType][]> { return undefined!; } + async delete(resource: URI, opts: FileDeleteOptions): Promise { return undefined; } + async rename(from: URI, to: URI, opts: FileOverwriteOptions): Promise { return undefined; } + async copy?(from: URI, to: URI, opts: FileOverwriteOptions): Promise { return undefined; } + async readFile?(resource: URI): Promise { return undefined!; } + async writeFile?(resource: URI, content: Uint8Array, opts: FileWriteOptions): Promise { return undefined; } + async open?(resource: URI, opts: FileOpenOptions): Promise { return undefined!; } + async close?(fd: number): Promise { return undefined; } + async read?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return undefined!; } + async write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return undefined!; } } diff --git a/src/vs/workbench/browser/web.main.ts b/src/vs/workbench/browser/web.main.ts index 0ed16cec59b..138613d06da 100644 --- a/src/vs/workbench/browser/web.main.ts +++ b/src/vs/workbench/browser/web.main.ts @@ -34,9 +34,6 @@ import { ConfigurationCache } from 'vs/workbench/services/configuration/browser/ import { ISignService } from 'vs/platform/sign/common/sign'; import { SignService } from 'vs/platform/sign/browser/signService'; import { IWorkbenchConstructionOptions, IWorkspace, IWorkbench } from 'vs/workbench/workbench.web.api'; -import { FileUserDataProvider } from 'vs/workbench/services/userData/common/fileUserDataProvider'; -import { BACKUPS } from 'vs/platform/environment/common/environment'; -import { joinPath } from 'vs/base/common/resources'; import { BrowserStorageService } from 'vs/platform/storage/browser/storageService'; import { IStorageService } from 'vs/platform/storage/common/storage'; import { registerWindowDriver } from 'vs/platform/driver/browser/driver'; @@ -250,17 +247,9 @@ class BrowserMain extends Disposable { const connection = remoteAgentService.getConnection(); if (connection) { - // Remote file system const remoteFileSystemProvider = this._register(new RemoteFileSystemProvider(remoteAgentService)); fileService.registerProvider(Schemas.vscodeRemote, remoteFileSystemProvider); - - if (!this.configuration.userDataProvider) { - const remoteUserDataUri = this.getRemoteUserDataUri(); - if (remoteUserDataUri) { - this.configuration.userDataProvider = this._register(new FileUserDataProvider(remoteUserDataUri, joinPath(remoteUserDataUri, BACKUPS), remoteFileSystemProvider, environmentService, logService)); - } - } } // User data @@ -331,18 +320,6 @@ class BrowserMain extends Disposable { return { id: 'empty-window' }; } - private getRemoteUserDataUri(): URI | undefined { - const element = document.getElementById('vscode-remote-user-data-uri'); - if (element) { - const remoteUserDataPath = element.getAttribute('data-settings'); - if (remoteUserDataPath) { - return joinPath(URI.revive(JSON.parse(remoteUserDataPath)), 'User'); - } - } - - return undefined; - } - private getCookieValue(name: string): string | undefined { const match = document.cookie.match('(^|[^;]+)\\s*' + name + '\\s*=\\s*([^;]+)'); // See https://stackoverflow.com/a/25490531 diff --git a/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts b/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts index 48545bd0ab0..87822e0d527 100644 --- a/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts +++ b/src/vs/workbench/contrib/terminal/browser/links/terminalLink.ts @@ -60,12 +60,12 @@ export class TerminalLink extends DisposableStore implements ILink { // Listen for modifier before handing it off to the hover to handle so it gets disposed correctly this._hoverListeners = new DisposableStore(); this._hoverListeners.add(dom.addDisposableListener(document, 'keydown', e => { - if (this._isModifierDown(e)) { + if (!e.repeat && this._isModifierDown(e)) { this._enableDecorations(); } })); this._hoverListeners.add(dom.addDisposableListener(document, 'keyup', e => { - if (!this._isModifierDown(e)) { + if (!e.repeat && !this._isModifierDown(e)) { this._disableDecorations(); } })); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 79f07081f1f..76de543e187 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -35,6 +35,7 @@ import { TerminalProcessManager } from 'vs/workbench/contrib/terminal/browser/te import type { Terminal as XTermTerminal, IBuffer, ITerminalAddon } from 'xterm'; import type { SearchAddon, ISearchOptions } from 'xterm-addon-search'; import type { Unicode11Addon } from 'xterm-addon-unicode11'; +import type { WebglAddon } from 'xterm-addon-webgl'; import { CommandTrackerAddon } from 'vs/workbench/contrib/terminal/browser/addons/commandTrackerAddon'; import { NavigationModeAddon } from 'vs/workbench/contrib/terminal/browser/addons/navigationModeAddon'; import { XTermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private'; @@ -105,6 +106,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { private _widgetManager: TerminalWidgetManager = this._instantiationService.createInstance(TerminalWidgetManager); private _linkManager: TerminalLinkManager | undefined; private _environmentInfo: { widget: EnvironmentVariableInfoWidget, disposable: IDisposable } | undefined; + private _webglAddon: WebglAddon | undefined; private _commandTrackerAddon: CommandTrackerAddon | undefined; private _navigationModeAddon: INavigationMode & ITerminalAddon | undefined; @@ -496,9 +498,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._container.appendChild(this._wrapperElement); xterm.open(this._xtermElement); if (this._configHelper.config.rendererType === 'experimentalWebgl') { - this._terminalInstanceService.getXtermWebglConstructor().then(Addon => { - xterm.loadAddon(new Addon()); - }); + this._enableWebglRenderer(); } if (!xterm.element || !xterm.textarea) { @@ -767,7 +767,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { if (!this._xterm) { return; } - this._xterm.refresh(0, this._xterm.rows - 1); + this._webglAddon?.clearTextureAtlas(); + // TODO: Do canvas renderer too? } public focus(force?: boolean): void { @@ -1227,13 +1228,26 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._safeSetOption('macOptionClickForcesSelection', config.macOptionClickForcesSelection); this._safeSetOption('rightClickSelectsWord', config.rightClickBehavior === 'selectWord'); this._safeSetOption('wordSeparator', config.wordSeparators); - if (config.rendererType !== 'experimentalWebgl') { + if (config.rendererType === 'experimentalWebgl') { + this._enableWebglRenderer(); + } else { + this._webglAddon?.dispose(); + this._webglAddon = undefined; // Never set webgl as it's an addon not a rendererType this._safeSetOption('rendererType', config.rendererType === 'auto' ? 'canvas' : config.rendererType); } this._refreshEnvironmentVariableInfoWidgetState(this._processManager.environmentVariableInfo); } + private async _enableWebglRenderer(): Promise { + if (!this._xterm || this._webglAddon) { + return; + } + const Addon = await this._terminalInstanceService.getXtermWebglConstructor(); + this._webglAddon = new Addon(); + this._xterm.loadAddon(this._webglAddon); + } + private async _updateUnicodeVersion(): Promise { if (!this._xterm) { throw new Error('Cannot update unicode version before xterm has been initialized'); diff --git a/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts b/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts index 286a70c9044..032610dbea7 100644 --- a/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts @@ -36,7 +36,6 @@ export class TerminalWidgetManager implements IDisposable { dispose: () => { const current = this._attached.get(widget.id); if (current === widget) { - console.log('widget dispose', widget); this._attached.delete(widget.id); widget.dispose(); } diff --git a/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts b/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts index 8f8919ebd0a..0181e504903 100644 --- a/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts +++ b/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts @@ -46,11 +46,7 @@ export class TerminalNativeContribution extends Disposable implements IWorkbench } private _onOsResume(): void { - const activeTab = this._terminalService.getActiveTab(); - if (!activeTab) { - return; - } - activeTab.terminalInstances.forEach(instance => instance.forceRedraw()); + this._terminalService.terminalInstances.forEach(instance => instance.forceRedraw()); } private async _onOpenFileRequest(request: INativeOpenFileRequest): Promise { diff --git a/src/vs/workbench/services/extensions/electron-browser/localProcessExtensionHost.ts b/src/vs/workbench/services/extensions/electron-browser/localProcessExtensionHost.ts index b8aefafc910..eb28be32c1f 100644 --- a/src/vs/workbench/services/extensions/electron-browser/localProcessExtensionHost.ts +++ b/src/vs/workbench/services/extensions/electron-browser/localProcessExtensionHost.ts @@ -172,7 +172,7 @@ export class LocalProcessExtensionHost implements IExtensionHost { } const opts = { - env: env, + env, // We only detach the extension host on windows. Linux and Mac orphan by default // and detach under Linux and Mac create another process group. // We detach because we have noticed that when the renderer exits, its child processes diff --git a/yarn.lock b/yarn.lock index 140ed883c1a..b3a08230717 100644 --- a/yarn.lock +++ b/yarn.lock @@ -615,6 +615,13 @@ agent-base@5: resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== +agent-base@6: + version "6.0.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4" + integrity sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg== + dependencies: + debug "4" + agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -1622,7 +1629,7 @@ cheerio@^1.0.0-rc.1: lodash "^4.15.0" parse5 "^3.0.1" -chokidar@*, chokidar@3.2.3: +chokidar@*: version "3.2.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.2.3.tgz#b9270a565d14f02f6bfdd537a6a2bbf5549b8c8c" integrity sha512-GtrxGuRf6bzHQmXWRepvsGnXpkQkVU+D2/9a7dAe4a7v1NhrfZOZ2oKf76M3nOs46fFYL8D+Q8JYA4GYeJ8Cjw== @@ -1637,6 +1644,21 @@ chokidar@*, chokidar@3.2.3: optionalDependencies: fsevents "~2.1.1" +chokidar@3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" + integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chokidar@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.0.tgz#5fcb70d0b28ebe0867eb0f09d5f6a08f29a1efa0" @@ -4543,14 +4565,6 @@ https-proxy-agent@^2.2.3: agent-base "^4.3.0" debug "^3.1.0" -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - https-proxy-agent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" @@ -4559,6 +4573,14 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + husky@^0.13.1: version "0.13.4" resolved "https://registry.yarnpkg.com/husky/-/husky-0.13.4.tgz#48785c5028de3452a51c48c12c4f94b2124a1407" @@ -5195,10 +5217,10 @@ jade@0.26.3: commander "0.6.1" mkdirp "0.3.0" -jpeg-js@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.3.7.tgz#471a89d06011640592d314158608690172b1028d" - integrity sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ== +jpeg-js@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d" + integrity sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw== js-base64@^2.1.9: version "2.3.2" @@ -6970,15 +6992,15 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -playwright-core@=1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.0.1.tgz#823b6f1afa16917ffd418f3cec0c14688a985738" - integrity sha512-a71FjUDRFqWLG3VBAojVen2TaZiXkuog+ZmI0Nh0+/QndFUbbW3kameOfUTMXFvLUGWx2ipERZx6EQTJMEQDMA== +playwright@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.3.0.tgz#8c33ed29bc0c7d97f82f8322e99be6d7f0d9ff67" + integrity sha512-W3mwXv2XNFugbepSZTZxI314WfI1SAjdZBEeGOu8S5KnPz4RSlunUFgXn6496o8lobPmORLcJ9VTSGyiFfGpaw== dependencies: debug "^4.1.1" extract-zip "^2.0.0" - https-proxy-agent "^3.0.0" - jpeg-js "^0.3.7" + https-proxy-agent "^5.0.0" + jpeg-js "^0.4.0" mime "^2.4.4" pngjs "^5.0.0" progress "^2.0.3" @@ -6986,13 +7008,6 @@ playwright-core@=1.0.1: rimraf "^3.0.2" ws "^6.1.0" -playwright@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.0.1.tgz#326d479829a3505799ddc9988cc8decf5a7f8376" - integrity sha512-kVTE7uvZ7OcDVOBx7MVArUm2nbzzzpauKV9tuVIAH6vWGsOWbGGALUoTWMzNDzsPPTBJXXmxzC4KgI2zN+kVhw== - dependencies: - playwright-core "=1.0.1" - plist@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" @@ -10045,15 +10060,15 @@ xterm-addon-unicode11@0.2.0: resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c" integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q== -xterm-addon-webgl@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f" - integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ== +xterm-addon-webgl@0.9.0-beta.1: + version "0.9.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2" + integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ== -xterm@4.9.0-beta.8: - version "4.9.0-beta.8" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.8.tgz#ca121934d63f88668d2d5b11d9b2fc3bde7bd805" - integrity sha512-EEonYBLANDUBfEeEnHG632bZdgBaAUWst8LFr6oC6f2uLFfJGHQvVJuLaEkPtRvS+jOeoorEXZRPmso1/ANHXA== +xterm@4.9.0-beta.25: + version "4.9.0-beta.25" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b" + integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg== y18n@^3.2.1: version "3.2.1"