Skip to content

Commit 75ffa8b

Browse files
committed
- Add a typed way to read options
- Move more options to the new format
1 parent 2a72088 commit 75ffa8b

10 files changed

Lines changed: 44 additions & 40 deletions

File tree

src/vs/editor/browser/controller/mouseHandler.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { HorizontalRange } from 'vs/editor/common/view/renderingContext';
2121
import { ViewContext } from 'vs/editor/common/view/viewContext';
2222
import * as viewEvents from 'vs/editor/common/view/viewEvents';
2323
import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';
24+
import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions';
2425

2526
/**
2627
* Merges mouse events when mouse move events are throttled
@@ -216,7 +217,7 @@ export class MouseHandler extends ViewEventHandler {
216217
const targetIsContent = (t.type === editorBrowser.MouseTargetType.CONTENT_TEXT || t.type === editorBrowser.MouseTargetType.CONTENT_EMPTY);
217218
const targetIsGutter = (t.type === editorBrowser.MouseTargetType.GUTTER_GLYPH_MARGIN || t.type === editorBrowser.MouseTargetType.GUTTER_LINE_NUMBERS || t.type === editorBrowser.MouseTargetType.GUTTER_LINE_DECORATIONS);
218219
const targetIsLineNumbers = (t.type === editorBrowser.MouseTargetType.GUTTER_LINE_NUMBERS);
219-
const selectOnLineNumbers = this._context.configuration.editor.viewInfo.selectOnLineNumbers;
220+
const selectOnLineNumbers = this._context.configuration.getOption<typeof EditorOption.selectOnLineNumbers>(EditorOptionId.selectOnLineNumbers);
220221
const targetIsViewZone = (t.type === editorBrowser.MouseTargetType.CONTENT_VIEW_ZONE || t.type === editorBrowser.MouseTargetType.GUTTER_VIEW_ZONE);
221222
const targetIsWidget = (t.type === editorBrowser.MouseTargetType.CONTENT_WIDGET);
222223

src/vs/editor/browser/editorBrowser.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,8 @@ export interface ICodeEditor extends editorCommon.IEditor {
536536
*/
537537
getConfiguration(): editorOptions.InternalEditorOptions;
538538

