Merge from vscode 966b87dd4013be1a9c06e2b8334522ec61905cc2 (#4696)

This commit is contained in:
Anthony Dresser
2019-03-26 11:43:38 -07:00
committed by GitHub
parent b1393ae615
commit 0d8ef9583b
268 changed files with 5947 additions and 3422 deletions

View File

@@ -3,14 +3,12 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
import { EditorAction, registerEditorAction, ServicesAccessor } from 'vs/editor/browser/editorExtensions';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { DocumentRangeFormattingEditProviderRegistry } from 'vs/editor/common/modes';
import * as nls from 'vs/nls';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { IQuickInputService, IQuickPickItem, IQuickInputButton } from 'vs/platform/quickinput/common/quickInput';
import { CancellationToken } from 'vs/base/common/cancellation';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -18,6 +16,8 @@ import { formatDocumentRangeWithProvider, formatDocumentWithProvider, getRealAnd
import { Range } from 'vs/editor/common/core/range';
import { showExtensionQuery } from 'vs/workbench/contrib/format/browser/showExtensionQuery';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
interface IIndexedPick extends IQuickPickItem {
index: number;
@@ -28,20 +28,34 @@ const openExtensionAction: IQuickInputButton = {
iconClass: 'format-show-extension'
};
function logFormatterTelemetry<T extends { extensionId?: ExtensionIdentifier }>(telemetryService: ITelemetryService, mode: 'document' | 'range', options: T[], pick?: T) {
function extKey(obj: T): string {
return obj.extensionId ? ExtensionIdentifier.toKey(obj.extensionId) : 'unknown';
}
/*
* __GDPR__
"formatterpick" : {
"mode" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"extensions" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" },
"pick" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }
}
*/
telemetryService.publicLog('formatterpick', {
mode,
extensions: options.map(extKey),
pick: pick ? extKey(pick) : 'none'
});
}
registerEditorAction(class FormatDocumentMultipleAction extends EditorAction {
constructor() {
super({
id: 'editor.action.formatDocument.multiple',
label: nls.localize('formatDocument.label.multiple', "Format Document..."),
label: nls.localize('formatDocument.label.multiple', "Format Document With..."),
alias: 'Format Document...',
precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasMultipleDocumentFormattingProvider),
kbOpts: {
kbExpr: EditorContextKeys.editorTextFocus,
primary: KeyMod.Shift | KeyMod.Alt | KeyCode.KEY_F,
linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_I },
weight: KeybindingWeight.EditorContrib,
},
menuOpts: {
group: '1_modification',
order: 1.3
@@ -56,6 +70,7 @@ registerEditorAction(class FormatDocumentMultipleAction extends EditorAction {
const instaService = accessor.get(IInstantiationService);
const quickPickService = accessor.get(IQuickInputService);
const viewletService = accessor.get(IViewletService);
const telemetryService = accessor.get(ITelemetryService);
const model = editor.getModel();
const provider = getRealAndSyntheticDocumentFormattersOrdered(model);
@@ -77,6 +92,8 @@ registerEditorAction(class FormatDocumentMultipleAction extends EditorAction {
if (pick) {
await instaService.invokeFunction(formatDocumentWithProvider, provider[pick.index], editor, CancellationToken.None);
}
logFormatterTelemetry(telemetryService, 'document', provider, pick && provider[pick.index]);
}
});
@@ -85,14 +102,9 @@ registerEditorAction(class FormatSelectionMultipleAction extends EditorAction {
constructor() {
super({
id: 'editor.action.formatSelection.multiple',
label: nls.localize('formatSelection.label.multiple', "Format Selection..."),
label: nls.localize('formatSelection.label.multiple', "Format Selection With..."),
alias: 'Format Code...',
precondition: ContextKeyExpr.and(ContextKeyExpr.and(EditorContextKeys.writable), EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider),
kbOpts: {
kbExpr: EditorContextKeys.editorTextFocus,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_F),
weight: KeybindingWeight.EditorContrib
},
menuOpts: {
when: ContextKeyExpr.and(EditorContextKeys.hasNonEmptySelection),
group: '1_modification',
@@ -108,6 +120,7 @@ registerEditorAction(class FormatSelectionMultipleAction extends EditorAction {
const instaService = accessor.get(IInstantiationService);
const quickPickService = accessor.get(IQuickInputService);
const viewletService = accessor.get(IViewletService);
const telemetryService = accessor.get(ITelemetryService);
const model = editor.getModel();
let range: Range = editor.getSelection();
@@ -134,5 +147,7 @@ registerEditorAction(class FormatSelectionMultipleAction extends EditorAction {
if (pick) {
await instaService.invokeFunction(formatDocumentRangeWithProvider, provider[pick.index], editor, range, CancellationToken.None);
}
logFormatterTelemetry(telemetryService, 'range', provider, pick && provider[pick.index]);
}
});