commonEditorConfig.ts 35.8 KB
Newer Older
E
Erich Gamma 已提交
1 2 3 4 5 6
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

A
Alex Dima 已提交
7
import * as nls from 'vs/nls';
M
Matt Bierner 已提交
8
import { Event, Emitter } from 'vs/base/common/event';
J
Johannes Rieken 已提交
9
import { Disposable } from 'vs/base/common/lifecycle';
A
Alex Dima 已提交
10
import * as objects from 'vs/base/common/objects';
A
Alex Dima 已提交
11
import * as platform from 'vs/base/common/platform';
12
import { Extensions, IConfigurationRegistry, IConfigurationNode, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
13
import { Registry } from 'vs/platform/registry/common/platform';
A
Alex Dima 已提交
14
import * as editorCommon from 'vs/editor/common/editorCommon';
15
import { FontInfo, BareFontInfo } from 'vs/editor/common/config/fontInfo';
A
Alex Dima 已提交
16
import { EditorZoom } from 'vs/editor/common/config/editorZoom';
17
import * as editorOptions from 'vs/editor/common/config/editorOptions';
18 19 20
import EDITOR_DEFAULTS = editorOptions.EDITOR_DEFAULTS;
import EDITOR_FONT_DEFAULTS = editorOptions.EDITOR_FONT_DEFAULTS;
import EDITOR_MODEL_DEFAULTS = editorOptions.EDITOR_MODEL_DEFAULTS;
E
Erich Gamma 已提交
21

22 23 24 25 26 27 28
/**
 * Control what pressing Tab does.
 * If it is false, pressing Tab or Shift-Tab will be handled by the editor.
 * If it is true, pressing Tab or Shift-Tab will move the browser focus.
 * Defaults to false.
 */
export interface ITabFocus {
J
Johannes Rieken 已提交
29
	onDidChangeTabFocus: Event<boolean>;
30
	getTabFocusMode(): boolean;
J
Johannes Rieken 已提交
31
	setTabFocusMode(tabFocusMode: boolean): void;
32 33
}

A
Alex Dima 已提交
34
export const TabFocus: ITabFocus = new class implements ITabFocus {
35 36
	private _tabFocus: boolean = false;

M
Matt Bierner 已提交
37
	private readonly _onDidChangeTabFocus: Emitter<boolean> = new Emitter<boolean>();
38
	public readonly onDidChangeTabFocus: Event<boolean> = this._onDidChangeTabFocus.event;
39 40 41 42 43

	public getTabFocusMode(): boolean {
		return this._tabFocus;
	}

J
Johannes Rieken 已提交
44
	public setTabFocusMode(tabFocusMode: boolean): void {
45 46 47 48 49 50 51 52 53
		if (this._tabFocus === tabFocusMode) {
			return;
		}

		this._tabFocus = tabFocusMode;
		this._onDidChangeTabFocus.fire(this._tabFocus);
	}
};

A
Alex Dima 已提交
54 55 56 57
export interface IEnvConfiguration {
	extraEditorClassName: string;
	outerWidth: number;
	outerHeight: number;
58
	emptySelectionClipboard: boolean;
A
Alex Dima 已提交
59 60
	pixelRatio: number;
	zoomLevel: number;
61
	accessibilitySupport: platform.AccessibilitySupport;
62 63
}

64 65
const hasOwnProperty = Object.hasOwnProperty;

A
Alex Dima 已提交
66
export abstract class CommonEditorConfiguration extends Disposable implements editorCommon.IConfiguration {
E
Erich Gamma 已提交
67

68 69
	protected _rawOptions: editorOptions.IEditorOptions;
	protected _validatedOptions: editorOptions.IValidatedEditorOptions;
70
	public editor: editorOptions.InternalEditorOptions;
J
Johannes Rieken 已提交
71
	private _isDominatedByLongLines: boolean;
72
	private _lineNumbersDigitCount: number;
E
Erich Gamma 已提交
73

74
	private _onDidChange = this._register(new Emitter<editorOptions.IConfigurationChangedEvent>());
75
	public readonly onDidChange: Event<editorOptions.IConfigurationChangedEvent> = this._onDidChange.event;
A
Alex Dima 已提交
76

A
Alex Dima 已提交
77
	constructor(options: editorOptions.IEditorOptions) {
A
Alex Dima 已提交
78
		super();
79

80 81 82 83 84
		// Do a "deep clone of sorts" on the incoming options
		this._rawOptions = objects.mixin({}, options || {});
		this._rawOptions.scrollbar = objects.mixin({}, this._rawOptions.scrollbar || {});
		this._rawOptions.minimap = objects.mixin({}, this._rawOptions.minimap || {});
		this._rawOptions.find = objects.mixin({}, this._rawOptions.find || {});
A
Alex Dima 已提交
85
		this._rawOptions.hover = objects.mixin({}, this._rawOptions.hover || {});
86

87
		this._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS);
A
Alex Dima 已提交
88
		this.editor = null;
E
Erich Gamma 已提交
89
		this._isDominatedByLongLines = false;
90
		this._lineNumbersDigitCount = 1;
A
Alex Dima 已提交
91

92
		this._register(EditorZoom.onDidChangeZoomLevel(_ => this._recomputeOptions()));
93
		this._register(TabFocus.onDidChangeTabFocus(_ => this._recomputeOptions()));
E
Erich Gamma 已提交
94 95
	}

A
Alex Dima 已提交
96 97 98
	public observeReferenceElement(dimension?: editorCommon.IDimension): void {
	}

E
Erich Gamma 已提交
99 100 101 102 103
	public dispose(): void {
		super.dispose();
	}

	protected _recomputeOptions(): void {
A
Alex Dima 已提交
104 105
		const oldOptions = this.editor;
		const newOptions = this._computeInternalOptions();
106

A
Alex Dima 已提交
107
		if (oldOptions && oldOptions.equals(newOptions)) {
108
			return;
E
Erich Gamma 已提交
109 110
		}

111
		this.editor = newOptions;
E
Erich Gamma 已提交
112

A
Alex Dima 已提交
113 114
		if (oldOptions) {
			this._onDidChange.fire(oldOptions.createChangeEvent(newOptions));
115
		}
E
Erich Gamma 已提交
116
	}
117

118
	public getRawOptions(): editorOptions.IEditorOptions {
119
		return this._rawOptions;
E
Erich Gamma 已提交
120
	}
121

122
	private _computeInternalOptions(): editorOptions.InternalEditorOptions {
123
		const opts = this._validatedOptions;
A
Alex Dima 已提交
124 125
		const partialEnv = this._getEnvConfiguration();
		const bareFontInfo = BareFontInfo.createFromRawSettings(this._rawOptions, partialEnv.zoomLevel);
A
Alex Dima 已提交
126
		const env: editorOptions.IEnvironmentalOptions = {
A
Alex Dima 已提交
127 128
			outerWidth: partialEnv.outerWidth,
			outerHeight: partialEnv.outerHeight,
129
			fontInfo: this.readConfiguration(bareFontInfo),
130
			extraEditorClassName: partialEnv.extraEditorClassName,
131 132
			isDominatedByLongLines: this._isDominatedByLongLines,
			lineNumbersDigitCount: this._lineNumbersDigitCount,
133
			emptySelectionClipboard: partialEnv.emptySelectionClipboard,
A
Alex Dima 已提交
134
			pixelRatio: partialEnv.pixelRatio,
135 136
			tabFocusMode: TabFocus.getTabFocusMode(),
			accessibilitySupport: partialEnv.accessibilitySupport
A
Alex Dima 已提交
137
		};
138
		return editorOptions.InternalEditorOptionsFactory.createInternalEditorOptions(env, opts);
E
Erich Gamma 已提交
139 140
	}

141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
	private static _primitiveArrayEquals(a: any[], b: any[]): boolean {
		if (a.length !== b.length) {
			return false;
		}
		for (let i = 0; i < a.length; i++) {
			if (a[i] !== b[i]) {
				return false;
			}
		}
		return true;
	}

	private static _subsetEquals(base: object, subset: object): boolean {
		for (let key in subset) {
			if (hasOwnProperty.call(subset, key)) {
				const subsetValue = subset[key];
				const baseValue = base[key];

				if (baseValue === subsetValue) {
					continue;
				}
				if (Array.isArray(baseValue) && Array.isArray(subsetValue)) {
					if (!this._primitiveArrayEquals(baseValue, subsetValue)) {
						return false;
					}
					continue;
				}
				if (typeof baseValue === 'object' && typeof subsetValue === 'object') {
					if (!this._subsetEquals(baseValue, subsetValue)) {
						return false;
					}
					continue;
				}

				return false;
			}
		}
		return true;
	}

181
	public updateOptions(newOptions: editorOptions.IEditorOptions): void {
182 183 184 185 186 187
		if (typeof newOptions === 'undefined') {
			return;
		}
		if (CommonEditorConfiguration._subsetEquals(this._rawOptions, newOptions)) {
			return;
		}
188
		this._rawOptions = objects.mixin(this._rawOptions, newOptions || {});
189
		this._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS);
E
Erich Gamma 已提交
190 191 192
		this._recomputeOptions();
	}

