commonEditorConfig.ts 31.2 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
}

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

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

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

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

78 79 80 81 82 83
		// 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 || {});

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

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

	public dispose(): void {
		super.dispose();
	}

	protected _recomputeOptions(): void {
A
Alex Dima 已提交
98 99
		const oldOptions = this.editor;
		const newOptions = this._computeInternalOptions();
100

A
Alex Dima 已提交
101
		if (oldOptions && oldOptions.equals(newOptions)) {
102
			return;
E
Erich Gamma 已提交
103 104
		}

105
		this.editor = newOptions;
E
Erich Gamma 已提交
106

A
Alex Dima 已提交
107 108
		if (oldOptions) {
			this._onDidChange.fire(oldOptions.createChangeEvent(newOptions));
109
		}
E
Erich Gamma 已提交
110
	}
111

112
	public getRawOptions(): editorOptions.IEditorOptions {
113
		return this._rawOptions;
E
Erich Gamma 已提交
114
	}
115

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

135
	public updateOptions(newOptions: editorOptions.IEditorOptions): void {
136
		this._rawOptions = objects.mixin(this._rawOptions, newOptions || {});
137
		this._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS);
E
Erich Gamma 已提交
138 139 140
		this._recomputeOptions();
	}

J
Johannes Rieken 已提交
141
	public setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {
E
Erich Gamma 已提交
142 143 144 145
		this._isDominatedByLongLines = isDominatedByLongLines;
		this._recomputeOptions();
	}

J
Johannes Rieken 已提交
146
	public setMaxLineNumber(maxLineNumber: number): void {
147
		let digitCount = CommonEditorConfiguration._digitCount(maxLineNumber);
148
		if (this._lineNumbersDigitCount === digitCount) {
A
Alex Dima 已提交
149 150
			return;
		}
151
		this._lineNumbersDigitCount = digitCount;
E
Erich Gamma 已提交
152 153 154
		this._recomputeOptions();
	}

155
	private static _digitCount(n: number): number {
A
Alex Dima 已提交
156
		let r = 0;
157 158 159 160 161 162
		while (n) {
			n = Math.floor(n / 10);
			r++;
		}
		return r ? r : 1;
	}
A
Alex Dima 已提交
163
	protected abstract _getEnvConfiguration(): IEnvConfiguration;
164

165
	protected abstract readConfiguration(styling: BareFontInfo): FontInfo;
166

E
Erich Gamma 已提交
167 168
}

