in src/vs/editor/common/config/editorOptions.ts [2245:2398]
public static createInternalEditorOptions(env: IEnvironmentalOptions, _opts: IValidatedEditorOptions) {
let accessibilitySupport: AccessibilitySupport;
if (_opts.accessibilitySupport === 'auto') {
// The editor reads the `accessibilitySupport` from the environment
accessibilitySupport = env.accessibilitySupport;
} else if (_opts.accessibilitySupport === 'on') {
accessibilitySupport = AccessibilitySupport.Enabled;
} else {
accessibilitySupport = AccessibilitySupport.Disabled;
}
// Disable some non critical features to get as best performance as possible
// See https://github.com/Microsoft/vscode/issues/26730
const opts = this._tweakValidatedOptions(_opts, accessibilitySupport);
let lineDecorationsWidth: number;
if (typeof opts.lineDecorationsWidth === 'string' && /^\d+(\.\d+)?ch$/.test(opts.lineDecorationsWidth)) {
const multiple = parseFloat(opts.lineDecorationsWidth.substr(0, opts.lineDecorationsWidth.length - 2));
lineDecorationsWidth = multiple * env.fontInfo.typicalHalfwidthCharacterWidth;
} else {
lineDecorationsWidth = _clampedInt(opts.lineDecorationsWidth, 0, 0, 1000);
}
if (opts.contribInfo.folding) {
lineDecorationsWidth += 16;
}
const layoutInfo = EditorLayoutProvider.compute({
outerWidth: env.outerWidth,
outerHeight: env.outerHeight,
showGlyphMargin: opts.viewInfo.glyphMargin,
lineHeight: env.fontInfo.lineHeight,
showLineNumbers: (opts.viewInfo.renderLineNumbers !== RenderLineNumbersType.Off),
lineNumbersMinChars: opts.lineNumbersMinChars,
lineNumbersDigitCount: env.lineNumbersDigitCount,
lineDecorationsWidth: lineDecorationsWidth,
typicalHalfwidthCharacterWidth: env.fontInfo.typicalHalfwidthCharacterWidth,
maxDigitWidth: env.fontInfo.maxDigitWidth,
verticalScrollbarWidth: opts.viewInfo.scrollbar.verticalScrollbarSize,
horizontalScrollbarHeight: opts.viewInfo.scrollbar.horizontalScrollbarSize,
scrollbarArrowSize: opts.viewInfo.scrollbar.arrowSize,
verticalScrollbarHasArrows: opts.viewInfo.scrollbar.verticalHasArrows,
minimap: opts.viewInfo.minimap.enabled,
minimapSide: opts.viewInfo.minimap.side,
minimapRenderCharacters: opts.viewInfo.minimap.renderCharacters,
minimapMaxColumn: opts.viewInfo.minimap.maxColumn,
pixelRatio: env.pixelRatio
});
let bareWrappingInfo: { isWordWrapMinified: boolean; isViewportWrapping: boolean; wrappingColumn: number; } | null = null;
{
const wordWrap = opts.wordWrap;
const wordWrapColumn = opts.wordWrapColumn;
const wordWrapMinified = opts.wordWrapMinified;
if (accessibilitySupport === AccessibilitySupport.Enabled) {
// See https://github.com/Microsoft/vscode/issues/27766
// Never enable wrapping when a screen reader is attached
// because arrow down etc. will not move the cursor in the way
// a screen reader expects.
bareWrappingInfo = {
isWordWrapMinified: false,
isViewportWrapping: false,
wrappingColumn: -1
};
} else if (wordWrapMinified && env.isDominatedByLongLines) {
// Force viewport width wrapping if model is dominated by long lines
bareWrappingInfo = {
isWordWrapMinified: true,
isViewportWrapping: true,
wrappingColumn: Math.max(1, layoutInfo.viewportColumn)
};
} else if (wordWrap === 'on') {
bareWrappingInfo = {
isWordWrapMinified: false,
isViewportWrapping: true,
wrappingColumn: Math.max(1, layoutInfo.viewportColumn)
};
} else if (wordWrap === 'bounded') {
bareWrappingInfo = {
isWordWrapMinified: false,
isViewportWrapping: true,
wrappingColumn: Math.min(Math.max(1, layoutInfo.viewportColumn), wordWrapColumn)
};
} else if (wordWrap === 'wordWrapColumn') {
bareWrappingInfo = {
isWordWrapMinified: false,
isViewportWrapping: false,
wrappingColumn: wordWrapColumn
};
} else {
bareWrappingInfo = {
isWordWrapMinified: false,
isViewportWrapping: false,
wrappingColumn: -1
};
}
}
const wrappingInfo: EditorWrappingInfo = {
inDiffEditor: opts.inDiffEditor,
isDominatedByLongLines: env.isDominatedByLongLines,
isWordWrapMinified: bareWrappingInfo.isWordWrapMinified,
isViewportWrapping: bareWrappingInfo.isViewportWrapping,
wrappingColumn: bareWrappingInfo.wrappingColumn,
wrappingIndent: opts.wrappingIndent,
wordWrapBreakBeforeCharacters: opts.wordWrapBreakBeforeCharacters,
wordWrapBreakAfterCharacters: opts.wordWrapBreakAfterCharacters,
wordWrapBreakObtrusiveCharacters: opts.wordWrapBreakObtrusiveCharacters,
};
let className = 'monaco-editor';
if (opts.viewInfo.extraEditorClassName) {
className += ' ' + opts.viewInfo.extraEditorClassName;
}
if (env.extraEditorClassName) {
className += ' ' + env.extraEditorClassName;
}
if (opts.viewInfo.fontLigatures) {
className += ' enable-ligatures';
}
if (opts.mouseStyle === 'default') {
className += ' mouse-default';
} else if (opts.mouseStyle === 'copy') {
className += ' mouse-copy';
}
return new InternalEditorOptions({
canUseLayerHinting: opts.disableLayerHinting ? false : true,
pixelRatio: env.pixelRatio,
editorClassName: className,
lineHeight: env.fontInfo.lineHeight,
readOnly: opts.readOnly,
accessibilitySupport: accessibilitySupport,
multiCursorModifier: opts.multiCursorModifier,
multiCursorMergeOverlapping: opts.multiCursorMergeOverlapping,
wordSeparators: opts.wordSeparators,
autoClosingBrackets: opts.autoClosingBrackets,
autoClosingQuotes: opts.autoClosingQuotes,
autoSurround: opts.autoSurround,
autoIndent: opts.autoIndent,
useTabStops: opts.useTabStops,
tabFocusMode: opts.readOnly ? true : env.tabFocusMode,
dragAndDrop: opts.dragAndDrop,
emptySelectionClipboard: opts.emptySelectionClipboard && env.emptySelectionClipboard,
copyWithSyntaxHighlighting: opts.copyWithSyntaxHighlighting,
layoutInfo: layoutInfo,
fontInfo: env.fontInfo,
viewInfo: opts.viewInfo,
wrappingInfo: wrappingInfo,
contribInfo: opts.contribInfo,
showUnused: opts.showUnused,
});
}