539+
getOption<T extends editorOptions.IEditorOption<any, any, any>>(id: editorOptions.EditorOptionId): editorOptions.ComputedEditorOptionValue<T>;
540+
539541
/**
540542
* Returns the 'raw' editor's configuration (without any validation or defaults).
541543
* @internal

src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
4545
this._lineHeight = config.lineHeight;
4646
this._renderLineNumbers = config.viewInfo.renderLineNumbers;
4747
this._renderCustomLineNumbers = config.viewInfo.renderCustomLineNumbers;
48-
this._renderFinalNewline = this._context.configuration.options.get(EditorOptionId.RenderFinalNewline, EditorOption.RenderFinalNewline);
48+
this._renderFinalNewline = this._context.configuration.getOption<typeof EditorOption.renderFinalNewline>(EditorOptionId.renderFinalNewline);
4949
this._lineNumbersLeft = config.layoutInfo.lineNumbersLeft;
5050
this._lineNumbersWidth = config.layoutInfo.lineNumbersWidth;
5151
}

src/vs/editor/browser/widget/codeEditorWidget.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,10 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
370370
return this._configuration.editor;
371371
}
372372

373+
public getOption<T extends editorOptions.IEditorOption<any, any, any>>(id: editorOptions.EditorOptionId): editorOptions.ComputedEditorOptionValue<T> {
374+
return this._configuration.getOption<T>(id);
375+
}
376+
373377
public getRawConfiguration(): editorOptions.IEditorOptions {
374378
return this._configuration.getRawOptions();
375379
}

src/vs/editor/common/config/commonEditorConfig.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed
156156
this._register(TabFocus.onDidChangeTabFocus(_ => this._recomputeOptions()));
157157
}
158158

159+
public getOption<T extends editorOptions.IEditorOption<any, any, any>>(id: editorOptions.EditorOptionId): editorOptions.ComputedEditorOptionValue<T> {
160+
return this.options._read(id);
161+
}
162+
159163
public observeReferenceElement(dimension?: editorCommon.IDimension): void {
160164
}
161165

@@ -345,7 +349,7 @@ const editorConfiguration: IConfigurationNode = {
345349
},
346350
'editor.renderFinalNewline': {
347351
'type': 'boolean',
348-
'default': editorOptions.EditorOption.RenderFinalNewline.defaultValue,
352+
'default': editorOptions.EditorOption.renderFinalNewline.defaultValue,
349353
'description': nls.localize('renderFinalNewline', "Render last line number when the file ends with a newline.")
350354
},
351355
'editor.rulers': {
@@ -1137,7 +1141,7 @@ const editorConfiguration: IConfigurationNode = {
11371141
},
11381142
'editor.selectionClipboard': {
11391143
'type': 'boolean',
1140-
'default': EDITOR_DEFAULTS.contribInfo.selectionClipboard,
1144+
'default': editorOptions.EditorOption.selectionClipboard.defaultValue,
11411145
'description': nls.localize('selectionClipboard', "Controls whether the Linux primary clipboard should be supported."),
11421146
'included': platform.isLinux
11431147
},

src/vs/editor/common/config/editorOptions.ts

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -997,7 +997,6 @@ export interface InternalEditorViewOptions {
997997
readonly renderLineNumbers: RenderLineNumbersType;
998998
readonly renderCustomLineNumbers: ((lineNumber: number) => string) | null;
999999
readonly cursorSurroundingLines: number;
1000-
readonly selectOnLineNumbers: boolean;
10011000
readonly glyphMargin: boolean;
10021001
readonly revealHorizontalRightPadding: number;
10031002
readonly roundedSelection: boolean;
@@ -1025,7 +1024,6 @@ export interface InternalEditorViewOptions {
10251024
}
10261025

10271026
export interface EditorContribOptions {
1028-
readonly selectionClipboard: boolean;
10291027
readonly hover: InternalEditorHoverOptions;
10301028
readonly links: boolean;
10311029
readonly contextmenu: boolean;
@@ -1317,7 +1315,6 @@ export class InternalEditorOptions {
13171315
&& a.renderLineNumbers === b.renderLineNumbers
13181316
&& a.renderCustomLineNumbers === b.renderCustomLineNumbers
13191317
&& a.cursorSurroundingLines === b.cursorSurroundingLines
1320-
&& a.selectOnLineNumbers === b.selectOnLineNumbers
13211318
&& a.glyphMargin === b.glyphMargin
13221319
&& a.revealHorizontalRightPadding === b.revealHorizontalRightPadding
13231320
&& a.roundedSelection === b.roundedSelection
@@ -1464,8 +1461,7 @@ export class InternalEditorOptions {
14641461
*/
14651462
private static _equalsContribOptions(a: EditorContribOptions, b: EditorContribOptions): boolean {
14661463
return (
1467-
a.selectionClipboard === b.selectionClipboard
1468-
&& this._equalsHoverOptions(a.hover, b.hover)
1464+
this._equalsHoverOptions(a.hover, b.hover)
14691465
&& a.links === b.links
14701466
&& a.contextmenu === b.contextmenu
14711467
&& InternalEditorOptions._equalsQuickSuggestions(a.quickSuggestions, b.quickSuggestions)
@@ -2081,7 +2077,6 @@ export class EditorOptionsValidator {
20812077
cursorSurroundingLines: _clampedInt(opts.cursorSurroundingLines, defaults.cursorWidth, 0, Number.MAX_VALUE),
20822078
renderLineNumbers: renderLineNumbers,
20832079
renderCustomLineNumbers: renderCustomLineNumbers,
2084-
selectOnLineNumbers: _boolean(opts.selectOnLineNumbers, defaults.selectOnLineNumbers),
20852080
glyphMargin: _boolean(opts.glyphMargin, defaults.glyphMargin),
20862081
revealHorizontalRightPadding: _clampedInt(opts.revealHorizontalRightPadding, defaults.revealHorizontalRightPadding, 0, 1000),
20872082
roundedSelection: _boolean(opts.roundedSelection, defaults.roundedSelection),
@@ -2122,7 +2117,6 @@ export class EditorOptionsValidator {
21222117
}
21232118
const find = this._sanitizeFindOpts(opts.find, defaults.find);
21242119
return {
2125-
selectionClipboard: _boolean(opts.selectionClipboard, defaults.selectionClipboard),
21262120
hover: this._sanitizeHoverOpts(opts.hover, defaults.hover),
21272121
links: _boolean(opts.links, defaults.links),
21282122
contextmenu: _boolean(opts.contextmenu, defaults.contextmenu),
@@ -2202,7 +2196,6 @@ export class InternalEditorOptionsFactory {
22022196
renderLineNumbers: opts.viewInfo.renderLineNumbers,
22032197
renderCustomLineNumbers: opts.viewInfo.renderCustomLineNumbers,
22042198
cursorSurroundingLines: opts.viewInfo.cursorSurroundingLines,
2205-
selectOnLineNumbers: opts.viewInfo.selectOnLineNumbers,
22062199
glyphMargin: opts.viewInfo.glyphMargin,
22072200
revealHorizontalRightPadding: opts.viewInfo.revealHorizontalRightPadding,
22082201
roundedSelection: opts.viewInfo.roundedSelection,
@@ -2236,7 +2229,6 @@ export class InternalEditorOptionsFactory {
22362229
},
22372230

22382231
contribInfo: {
2239-
selectionClipboard: opts.contribInfo.selectionClipboard,
22402232
hover: opts.contribInfo.hover,
22412233
links: opts.contribInfo.links,
22422234
contextmenu: opts.contribInfo.contextmenu,
@@ -2668,7 +2660,6 @@ export const EDITOR_DEFAULTS: IValidatedEditorOptions = {
26682660
renderLineNumbers: RenderLineNumbersType.On,
26692661
renderCustomLineNumbers: null,
26702662
cursorSurroundingLines: 0,
2671-
selectOnLineNumbers: true,
26722663
glyphMargin: true,
26732664
revealHorizontalRightPadding: 30,
26742665
roundedSelection: true,
@@ -2716,7 +2707,6 @@ export const EDITOR_DEFAULTS: IValidatedEditorOptions = {
27162707
},
27172708

27182709
contribInfo: {
2719-
selectionClipboard: true,
27202710
hover: {
27212711
enabled: true,
27222712
delay: 300,
@@ -2803,10 +2793,6 @@ export class ValidatedEditorOptions {
28032793
}
28042794
}
28052795

2806-
export interface IComputedEditorOptions {
2807-
get<T1, T2, T3>(id: EditorOptionId, option: IEditorOption<T1, T2, T3>): T3;
2808-
}
2809-
28102796
/**
28112797
* @internal
28122798
*/
@@ -2815,9 +2801,6 @@ export class ComputedEditorOptions {
28152801
public _read<T>(id: EditorOptionId): T {
28162802
return this._values[id];
28172803
}
2818-
public get<T1, T2, T3>(id: EditorOptionId, option: IEditorOption<T1, T2, T3>): T3 {
2819-
return this._values[id];
2820-
}
28212804
public _write<T>(id: EditorOptionId, value: T): void {
28222805
this._values[id] = value;
28232806
}
@@ -2836,7 +2819,7 @@ export class ChangedEditorOptions {
28362819
}
28372820
}
28382821

2839-
interface IEditorOption<T1, T2 = T1, T3 = T2> {
2822+
export interface IEditorOption<T1, T2 = T1, T3 = T2> {
28402823
readonly id: EditorOptionId;
28412824
readonly name: string;
28422825
readonly defaultValue: T1;
@@ -2890,9 +2873,15 @@ function registerEditorOption<T1, T2, T3>(option: IEditorOption<T1, T2, T3>): IE
28902873
}
28912874

28922875
export const enum EditorOptionId {
2893-
RenderFinalNewline,
2876+
renderFinalNewline,
2877+
selectionClipboard,
2878+
selectOnLineNumbers,
28942879
}
28952880

28962881
export const EditorOption = {
2897-
RenderFinalNewline: registerEditorOption(new BooleanEditorOption(EditorOptionId.RenderFinalNewline, 'renderFinalNewline', true))
2882+
renderFinalNewline: registerEditorOption(new BooleanEditorOption(EditorOptionId.renderFinalNewline, 'renderFinalNewline', true)),
2883+
selectionClipboard: registerEditorOption(new BooleanEditorOption(EditorOptionId.selectionClipboard, 'selectionClipboard', true)),
2884+
selectOnLineNumbers: registerEditorOption(new BooleanEditorOption(EditorOptionId.selectOnLineNumbers, 'selectOnLineNumbers', true)),
28982885
};
2886+
2887+
export type ComputedEditorOptionValue<T extends IEditorOption<any, any, any>> = T extends IEditorOption<any, any, infer R> ? R : never;

src/vs/editor/common/editorCommon.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ export interface IConfiguration extends IDisposable {
152152
onDidChange(listener: (e: editorOptions.IConfigurationChangedEvent) => void): IDisposable;
153153

154154
readonly editor: editorOptions.InternalEditorOptions;
155-
readonly options: editorOptions.IComputedEditorOptions;
155+
156+
getOption<T extends editorOptions.IEditorOption<any, any, any>>(id: editorOptions.EditorOptionId): editorOptions.ComputedEditorOptionValue<T>;
156157

157158
setMaxLineNumber(maxLineNumber: number): void;
158159
updateOptions(newOptions: editorOptions.IEditorOptions): void;

src/vs/editor/common/standalone/standaloneEnums.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,9 @@ export enum RenderLineNumbersType {
431431
}
432432

433433
export enum EditorOptionId {
434-
RenderFinalNewline = 0
434+
renderFinalNewline = 0,
435+
selectionClipboard = 1,
436+
selectOnLineNumbers = 2
435437
}
436438

437439
/**

src/vs/monaco.d.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3312,7 +3312,6 @@ declare namespace monaco.editor {
33123312
readonly renderLineNumbers: RenderLineNumbersType;
33133313
readonly renderCustomLineNumbers: ((lineNumber: number) => string) | null;
33143314
readonly cursorSurroundingLines: number;
3315-
readonly selectOnLineNumbers: boolean;
33163315
readonly glyphMargin: boolean;
33173316
readonly revealHorizontalRightPadding: number;
33183317
readonly roundedSelection: boolean;
@@ -3340,7 +3339,6 @@ declare namespace monaco.editor {
33403339
}
33413340

33423341
export interface EditorContribOptions {
3343-
readonly selectionClipboard: boolean;
33443342
readonly hover: InternalEditorHoverOptions;
33453343
readonly links: boolean;
33463344
readonly contextmenu: boolean;
@@ -3555,11 +3553,7 @@ declare namespace monaco.editor {
35553553
[key: string]: any;
35563554
}
35573555

3558-
export interface IComputedEditorOptions {
3559-
get<T1, T2, T3>(id: EditorOptionId, option: IEditorOption<T1, T2, T3>): T3;
3560-
}
3561-
3562-
interface IEditorOption<T1, T2 = T1, T3 = T2> {
3556+
export interface IEditorOption<T1, T2 = T1, T3 = T2> {
35633557
readonly id: EditorOptionId;
35643558
readonly name: string;
35653559
readonly defaultValue: T1;
@@ -3571,13 +3565,19 @@ declare namespace monaco.editor {
35713565
}
35723566

35733567
export enum EditorOptionId {
3574-
RenderFinalNewline = 0
3568+
renderFinalNewline = 0,
3569+
selectionClipboard = 1,
3570+
selectOnLineNumbers = 2
35753571
}
35763572

35773573
export const EditorOption: {
3578-
RenderFinalNewline: IEditorOption<boolean, boolean, boolean>;
3574+
renderFinalNewline: IEditorOption<boolean, boolean, boolean>;
3575+
selectionClipboard: IEditorOption<boolean, boolean, boolean>;
3576+
selectOnLineNumbers: IEditorOption<boolean, boolean, boolean>;
35793577
};
35803578

3579+
export type ComputedEditorOptionValue<T extends IEditorOption<any, any, any>> = T extends IEditorOption<any, any, infer R> ? R : never;
3580+
35813581
/**
35823582
* A view zone is a full horizontal rectangle that 'pushes' text down.
35833583
* The editor reserves space for view zones when rendering.
@@ -4027,6 +4027,7 @@ declare namespace monaco.editor {
40274027
* Returns the current editor's configuration
40284028
*/
40294029
getConfiguration(): InternalEditorOptions;
4030+
getOption<T extends IEditorOption<any, any, any>>(id: EditorOptionId): ComputedEditorOptionValue<T>;
40304031
/**
40314032
* Get value of the current model attached to this editor.
40324033
* @see `ITextModel.getValue`

src/vs/workbench/contrib/codeEditor/browser/selectionClipboard.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import * as process from 'vs/base/common/process';
99
import * as platform from 'vs/base/common/platform';
1010
import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser';
1111
import { registerEditorContribution } from 'vs/editor/browser/editorExtensions';
12-
import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';
12+
import { IConfigurationChangedEvent, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions';
1313
import { ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents';
1414
import { Range } from 'vs/editor/common/core/range';
1515
import { IEditorContribution } from 'vs/editor/common/editorCommon';
@@ -24,11 +24,11 @@ export class SelectionClipboard extends Disposable implements IEditorContributio
2424
super();
2525

2626
if (platform.isLinux) {
27-
let isEnabled = editor.getConfiguration().contribInfo.selectionClipboard;
27+
let isEnabled = editor.getOption<typeof EditorOption.selectionClipboard>(EditorOptionId.selectionClipboard);
2828

2929
this._register(editor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => {
30-
if (e.contribInfo) {
31-
isEnabled = editor.getConfiguration().contribInfo.selectionClipboard;
30+
if (e.hasChanged(EditorOptionId.selectionClipboard)) {
31+
isEnabled = editor.getOption<typeof EditorOption.selectionClipboard>(EditorOptionId.selectionClipboard);
3232
}
3333
}));
3434

0 commit comments

Comments
 (0)