169
const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
170
const editorConfiguration: IConfigurationNode = {
E
Erich Gamma 已提交
171 172 173
	'id': 'editor',
	'order': 5,
	'type': 'object',
174
	'title': nls.localize('editorConfigurationTitle', "Editor"),
175
	'overridable': true,
S
Sandeep Somavarapu 已提交
176
	'scope': ConfigurationScope.RESOURCE,
J
Johannes Rieken 已提交
177 178
	'properties': {
		'editor.fontFamily': {
E
Erich Gamma 已提交
179
			'type': 'string',
180
			'default': EDITOR_FONT_DEFAULTS.fontFamily,
E
Erich Gamma 已提交
181 182
			'description': nls.localize('fontFamily', "Controls the font family.")
		},
J
Johannes Rieken 已提交
183
		'editor.fontWeight': {
184
			'type': 'string',
185
			'enum': ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
186
			'default': EDITOR_FONT_DEFAULTS.fontWeight,
187 188
			'description': nls.localize('fontWeight', "Controls the font weight.")
		},
J
Johannes Rieken 已提交
189
		'editor.fontSize': {
E
Erich Gamma 已提交
190
			'type': 'number',
191
			'default': EDITOR_FONT_DEFAULTS.fontSize,
192
			'description': nls.localize('fontSize', "Controls the font size in pixels.")
E
Erich Gamma 已提交
193
		},
J
Johannes Rieken 已提交
194
		'editor.lineHeight': {
E
Erich Gamma 已提交
195
			'type': 'number',
196
			'default': EDITOR_FONT_DEFAULTS.lineHeight,
197
			'description': nls.localize('lineHeight', "Controls the line height. Use 0 to compute the lineHeight from the fontSize.")
E
Erich Gamma 已提交
198
		},
199 200
		'editor.letterSpacing': {
			'type': 'number',
201
			'default': EDITOR_FONT_DEFAULTS.letterSpacing,
202 203
			'description': nls.localize('letterSpacing', "Controls the letter spacing in pixels.")
		},
J
Johannes Rieken 已提交
204
		'editor.lineNumbers': {
205
			'type': 'string',
206
			'enum': ['off', 'on', 'relative', 'interval'],
207 208 209
			'enumDescriptions': [
				nls.localize('lineNumbers.off', "Line numbers are not rendered."),
				nls.localize('lineNumbers.on', "Line numbers are rendered as absolute number."),
210 211
				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.")
212
			],
213
			'default': 'on',
K
keringar 已提交
214
			'description': nls.localize('lineNumbers', "Controls the display of line numbers. Possible values are 'on', 'off', 'relative' and 'interval'.")
E
Erich Gamma 已提交
215
		},
J
Johannes Rieken 已提交
216
		'editor.rulers': {
217 218 219 220
			'type': 'array',
			'items': {
				'type': 'number'
			},
A
Alex Dima 已提交
221
			'default': EDITOR_DEFAULTS.viewInfo.rulers,
222
			'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")
223
		},
J
Johannes Rieken 已提交
224
		'editor.wordSeparators': {
A
Alex Dima 已提交
225
			'type': 'string',
226
			'default': EDITOR_DEFAULTS.wordSeparators,
A
Alex Dima 已提交
227 228
			'description': nls.localize('wordSeparators', "Characters that will be used as word separators when doing word related navigations or operations")
		},
J
Johannes Rieken 已提交
229
		'editor.tabSize': {
230
			'type': 'number',
231
			'default': EDITOR_MODEL_DEFAULTS.tabSize,
E
Erich Gamma 已提交
232
			'minimum': 1,
233
			'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."),
234
			'errorMessage': nls.localize('tabSize.errorMessage', "Expected 'number'. Note that the value \"auto\" has been replaced by the `editor.detectIndentation` setting.")
E
Erich Gamma 已提交
235
		},
J
Johannes Rieken 已提交
236
		'editor.insertSpaces': {
237
			'type': 'boolean',
238
			'default': EDITOR_MODEL_DEFAULTS.insertSpaces,
239
			'description': nls.localize('insertSpaces', "Insert spaces when pressing Tab. This setting is overridden based on the file contents when `editor.detectIndentation` is on."),
240
			'errorMessage': nls.localize('insertSpaces.errorMessage', "Expected 'boolean'. Note that the value \"auto\" has been replaced by the `editor.detectIndentation` setting.")
E
Erich Gamma 已提交
241
		},
J
Johannes Rieken 已提交
242
		'editor.detectIndentation': {
243
			'type': 'boolean',
244
			'default': EDITOR_MODEL_DEFAULTS.detectIndentation,
A
Alex Dima 已提交
245
			'description': nls.localize('detectIndentation', "When opening a file, `editor.tabSize` and `editor.insertSpaces` will be detected based on the file contents.")
246
		},
J
Johannes Rieken 已提交
247
		'editor.roundedSelection': {
E
Erich Gamma 已提交
248
			'type': 'boolean',
A
Alex Dima 已提交
249
			'default': EDITOR_DEFAULTS.viewInfo.roundedSelection,
E
Erich Gamma 已提交
250 251
			'description': nls.localize('roundedSelection', "Controls if selections have rounded corners")
		},
J
Johannes Rieken 已提交
252
		'editor.scrollBeyondLastLine': {
E
Erich Gamma 已提交
253
			'type': 'boolean',
A
Alex Dima 已提交
254
			'default': EDITOR_DEFAULTS.viewInfo.scrollBeyondLastLine,
E
Erich Gamma 已提交
255 256
			'description': nls.localize('scrollBeyondLastLine', "Controls if the editor will scroll beyond the last line")
		},
257 258 259 260 261
		'editor.smoothScrolling': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.viewInfo.smoothScrolling,
			'description': nls.localize('smoothScrolling', "Controls if the editor will scroll using an animation")
		},
262 263
		'editor.minimap.enabled': {
			'type': 'boolean',
A
Alex Dima 已提交
264
			'default': EDITOR_DEFAULTS.viewInfo.minimap.enabled,
265 266
			'description': nls.localize('minimap.enabled', "Controls if the minimap is shown")
		},
267 268 269 270
		'editor.minimap.side': {
			'type': 'string',
			'enum': ['left', 'right'],
			'default': EDITOR_DEFAULTS.viewInfo.minimap.side,
271
			'description': nls.localize('minimap.side', "Controls the side where to render the minimap. Possible values are \'right\' and \'left\'")
272
		},
273 274 275 276
		'editor.minimap.showSlider': {
			'type': 'string',
			'enum': ['always', 'mouseover'],
			'default': EDITOR_DEFAULTS.viewInfo.minimap.showSlider,
B
BrokenBacon 已提交
277
			'description': nls.localize('minimap.showSlider', "Controls whether the minimap slider is automatically hidden. Possible values are \'always\' and \'mouseover\'")
278
		},
279
		'editor.minimap.renderCharacters': {
280
			'type': 'boolean',
A
Alex Dima 已提交
281
			'default': EDITOR_DEFAULTS.viewInfo.minimap.renderCharacters,
282
			'description': nls.localize('minimap.renderCharacters', "Render the actual characters on a line (as opposed to color blocks)")
283
		},
A
Alex Dima 已提交
284 285
		'editor.minimap.maxColumn': {
			'type': 'number',
A
Alex Dima 已提交
286
			'default': EDITOR_DEFAULTS.viewInfo.minimap.maxColumn,
A
Alex Dima 已提交
287 288
			'description': nls.localize('minimap.maxColumn', "Limit the width of the minimap to render at most a certain number of columns")
		},
289 290 291
		'editor.find.seedSearchStringFromSelection': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.seedSearchStringFromSelection,
292
			'description': nls.localize('find.seedSearchStringFromSelection', "Controls if we seed the search string in Find Widget from editor selection")
293
		},