J
Johannes Rieken 已提交
193
	public setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {
E
Erich Gamma 已提交
194 195 196 197
		this._isDominatedByLongLines = isDominatedByLongLines;
		this._recomputeOptions();
	}

J
Johannes Rieken 已提交
198
	public setMaxLineNumber(maxLineNumber: number): void {
199
		let digitCount = CommonEditorConfiguration._digitCount(maxLineNumber);
200
		if (this._lineNumbersDigitCount === digitCount) {
A
Alex Dima 已提交
201 202
			return;
		}
203
		this._lineNumbersDigitCount = digitCount;
E
Erich Gamma 已提交
204 205 206
		this._recomputeOptions();
	}

207
	private static _digitCount(n: number): number {
A
Alex Dima 已提交
208
		let r = 0;
209 210 211 212 213 214
		while (n) {
			n = Math.floor(n / 10);
			r++;
		}
		return r ? r : 1;
	}
A
Alex Dima 已提交
215
	protected abstract _getEnvConfiguration(): IEnvConfiguration;
216

217
	protected abstract readConfiguration(styling: BareFontInfo): FontInfo;
218

E
Erich Gamma 已提交
219 220
}

221
const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
222
const editorConfiguration: IConfigurationNode = {
E
Erich Gamma 已提交
223 224 225
	'id': 'editor',
	'order': 5,
	'type': 'object',
226
	'title': nls.localize('editorConfigurationTitle', "Editor"),
227
	'overridable': true,
S
Sandeep Somavarapu 已提交
228
	'scope': ConfigurationScope.RESOURCE,
J
Johannes Rieken 已提交
229 230
	'properties': {
		'editor.fontFamily': {
E
Erich Gamma 已提交
231
			'type': 'string',
232
			'default': EDITOR_FONT_DEFAULTS.fontFamily,
E
Erich Gamma 已提交
233 234
			'description': nls.localize('fontFamily', "Controls the font family.")
		},
J
Johannes Rieken 已提交
235
		'editor.fontWeight': {
236
			'type': 'string',
237
			'enum': ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
238
			'default': EDITOR_FONT_DEFAULTS.fontWeight,
239 240
			'description': nls.localize('fontWeight', "Controls the font weight.")
		},
J
Johannes Rieken 已提交
241
		'editor.fontSize': {
E
Erich Gamma 已提交
242
			'type': 'number',
243
			'default': EDITOR_FONT_DEFAULTS.fontSize,
244
			'description': nls.localize('fontSize', "Controls the font size in pixels.")
E
Erich Gamma 已提交
245
		},
J
Johannes Rieken 已提交
246
		'editor.lineHeight': {
E
Erich Gamma 已提交
247
			'type': 'number',
248
			'default': EDITOR_FONT_DEFAULTS.lineHeight,
S
SteVen Batten 已提交
249
			'description': nls.localize('lineHeight', "Controls the line height. Use 0 to compute the line height from the font size.")
E
Erich Gamma 已提交
250
		},
251 252
		'editor.letterSpacing': {
			'type': 'number',
253
			'default': EDITOR_FONT_DEFAULTS.letterSpacing,
254 255
			'description': nls.localize('letterSpacing', "Controls the letter spacing in pixels.")
		},
J
Johannes Rieken 已提交
256
		'editor.lineNumbers': {
257
			'type': 'string',
258
			'enum': ['off', 'on', 'relative', 'interval'],
259 260 261
			'enumDescriptions': [
				nls.localize('lineNumbers.off', "Line numbers are not rendered."),
				nls.localize('lineNumbers.on', "Line numbers are rendered as absolute number."),
262 263
				nls.localize('lineNumbers.relative', "Line numbers are rendered as distance in lines to cursor position."),
				nls.localize('lineNumbers.interval', "Line numbers are rendered every 10 lines.")
264
			],
265
			'default': 'on',
A
Alex Dima 已提交
266
			'description': nls.localize('lineNumbers', "Controls the display of line numbers.")
E
Erich Gamma 已提交
267
		},
J
Johannes Rieken 已提交
268
		'editor.rulers': {
269 270 271 272
			'type': 'array',
			'items': {
				'type': 'number'
			},
A
Alex Dima 已提交
273
			'default': EDITOR_DEFAULTS.viewInfo.rulers,
S
SteVen Batten 已提交
274
			'description': nls.localize('rulers', "Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.")
275
		},
J
Johannes Rieken 已提交
276
		'editor.wordSeparators': {
A
Alex Dima 已提交
277
			'type': 'string',
278
			'default': EDITOR_DEFAULTS.wordSeparators,
M
Matt Bierner 已提交
279
			'description': nls.localize('wordSeparators', "Characters that will be used as word separators when doing word related navigations or operations.")
A
Alex Dima 已提交
280
		},
J
Johannes Rieken 已提交
281
		'editor.tabSize': {
282
			'type': 'number',
283
			'default': EDITOR_MODEL_DEFAULTS.tabSize,
E
Erich Gamma 已提交
284
			'minimum': 1,
285
			'description': nls.localize('tabSize', "The number of spaces a tab is equal to. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on."),
286
			'errorMessage': nls.localize('tabSize.errorMessage', "Expected 'number'. Note that the value \"auto\" has been replaced by the `editor.detectIndentation` setting.")
E
Erich Gamma 已提交
287
		},
J
Johannes Rieken 已提交
288
		'editor.insertSpaces': {
289
			'type': 'boolean',
290
			'default': EDITOR_MODEL_DEFAULTS.insertSpaces,
291
			'description': nls.localize('insertSpaces', "Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on."),
292
			'errorMessage': nls.localize('insertSpaces.errorMessage', "Expected 'boolean'. Note that the value \"auto\" has been replaced by the `editor.detectIndentation` setting.")
E
Erich Gamma 已提交
293
		},
J
Johannes Rieken 已提交
294
		'editor.detectIndentation': {
295
			'type': 'boolean',
296
			'default': EDITOR_MODEL_DEFAULTS.detectIndentation,
297
			'description': nls.localize('detectIndentation', "Controls whether `#editor.tabSize#` and `#editor.insertSpaces#` will be automatically detected when a file is opened based on the file contents.")
298
		},
J
Johannes Rieken 已提交
299
		'editor.roundedSelection': {
E
Erich Gamma 已提交
300
			'type': 'boolean',
A
Alex Dima 已提交
301
			'default': EDITOR_DEFAULTS.viewInfo.roundedSelection,
302
			'description': nls.localize('roundedSelection', "Controls whether selections should have rounded corners.")
E
Erich Gamma 已提交
303
		},
J
Johannes Rieken 已提交
304
		'editor.scrollBeyondLastLine': {
E
Erich Gamma 已提交
305
			'type': 'boolean',
A
Alex Dima 已提交
306
			'default': EDITOR_DEFAULTS.viewInfo.scrollBeyondLastLine,
S
SteVen Batten 已提交
307
			'description': nls.localize('scrollBeyondLastLine', "Controls whether the editor will scroll beyond the last line.")
E
Erich Gamma 已提交
308
		},
309 310 311
		'editor.scrollBeyondLastColumn': {
			'type': 'number',
			'default': EDITOR_DEFAULTS.viewInfo.scrollBeyondLastColumn,
S
SteVen Batten 已提交
312
			'description': nls.localize('scrollBeyondLastColumn', "Controls the number of extra characters beyond which the editor will scroll horizontally.")
313
		},
314 315 316
		'editor.smoothScrolling': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.viewInfo.smoothScrolling,
317
			'description': nls.localize('smoothScrolling', "Controls whether the editor will scroll using an animation.")
318
		},
319 320
		'editor.minimap.enabled': {
			'type': 'boolean',
A
Alex Dima 已提交
321
			'default': EDITOR_DEFAULTS.viewInfo.minimap.enabled,
S
SteVen Batten 已提交
322
			'description': nls.localize('minimap.enabled', "Controls whether the minimap is shown.")
323
		},
324 325 326 327
		'editor.minimap.side': {
			'type': 'string',
			'enum': ['left', 'right'],
			'default': EDITOR_DEFAULTS.viewInfo.minimap.side,
A
Alex Dima 已提交
328
			'description': nls.localize('minimap.side', "Controls the side where to render the minimap.")
329
		},
330 331 332 333
		'editor.minimap.showSlider': {
			'type': 'string',
			'enum': ['always', 'mouseover'],
			'default': EDITOR_DEFAULTS.viewInfo.minimap.showSlider,
A
Alex Dima 已提交
334
			'description': nls.localize('minimap.showSlider', "Controls whether the minimap slider is automatically hidden.")
335
		},
336
		'editor.minimap.renderCharacters': {
337
			'type': 'boolean',
A
Alex Dima 已提交
338
			'default': EDITOR_DEFAULTS.viewInfo.minimap.renderCharacters,
S
SteVen Batten 已提交
339
			'description': nls.localize('minimap.renderCharacters', "Render the actual characters on a line as opposed to color blocks.")
340
		},
A
Alex Dima 已提交
341 342
		'editor.minimap.maxColumn': {
			'type': 'number',
A
Alex Dima 已提交
343
			'default': EDITOR_DEFAULTS.viewInfo.minimap.maxColumn,
S
SteVen Batten 已提交
344
			'description': nls.localize('minimap.maxColumn', "Limit the width of the minimap to render at most a certain number of columns.")
A
Alex Dima 已提交
345
		},
A
Alex Dima 已提交
346 347 348
		'editor.hover.enabled': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.hover.enabled,
349
			'description': nls.localize('hover.enabled', "Controls whether the hover is shown.")
A
Alex Dima 已提交
350
		},
