src/vs/workbench/contrib/format/browser/formatActionsMultiple.ts/DefaultFormatter/_selectFormatter
class DefaultFormatter:	private async _selectFormatter<T extends FormattingEditProvider>(formatter: T[], document: ITextModel, mode: FormattingMode): Promise<T | undefined> {
		const formatterOrMessage = await this._analyzeFormatter(formatter, document);
		if (typeof formatterOrMessage !== 'string') {
			return formatterOrMessage;
		}

		if (mode !== FormattingMode.Silent) {
			// running from a user action -> show modal dialog so that users configure
			// a default formatter
			const result = await this._dialogService.confirm({
				message: nls.localize('miss.1', "Configure Default Formatter"),
				detail: formatterOrMessage,
				primaryButton: nls.localize('do.config', "Configure..."),
				secondaryButton: nls.localize('cancel', "Cancel")
			});
			if (result.confirmed) {
				return this._pickAndPersistDefaultFormatter(formatter, document);
			}
		} else {
			// no user action -> show a silent notification and proceed
			this._notificationService.prompt(
				Severity.Info,
				formatterOrMessage,
				[{ label: nls.localize('do.config', "Configure..."), run: () => this._pickAndPersistDefaultFormatter(formatter, document) }],
				{ silent: true }
			);
		}
		return undefined;
	}