R
rebornix 已提交
294 295 296 297 298
		'editor.find.autoFindInSelection': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.autoFindInSelection,
			'description': nls.localize('find.autoFindInSelection', "Controls if Find in Selection flag is turned on when multiple characters or lines of text are selected in the editor")
		},
299 300 301
		'editor.find.globalFindClipboard': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.find.globalFindClipboard,
302 303
			'description': nls.localize('find.globalFindClipboard', "Controls if the Find Widget should read or modify the shared find clipboard on macOS"),
			'included': platform.isMacintosh
304
		},
J
Johannes Rieken 已提交
305
		'editor.wordWrap': {
306
			'type': 'string',
A
Alex Dima 已提交
307
			'enum': ['off', 'on', 'wordWrapColumn', 'bounded'],
308 309 310
			'enumDescriptions': [
				nls.localize('wordWrap.off', "Lines will never wrap."),
				nls.localize('wordWrap.on', "Lines will wrap at the viewport width."),
A
Alex Dima 已提交
311 312 313 314 315 316
				nls.localize({
					key: 'wordWrap.wordWrapColumn',
					comment: [
						'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
					]
				}, "Lines will wrap at `editor.wordWrapColumn`."),
A
Alex Dima 已提交
317 318 319 320
				nls.localize({
					key: 'wordWrap.bounded',
					comment: [
						'- viewport means the edge of the visible window size.',
A
Alex Dima 已提交
321
						'- `editor.wordWrapColumn` refers to a different setting and should not be localized.'
A
Alex Dima 已提交
322 323
					]
				}, "Lines will wrap at the minimum of viewport and `editor.wordWrapColumn`."),
324
			],
325
			'default': EDITOR_DEFAULTS.wordWrap,
A
Alex Dima 已提交
326 327 328 329 330 331 332
			'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.'
				]
			}, "Controls how lines should wrap. Can be:\n - 'off' (disable wrapping),\n - 'on' (viewport wrapping),\n - 'wordWrapColumn' (wrap at `editor.wordWrapColumn`) or\n - 'bounded' (wrap at minimum of viewport and `editor.wordWrapColumn`).")