351 352 353
		'editor.hover.delay': {
			'type': 'number',
			'default': EDITOR_DEFAULTS.contribInfo.hover.delay,
354
			'description': nls.localize('hover.delay', "Time delay in milliseconds after which to the hover is shown.")
355
		},
356 357 358
		'editor.hover.sticky': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.hover.sticky,
359
			'description': nls.localize('hover.sticky', "Controls whether the hover should remain visible when mouse is moved over it.")
360
		},
361 362 363
		'editor.find.seedSearchStringFromSelection': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.seedSearchStringFromSelection,
364
			'description': nls.localize('find.seedSearchStringFromSelection', "Controls whether the search string in the Find Widget is seeded from the editor selection.")
365
		},
R
rebornix 已提交
366 367 368
		'editor.find.autoFindInSelection': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.autoFindInSelection,
369
			'description': nls.localize('find.autoFindInSelection', "Controls whether the find operation is carried on selected text or the entire file in the editor.")
R
rebornix 已提交
370
		},
371 372 373
		'editor.find.globalFindClipboard': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.globalFindClipboard,
374
			'description': nls.localize('find.globalFindClipboard', "Controls whether the Find Widget should read or modify the shared find clipboard on macOS."),
375
			'included': platform.isMacintosh
376
		},
J
Johannes Rieken 已提交
377
		'editor.wordWrap': {
378
			'type': 'string',
A
Alex Dima 已提交
379
			'enum': ['off', 'on', 'wordWrapColumn', 'bounded'],
380 381 382
			'enumDescriptions': [
				nls.localize('wordWrap.off', "Lines will never wrap."),
				nls.localize('wordWrap.on', "Lines will wrap at the viewport width."),
A
Alex Dima 已提交
383 384 385 386 387
				nls.localize({
					key: 'wordWrap.wordWrapColumn',
					comment: [
						'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
					]
388
				}, "Lines will wrap at `#editor.wordWrapColumn#`."),
A
Alex Dima 已提交
389 390 391 392
				nls.localize({
					key: 'wordWrap.bounded',
					comment: [
						'- viewport means the edge of the visible window size.',
A
Alex Dima 已提交
393
						'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
A
Alex Dima 已提交
394
					]
395
				}, "Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`."),
396
			],
397
			'default': EDITOR_DEFAULTS.wordWrap,
A
Alex Dima 已提交
398 399 400 401 402 403
			'description': nls.localize({
				key: 'wordWrap',
				comment: [
					'- \'off\', \'on\', \'wordWrapColumn\' and \'bounded\' refer to values the setting can take and should not be localized.',
					'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
				]
404
			}, "Controls how lines should wrap.")
405 406 407
		},
		'editor.wordWrapColumn': {
			'type': 'integer',
408
			'default': EDITOR_DEFAULTS.wordWrapColumn,
409
			'minimum': 1,
A
Alex Dima 已提交
410 411 412 413 414 415
			'description': nls.localize({
				key: 'wordWrapColumn',
				comment: [
					'- `editor.wordWrap` refers to a different setting and should not be localized.',
					'- \'wordWrapColumn\' and \'bounded\' refer to values the different setting can take and should not be localized.'
				]
416
			}, "Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.")
417
		},
