Skip to content

Commit 2f07661

Browse files
committed
Added editor setting
1 parent 9e6be56 commit 2f07661

File tree

10 files changed

+90
-35
lines changed

10 files changed

+90
-35
lines changed

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,11 @@ export interface IEditorOptions {
786786
* Controls whether the accessibility hint should be provided to screen reader users when an inline completion is shown.
787787
*/
788788
inlineCompletionsAccessibilityVerbose?: boolean;
789+
790+
/**
791+
* When the preceding line is a blank line, use OnEnterRule on the previous non-blank line to determine the indentation.
792+
*/
793+
considerOnEnterRulesForInheritedIndentAfterBlankLine?: boolean;
789794
}
790795

791796
/**
@@ -5647,7 +5652,8 @@ export const enum EditorOption {
56475652
defaultColorDecorators,
56485653
colorDecoratorsActivatedOn,
56495654
inlineCompletionsAccessibilityVerbose,
5650-
effectiveExperimentalEditContextEnabled
5655+
effectiveExperimentalEditContextEnabled,
5656+
considerOnEnterRulesForInheritedIndentAfterBlankLine,
56515657
}
56525658

56535659
export const EditorOptions = {
@@ -6480,7 +6486,11 @@ export const EditorOptions = {
64806486
wrappingInfo: register(new EditorWrappingInfoComputer()),
64816487
wrappingIndent: register(new WrappingIndentOption()),
64826488
wrappingStrategy: register(new WrappingStrategy()),
6483-
effectiveExperimentalEditContextEnabled: register(new EffectiveExperimentalEditContextEnabled())
6489+
effectiveExperimentalEditContextEnabled: register(new EffectiveExperimentalEditContextEnabled()),
6490+
considerOnEnterRulesForInheritedIndentAfterBlankLine: register(new EditorBooleanOption(
6491+
EditorOption.considerOnEnterRulesForInheritedIndentAfterBlankLine, 'considerOnEnterRulesForInheritedIndentAfterBlankLine', false,
6492+
{ description: nls.localize('considerOnEnterRulesForInheritedIndentAfterBlankLine', "When the preceding line is a blank line, use OnEnterRule on the previous non-blank line to determine the indentation.") }
6493+
)),
64846494
};
64856495

64866496
type EditorOptionsType = typeof EditorOptions;

src/vs/editor/common/cursor/cursorTypeEditOperations.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ export class EnterOperation {
570570
const indentation = strings.getLeadingWhitespace(lineText).substring(0, range.startColumn - 1);
571571

572572
if (config.autoIndent >= EditorAutoIndentStrategy.Full) {
573-
const ir = getIndentForEnter(config.autoIndent, model, range, {
573+
const ir = getIndentForEnter(config.autoIndent, config.considerOnEnterRulesForInheritedIndentAfterBlankLine, model, range, {
574574
unshiftIndent: (indent) => {
575575
return unshiftIndent(config, indent);
576576
},
@@ -815,7 +815,7 @@ export class TabOperation {
815815
private static _goodIndentForLine(config: CursorConfiguration, model: ITextModel, lineNumber: number): string | null {
816816
let action: IndentAction | EnterAction | null = null;
817817
let indentation: string = '';
818-
const expectedIndentAction = getInheritIndentForLine(config.autoIndent, model, lineNumber, false, config.languageConfigurationService);
818+
const expectedIndentAction = getInheritIndentForLine(config.autoIndent, config.considerOnEnterRulesForInheritedIndentAfterBlankLine, model, lineNumber, false, config.languageConfigurationService, undefined);
819819
if (expectedIndentAction) {
820820
action = expectedIndentAction.action;
821821
indentation = expectedIndentAction.indentation;

src/vs/editor/common/cursorCommon.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ export class CursorConfiguration {
7979
public readonly shouldAutoCloseBefore: { quote: (ch: string) => boolean; bracket: (ch: string) => boolean; comment: (ch: string) => boolean };
8080
public readonly wordSegmenterLocales: string[];
8181
public readonly overtypeOnPaste: boolean;
82+
public readonly considerOnEnterRulesForInheritedIndentAfterBlankLine: boolean;
8283

8384
private readonly _languageId: string;
8485
private _electricChars: { [key: string]: boolean } | null;
@@ -102,6 +103,7 @@ export class CursorConfiguration {
102103
|| e.hasChanged(EditorOption.readOnly)
103104
|| e.hasChanged(EditorOption.wordSegmenterLocales)
104105
|| e.hasChanged(EditorOption.overtypeOnPaste)
106+
|| e.hasChanged(EditorOption.considerOnEnterRulesForInheritedIndentAfterBlankLine)
105107
);
106108
}
107109

@@ -141,6 +143,7 @@ export class CursorConfiguration {
141143
this.autoIndent = options.get(EditorOption.autoIndent);
142144
this.wordSegmenterLocales = options.get(EditorOption.wordSegmenterLocales);
143145
this.overtypeOnPaste = options.get(EditorOption.overtypeOnPaste);
146+
this.considerOnEnterRulesForInheritedIndentAfterBlankLine = options.get(EditorOption.considerOnEnterRulesForInheritedIndentAfterBlankLine);
144147

145148
this.surroundingPairs = {};
146149
this._electricChars = null;

src/vs/editor/common/languages/autoIndent.ts

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,47 @@ function getPrecedingValidLine(model: IVirtualModel, lineNumber: number, process
6060
return -1;
6161
}
6262

63+
/**
64+
* Get indentation for line from reference line
65+
*/
66+
function getIndentationForLineFromReferenceLine(
67+
autoIndent: EditorAutoIndentStrategy,
68+
model: IVirtualModel,
69+
languageConfigurationService: ILanguageConfigurationService,
70+
considerOnEnterRulesForInheritedIndentAfterBlankLine: boolean,
71+
indentConverter: IIndentConverter | undefined,
72+
referencePrevLineNum: number,
73+
currentLineNumber: number
74+
): string {
75+
let indentation = strings.getLeadingWhitespace(model.getLineContent(referencePrevLineNum));
76+
// Check for onEnter rules that should decrease the indent
77+
if (indentConverter && considerOnEnterRulesForInheritedIndentAfterBlankLine) {
78+
const richEditSupport = languageConfigurationService.getLanguageConfiguration(model.tokenization.getLanguageId());
79+
if (richEditSupport) {
80+
const previousLineText = referencePrevLineNum < 1 ? '' : model.getLineContent(referencePrevLineNum - 1);
81+
let afterEnterText = "";
82+
try {
83+
afterEnterText = model.getLineContent(currentLineNumber);
84+
} catch (e) {
85+
// Probably after the end of file
86+
}
87+
const referencePrevLineNumContent = model.getLineContent(referencePrevLineNum);
88+
const enterResult = richEditSupport.onEnter(autoIndent, previousLineText, referencePrevLineNumContent, afterEnterText);
89+
if (enterResult) {
90+
if (enterResult.indentAction === IndentAction.Outdent) {
91+
indentation = indentConverter.unshiftIndent(indentation);
92+
} else if (enterResult.indentAction === IndentAction.Indent) {
93+
indentation = indentConverter.shiftIndent(indentation);
94+
} else if (enterResult.removeText && indentation.length >= enterResult.removeText) {
95+
indentation = indentation.substring(0, indentation.length - enterResult.removeText - 1);
96+
}
97+
}
98+
}
99+
}
100+
101+
return indentation;
102+
}
103+
63104
/**
64105
* Get inherited indentation from above lines.
65106
* 1. Find the nearest preceding line which doesn't match unIndentedLinePattern.
@@ -74,11 +115,12 @@ function getPrecedingValidLine(model: IVirtualModel, lineNumber: number, process
74115
*/
75116
export function getInheritIndentForLine(
76117
autoIndent: EditorAutoIndentStrategy,
118+
considerOnEnterRulesForInheritedIndentAfterBlankLine: boolean,
77119
model: IVirtualModel,
78120
lineNumber: number,
79121
honorIntentialIndent: boolean = true,
80122
languageConfigurationService: ILanguageConfigurationService,
81-
indentConverter: IIndentConverter | undefined = undefined
123+
indentConverter: IIndentConverter | undefined
82124
): { indentation: string; action: IndentAction | null; line?: number } | null {
83125
if (autoIndent < EditorAutoIndentStrategy.Full) {
84126
return null;
@@ -170,26 +212,8 @@ export function getInheritIndentForLine(
170212
}
171213

172214
if (honorIntentialIndent) {
173-
let indentation = strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine));
174-
// Check for onEnter rules that should decrease the indent
175-
if (indentConverter) {
176-
const richEditSupport = languageConfigurationService.getLanguageConfiguration(model.tokenization.getLanguageId());
177-
if (richEditSupport) {
178-
const previousLineText = precedingUnIgnoredLine < 1 ? '' : model.getLineContent(precedingUnIgnoredLine - 1);
179-
const afterEnterText = model.getLineContent(lineNumber);
180-
const enterResult = richEditSupport.onEnter(autoIndent, previousLineText, precedingUnIgnoredLineContent, afterEnterText);
181-
if (enterResult) {
182-
if (enterResult.indentAction === IndentAction.Outdent) {
183-
indentation = indentConverter.unshiftIndent(indentation);
184-
} else if (enterResult.removeText && indentation.length >= enterResult.removeText) {
185-
indentation = indentation.substring(0, indentation.length - enterResult.removeText - 1);
186-
}
187-
}
188-
}
189-
}
190-
191215
return {
192-
indentation: indentation,
216+
indentation: getIndentationForLineFromReferenceLine(autoIndent, model, languageConfigurationService, considerOnEnterRulesForInheritedIndentAfterBlankLine, indentConverter, precedingUnIgnoredLine, lineNumber),
193217
action: null,
194218
line: precedingUnIgnoredLine
195219
};
@@ -237,6 +261,7 @@ export function getInheritIndentForLine(
237261

238262
export function getGoodIndentForLine(
239263
autoIndent: EditorAutoIndentStrategy,
264+
considerOnEnterRulesForInheritedIndentAfterBlankLine: boolean,
240265
virtualModel: IVirtualModel,
241266
languageId: string,
242267
lineNumber: number,
@@ -258,7 +283,7 @@ export function getGoodIndentForLine(
258283
}
259284

260285
const processedIndentRulesSupport = new ProcessedIndentRulesSupport(virtualModel, indentRulesSupport, languageConfigurationService);
261-
const indent = getInheritIndentForLine(autoIndent, virtualModel, lineNumber, undefined, languageConfigurationService, indentConverter);
286+
const indent = getInheritIndentForLine(autoIndent, considerOnEnterRulesForInheritedIndentAfterBlankLine, virtualModel, lineNumber, undefined, languageConfigurationService, indentConverter);
262287

263288
if (indent) {
264289
const inheritLine = indent.line;
@@ -322,6 +347,7 @@ export function getGoodIndentForLine(
322347

323348
export function getIndentForEnter(
324349
autoIndent: EditorAutoIndentStrategy,
350+
considerOnEnterRulesForInheritedIndentAfterBlankLine: boolean,
325351
model: ITextModel,
326352
range: Range,
327353
indentConverter: IIndentConverter,
@@ -347,7 +373,7 @@ export function getIndentForEnter(
347373
const languageIsDifferentFromLineStart = isLanguageDifferentFromLineStart(model, range.getStartPosition());
348374
const currentLine = model.getLineContent(range.startLineNumber);
349375
const currentLineIndent = strings.getLeadingWhitespace(currentLine);
350-
const afterEnterAction = getInheritIndentForLine(autoIndent, virtualModel, range.startLineNumber + 1, undefined, languageConfigurationService, indentConverter);
376+
const afterEnterAction = getInheritIndentForLine(autoIndent, considerOnEnterRulesForInheritedIndentAfterBlankLine, virtualModel, range.startLineNumber + 1, undefined, languageConfigurationService, indentConverter);
351377
if (!afterEnterAction) {
352378
const beforeEnter = languageIsDifferentFromLineStart ? currentLineIndent : beforeEnterIndent;
353379
return {
@@ -388,6 +414,7 @@ export function getIndentActionForType(
388414
if (autoIndent < EditorAutoIndentStrategy.Full) {
389415
return null;
390416
}
417+
const considerOnEnterRulesForInheritedIndentAfterBlankLine = cursorConfig.considerOnEnterRulesForInheritedIndentAfterBlankLine;
391418
const languageIsDifferentFromLineStart = isLanguageDifferentFromLineStart(model, range.getStartPosition());
392419
if (languageIsDifferentFromLineStart) {
393420
// this line has mixed languages and indentation rules will not work
@@ -412,7 +439,7 @@ export function getIndentActionForType(
412439
if (!indentRulesSupport.shouldDecrease(textAroundRange) && indentRulesSupport.shouldDecrease(textAroundRangeWithCharacter)) {
413440
// after typing `ch`, the content matches decreaseIndentPattern, we should adjust the indent to a good manner.
414441
// 1. Get inherited indent action
415-
const r = getInheritIndentForLine(autoIndent, model, range.startLineNumber, false, languageConfigurationService, indentConverter);
442+
const r = getInheritIndentForLine(autoIndent, considerOnEnterRulesForInheritedIndentAfterBlankLine, model, range.startLineNumber, false, languageConfigurationService, indentConverter);
416443
if (!r) {
417444
return null;
418445
}
@@ -429,7 +456,7 @@ export function getIndentActionForType(
429456
if (previousLineNumber > 0) {
430457
const previousLine = model.getLineContent(previousLineNumber);
431458
if (indentRulesSupport.shouldIndentNextLine(previousLine) && indentRulesSupport.shouldIncrease(textAroundRangeWithCharacter)) {
432-
const inheritedIndentationData = getInheritIndentForLine(autoIndent, model, range.startLineNumber, false, languageConfigurationService);
459+
const inheritedIndentationData = getInheritIndentForLine(autoIndent, considerOnEnterRulesForInheritedIndentAfterBlankLine, model, range.startLineNumber, false, languageConfigurationService, undefined);
433460
const inheritedIndentation = inheritedIndentationData?.indentation;
434461
if (inheritedIndentation !== undefined) {
435462
const currentLine = model.getLineContent(range.startLineNumber);

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,8 @@ export enum EditorOption {
331331
defaultColorDecorators = 154,
332332
colorDecoratorsActivatedOn = 155,
333333
inlineCompletionsAccessibilityVerbose = 156,
334-
effectiveExperimentalEditContextEnabled = 157
334+
effectiveExperimentalEditContextEnabled = 157,
335+
considerOnEnterRulesForInheritedIndentAfterBlankLine = 158
335336
}
336337

337338
/**

src/vs/editor/contrib/indentation/browser/indentation.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ export class AutoIndentOnPaste implements IEditorContribution {
421421
return;
422422
}
423423
const autoIndent = this.editor.getOption(EditorOption.autoIndent);
424+
const considerOnEnterRulesForInheritedIndentAfterBlankLine = this.editor.getOption(EditorOption.considerOnEnterRulesForInheritedIndentAfterBlankLine);
424425
const { tabSize, indentSize, insertSpaces } = model.getOptions();
425426
const textEdits: TextEdit[] = [];
426427

@@ -449,7 +450,7 @@ export class AutoIndentOnPaste implements IEditorContribution {
449450

450451
let firstLineText = model.getLineContent(startLineNumber);
451452
if (!/\S/.test(firstLineText.substring(0, range.startColumn - 1))) {
452-
const indentOfFirstLine = getGoodIndentForLine(autoIndent, model, model.getLanguageId(), startLineNumber, indentConverter, this._languageConfigurationService);
453+
const indentOfFirstLine = getGoodIndentForLine(autoIndent, considerOnEnterRulesForInheritedIndentAfterBlankLine, model, model.getLanguageId(), startLineNumber, indentConverter, this._languageConfigurationService);
453454

454455
if (indentOfFirstLine !== null) {
455456
const oldIndentation = strings.getLeadingWhitespace(firstLineText);
@@ -509,7 +510,7 @@ export class AutoIndentOnPaste implements IEditorContribution {
509510
}
510511
}
511512
};
512-
const indentOfSecondLine = getGoodIndentForLine(autoIndent, virtualModel, model.getLanguageId(), startLineNumber + 1, indentConverter, this._languageConfigurationService);
513+
const indentOfSecondLine = getGoodIndentForLine(autoIndent, considerOnEnterRulesForInheritedIndentAfterBlankLine, virtualModel, model.getLanguageId(), startLineNumber + 1, indentConverter, this._languageConfigurationService);
513514
if (indentOfSecondLine !== null) {
514515
const newSpaceCntOfSecondLine = indentUtils.getSpaceCnt(indentOfSecondLine, tabSize);
515516
const oldSpaceCntOfSecondLine = indentUtils.getSpaceCnt(strings.getLeadingWhitespace(model.getLineContent(startLineNumber + 1)), tabSize);

src/vs/editor/contrib/linesOperations/browser/linesOperations.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,10 @@ abstract class AbstractMoveLinesAction extends EditorAction {
176176
const commands: ICommand[] = [];
177177
const selections = editor.getSelections() || [];
178178
const autoIndent = editor.getOption(EditorOption.autoIndent);
179+
const considerOnEnterRulesForInheritedIndentAfterBlankLine = editor.getOption(EditorOption.considerOnEnterRulesForInheritedIndentAfterBlankLine);
179180

180181
for (const selection of selections) {
181-
commands.push(new MoveLinesCommand(selection, this.down, autoIndent, languageConfigurationService));
182+
commands.push(new MoveLinesCommand(selection, this.down, autoIndent, considerOnEnterRulesForInheritedIndentAfterBlankLine, languageConfigurationService));
182183
}
183184

184185
editor.pushUndoStop();

src/vs/editor/contrib/linesOperations/browser/moveLinesCommand.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export class MoveLinesCommand implements ICommand {
2222
private readonly _selection: Selection;
2323
private readonly _isMovingDown: boolean;
2424
private readonly _autoIndent: EditorAutoIndentStrategy;
25+
private readonly _considerOnEnterRulesForInheritedIndentAfterBlankLine: boolean;
2526

2627
private _selectionId: string | null;
2728
private _moveEndPositionDown?: boolean;
@@ -31,11 +32,13 @@ export class MoveLinesCommand implements ICommand {
3132
selection: Selection,
3233
isMovingDown: boolean,
3334
autoIndent: EditorAutoIndentStrategy,
35+
considerOnEnterRulesForInheritedIndentAfterBlankLine: boolean,
3436
@ILanguageConfigurationService private readonly _languageConfigurationService: ILanguageConfigurationService
3537
) {
3638
this._selection = selection;
3739
this._isMovingDown = isMovingDown;
3840
this._autoIndent = autoIndent;
41+
this._considerOnEnterRulesForInheritedIndentAfterBlankLine = considerOnEnterRulesForInheritedIndentAfterBlankLine;
3942
this._selectionId = null;
4043
this._moveEndLineSelectionShrink = false;
4144
}
@@ -135,6 +138,7 @@ export class MoveLinesCommand implements ICommand {
135138
};
136139
const indentOfMovingLine = getGoodIndentForLine(
137140
this._autoIndent,
141+
this._considerOnEnterRulesForInheritedIndentAfterBlankLine,
138142
virtualModel,
139143
model.getLanguageIdAtPosition(movingLineNumber, 1),
140144
s.startLineNumber,
@@ -193,6 +197,7 @@ export class MoveLinesCommand implements ICommand {
193197

194198
const newIndentatOfMovingBlock = getGoodIndentForLine(
195199
this._autoIndent,
200+
this._considerOnEnterRulesForInheritedIndentAfterBlankLine,
196201
virtualModel,
197202
model.getLanguageIdAtPosition(movingLineNumber, 1),
198203
s.startLineNumber + 1,
@@ -257,6 +262,7 @@ export class MoveLinesCommand implements ICommand {
257262
// it doesn't match any onEnter rule, let's check indentation rules then.
258263
const indentOfFirstLine = getGoodIndentForLine(
259264
this._autoIndent,
265+
this._considerOnEnterRulesForInheritedIndentAfterBlankLine,
260266
virtualModel,
261267
model.getLanguageIdAtPosition(s.startLineNumber, 1),
262268
movingLineNumber,

src/vs/editor/contrib/linesOperations/test/browser/moveLinesCommand.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function testMoveLinesUpOrDownCommand(direction: MoveLinesDirection, lines: stri
4040
if (!languageConfigurationService) {
4141
languageConfigurationService = disposables.add(new TestLanguageConfigurationService());
4242
}
43-
testCommand(lines, null, selection, (accessor, sel) => new MoveLinesCommand(sel, direction === MoveLinesDirection.Up ? false : true, EditorAutoIndentStrategy.Advanced, languageConfigurationService), expectedLines, expectedSelection);
43+
testCommand(lines, null, selection, (accessor, sel) => new MoveLinesCommand(sel, direction === MoveLinesDirection.Up ? false : true, EditorAutoIndentStrategy.Advanced, false, languageConfigurationService), expectedLines, expectedSelection);
4444
disposables.dispose();
4545
}
4646

@@ -49,7 +49,7 @@ function testMoveLinesUpOrDownWithIndentCommand(direction: MoveLinesDirection, l
4949
if (!languageConfigurationService) {
5050
languageConfigurationService = disposables.add(new TestLanguageConfigurationService());
5151
}
52-
testCommand(lines, languageId, selection, (accessor, sel) => new MoveLinesCommand(sel, direction === MoveLinesDirection.Up ? false : true, EditorAutoIndentStrategy.Full, languageConfigurationService), expectedLines, expectedSelection);
52+
testCommand(lines, languageId, selection, (accessor, sel) => new MoveLinesCommand(sel, direction === MoveLinesDirection.Up ? false : true, EditorAutoIndentStrategy.Full, false, languageConfigurationService), expectedLines, expectedSelection);
5353
disposables.dispose();
5454
}
5555

src/vs/monaco.d.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3838,6 +3838,10 @@ declare namespace monaco.editor {
38383838
* Controls whether the accessibility hint should be provided to screen reader users when an inline completion is shown.
38393839
*/
38403840
inlineCompletionsAccessibilityVerbose?: boolean;
3841+
/**
3842+
* When the preceding line is a blank line, use OnEnterRule on the previous non-blank line to determine the indentation.
3843+
*/
3844+
considerOnEnterRulesForInheritedIndentAfterBlankLine?: boolean;
38413845
}
38423846

38433847
export interface IDiffEditorBaseOptions {
@@ -5068,7 +5072,8 @@ declare namespace monaco.editor {
50685072
defaultColorDecorators = 154,
50695073
colorDecoratorsActivatedOn = 155,
50705074
inlineCompletionsAccessibilityVerbose = 156,
5071-
effectiveExperimentalEditContextEnabled = 157
5075+
effectiveExperimentalEditContextEnabled = 157,
5076+
considerOnEnterRulesForInheritedIndentAfterBlankLine = 158
50725077
}
50735078

50745079
export const EditorOptions: {
@@ -5230,6 +5235,7 @@ declare namespace monaco.editor {
52305235
wrappingIndent: IEditorOption<EditorOption.wrappingIndent, WrappingIndent>;
52315236
wrappingStrategy: IEditorOption<EditorOption.wrappingStrategy, 'simple' | 'advanced'>;
52325237
effectiveExperimentalEditContextEnabled: IEditorOption<EditorOption.effectiveExperimentalEditContextEnabled, boolean>;
5238+
considerOnEnterRulesForInheritedIndentAfterBlankLine: IEditorOption<EditorOption.considerOnEnterRulesForInheritedIndentAfterBlankLine, boolean>;
52335239
};
52345240

52355241
type EditorOptionsType = typeof EditorOptions;

0 commit comments

Comments
 (0)