333 334 335
		},
		'editor.wordWrapColumn': {
			'type': 'integer',
336
			'default': EDITOR_DEFAULTS.wordWrapColumn,
337
			'minimum': 1,
A
Alex Dima 已提交
338 339 340 341 342 343 344
			'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.'
				]
			}, "Controls the wrapping column of the editor when `editor.wordWrap` is 'wordWrapColumn' or 'bounded'.")
345
		},
J
Johannes Rieken 已提交
346
		'editor.wrappingIndent': {
E
Erich Gamma 已提交
347 348
			'type': 'string',
			'enum': ['none', 'same', 'indent'],
349
			'default': 'same',
E
Erich Gamma 已提交
350 351
			'description': nls.localize('wrappingIndent', "Controls the indentation of wrapped lines. Can be one of 'none', 'same' or 'indent'.")
		},
J
Johannes Rieken 已提交
352
		'editor.mouseWheelScrollSensitivity': {
E
Erich Gamma 已提交
353
			'type': 'number',
A
Alex Dima 已提交
354
			'default': EDITOR_DEFAULTS.viewInfo.scrollbar.mouseWheelScrollSensitivity,
E
Erich Gamma 已提交
355 356
			'description': nls.localize('mouseWheelScrollSensitivity', "A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events")
		},
357
		'editor.multiCursorModifier': {
358
			'type': 'string',
359 360
			'enum': ['ctrlCmd', 'alt'],
			'enumDescriptions': [
361 362
				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.")
363
			],
364
			'default': 'alt',
365 366 367 368 369 370
			'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.'
				]
371
			}, "The modifier to be used to add multiple cursors with the mouse. `ctrlCmd` maps to `Control` on Windows and Linux and to `Command` on macOS. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier.")
372
		},
A
Alex Dima 已提交
373
		'editor.multiCursorMergeOverlapping': {
374
			'type': 'boolean',
A
Alex Dima 已提交
375 376
			'default': EDITOR_DEFAULTS.multiCursorMergeOverlapping,
			'description': nls.localize('multiCursorMergeOverlapping', "Merge multiple cursors when they are overlapping.")
377
		},