J
Johannes Rieken 已提交
418
		'editor.wrappingIndent': {
E
Erich Gamma 已提交
419
			'type': 'string',
420
			'enum': ['none', 'same', 'indent', 'deepIndent'],
M
Matt Bierner 已提交
421 422 423 424 425 426
			enumDescriptions: [
				nls.localize('wrappingIndent.none', "No indentation. Wrapped lines begin at column 1."),
				nls.localize('wrappingIndent.same', "Wrapped lines get the same indentation as the parent."),
				nls.localize('wrappingIndent.indent', "Wrapped lines get +1 indentation toward the parent."),
				nls.localize('wrappingIndent.deepIndent', "Wrapped lines get +2 indentation toward the parent."),
			],
427
			'default': 'same',
M
Matt Bierner 已提交
428
			'description': nls.localize('wrappingIndent', "Controls the indentation of wrapped lines."),
E
Erich Gamma 已提交
429
		},
J
Johannes Rieken 已提交
430
		'editor.mouseWheelScrollSensitivity': {
E
Erich Gamma 已提交
431
			'type': 'number',
A
Alex Dima 已提交
432
			'default': EDITOR_DEFAULTS.viewInfo.scrollbar.mouseWheelScrollSensitivity,
433
			'description': nls.localize('mouseWheelScrollSensitivity', "A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.")
E
Erich Gamma 已提交
434
		},
