From 97644389823971bcc25bb90783749adc75b963c6 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Mon, 9 Mar 2020 13:56:25 -0700 Subject: [PATCH] Merge from vscode 78a4c91400152c0f27ba4d363eb56d2835f9903a (#9506) * Merge from vscode 78a4c91400152c0f27ba4d363eb56d2835f9903a * fix hygiene --- .../darwin/product-build-darwin.yml | 7 ---- extensions/package.json | 2 +- extensions/yarn.lock | 8 ++--- .../editor/contrib/suggest/media/suggest.css | 3 +- .../editor/contrib/suggest/suggestWidget.ts | 3 +- .../electron-main/electronMainService.ts | 5 ++- .../platform/product/common/productService.ts | 2 +- src/vs/platform/storage/node/storageIpc.ts | 12 ++++++- src/vs/platform/telemetry/common/telemetry.ts | 1 + .../browser/parts/panel/media/panelpart.css | 2 +- src/vs/workbench/common/editor.ts | 4 --- src/vs/workbench/common/views.ts | 4 +-- .../bulkEdit/browser/bulkEditPreview.ts | 11 ++++++ .../contrib/bulkEdit/browser/bulkEditTree.ts | 17 --------- .../markers/browser/markersTreeViewer.ts | 2 +- src/vs/workbench/electron-browser/window.ts | 36 +++++++++++-------- 16 files changed, 61 insertions(+), 58 deletions(-) diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml index cbfcbfc50e..795bc78556 100644 --- a/build/azure-pipelines/darwin/product-build-darwin.yml +++ b/build/azure-pipelines/darwin/product-build-darwin.yml @@ -179,13 +179,6 @@ steps: zip -d $(agent.builddirectory)/VSCode-darwin.zip "*.pkg" displayName: Clean Archive -- script: | - set -e - AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \ - AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \ - node build/azure-pipelines/common/createAsset.js darwin-unnotarized archive "VSCode-darwin-$VSCODE_QUALITY.zip" $(agent.builddirectory)/VSCode-darwin.zip - displayName: Publish Unnotarized Build - - script: | APP_ROOT=$(agent.builddirectory)/VSCode-darwin APP_NAME="`ls $APP_ROOT | head -n 1`" diff --git a/extensions/package.json b/extensions/package.json index b8e304b234..7b4e8171c1 100644 --- a/extensions/package.json +++ b/extensions/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Dependencies shared by all extensions", "dependencies": { - "typescript": "3.8.2" + "typescript": "3.8.3" }, "scripts": { "postinstall": "node ./postinstall" diff --git a/extensions/yarn.lock b/extensions/yarn.lock index 43a70c058c..83bd84cdd9 100644 --- a/extensions/yarn.lock +++ b/extensions/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -typescript@3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.2.tgz#91d6868aaead7da74f493c553aeff76c0c0b1d5a" - integrity sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ== +typescript@3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== diff --git a/src/vs/editor/contrib/suggest/media/suggest.css b/src/vs/editor/contrib/suggest/media/suggest.css index c2f7e4be76..1e4acf9955 100644 --- a/src/vs/editor/contrib/suggest/media/suggest.css +++ b/src/vs/editor/contrib/suggest/media/suggest.css @@ -176,7 +176,7 @@ } .monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label { - overflow: auto; + overflow: hidden; text-overflow: ellipsis; } @@ -228,6 +228,7 @@ .monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left { flex-shrink: 1; + flex-grow: 1; overflow: hidden; } .monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label { diff --git a/src/vs/editor/contrib/suggest/suggestWidget.ts b/src/vs/editor/contrib/suggest/suggestWidget.ts index a730cf819f..b218fbb2bc 100644 --- a/src/vs/editor/contrib/suggest/suggestWidget.ts +++ b/src/vs/editor/contrib/suggest/suggestWidget.ts @@ -144,11 +144,10 @@ class ItemRenderer implements IListRenderer /* only methods, not events */, number | undefined /* window ID */> { } @@ -34,7 +35,8 @@ export class ElectronMainService implements IElectronMainService { @IDialogMainService private readonly dialogMainService: IDialogMainService, @ILifecycleMainService private readonly lifecycleMainService: ILifecycleMainService, @IEnvironmentService private readonly environmentService: IEnvironmentService, - @ITelemetryService private readonly telemetryService: ITelemetryService + @ITelemetryService private readonly telemetryService: ITelemetryService, + @ILogService private readonly logService: ILogService ) { } @@ -392,6 +394,7 @@ export class ElectronMainService implements IElectronMainService { async startCrashReporter(windowId: number | undefined, options: CrashReporterStartOptions): Promise { crashReporter.start(options); + this.logService.trace('ElectronMainService#crashReporter', JSON.stringify(options)); } //#endregion diff --git a/src/vs/platform/product/common/productService.ts b/src/vs/platform/product/common/productService.ts index 6bd7488ea6..5f22694105 100644 --- a/src/vs/platform/product/common/productService.ts +++ b/src/vs/platform/product/common/productService.ts @@ -95,7 +95,7 @@ export interface IProductConfiguration { readonly checksums?: { [path: string]: string; }; readonly checksumFailMoreInfoUrl?: string; - readonly hockeyApp?: { + readonly appCenter?: { readonly 'win32-ia32': string; readonly 'win32-x64': string; readonly 'linux-x64': string; diff --git a/src/vs/platform/storage/node/storageIpc.ts b/src/vs/platform/storage/node/storageIpc.ts index 76858dcde2..c5809930d5 100644 --- a/src/vs/platform/storage/node/storageIpc.ts +++ b/src/vs/platform/storage/node/storageIpc.ts @@ -12,7 +12,7 @@ import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle'; import { onUnexpectedError } from 'vs/base/common/errors'; import { ILogService } from 'vs/platform/log/common/log'; import { generateUuid } from 'vs/base/common/uuid'; -import { instanceStorageKey, firstSessionDateStorageKey, lastSessionDateStorageKey, currentSessionDateStorageKey } from 'vs/platform/telemetry/common/telemetry'; +import { instanceStorageKey, firstSessionDateStorageKey, lastSessionDateStorageKey, currentSessionDateStorageKey, crashReporterIdStorageKey } from 'vs/platform/telemetry/common/telemetry'; type Key = string; type Value = string; @@ -54,6 +54,16 @@ export class GlobalStorageDatabaseChannel extends Disposable implements IServerC this.logService.error(error); } + // This is unique to the application instance and thereby + // should be written from the main process once. + // + // THIS SHOULD NEVER BE SENT TO TELEMETRY. + // + const crashReporterId = this.storageMainService.get(crashReporterIdStorageKey, undefined); + if (crashReporterId === undefined) { + this.storageMainService.store(crashReporterIdStorageKey, generateUuid()); + } + // Apply global telemetry values as part of the initialization // These are global across all windows and thereby should be // written from the main process once. diff --git a/src/vs/platform/telemetry/common/telemetry.ts b/src/vs/platform/telemetry/common/telemetry.ts index 7fe82cf8db..a74fcd0f84 100644 --- a/src/vs/platform/telemetry/common/telemetry.ts +++ b/src/vs/platform/telemetry/common/telemetry.ts @@ -45,3 +45,4 @@ export const instanceStorageKey = 'telemetry.instanceId'; export const currentSessionDateStorageKey = 'telemetry.currentSessionDate'; export const firstSessionDateStorageKey = 'telemetry.firstSessionDate'; export const lastSessionDateStorageKey = 'telemetry.lastSessionDate'; +export const crashReporterIdStorageKey = 'crashReporter.guid'; diff --git a/src/vs/workbench/browser/parts/panel/media/panelpart.css b/src/vs/workbench/browser/parts/panel/media/panelpart.css index 13d51e8ed8..679014bdbc 100644 --- a/src/vs/workbench/browser/parts/panel/media/panelpart.css +++ b/src/vs/workbench/browser/parts/panel/media/panelpart.css @@ -63,7 +63,7 @@ } .monaco-workbench .part.panel > .composite.title > .composite-bar-excess { - width: 100%; + width: 100px; } .monaco-workbench .part.panel > .title > .panel-switcher-container > .monaco-action-bar { diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index 6c604cb71f..bb6f746251 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -687,10 +687,6 @@ export abstract class TextResourceEditorInput extends EditorInput { return false; // untitled is never readonly } - if (!this.fileService.canHandleResource(this.resource)) { - return true; // resources without file support are always readonly - } - return this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly); } diff --git a/src/vs/workbench/common/views.ts b/src/vs/workbench/common/views.ts index 4a20b0dd59..cc3653d723 100644 --- a/src/vs/workbench/common/views.ts +++ b/src/vs/workbench/common/views.ts @@ -262,7 +262,8 @@ function compareViewContentDescriptors(a: IViewContentDescriptor, b: IViewConten return aPriority - bPriority; } - return a.content < b.content ? -1 : 1; + // No priroity, keep views sorted in the order they got registered + return 0; } class ViewsRegistry extends Disposable implements IViewsRegistry { @@ -601,4 +602,3 @@ export interface IViewPaneContainer { getView(viewId: string): IView | undefined; saveState(): void; } - diff --git a/src/vs/workbench/contrib/bulkEdit/browser/bulkEditPreview.ts b/src/vs/workbench/contrib/bulkEdit/browser/bulkEditPreview.ts index 9c4751e682..4b4750f92f 100644 --- a/src/vs/workbench/contrib/bulkEdit/browser/bulkEditPreview.ts +++ b/src/vs/workbench/contrib/bulkEdit/browser/bulkEditPreview.ts @@ -260,6 +260,17 @@ export class BulkFileOperations { } } + // sort (once) categories atop which have unconfirmed edits + this.categories.sort((a, b) => { + if (a.metadata.needsConfirmation === b.metadata.needsConfirmation) { + return a.metadata.label.localeCompare(b.metadata.label); + } else if (a.metadata.needsConfirmation) { + return -1; + } else { + return 1; + } + }); + return this; } diff --git a/src/vs/workbench/contrib/bulkEdit/browser/bulkEditTree.ts b/src/vs/workbench/contrib/bulkEdit/browser/bulkEditTree.ts index 57a9a98b1a..661e17e21d 100644 --- a/src/vs/workbench/contrib/bulkEdit/browser/bulkEditTree.ts +++ b/src/vs/workbench/contrib/bulkEdit/browser/bulkEditTree.ts @@ -258,19 +258,6 @@ export class BulkEditDataSource implements IAsyncDataSource { compare(a: BulkEditElement, b: BulkEditElement): number { - if (a instanceof CategoryElement && b instanceof CategoryElement) { - // - const aConfirm = BulkEditSorter._needsConfirmation(a.category); - const bConfirm = BulkEditSorter._needsConfirmation(b.category); - if (aConfirm === bConfirm) { - return a.category.metadata.label.localeCompare(b.category.metadata.label); - } else if (aConfirm) { - return -1; - } else { - return 1; - } - } - if (a instanceof FileElement && b instanceof FileElement) { return compare(a.edit.uri.toString(), b.edit.uri.toString()); } @@ -281,10 +268,6 @@ export class BulkEditSorter implements ITreeSorter { return 0; } - - private static _needsConfirmation(a: BulkCategory): boolean { - return a.fileOperations.some(ops => ops.needsConfirmation()); - } } // --- ACCESSI diff --git a/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts b/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts index 0237816fd1..f2f19ed456 100644 --- a/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts +++ b/src/vs/workbench/contrib/markers/browser/markersTreeViewer.ts @@ -857,6 +857,6 @@ registerThemingParticipant((theme, collector) => { const linkFg = theme.getColor(textLinkForeground); if (linkFg) { collector.addRule(`.markers-panel .markers-panel-container .tree-container .monaco-tl-contents .details-container a.code-link .marker-code > span:hover { color: ${linkFg}; }`); - collector.addRule(`.markers-panel .markers-panel-container .tree-container .monaco-list:focus .monaco-tl-contents .details-container a.code-link .marker-code > span:hover { color: ${linkFg.lighten(.4)}; }`); + collector.addRule(`.markers-panel .markers-panel-container .tree-container .monaco-list:focus .monaco-tl-contents .details-container a.code-link .marker-code > span:hover { color: inherit; }`); } }); diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts index 87ec3556f9..3a63614342 100644 --- a/src/vs/workbench/electron-browser/window.ts +++ b/src/vs/workbench/electron-browser/window.ts @@ -6,14 +6,14 @@ import * as nls from 'vs/nls'; import { URI } from 'vs/base/common/uri'; import * as errors from 'vs/base/common/errors'; -import { equals, deepClone, assign } from 'vs/base/common/objects'; +import { equals, deepClone } from 'vs/base/common/objects'; import * as DOM from 'vs/base/browser/dom'; import { Separator } from 'vs/base/browser/ui/actionbar/actionbar'; import { IAction } from 'vs/base/common/actions'; import { IFileService } from 'vs/platform/files/common/files'; import { toResource, IUntitledTextResourceInput, SideBySideEditor, pathsToEditors } from 'vs/workbench/common/editor'; import { IEditorService, IResourceEditor } from 'vs/workbench/services/editor/common/editorService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { ITelemetryService, crashReporterIdStorageKey } from 'vs/platform/telemetry/common/telemetry'; import { IWindowSettings, IOpenFileRequest, IWindowsConfiguration, IAddFoldersRequest, IRunActionInWindowRequest, IRunKeybindingInWindowRequest, getTitleBarStyle } from 'vs/platform/windows/common/windows'; import { ITitleService } from 'vs/workbench/services/title/common/titleService'; import { IWorkbenchThemeService, VS_HC_THEME } from 'vs/workbench/services/themes/common/workbenchThemeService'; @@ -46,7 +46,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { MenubarControl } from '../browser/parts/titlebar/menubarControl'; import { ILabelService } from 'vs/platform/label/common/label'; import { IUpdateService } from 'vs/platform/update/common/update'; -import { IStorageService } from 'vs/platform/storage/common/storage'; +import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { IPreferencesService } from '../services/preferences/common/preferences'; import { IMenubarService, IMenubarData, IMenubarMenu, IMenubarKeybinding, IMenubarMenuItemSubmenu, IMenubarMenuItemAction, MenubarMenuItem } from 'vs/platform/menubar/node/menubar'; import { withNullAsUndefined, assertIsDefined } from 'vs/base/common/types'; @@ -104,7 +104,8 @@ export class ElectronWindow extends Disposable { @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, @IElectronEnvironmentService private readonly electronEnvironmentService: IElectronEnvironmentService, @IWorkingCopyService private readonly workingCopyService: IWorkingCopyService, - @IFilesConfigurationService private readonly filesConfigurationService: IFilesConfigurationService + @IFilesConfigurationService private readonly filesConfigurationService: IFilesConfigurationService, + @IStorageService private readonly storageService: IStorageService, ) { super(); @@ -422,8 +423,8 @@ export class ElectronWindow extends Disposable { this.updateTouchbarMenu(); // Crash reporter (if enabled) - if (!this.environmentService.disableCrashReporter && product.crashReporter && product.hockeyApp && this.configurationService.getValue('telemetry.enableCrashReporter')) { - this.setupCrashReporter(product.crashReporter.companyName, product.crashReporter.productName, product.hockeyApp); + if (!this.environmentService.disableCrashReporter && product.crashReporter && product.appCenter && this.configurationService.getValue('telemetry.enableCrashReporter')) { + this.setupCrashReporter(product.crashReporter.companyName, product.crashReporter.productName, product.appCenter); } } @@ -536,31 +537,36 @@ export class ElectronWindow extends Disposable { } } - private async setupCrashReporter(companyName: string, productName: string, hockeyAppConfig: typeof product.hockeyApp): Promise { - if (!hockeyAppConfig) { + private async setupCrashReporter(companyName: string, productName: string, appCenterConfig: typeof product.appCenter): Promise { + if (!appCenterConfig) { return; } + const appCenterURL = isWindows ? appCenterConfig[process.arch === 'ia32' ? 'win32-ia32' : 'win32-x64'] + : isLinux ? appCenterConfig[`linux-x64`] : appCenterConfig.darwin; + const info = await this.telemetryService.getTelemetryInfo(); + const crashReporterId = this.storageService.get(crashReporterIdStorageKey, StorageScope.GLOBAL)!; + // base options with product info const options: CrashReporterStartOptions = { companyName, productName, - submitURL: isWindows ? hockeyAppConfig[process.arch === 'ia32' ? 'win32-ia32' : 'win32-x64'] : isLinux ? hockeyAppConfig[`linux-x64`] : hockeyAppConfig.darwin, + submitURL: appCenterURL.concat('&uid=', crashReporterId, '&iid=', crashReporterId, '&sid=', info.sessionId), extra: { vscode_version: product.version, vscode_commit: product.commit || '' } }; - // mixin telemetry info - const info = await this.telemetryService.getTelemetryInfo(); - assign(options.extra, { vscode_sessionId: info.sessionId }); + // start crash reporter in the main process first. + // On windows crashpad excepts a name pipe for the client to connect, + // this pipe is created by crash reporter initialization from the main process, + // changing this order of initialization will cause issues. + // For more info: https://chromium.googlesource.com/crashpad/crashpad/+/HEAD/doc/overview_design.md#normal-registration + await this.electronService.startCrashReporter(options); // start crash reporter right here crashReporter.start(deepClone(options)); - - // start crash reporter in the main process - return this.electronService.startCrashReporter(options); } private onAddFoldersRequest(request: IAddFoldersRequest): void {