J
Johannes Rieken 已提交
378
		'editor.quickSuggestions': {
379
			'anyOf': [
380 381 382
				{
					type: 'boolean',
				},
383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403
				{
					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 已提交
404
			'default': EDITOR_DEFAULTS.contribInfo.quickSuggestions,
405
			'description': nls.localize('quickSuggestions', "Controls if suggestions should automatically show up while typing")
E
Erich Gamma 已提交
406
		},
J
Johannes Rieken 已提交
407
		'editor.quickSuggestionsDelay': {
E
Erich Gamma 已提交
408
			'type': 'integer',
A
Alex Dima 已提交
409
			'default': EDITOR_DEFAULTS.contribInfo.quickSuggestionsDelay,
E
Erich Gamma 已提交
410 411 412
			'minimum': 0,
			'description': nls.localize('quickSuggestionsDelay', "Controls the delay in ms after which quick suggestions will show up")
		},
J
Johannes Rieken 已提交
413
		'editor.parameterHints': {
J
Joao Moreno 已提交
414
			'type': 'boolean',
A
Alex Dima 已提交
415
			'default': EDITOR_DEFAULTS.contribInfo.parameterHints,
416
			'description': nls.localize('parameterHints', "Enables pop-up that shows parameter documentation and type information as you type")
J
Joao Moreno 已提交
417
		},
J
Johannes Rieken 已提交
418
		'editor.autoClosingBrackets': {
E
Erich Gamma 已提交
419
			'type': 'boolean',
420
			'default': EDITOR_DEFAULTS.autoClosingBrackets,
E
Erich Gamma 已提交
421 422
			'description': nls.localize('autoClosingBrackets', "Controls if the editor should automatically close brackets after opening them")
		},
J
Johannes Rieken 已提交
423
		'editor.formatOnType': {
E
Erich Gamma 已提交
424
			'type': 'boolean',
A
Alex Dima 已提交
425
			'default': EDITOR_DEFAULTS.contribInfo.formatOnType,
E
Erich Gamma 已提交
426 427
			'description': nls.localize('formatOnType', "Controls if the editor should automatically format the line after typing")
		},
428 429
		'editor.formatOnPaste': {
			'type': 'boolean',
A
Alex Dima 已提交
430
			'default': EDITOR_DEFAULTS.contribInfo.formatOnPaste,
431
			'description': nls.localize('formatOnPaste', "Controls if 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.")
432
		},
433 434 435
		'editor.autoIndent': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.autoIndent,
G
Guangcong Luo 已提交
436
			'description': nls.localize('autoIndent', "Controls if the editor should automatically adjust the indentation when users type, paste or move lines. Indentation rules of the language must be available.")
437
		},
J
Johannes Rieken 已提交
438
		'editor.suggestOnTriggerCharacters': {
E
Erich Gamma 已提交
439
			'type': 'boolean',
A
Alex Dima 已提交
440
			'default': EDITOR_DEFAULTS.contribInfo.suggestOnTriggerCharacters,
E
Erich Gamma 已提交
441 442
			'description': nls.localize('suggestOnTriggerCharacters', "Controls if suggestions should automatically show up when typing trigger characters")
		},
J
Johannes Rieken 已提交
443
		'editor.acceptSuggestionOnEnter': {
444 445
			'type': 'string',
			'enum': ['on', 'smart', 'off'],
A
Alex Dima 已提交
446
			'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnEnter,
447
			'description': nls.localize('acceptSuggestionOnEnter', "Controls if suggestions should be accepted on 'Enter' - in addition to 'Tab'. Helps to avoid ambiguity between inserting new lines or accepting suggestions. The value 'smart' means only accept a suggestion with Enter when it makes a textual change")
448 449 450
		},
		'editor.acceptSuggestionOnCommitCharacter': {
			'type': 'boolean',
A
Alex Dima 已提交
451
			'default': EDITOR_DEFAULTS.contribInfo.acceptSuggestionOnCommitCharacter,
452
			'description': nls.localize('acceptSuggestionOnCommitCharacter', "Controls if suggestions should be accepted on commit characters. For instance in JavaScript the semi-colon (';') can be a commit character that accepts a suggestion and types that character.")
453
		},
454
		'editor.snippetSuggestions': {
455
			'type': 'string',
456
			'enum': ['top', 'bottom', 'inline', 'none'],
J
Johannes Rieken 已提交
457 458 459 460 461 462
			'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."),
			],
A
Alex Dima 已提交
463
			'default': EDITOR_DEFAULTS.contribInfo.snippetSuggestions,
464
			'description': nls.localize('snippetSuggestions', "Controls whether snippets are shown with other suggestions and how they are sorted.")
465
		},
466 467
		'editor.emptySelectionClipboard': {
			'type': 'boolean',
468
			'default': EDITOR_DEFAULTS.emptySelectionClipboard,
469 470
			'description': nls.localize('emptySelectionClipboard', "Controls whether copying without a selection copies the current line.")
		},
471
		'editor.wordBasedSuggestions': {
472
			'type': 'boolean',
A
Alex Dima 已提交
473
			'default': EDITOR_DEFAULTS.contribInfo.wordBasedSuggestions,
J
Johannes Rieken 已提交
474
			'description': nls.localize('wordBasedSuggestions', "Controls whether completions should be computed based on words in the document.")
475
		},
J
Johannes Rieken 已提交
476
		'editor.suggestSelection': {
477
			'type': 'string',
J
Johannes Rieken 已提交
478
			'enum': ['first', 'recentlyUsed', 'recentlyUsedByPrefix'],
J
Johannes Rieken 已提交
479
			'enumDescriptions': [
J
Johannes Rieken 已提交
480 481 482
				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 已提交
483
			],
J
Johannes Rieken 已提交
484 485
			'default': 'recentlyUsed',
			'description': nls.localize('suggestSelection', "Controls how suggestions are pre-selected when showing the suggest list.")
486
		},