435
		'editor.multiCursorModifier': {
436
			'type': 'string',
437 438
			'enum': ['ctrlCmd', 'alt'],
			'enumDescriptions': [
439 440
				nls.localize('multiCursorModifier.ctrlCmd', "Maps to `Control` on Windows and Linux and to `Command` on macOS."),
				nls.localize('multiCursorModifier.alt', "Maps to `Alt` on Windows and Linux and to `Option` on macOS.")
441
			],
442
			'default': 'alt',
443 444 445 446 447 448
			'description': nls.localize({
				key: 'multiCursorModifier',
				comment: [
					'- `ctrlCmd` refers to a value the setting can take and should not be localized.',
					'- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized.'
				]
449
			}, "The modifier to be used to add multiple cursors with the mouse. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier. [Read more](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).")
450
		},
A
Alex Dima 已提交
451
		'editor.multiCursorMergeOverlapping': {
452
			'type': 'boolean',
A
Alex Dima 已提交
453 454
			'default': EDITOR_DEFAULTS.multiCursorMergeOverlapping,
			'description': nls.localize('multiCursorMergeOverlapping', "Merge multiple cursors when they are overlapping.")
455
		},
J
Johannes Rieken 已提交
456
		'editor.quickSuggestions': {
457
			'anyOf': [
458 459 460
				{
					type: 'boolean',
				},
461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481
				{
					type: 'object',
					properties: {
						strings: {
							type: 'boolean',
							default: false,
							description: nls.localize('quickSuggestions.strings', "Enable quick suggestions inside strings.")
						},
						comments: {
							type: 'boolean',
							default: false,
							description: nls.localize('quickSuggestions.comments', "Enable quick suggestions inside comments.")
						},
						other: {
							type: 'boolean',
							default: true,
							description: nls.localize('quickSuggestions.other', "Enable quick suggestions outside of strings and comments.")
						},
					}
				}
			],
A
Alex Dima 已提交
482
			'default': EDITOR_DEFAULTS.contribInfo.quickSuggestions,
S
SteVen Batten 已提交
483
			'description': nls.localize('quickSuggestions', "Controls whether suggestions should automatically show up while typing.")
E
Erich Gamma 已提交
484
		},
J
Johannes Rieken 已提交
485
		'editor.quickSuggestionsDelay': {
E
Erich Gamma 已提交
486
			'type': 'integer',
A
Alex Dima 已提交
487
			'default': EDITOR_DEFAULTS.contribInfo.quickSuggestionsDelay,
E
Erich Gamma 已提交
488
			'minimum': 0,
S
SteVen Batten 已提交
489
			'description': nls.localize('quickSuggestionsDelay', "Controls the delay in milliseconds after which quick suggestions will show up.")
E
Erich Gamma 已提交
490
		},
J
Johannes Rieken 已提交
491
		'editor.parameterHints': {
J
Joao Moreno 已提交
492
			'type': 'boolean',
A
Alex Dima 已提交
493
			'default': EDITOR_DEFAULTS.contribInfo.parameterHints,
S
SteVen Batten 已提交
494
			'description': nls.localize('parameterHints', "Enables a pop-up that shows parameter documentation and type information as you type.")
J
Joao Moreno 已提交
495
		},
J
Johannes Rieken 已提交
496
		'editor.autoClosingBrackets': {
E
Erich Gamma 已提交
497
			'type': 'boolean',
498
			'default': EDITOR_DEFAULTS.autoClosingBrackets,
499
			'description': nls.localize('autoClosingBrackets', "Controls whether the editor should automatically close brackets after the user adds an opening bracket.")
E
Erich Gamma 已提交
500
		},
J
Johannes Rieken 已提交
501
		'editor.formatOnType': {
E
Erich Gamma 已提交
502
			'type': 'boolean',
A
Alex Dima 已提交
503
			'default': EDITOR_DEFAULTS.contribInfo.formatOnType,
504
			'description': nls.localize('formatOnType', "Controls whether the editor should automatically format the line after typing.")
E
Erich Gamma 已提交
505
		},
506 507
		'editor.formatOnPaste': {
			'type': 'boolean',
A
Alex Dima 已提交
508
			'default': EDITOR_DEFAULTS.contribInfo.formatOnPaste,
509
			'description': nls.localize('formatOnPaste', "Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.")
510
		},
511 512 513
		'editor.autoIndent': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.autoIndent,
514
			'description': nls.localize('autoIndent', "Controls whether the editor should automatically adjust the indentation when users type, paste or move lines. Extensions with indentation rules of the language must be available.")
515
		},
J
Johannes Rieken 已提交
516
		'editor.suggestOnTriggerCharacters': {
E
Erich Gamma 已提交
517
			'type': 'boolean',
A
Alex Dima 已提交
518
			'default': EDITOR_DEFAULTS.contribInfo.suggestOnTriggerCharacters,
519
			'description': nls.localize('suggestOnTriggerCharacters', "Controls whether suggestions should automatically show up when typing trigger characters.")
E
Erich Gamma 已提交
520
		},
J
Johannes Rieken 已提交
521
		'editor.acceptSuggestionOnEnter': {
522 523
			'type': 'string',
			'enum': ['on', 'smart', 'off'],
A
Alex Dima 已提交
524
			'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnEnter,
525 526 527 528 529 530
			'enumDescriptions': [
				'',
				nls.localize('acceptSuggestionOnEnterSmart', "Only accept a suggestion with `Enter` when it makes a textual change."),
				''
			],
			'description': nls.localize('acceptSuggestionOnEnter', "Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.")
531 532 533
		},
		'editor.acceptSuggestionOnCommitCharacter': {
			'type': 'boolean',
A
Alex Dima 已提交
534
			'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnCommitCharacter,
535
			'description': nls.localize('acceptSuggestionOnCommitCharacter', "Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.")
536
		},
