diff --git a/extensions/ms-vscode.node-debug2/OSSREADME.json b/extensions/ms-vscode.node-debug2/OSSREADME.json new file mode 100644 index 00000000000..e2b9268eb40 --- /dev/null +++ b/extensions/ms-vscode.node-debug2/OSSREADME.json @@ -0,0 +1,150 @@ +// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS: +[ +{ + "name": "agent-base", + "repositoryURL": "https://github.com/TooTallNate/node-agent-base", + "version": "1.0.2", + "license": "MIT", + "isProd": true +}, +{ + "name": "balanced-match", + "repositoryURL": "https://github.com/juliangruber/balanced-match", + "version": "0.4.2", + "license": "MIT", + "isProd": true +}, +{ + "name": "brace-expansion", + "repositoryURL": "https://github.com/juliangruber/brace-expansion", + "version": "1.1.6", + "license": "MIT", + "isProd": true +}, +{ + "name": "concat-map", + "repositoryURL": "https://github.com/substack/node-concat-map", + "version": "0.0.1", + "license": "MIT", + "isProd": true +}, +{ + "name": "debug", + "repositoryURL": "https://github.com/visionmedia/debug", + "version": "2.2.0", + "license": "MIT", + "isProd": true +}, +{ + "name": "extend", + "repositoryURL": "https://github.com/justmoon/node-extend", + "version": "3.0.0", + "license": "MIT", + "isProd": true +}, +{ + "name": "fs.realpath", + "repositoryURL": "https://github.com/isaacs/fs.realpath", + "version": "1.0.0", + "license": "ISC", + "isProd": true +}, +{ + "name": "glob", + "repositoryURL": "https://github.com/isaacs/node-glob", + "version": "7.1.0", + "license": "ISC", + "isProd": true +}, +{ + "name": "http-proxy-agent", + "repositoryURL": "https://github.com/TooTallNate/node-http-proxy-agent", + "version": "0.2.7", + "license": "MIT", + "isProd": true +}, +{ + "name": "https-proxy-agent", + "repositoryURL": "https://github.com/TooTallNate/node-https-proxy-agent", + "version": "0.3.6", + "license": "MIT", + "isProd": true +}, +{ + "name": "inflight", + "repositoryURL": "https://github.com/npm/inflight", + "version": "1.0.5", + "license": "ISC", + "isProd": true +}, +{ + "name": "inherits", + "repositoryURL": "https://github.com/isaacs/inherits", + "version": "2.0.3", + "license": "ISC", + "isProd": true +}, +{ + "name": "minimatch", + "repositoryURL": "https://github.com/isaacs/minimatch", + "version": "3.0.3", + "license": "ISC", + "isProd": true +}, +{ + "name": "ms", + "repositoryURL": "https://github.com/rauchg/ms.js", + "version": "0.7.1", + "license": "MIT", + "isProd": true +}, +{ + "name": "once", + "repositoryURL": "https://github.com/isaacs/once", + "version": "1.4.0", + "license": "ISC", + "isProd": true +}, +{ + "name": "options", + "repositoryURL": "https://github.com/einaros/options.js", + "version": "0.0.6", + "license": "MIT", + "isProd": true +}, +{ + "name": "ultron", + "repositoryURL": "https://github.com/unshiftio/ultron", + "version": "1.0.2", + "license": "MIT", + "isProd": true +}, +{ + "name": "path-is-absolute", + "repositoryURL": "https://github.com/sindresorhus/path-is-absolute", + "version": "1.0.0", + "license": "MIT", + "isProd": true +}, +{ + "name": "source-map", + "repositoryURL": "https://github.com/mozilla/source-map", + "version": "0.5.6", + "license": "BSD-3-Clause", + "isProd": true +}, +{ + "name": "wrappy", + "repositoryURL": "https://github.com/npm/wrappy", + "version": "1.0.2", + "license": "ISC", + "isProd": true +}, +{ + "name": "ws", + "repositoryURL": "https://github.com/websockets/ws", + "version": "1.1.1", + "license": "MIT", + "isProd": true +} +] \ No newline at end of file diff --git a/extensions/ms-vscode.node-debug2/package.json b/extensions/ms-vscode.node-debug2/package.json new file mode 100644 index 00000000000..414a0eda6a6 --- /dev/null +++ b/extensions/ms-vscode.node-debug2/package.json @@ -0,0 +1,8 @@ +{ + "name": "node-debug2-placeholder", + "version": "0.0.1", + "publisher": "vscode", + "engines": { + "vscode": "1.6.x" + } +} \ No newline at end of file diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index cc1a32f8b27..39645aeccee 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -650,6 +650,11 @@ export function getTotalWidth(element: HTMLElement): number { return element.offsetWidth + margin; } +export function getTotalScrollWidth(element: HTMLElement): number { + let margin = sizeUtils.getMarginLeft(element) + sizeUtils.getMarginRight(element); + return element.scrollWidth + margin; +} + // Adapted from WinJS // Gets the height of the content of the specified element. The content height does not include borders or padding. export function getContentHeight(element: HTMLElement): number { @@ -678,7 +683,7 @@ function getRelativeLeft(element: HTMLElement, parent: HTMLElement): number { export function getLargestChildWidth(parent: HTMLElement, children: HTMLElement[]): number { let childWidths = children.map((child) => { - return getTotalWidth(child) + getRelativeLeft(child, parent) || 0; + return Math.max(getTotalScrollWidth(child), getTotalWidth(child)) + getRelativeLeft(child, parent) || 0; }); let maxWidth = Math.max(...childWidths); return maxWidth; diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts index 24e520e72f4..d9f5c34ac04 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -138,7 +138,7 @@ export class ExtensionManagementService implements IExtensionManagementService { }); } - installFromGallery(extension: IGalleryExtension, checkDependecies: boolean = true): TPromise { + installFromGallery(extension: IGalleryExtension): TPromise { const id = getExtensionId(extension, extension.version); return this.isObsolete(id).then(isObsolete => { @@ -146,8 +146,7 @@ export class ExtensionManagementService implements IExtensionManagementService { return TPromise.wrapError(new Error(nls.localize('restartCode', "Please restart Code before reinstalling {0}.", extension.displayName || extension.name))); } this._onInstallExtension.fire({ id, gallery: extension }); - return this.galleryService.loadCompatibleVersion(extension) - .then(compatibleVersion => this.installCompatibleVersion(compatibleVersion, checkDependecies)) + return this.installCompatibleVersion(extension, true) .then( local => this._onDidInstallExtension.fire({ id, local, gallery: extension }), error => { @@ -159,28 +158,31 @@ export class ExtensionManagementService implements IExtensionManagementService { } private installCompatibleVersion(extension: IGalleryExtension, checkDependecies: boolean): TPromise { - const dependencies = checkDependecies ? this.getDependenciesToInstall(extension) : []; - if (!dependencies.length) { - return this.downloadAndInstall(extension); - } - - const message = nls.localize('installDependecies', "This extension has dependencies. Would you like to install them along with it?"); - const options = [ - nls.localize('installWithDependenices', "Install With Dependencies"), - nls.localize('installWithoutDependenices', "Install only this"), - nls.localize('close', "Close") - ]; - return this.choiceService.choose(Severity.Info, message, options) - .then(value => { - switch (value) { - case 0: - return this.installWithDependencies(extension); - case 1: - return this.downloadAndInstall(extension); - default: - return TPromise.wrapError(errors.canceled()); + return this.galleryService.loadCompatibleVersion(extension) + .then(compatibleVersion => { + const dependencies = checkDependecies ? this.getDependenciesToInstall(compatibleVersion) : []; + if (!dependencies.length) { + return this.downloadAndInstall(compatibleVersion); } - }); + + const message = nls.localize('installDependecies', "This extension has dependencies. Would you like to install them along with it?"); + const options = [ + nls.localize('installWithDependenices', "Install With Dependencies"), + nls.localize('installWithoutDependenices', "Install only this"), + nls.localize('close', "Close") + ]; + return this.choiceService.choose(Severity.Info, message, options) + .then(value => { + switch (value) { + case 0: + return this.installWithDependencies(compatibleVersion); + case 1: + return this.downloadAndInstall(compatibleVersion); + default: + return TPromise.wrapError(errors.canceled()); + } + }); + }); } private getDependenciesToInstall(extension: IGalleryExtension): string[] { @@ -191,13 +193,41 @@ export class ExtensionManagementService implements IExtensionManagementService { private installWithDependencies(extension: IGalleryExtension): TPromise { return this.galleryService.getAllDependencies(extension) .then(allDependencies => this.filterOutInstalled(allDependencies)) - .then(toInstall => this.bulkInstallWithDependencies(extension, toInstall)); + .then(toInstall => this.filterObsolete(...toInstall.map(i => getExtensionId(i, i.version))) + .then((obsolete) => { + if (obsolete.length) { + return TPromise.wrapError(new Error(nls.localize('restartCode', "Please restart Code before reinstalling {0}.", extension.displayName || extension.name))); + } + return this.bulkInstallWithDependencies(extension, toInstall); + }) + ); } private bulkInstallWithDependencies(extension: IGalleryExtension, dependecies: IGalleryExtension[]): TPromise { + for (const dependency of dependecies) { + const id = getExtensionId(dependency, dependency.version); + this._onInstallExtension.fire({ id, gallery: dependency }); + } return this.downloadAndInstall(extension) - .then(localExtension => TPromise.join(dependecies.map((dep) => this.installFromGallery(dep, false))) - .then(() => localExtension, error => this.rollback(localExtension, dependecies).then(() => error))); + .then(localExtension => { + return TPromise.join(dependecies.map((dep) => this.installCompatibleVersion(dep, false))) + .then( + installedLocalExtensions => { + for (const installedLocalExtension of installedLocalExtensions) { + const gallery = this.getGalleryExtensionForLocalExtension(dependecies, installedLocalExtension); + this._onDidInstallExtension.fire({ id: installedLocalExtension.id, local: installedLocalExtension, gallery }); + } + return localExtension; + }, + error => { + return this.rollback(localExtension, dependecies).then(() => { + for (const dependency of dependecies) { + this._onDidInstallExtension.fire({ id: getExtensionId(dependency, dependency.version), gallery: dependency, error }); + } + return TPromise.wrapError(Array.isArray(error) ? error[error.length - 1] : error); + }); + }); + }); } private rollback(localExtension: ILocalExtension, dependecies: IGalleryExtension[]): TPromise { @@ -209,16 +239,26 @@ export class ExtensionManagementService implements IExtensionManagementService { private filterOutInstalled(extensions: IGalleryExtension[]): TPromise { return this.getInstalled().then(local => { - return extensions.filter(extension => local.every(local => local.id !== extension.id)); + return extensions.filter(extension => { + const extensionId = getExtensionId(extension, extension.version); + return local.every(local => local.id !== extensionId); + }); }); } private filterOutUnInstalled(extensions: IGalleryExtension[]): TPromise { return this.getInstalled().then(installed => { - return installed.filter(local => extensions.every(extension => extension.id === local.id)); + return installed.filter(local => { + return !!this.getGalleryExtensionForLocalExtension(extensions, local); + }); }); } + private getGalleryExtensionForLocalExtension(galleryExtensions: IGalleryExtension[], localExtension: ILocalExtension): IGalleryExtension { + const filtered = galleryExtensions.filter(galleryExtension => getExtensionId(galleryExtension, galleryExtension.version) === localExtension.id); + return filtered.length ? filtered[0] : null; + } + private downloadAndInstall(extension: IGalleryExtension): TPromise { const id = getExtensionId(extension, extension.version); const metadata = { @@ -353,7 +393,19 @@ export class ExtensionManagementService implements IExtensionManagementService { } private isObsolete(id: string): TPromise { - return this.withObsoleteExtensions(obsolete => !!obsolete[id]); + return this.filterObsolete(id).then(obsolete => obsolete.length === 1); + } + + private filterObsolete(...ids: string[]): TPromise { + return this.withObsoleteExtensions(allObsolete => { + const obsolete = []; + for (const id of ids) { + if (!!allObsolete[id]) { + obsolete.push(id); + } + } + return obsolete; + }); } private setObsolete(id: string): TPromise { diff --git a/src/vs/workbench/electron-browser/main.ts b/src/vs/workbench/electron-browser/main.ts index 3db0f319520..bd1902de463 100644 --- a/src/vs/workbench/electron-browser/main.ts +++ b/src/vs/workbench/electron-browser/main.ts @@ -141,7 +141,7 @@ function openWorkbench(environment: IWindowConfiguration, workspace: IWorkspace, shell.open(); shell.joinCreation().then(() => { - timer.start(timer.Topic.STARTUP, 'Open Shell, Viewconst & Editor', beforeOpen, 'Workbench has opened after this event with viewconst and editor restored').stop(); + timer.start(timer.Topic.STARTUP, 'Open Shell, Viewlet & Editor', beforeOpen, 'Workbench has opened after this event with viewlet and editor restored').stop(); }); // Inform user about loading issues from the loader diff --git a/src/vs/workbench/parts/files/browser/explorerViewlet.ts b/src/vs/workbench/parts/files/browser/explorerViewlet.ts index f610a605d4b..1153c56317a 100644 --- a/src/vs/workbench/parts/files/browser/explorerViewlet.ts +++ b/src/vs/workbench/parts/files/browser/explorerViewlet.ts @@ -95,7 +95,7 @@ export class ExplorerViewlet extends Viewlet { this.delayEditorOpeningInOpenedEditors = !!config.workbench.editor.enablePreview; // Open editors view should always be visible in no folder workspace. - let openEditorsVisible = !this.contextService.getWorkspace() || config.explorer.openEditors.visible !== 0; + const openEditorsVisible = !this.contextService.getWorkspace() || config.explorer.openEditors.visible !== 0; // Create views on startup and if open editors visibility has changed #6919 if (this.openEditorsVisible !== openEditorsVisible) { @@ -178,7 +178,7 @@ export class ExplorerViewlet extends Viewlet { const explorerInstantiator = this.instantiationService.createChild(new ServiceCollection([IWorkbenchEditorService, delegatingEditorService])); - const headerSize = this.openEditorsVisible ? undefined : 0; // If open editors are not visible set header size explicitly to 0, otherwise let it be computed by super class. + const headerSize = this.openEditorsVisible ? undefined : 0; // If open editors are not visible set header size explicitly to 0, otherwise const it be computed by super class. this.explorerView = explorerView = explorerInstantiator.createInstance(ExplorerView, this.viewletState, this.getActionRunner(), this.viewletSettings, headerSize); } @@ -278,11 +278,12 @@ export class ExplorerViewlet extends Viewlet { } public getOptimalWidth(): number { - let additionalMargin = 16; - let openedEditorsViewWidth = this.openEditorsVisible ? this.openEditorsView.getOptimalWidth() : 0; - let explorerView = this.getExplorerView(); - let explorerViewWidth = explorerView ? explorerView.getOptimalWidth() : 0; - let optimalWidth = Math.max(openedEditorsViewWidth, explorerViewWidth); + const additionalMargin = 16; + const openedEditorsViewWidth = this.openEditorsVisible ? this.openEditorsView.getOptimalWidth() : 0; + const explorerView = this.getExplorerView(); + const explorerViewWidth = explorerView ? explorerView.getOptimalWidth() : 0; + const optimalWidth = Math.max(openedEditorsViewWidth, explorerViewWidth); + return optimalWidth + additionalMargin; } diff --git a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts index 3e740e4d283..66ce5b12083 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts @@ -31,16 +31,16 @@ class FilesViewerActionContributor extends ActionBarContributor { } public hasSecondaryActions(context: any): boolean { - let element = context.element; + const element = context.element; // Contribute only on Stat Objects (File Explorer) return element instanceof FileStat; } public getSecondaryActions(context: any): IAction[] { - let stat = (context.element); - let tree = context.viewer; - let actions: IAction[] = []; + const stat = (context.element); + const tree = context.viewer; + const actions: IAction[] = []; let separateOpen = false; // Open side by side @@ -69,7 +69,7 @@ class FilesViewerActionContributor extends ActionBarContributor { else if (!stat.isDirectory) { // Run Compare - let runCompareAction = this.instantiationService.createInstance(CompareResourcesAction, stat.resource, tree); + const runCompareAction = this.instantiationService.createInstance(CompareResourcesAction, stat.resource, tree); if (runCompareAction._isEnabled()) { actions.push(runCompareAction); } @@ -80,8 +80,8 @@ class FilesViewerActionContributor extends ActionBarContributor { actions.push(new Separator(null, 100)); } - let workspace = this.contextService.getWorkspace(); - let isRoot = workspace && stat.resource.toString() === workspace.resource.toString(); + const workspace = this.contextService.getWorkspace(); + const isRoot = workspace && stat.resource.toString() === workspace.resource.toString(); // Copy File/Folder if (!isRoot) { @@ -107,7 +107,7 @@ class FilesViewerActionContributor extends ActionBarContributor { // Set Order let curOrder = 10; for (let i = 0; i < actions.length; i++) { - let action = actions[i]; + const action = actions[i]; if (!action.order) { curOrder += 10; action.order = curOrder; @@ -123,7 +123,7 @@ class FilesViewerActionContributor extends ActionBarContributor { if (context && context.element instanceof FileStat) { // Any other item with keybinding - let keybinding = keybindingForAction(action.id); + const keybinding = keybindingForAction(action.id); if (keybinding) { return new ActionItem(context, action, { label: true, keybinding: this.keybindingService.getLabelFor(keybinding) }); } diff --git a/src/vs/workbench/parts/files/browser/fileActions.ts b/src/vs/workbench/parts/files/browser/fileActions.ts index f15308096a4..922d7c5cff4 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.ts @@ -183,7 +183,7 @@ export class TriggerRenameFileAction extends BaseFileAction { const viewletState = context.viewletState; if (!viewletState) { - return TPromise.wrapError('Invalid viewconst state provided to BaseEnableFileRenameAction.'); + return TPromise.wrapError('Invalid viewlet state provided to BaseEnableFileRenameAction.'); } const stat = context.stat; @@ -395,7 +395,7 @@ export class BaseNewAction extends BaseFileAction { const viewletState = context.viewletState; if (!viewletState) { - return TPromise.wrapError('Invalid viewconst state provided to BaseNewAction.'); + return TPromise.wrapError('Invalid viewlet state provided to BaseNewAction.'); } let folder: FileStat = this.presetFolder; diff --git a/src/vs/workbench/parts/files/browser/views/explorerView.ts b/src/vs/workbench/parts/files/browser/views/explorerView.ts index e50f253006d..4bc36f93516 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerView.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerView.ts @@ -350,7 +350,7 @@ export class ExplorerView extends CollapsibleViewletView { public getOptimalWidth(): number { const parentNode = this.explorerViewer.getHTMLElement(); - const childNodes = [].slice.call(parentNode.querySelectorAll('.explorer-item-label > a')); + const childNodes = [].slice.call(parentNode.querySelectorAll('.explorer-item > a')); return DOM.getLargestChildWidth(parentNode, childNodes); } diff --git a/src/vs/workbench/parts/files/browser/views/openEditorsView.ts b/src/vs/workbench/parts/files/browser/views/openEditorsView.ts index c7f16ac5168..2a6987a09be 100644 --- a/src/vs/workbench/parts/files/browser/views/openEditorsView.ts +++ b/src/vs/workbench/parts/files/browser/views/openEditorsView.ts @@ -265,7 +265,8 @@ export class OpenEditorsView extends AdaptiveCollapsibleViewletView { public getOptimalWidth():number { let parentNode = this.tree.getHTMLElement(); - let childNodes = [].slice.call(parentNode.querySelectorAll('.monaco-file-label > .file-name')); + let childNodes = [].slice.call(parentNode.querySelectorAll('.open-editor > a')); + return dom.getLargestChildWidth(parentNode, childNodes); }