J
Johannes Rieken 已提交
487
		'editor.suggestFontSize': {
J
Joao Moreno 已提交
488 489 490 491 492
			'type': 'integer',
			'default': 0,
			'minimum': 0,
			'description': nls.localize('suggestFontSize', "Font size for the suggest widget")
		},
J
Johannes Rieken 已提交
493
		'editor.suggestLineHeight': {
J
Joao Moreno 已提交
494 495 496 497 498
			'type': 'integer',
			'default': 0,
			'minimum': 0,
			'description': nls.localize('suggestLineHeight', "Line height for the suggest widget")
		},
J
Johannes Rieken 已提交
499
		'editor.selectionHighlight': {
E
Erich Gamma 已提交
500
			'type': 'boolean',
A
Alex Dima 已提交
501
			'default': EDITOR_DEFAULTS.contribInfo.selectionHighlight,
E
Erich Gamma 已提交
502 503
			'description': nls.localize('selectionHighlight', "Controls whether the editor should highlight similar matches to the selection")
		},
504 505
		'editor.occurrencesHighlight': {
			'type': 'boolean',
A
Alex Dima 已提交
506
			'default': EDITOR_DEFAULTS.contribInfo.occurrencesHighlight,
507 508
			'description': nls.localize('occurrencesHighlight', "Controls whether the editor should highlight semantic symbol occurrences")
		},
J
Johannes Rieken 已提交
509
		'editor.overviewRulerLanes': {
E
Erich Gamma 已提交
510 511 512 513
			'type': 'integer',
			'default': 3,
			'description': nls.localize('overviewRulerLanes', "Controls the number of decorations that can show up at the same position in the overview ruler")
		},
514
		'editor.overviewRulerBorder': {
515
			'type': 'boolean',
A
Alex Dima 已提交
516
			'default': EDITOR_DEFAULTS.viewInfo.overviewRulerBorder,
517
			'description': nls.localize('overviewRulerBorder', "Controls if a border should be drawn around the overview ruler.")
518
		},
J
Johannes Rieken 已提交
519
		'editor.cursorBlinking': {
520
			'type': 'string',
521
			'enum': ['blink', 'smooth', 'phase', 'expand', 'solid'],
522
			'default': editorOptions.blinkingStyleToString(EDITOR_DEFAULTS.viewInfo.cursorBlinking),
523
			'description': nls.localize('cursorBlinking', "Control the cursor animation style, possible values are 'blink', 'smooth', 'phase', 'expand' and 'solid'")
524
		},
525 526
		'editor.mouseWheelZoom': {
			'type': 'boolean',
A
Alex Dima 已提交
527
			'default': EDITOR_DEFAULTS.viewInfo.mouseWheelZoom,
528 529
			'description': nls.localize('mouseWheelZoom', "Zoom the font of the editor when using mouse wheel and holding Ctrl")
		},
J
Johannes Rieken 已提交
530
		'editor.cursorStyle': {
M
markrendle 已提交
531
			'type': 'string',
532
			'enum': ['block', 'block-outline', 'line', 'line-thin', 'underline', 'underline-thin'],
533
			'default': editorOptions.cursorStyleToString(EDITOR_DEFAULTS.viewInfo.cursorStyle),
534
			'description': nls.localize('cursorStyle', "Controls the cursor style, accepted values are 'block', 'block-outline', 'line', 'line-thin', 'underline' and 'underline-thin'")
M
markrendle 已提交
535
		},
536
		'editor.cursorWidth': {
537
			'type': 'integer',
538 539
			'default': EDITOR_DEFAULTS.viewInfo.cursorWidth,
			'description': nls.localize('cursorWidth', "Controls the width of the cursor when editor.cursorStyle is set to 'line'")
540
		},
J
Johannes Rieken 已提交
541
		'editor.fontLigatures': {
542
			'type': 'boolean',
A
Alex Dima 已提交
543
			'default': EDITOR_DEFAULTS.viewInfo.fontLigatures,
544 545
			'description': nls.localize('fontLigatures', "Enables font ligatures")
		},