537
		'editor.snippetSuggestions': {
538
			'type': 'string',
539
			'enum': ['top', 'bottom', 'inline', 'none'],
J
Johannes Rieken 已提交
540 541 542 543 544 545
			'enumDescriptions': [
				nls.localize('snippetSuggestions.top', "Show snippet suggestions on top of other suggestions."),
				nls.localize('snippetSuggestions.bottom', "Show snippet suggestions below other suggestions."),
				nls.localize('snippetSuggestions.inline', "Show snippets suggestions with other suggestions."),
				nls.localize('snippetSuggestions.none', "Do not show snippet suggestions."),
			],
546
			'default': EDITOR_DEFAULTS.contribInfo.suggest.snippets,
547
			'description': nls.localize('snippetSuggestions', "Controls whether snippets are shown with other suggestions and how they are sorted.")
548
		},
549 550
		'editor.emptySelectionClipboard': {
			'type': 'boolean',
551
			'default': EDITOR_DEFAULTS.emptySelectionClipboard,
552 553
			'description': nls.localize('emptySelectionClipboard', "Controls whether copying without a selection copies the current line.")
		},
554
		'editor.wordBasedSuggestions': {
555
			'type': 'boolean',
A
Alex Dima 已提交
556
			'default': EDITOR_DEFAULTS.contribInfo.wordBasedSuggestions,
J
Johannes Rieken 已提交
557
			'description': nls.localize('wordBasedSuggestions', "Controls whether completions should be computed based on words in the document.")
558
		},
J
Johannes Rieken 已提交
559
		'editor.suggestSelection': {
560
			'type': 'string',
J
Johannes Rieken 已提交
561
			'enum': ['first', 'recentlyUsed', 'recentlyUsedByPrefix'],
J
Johannes Rieken 已提交
562
			'enumDescriptions': [
J
Johannes Rieken 已提交
563 564 565
				nls.localize('suggestSelection.first', "Always select the first suggestion."),
				nls.localize('suggestSelection.recentlyUsed', "Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently."),
				nls.localize('suggestSelection.recentlyUsedByPrefix', "Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`."),
J
Johannes Rieken 已提交
566
			],
J
Johannes Rieken 已提交
567 568
			'default': 'recentlyUsed',
			'description': nls.localize('suggestSelection', "Controls how suggestions are pre-selected when showing the suggest list.")
569
		},
J
Johannes Rieken 已提交
570
		'editor.suggestFontSize': {
J
Joao Moreno 已提交
571 572 573
			'type': 'integer',
			'default': 0,
			'minimum': 0,
574
			'description': nls.localize('suggestFontSize', "Font size for the suggest widget.")
J
Joao Moreno 已提交
575
		},
J
Johannes Rieken 已提交
576
		'editor.suggestLineHeight': {
J
Joao Moreno 已提交
577 578 579
			'type': 'integer',
			'default': 0,
			'minimum': 0,
580
			'description': nls.localize('suggestLineHeight', "Line height for the suggest widget.")
J
Joao Moreno 已提交
581
		},
582 583 584 585 586
		'editor.suggest.filterGraceful': {
			type: 'boolean',
			default: true,
			description: nls.localize('suggest.filterGraceful', "Controls whether filtering and sorting suggestions accounts for small typos.")
		},
587 588 589 590 591
		'editor.suggest.snippetsPreventQuickSuggestions': {
			type: 'boolean',
			default: true,
			description: nls.localize('suggest.snippetsPreventQuickSuggestions', "Control whether an active snippet prevents quick suggestions.")
		},
J
Johannes Rieken 已提交
592
		'editor.selectionHighlight': {
E
Erich Gamma 已提交
593
			'type': 'boolean',
A
Alex Dima 已提交
594
			'default': EDITOR_DEFAULTS.contribInfo.selectionHighlight,
E
Erich Gamma 已提交
595 596
			'description': nls.localize('selectionHighlight', "Controls whether the editor should highlight similar matches to the selection")
		},
597 598
		'editor.occurrencesHighlight': {
			'type': 'boolean',
A
Alex Dima 已提交
599
			'default': EDITOR_DEFAULTS.contribInfo.occurrencesHighlight,
600
			'description': nls.localize('occurrencesHighlight', "Controls whether the editor should highlight semantic symbol occurrences.")
601
		},
J
Johannes Rieken 已提交
602
		'editor.overviewRulerLanes': {
E
Erich Gamma 已提交
603 604
			'type': 'integer',
			'default': 3,
605
			'description': nls.localize('overviewRulerLanes', "Controls the number of decorations that can show up at the same position in the overview ruler.")
E
Erich Gamma 已提交
606
		},
607
		'editor.overviewRulerBorder': {
608
			'type': 'boolean',
A
Alex Dima 已提交
609
			'default': EDITOR_DEFAULTS.viewInfo.overviewRulerBorder,
S
SteVen Batten 已提交
610
			'description': nls.localize('overviewRulerBorder', "Controls whether a border should be drawn around the overview ruler.")
611
		},
J
Johannes Rieken 已提交
612
		'editor.cursorBlinking': {
613
			'type': 'string',
614
			'enum': ['blink', 'smooth', 'phase', 'expand', 'solid'],
615
			'default': editorOptions.blinkingStyleToString(EDITOR_DEFAULTS.viewInfo.cursorBlinking),
A
Alex Dima 已提交
616
			'description': nls.localize('cursorBlinking', "Control the cursor animation style.")
617
		},
618 619
		'editor.mouseWheelZoom': {
			'type': 'boolean',
A
Alex Dima 已提交
620
			'default': EDITOR_DEFAULTS.viewInfo.mouseWheelZoom,
S
SteVen Batten 已提交
621
			'description': nls.localize('mouseWheelZoom', "Zoom the font of the editor when using mouse wheel and holding `Ctrl`.")
622
		},
J
Johannes Rieken 已提交
623
		'editor.cursorStyle': {
M
markrendle 已提交
624
			'type': 'string',
625
			'enum': ['block', 'block-outline', 'line', 'line-thin', 'underline', 'underline-thin'],
626
			'default': editorOptions.cursorStyleToString(EDITOR_DEFAULTS.viewInfo.cursorStyle),
627
			'description': nls.localize('cursorStyle', "Controls the cursor style.")
M
markrendle 已提交
628
		},