J
Johannes Rieken 已提交
546
		'editor.hideCursorInOverviewRuler': {
E
Erich Gamma 已提交
547
			'type': 'boolean',
A
Alex Dima 已提交
548
			'default': EDITOR_DEFAULTS.viewInfo.hideCursorInOverviewRuler,
E
Erich Gamma 已提交
549 550 551
			'description': nls.localize('hideCursorInOverviewRuler', "Controls if the cursor should be hidden in the overview ruler.")
		},
		'editor.renderWhitespace': {
552 553
			'type': 'string',
			'enum': ['none', 'boundary', 'all'],
A
Alex Dima 已提交
554
			default: EDITOR_DEFAULTS.viewInfo.renderWhitespace,
555
			description: nls.localize('renderWhitespace', "Controls how the editor should render whitespace characters, possibilities are 'none', 'boundary', and 'all'. The 'boundary' option does not render single spaces between words.")
E
Erich Gamma 已提交
556
		},
557 558
		'editor.renderControlCharacters': {
			'type': 'boolean',
A
Alex Dima 已提交
559
			default: EDITOR_DEFAULTS.viewInfo.renderControlCharacters,
560 561
			description: nls.localize('renderControlCharacters', "Controls whether the editor should render control characters")
		},
562 563
		'editor.renderIndentGuides': {
			'type': 'boolean',
A
Alex Dima 已提交
564
			default: EDITOR_DEFAULTS.viewInfo.renderIndentGuides,
565 566
			description: nls.localize('renderIndentGuides', "Controls whether the editor should render indent guides")
		},
567
		'editor.renderLineHighlight': {
568 569
			'type': 'string',
			'enum': ['none', 'gutter', 'line', 'all'],
A
Alex Dima 已提交
570
			default: EDITOR_DEFAULTS.viewInfo.renderLineHighlight,
571
			description: nls.localize('renderLineHighlight', "Controls how the editor should render the current line highlight, possibilities are 'none', 'gutter', 'line', and 'all'.")
572
		},
J
Johannes Rieken 已提交
573
		'editor.codeLens': {
E
Erich Gamma 已提交
574
			'type': 'boolean',
A
Alex Dima 已提交
575
			'default': EDITOR_DEFAULTS.contribInfo.codeLens,
576
			'description': nls.localize('codeLens', "Controls if the editor shows code lenses")
E
Erich Gamma 已提交
577
		},
J
Johannes Rieken 已提交
578
		'editor.folding': {
M
Martin Aeschlimann 已提交
579
			'type': 'boolean',
A
Alex Dima 已提交
580
			'default': EDITOR_DEFAULTS.contribInfo.folding,
581
			'description': nls.localize('folding', "Controls whether the editor has code folding enabled")
M
Martin Aeschlimann 已提交
582
		},
583 584 585 586
		'editor.foldingStrategy': {
			'type': 'string',
			'enum': ['auto', 'indentation'],
			'enumDescriptions': [
A
Alex Dima 已提交
587
				nls.localize('foldingStrategyAuto', 'If available, use a language specific folding strategy, otherwise falls back to the indentation based strategy.'),
588 589 590 591 592
				nls.localize('foldingStrategyIndentation', 'Always use the indentation based folding strategy')
			],
			'default': EDITOR_DEFAULTS.contribInfo.foldingStrategy,
			'description': nls.localize('foldingStrategy', "Controls the way folding ranges are computed. 'auto' picks uses a language specific folding strategy, if available. 'indentation' forces that the indentation based folding strategy is used.")
		},
593 594 595 596 597
		'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.")
598
		},
599
		'editor.matchBrackets': {
600
			'type': 'boolean',
A
Alex Dima 已提交
601
			'default': EDITOR_DEFAULTS.contribInfo.matchBrackets,
602
			'description': nls.localize('matchBrackets', "Highlight matching brackets when one of them is selected.")
603
		},
I
isidor 已提交
604 605
		'editor.glyphMargin': {
			'type': 'boolean',
A
Alex Dima 已提交
606
			'default': EDITOR_DEFAULTS.viewInfo.glyphMargin,
I
isidor 已提交
607 608
			'description': nls.localize('glyphMargin', "Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.")
		},
J
Johannes Rieken 已提交
609
		'editor.useTabStops': {
610
			'type': 'boolean',
611
			'default': EDITOR_DEFAULTS.useTabStops,
612 613
			'description': nls.localize('useTabStops', "Inserting and deleting whitespace follows tab stops")
		},
J
Johannes Rieken 已提交
614
		'editor.trimAutoWhitespace': {
615
			'type': 'boolean',
616
			'default': EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,
617 618
			'description': nls.localize('trimAutoWhitespace', "Remove trailing auto inserted whitespace")
		},
J
Johannes Rieken 已提交
619
		'editor.stablePeek': {
620
			'type': 'boolean',
621
			'default': false,
622
			'description': nls.localize('stablePeek', "Keep peek editors open even when double clicking their content or when hitting Escape.")
623
		},
624
		'editor.dragAndDrop': {
625
			'type': 'boolean',
626
			'default': EDITOR_DEFAULTS.dragAndDrop,
627
			'description': nls.localize('dragAndDrop', "Controls if the editor should allow to move selections via drag and drop.")
628
		},
629 630 631 632 633 634 635 636 637 638 639
		'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.")
		},
640
		'editor.links': {
641
			'type': 'boolean',
642 643
			'default': EDITOR_DEFAULTS.contribInfo.links,
			'description': nls.localize('links', "Controls whether the editor should detect links and make them clickable")
644
		},
R
rebornix 已提交
645
		'editor.colorDecorators': {
646
			'type': 'boolean',
R
rebornix 已提交
647
			'default': EDITOR_DEFAULTS.contribInfo.colorDecorators,
648
			'description': nls.localize('colorDecorators', "Controls whether the editor should render the inline color decorators and color picker.")
649
		},
650 651 652 653 654
		'editor.lightbulb.enabled': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.lightbulbEnabled,
			'description': nls.localize('codeActions', "Enables the code action lightbulb")
		},
655 656 657 658
		'editor.selectionClipboard': {
			'type': 'boolean',
			'default': EDITOR_DEFAULTS.contribInfo.selectionClipboard,
			'description': nls.localize('selectionClipboard', "Controls if the Linux primary clipboard should be supported."),
659
			'included': platform.isLinux
660
		},
J
Johannes Rieken 已提交
661
		'diffEditor.renderSideBySide': {
E
Erich Gamma 已提交
662 663 664 665
			'type': 'boolean',
			'default': true,
			'description': nls.localize('sideBySide', "Controls if the diff editor shows the diff side by side or inline")
		},
J
Johannes Rieken 已提交
666
		'diffEditor.ignoreTrimWhitespace': {
E
Erich Gamma 已提交
667 668 669
			'type': 'boolean',
			'default': true,
			'description': nls.localize('ignoreTrimWhitespace', "Controls if the diff editor shows changes in leading or trailing whitespace as diffs")
670
		},
A
Alex Dima 已提交
671
		'editor.largeFileSize': {
672
			'type': 'number',
A
Alex Dima 已提交
673 674
			'default': EDITOR_MODEL_DEFAULTS.largeFileSize,
			'description': nls.localize('largeFileSize', "Controls file size threshold in bytes beyond which special optimization rules are applied")
675
		},
A
Alex Dima 已提交
676
		'editor.largeFileLineCount': {
677
			'type': 'number',
A
Alex Dima 已提交
678 679
			'default': EDITOR_MODEL_DEFAULTS.largeFileLineCount,
			'description': nls.localize('largeFileLineCount', "Controls file size threshold in terms of line count beyond which special optimization rules are applied")
680
		},
681 682 683 684
		'diffEditor.renderIndicators': {
			'type': 'boolean',
			'default': true,
			'description': nls.localize('renderIndicators', "Controls if the diff editor shows +/- indicators for added/removed changes")
E
Erich Gamma 已提交
685 686
		}
	}
A
Alex Dima 已提交
687 688
};

689
configurationRegistry.registerConfiguration(editorConfiguration);