629
		'editor.cursorWidth': {
630
			'type': 'integer',
631
			'default': EDITOR_DEFAULTS.viewInfo.cursorWidth,
632
			'description': nls.localize('cursorWidth', "Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.")
633
		},
J
Johannes Rieken 已提交
634
		'editor.fontLigatures': {
635
			'type': 'boolean',
A
Alex Dima 已提交
636
			'default': EDITOR_DEFAULTS.viewInfo.fontLigatures,
637
			'description': nls.localize('fontLigatures', "Enables/Disables font ligatures.")
638
		},
J
Johannes Rieken 已提交
639
		'editor.hideCursorInOverviewRuler': {
E
Erich Gamma 已提交
640
			'type': 'boolean',
A
Alex Dima 已提交
641
			'default': EDITOR_DEFAULTS.viewInfo.hideCursorInOverviewRuler,
642
			'description': nls.localize('hideCursorInOverviewRuler', "Controls whether the cursor should be hidden in the overview ruler.")
E
Erich Gamma 已提交
643 644
		},
		'editor.renderWhitespace': {
645 646
			'type': 'string',
			'enum': ['none', 'boundary', 'all'],
647 648 649 650 651
			'enumDescriptions': [
				'',
				nls.localize('renderWhiteSpace.boundary', "Render whitespace characters except for single spaces between words."),
				''
			],
A
Alex Dima 已提交
652
			default: EDITOR_DEFAULTS.viewInfo.renderWhitespace,
653
			description: nls.localize('renderWhitespace', "Controls how the editor should render whitespace characters.")
E
Erich Gamma 已提交
654
		},
655 656
		'editor.renderControlCharacters': {
			'type': 'boolean',
A
Alex Dima 已提交
657
			default: EDITOR_DEFAULTS.viewInfo.renderControlCharacters,
658
			description: nls.localize('renderControlCharacters', "Controls whether the editor should render control characters.")
659
		},
660 661
		'editor.renderIndentGuides': {
			'type': 'boolean',
A
Alex Dima 已提交
662
			default: EDITOR_DEFAULTS.viewInfo.renderIndentGuides,
663
			description: nls.localize('renderIndentGuides', "Controls whether the editor should render indent guides.")
664
		},
665 666 667
		'editor.highlightActiveIndentGuide': {
			'type': 'boolean',
			default: EDITOR_DEFAULTS.viewInfo.highlightActiveIndentGuide,
668
			description: nls.localize('highlightActiveIndentGuide', "Controls whether the editor should highlight the active indent guide.")
669
		},
670
		'editor.renderLineHighlight': {
671 672
			'type': 'string',
			'enum': ['none', 'gutter', 'line', 'all'],
S
SteVen Batten 已提交
673 674 675 676 677 678
			'enumDescriptions': [
				'',
				'',
				'',
				nls.localize('renderLineHighlight.all', "Highlights both the gutter and the current line."),
			],
A
Alex Dima 已提交
679
			default: EDITOR_DEFAULTS.viewInfo.renderLineHighlight,
S
SteVen Batten 已提交
680
			description: nls.localize('renderLineHighlight', "Controls how the editor should render the current line highlight.")
681
		},
J
Johannes Rieken 已提交
682
		'editor.codeLens': {
E
Erich Gamma 已提交
683
			'type': 'boolean',
A
Alex Dima 已提交
684
			'default': EDITOR_DEFAULTS.contribInfo.codeLens,
685
			'description': nls.localize('codeLens', "Controls whether the editor shows CodeLens")
E
Erich Gamma 已提交
686
		},
687 688 689 690 691
		'editor.cycleParameterHints': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.cycleParameterHints,
			'description': nls.localize('cycleParameterHints', "Controls whether the parameter hints menu cycles or closes when reaching the end of the list.")
		},
J
Johannes Rieken 已提交
692
		'editor.folding': {
M
Martin Aeschlimann 已提交
693
			'type': 'boolean',
A
Alex Dima 已提交
694
			'default': EDITOR_DEFAULTS.contribInfo.folding,
695
			'description': nls.localize('folding', "Controls whether the editor has code folding enabled")
M
Martin Aeschlimann 已提交
696
		},
697 698 699 700
		'editor.foldingStrategy': {
			'type': 'string',
			'enum': ['auto', 'indentation'],
			'default': EDITOR_DEFAULTS.contribInfo.foldingStrategy,
701
			'description': nls.localize('foldingStrategy', "Controls the strategy for computing folding ranges. `auto` uses a language specific folding strategy, if available. `indentation` uses the indentation based folding strategy.")
702
		},
703 704 705 706 707
		'editor.showFoldingControls': {
			'type': 'string',
			'enum': ['always', 'mouseover'],
			'default': EDITOR_DEFAULTS.contribInfo.showFoldingControls,
			'description': nls.localize('showFoldingControls', "Controls whether the fold controls on the gutter are automatically hidden.")
708
		},
709
		'editor.matchBrackets': {
710
			'type': 'boolean',
A
Alex Dima 已提交
711
			'default': EDITOR_DEFAULTS.contribInfo.matchBrackets,
712
			'description': nls.localize('matchBrackets', "Highlight matching brackets when one of them is selected.")
713
		},
I
isidor 已提交
714 715
		'editor.glyphMargin': {
			'type': 'boolean',
A
Alex Dima 已提交
716
			'default': EDITOR_DEFAULTS.viewInfo.glyphMargin,
I
isidor 已提交
717 718
			'description': nls.localize('glyphMargin', "Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.")
		},
J
Johannes Rieken 已提交
719
		'editor.useTabStops': {
720
			'type': 'boolean',
721
			'default': EDITOR_DEFAULTS.useTabStops,
M
Matt Bierner 已提交
722
			'description': nls.localize('useTabStops', "Inserting and deleting whitespace follows tab stops.")
723
		},
J
Johannes Rieken 已提交
724
		'editor.trimAutoWhitespace': {
725
			'type': 'boolean',
726
			'default': EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,
M
Matt Bierner 已提交
727
			'description': nls.localize('trimAutoWhitespace', "Remove trailing auto inserted whitespace.")
728
		},
J
Johannes Rieken 已提交
729
		'editor.stablePeek': {
730
			'type': 'boolean',
731
			'default': false,
732
			'description': nls.localize('stablePeek', "Keep peek editors open even when double clicking their content or when hitting `Escape`.")
733
		},
734
		'editor.dragAndDrop': {
735
			'type': 'boolean',
736
			'default': EDITOR_DEFAULTS.dragAndDrop,
737
			'description': nls.localize('dragAndDrop', "Controls whether the editor should allow moving selections via drag and drop.")
738
		},
739 740 741 742 743 744 745 746 747 748 749
		'editor.accessibilitySupport': {
			'type': 'string',
			'enum': ['auto', 'on', 'off'],
			'enumDescriptions': [
				nls.localize('accessibilitySupport.auto', "The editor will use platform APIs to detect when a Screen Reader is attached."),
				nls.localize('accessibilitySupport.on', "The editor will be permanently optimized for usage with a Screen Reader."),
				nls.localize('accessibilitySupport.off', "The editor will never be optimized for usage with a Screen Reader."),
			],
			'default': EDITOR_DEFAULTS.accessibilitySupport,
			'description': nls.localize('accessibilitySupport', "Controls whether the editor should run in a mode where it is optimized for screen readers.")
		},
750 751 752 753 754
		'editor.showUnused': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.showUnused,
			'description': nls.localize('showUnused', "Controls fading out of unused code.")
		},
755
		'editor.links': {
756
			'type': 'boolean',
757
			'default': EDITOR_DEFAULTS.contribInfo.links,
S
SteVen Batten 已提交
758
			'description': nls.localize('links', "Controls whether the editor should detect links and make them clickable.")
759
		},
R
rebornix 已提交
760
		'editor.colorDecorators': {
761
			'type': 'boolean',
R
rebornix 已提交
762
			'default': EDITOR_DEFAULTS.contribInfo.colorDecorators,
763
			'description': nls.localize('colorDecorators', "Controls whether the editor should render the inline color decorators and color picker.")
764
		},
765 766 767
		'editor.lightbulb.enabled': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.lightbulbEnabled,
S
SteVen Batten 已提交
768
			'description': nls.localize('codeActions', "Enables the code action lightbulb in the editor.")
769
		},
770 771 772 773 774
		'editor.codeActionsOnSave': {
			'type': 'object',
			'properties': {
				'source.organizeImports': {
					'type': 'boolean',
775
					'description': nls.localize('codeActionsOnSave.organizeImports', "Controls whether organize imports action should be run on file save.")
776 777 778 779 780 781
				}
			},
			'additionalProperties': {
				'type': 'boolean'
			},
			'default': EDITOR_DEFAULTS.contribInfo.codeActionsOnSave,
M
Matt Bierner 已提交
782
			'description': nls.localize('codeActionsOnSave', "Code action kinds to be run on save.")
783 784 785 786
		},
		'editor.codeActionsOnSaveTimeout': {
			'type': 'number',
			'default': EDITOR_DEFAULTS.contribInfo.codeActionsOnSaveTimeout,
787
			'description': nls.localize('codeActionsOnSaveTimeout', "Timeout in milliseconds after which the code actions that are run on save are cancelled.")
788
		},
789 790 791
		'editor.selectionClipboard': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.selectionClipboard,
S
SteVen Batten 已提交
792
			'description': nls.localize('selectionClipboard', "Controls whether the Linux primary clipboard should be supported."),
793
			'included': platform.isLinux
794
		},
J
Johannes Rieken 已提交
795
		'diffEditor.renderSideBySide': {
E
Erich Gamma 已提交
796 797
			'type': 'boolean',
			'default': true,
798
			'description': nls.localize('sideBySide', "Controls whether the diff editor shows the diff side by side or inline.")
E
Erich Gamma 已提交
799
		},
J
Johannes Rieken 已提交
800
		'diffEditor.ignoreTrimWhitespace': {
E
Erich Gamma 已提交
801 802
			'type': 'boolean',
			'default': true,
803
			'description': nls.localize('ignoreTrimWhitespace', "Controls whether the diff editor shows changes in leading or trailing whitespace as diffs.")
804
		},
805 806 807 808
		'editor.largeFileOptimizations': {
			'type': 'boolean',
			'default': EDITOR_MODEL_DEFAULTS.largeFileOptimizations,
			'description': nls.localize('largeFileOptimizations', "Special handling for large files to disable certain memory intensive features.")
809
		},
810 811 812
		'diffEditor.renderIndicators': {
			'type': 'boolean',
			'default': true,
813
			'description': nls.localize('renderIndicators', "Controls whether the diff editor shows +/- indicators for added/removed changes.")
E
Erich Gamma 已提交
814 815
		}
	}
A
Alex Dima 已提交
816 817
};

818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837
let cachedEditorConfigurationKeys: { [key: string]: boolean; } = null;
function getEditorConfigurationKeys(): { [key: string]: boolean; } {
	if (cachedEditorConfigurationKeys === null) {
		cachedEditorConfigurationKeys = Object.create(null);
		Object.keys(editorConfiguration.properties).forEach((prop) => {
			cachedEditorConfigurationKeys[prop] = true;
		});
	}
	return cachedEditorConfigurationKeys;
}

export function isEditorConfigurationKey(key: string): boolean {
	const editorConfigurationKeys = getEditorConfigurationKeys();
	return (editorConfigurationKeys[`editor.${key}`] || false);
}
export function isDiffEditorConfigurationKey(key: string): boolean {
	const editorConfigurationKeys = getEditorConfigurationKeys();
	return (editorConfigurationKeys[`diffEditor.${key}`] || false);
}

838
configurationRegistry.registerConfiguration(editorConfiguration);