diff --git a/src/vs/editor/browser/view.ts b/src/vs/editor/browser/view.ts index 85b95fbfe12..79c7a86d1cd 100644 --- a/src/vs/editor/browser/view.ts +++ b/src/vs/editor/browser/view.ts @@ -50,6 +50,7 @@ import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { PointerHandlerLastRenderData } from 'vs/editor/browser/controller/mouseTarget'; import { BlockDecorations } from 'vs/editor/browser/viewParts/blockDecorations/blockDecorations'; import { inputLatency } from 'vs/base/browser/performance'; +import { WhitespaceOverlay } from 'vs/editor/browser/viewParts/whitespace/whitespace'; export interface IContentWidgetData { @@ -153,6 +154,7 @@ export class View extends ViewEventHandler { contentViewOverlays.addDynamicOverlay(new SelectionsOverlay(this._context)); contentViewOverlays.addDynamicOverlay(new IndentGuidesOverlay(this._context)); contentViewOverlays.addDynamicOverlay(new DecorationsOverlay(this._context)); + contentViewOverlays.addDynamicOverlay(new WhitespaceOverlay(this._context)); const marginViewOverlays = new MarginViewOverlays(this._context); this._viewParts.push(marginViewOverlays); diff --git a/src/vs/editor/browser/view/viewOverlays.ts b/src/vs/editor/browser/view/viewOverlays.ts index 9c6ebb2bacd..83a3cc05d6f 100644 --- a/src/vs/editor/browser/view/viewOverlays.ts +++ b/src/vs/editor/browser/view/viewOverlays.ts @@ -29,6 +29,10 @@ export class ViewOverlays extends ViewPart implements IVisibleLinesHost(this); this.domNode = this._visibleLines.domNode; + const options = this._context.configuration.options; + const fontInfo = options.get(EditorOption.fontInfo); + applyFontInfo(this.domNode, fontInfo); + this._dynamicOverlays = []; this._isFocused = false; @@ -86,6 +90,11 @@ export class ViewOverlays extends ViewPart implements IVisibleLinesHost(lineCount); + for (let i = 0; i < lineCount; i++) { + needed[i] = true; + } + const viewportData = this._context.viewModel.getMinimapLinesRenderingData(ctx.viewportData.startLineNumber, ctx.viewportData.endLineNumber, needed); + + this._renderResult = []; + for (let lineNumber = ctx.viewportData.startLineNumber; lineNumber <= ctx.viewportData.endLineNumber; lineNumber++) { + const lineIndex = lineNumber - ctx.viewportData.startLineNumber; + const lineData = viewportData.data[lineIndex]!; + + let selectionsOnLine: LineRange[] | null = null; + if (this._options.renderWhitespace === 'selection') { + const selections = this._selection; + for (const selection of selections) { + + if (selection.endLineNumber < lineNumber || selection.startLineNumber > lineNumber) { + // Selection does not intersect line + continue; + } + + const startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn); + const endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn); + + if (startColumn < endColumn) { + if (!selectionsOnLine) { + selectionsOnLine = []; + } + selectionsOnLine.push(new LineRange(startColumn - 1, endColumn - 1)); + } + } + } + + this._renderResult[lineIndex] = this._applyRenderWhitespace(ctx, lineNumber, selectionsOnLine, lineData); + } + } + + private _applyRenderWhitespace(ctx: RenderingContext, lineNumber: number, selections: LineRange[] | null, lineData: ViewLineData): string { + if (this._options.renderWhitespace === 'selection' && !selections) { + return ''; + } + + const lineContent = lineData.content; + const len = (this._options.stopRenderingLineAfter === -1 ? lineContent.length : Math.min(this._options.stopRenderingLineAfter, lineContent.length)); + const continuesWithWrappedLine = lineData.continuesWithWrappedLine; + const fauxIndentLength = lineData.minColumn - 1; + const onlyBoundary = (this._options.renderWhitespace === 'boundary'); + const onlyTrailing = (this._options.renderWhitespace === 'trailing'); + const lineHeight = this._options.lineHeight; + const middotWidth = this._options.middotWidth; + const wsmiddotWidth = this._options.wsmiddotWidth; + const spaceWidth = this._options.spaceWidth; + const wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth); + const middotDiff = Math.abs(middotWidth - spaceWidth); + + // U+2E31 - WORD SEPARATOR MIDDLE DOT + // U+00B7 - MIDDLE DOT + const renderSpaceCharCode = (wsmiddotDiff < middotDiff ? 0x2E31 : 0xB7); + + const canUseHalfwidthRightwardsArrow = this._options.canUseHalfwidthRightwardsArrow; + + let result: string = ''; + + let lineIsEmptyOrWhitespace = false; + let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent); + let lastNonWhitespaceIndex: number; + if (firstNonWhitespaceIndex === -1) { + lineIsEmptyOrWhitespace = true; + firstNonWhitespaceIndex = len; + lastNonWhitespaceIndex = len; + } else { + lastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent); + } + + let currentSelectionIndex = 0; + let currentSelection = selections && selections[currentSelectionIndex]; + for (let charIndex = fauxIndentLength; charIndex < len; charIndex++) { + const chCode = lineContent.charCodeAt(charIndex); + + if (currentSelection && charIndex >= currentSelection.endOffset) { + currentSelectionIndex++; + currentSelection = selections && selections[currentSelectionIndex]; + } + + if (chCode !== CharCode.Tab && chCode !== CharCode.Space) { + continue; + } + + if (onlyTrailing && !lineIsEmptyOrWhitespace && charIndex <= lastNonWhitespaceIndex) { + // If rendering only trailing whitespace, check that the charIndex points to trailing whitespace. + continue; + } + + if (onlyBoundary && charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex && chCode === CharCode.Space) { + // rendering only boundary whitespace + const prevChCode = (charIndex - 1 >= 0 ? lineContent.charCodeAt(charIndex - 1) : CharCode.Null); + const nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : CharCode.Null); + if (prevChCode !== CharCode.Space && nextChCode !== CharCode.Space) { + continue; + } + } + + if (onlyBoundary && continuesWithWrappedLine && charIndex === len - 1) { + const prevCharCode = (charIndex - 1 >= 0 ? lineContent.charCodeAt(charIndex - 1) : CharCode.Null); + const isSingleTrailingSpace = (chCode === CharCode.Space && (prevCharCode !== CharCode.Space && prevCharCode !== CharCode.Tab)); + if (isSingleTrailingSpace) { + continue; + } + } + + if (selections && (!currentSelection || currentSelection.startOffset > charIndex || currentSelection.endOffset <= charIndex)) { + // If rendering whitespace on selection, check that the charIndex falls within a selection + continue; + } + + const visibleRange = ctx.visibleRangeForPosition(new Position(lineNumber, charIndex + 1)); + if (!visibleRange) { + continue; + } + + if (chCode === CharCode.Tab) { + result += `
${canUseHalfwidthRightwardsArrow ? String.fromCharCode(0xFFEB) : String.fromCharCode(0x2192)}
`; + } else { + result += `
${String.fromCharCode(renderSpaceCharCode)}
`; + } + } + + return result; + } + + public render(startLineNumber: number, lineNumber: number): string { + if (!this._renderResult) { + return ''; + } + const lineIndex = lineNumber - startLineNumber; + if (lineIndex < 0 || lineIndex >= this._renderResult.length) { + return ''; + } + return this._renderResult[lineIndex]; + } +} + +class WhitespaceOptions { + + public readonly renderWhitespace: 'none' | 'boundary' | 'selection' | 'trailing' | 'all'; + public readonly spaceWidth: number; + public readonly middotWidth: number; + public readonly wsmiddotWidth: number; + public readonly canUseHalfwidthRightwardsArrow: boolean; + public readonly lineHeight: number; + public readonly stopRenderingLineAfter: number; + + constructor(config: IEditorConfiguration) { + const options = config.options; + const fontInfo = options.get(EditorOption.fontInfo); + if (options.get(EditorOption.experimentalWhitespaceRendering)) { + this.renderWhitespace = options.get(EditorOption.renderWhitespace); + } else { + // whitespace is rendered in the view line + this.renderWhitespace = 'none'; + } + this.spaceWidth = fontInfo.spaceWidth; + this.middotWidth = fontInfo.middotWidth; + this.wsmiddotWidth = fontInfo.wsmiddotWidth; + this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow; + this.lineHeight = options.get(EditorOption.lineHeight); + this.stopRenderingLineAfter = options.get(EditorOption.stopRenderingLineAfter); + } + + public equals(other: WhitespaceOptions): boolean { + return ( + this.renderWhitespace === other.renderWhitespace + && this.spaceWidth === other.spaceWidth + && this.middotWidth === other.middotWidth + && this.wsmiddotWidth === other.wsmiddotWidth + && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow + && this.lineHeight === other.lineHeight + && this.stopRenderingLineAfter === other.stopRenderingLineAfter + ); + } +} diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index 9c44da910ff..4e546deb85a 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -593,6 +593,11 @@ export interface IEditorOptions { * Defaults to 'always'. */ matchBrackets?: 'never' | 'near' | 'always'; + /** + * Enable experimental whitespace rendering. + * Defaults to 'true'. + */ + experimentalWhitespaceRendering?: boolean; /** * Enable rendering of whitespace. * Defaults to 'selection'. @@ -4743,6 +4748,7 @@ export const enum EditorOption { dragAndDrop, dropIntoEditor, emptySelectionClipboard, + experimentalWhitespaceRendering, extraEditorClassName, fastScrollSensitivity, find, @@ -5057,6 +5063,10 @@ export const EditorOptions = { emptySelectionClipboard: register(new EditorEmptySelectionClipboard()), dropIntoEditor: register(new EditorDropIntoEditor()), stickyScroll: register(new EditorStickyScroll()), + experimentalWhitespaceRendering: register(new EditorBooleanOption( + EditorOption.experimentalWhitespaceRendering, 'experimentalWhitespaceRendering', true, + { description: nls.localize('experimentalWhitespaceRendering', "Controls whether whitespace is rendered with a new, experimental method.") } + )), extraEditorClassName: register(new EditorStringOption( EditorOption.extraEditorClassName, 'extraEditorClassName', '', )), diff --git a/src/vs/editor/common/standalone/standaloneEnums.ts b/src/vs/editor/common/standalone/standaloneEnums.ts index 0f29aa57186..ce95a46543a 100644 --- a/src/vs/editor/common/standalone/standaloneEnums.ts +++ b/src/vs/editor/common/standalone/standaloneEnums.ts @@ -207,110 +207,111 @@ export enum EditorOption { dragAndDrop = 31, dropIntoEditor = 32, emptySelectionClipboard = 33, - extraEditorClassName = 34, - fastScrollSensitivity = 35, - find = 36, - fixedOverflowWidgets = 37, - folding = 38, - foldingStrategy = 39, - foldingHighlight = 40, - foldingImportsByDefault = 41, - foldingMaximumRegions = 42, - unfoldOnClickAfterEndOfLine = 43, - fontFamily = 44, - fontInfo = 45, - fontLigatures = 46, - fontSize = 47, - fontWeight = 48, - fontVariations = 49, - formatOnPaste = 50, - formatOnType = 51, - glyphMargin = 52, - gotoLocation = 53, - hideCursorInOverviewRuler = 54, - hover = 55, - inDiffEditor = 56, - inlineSuggest = 57, - letterSpacing = 58, - lightbulb = 59, - lineDecorationsWidth = 60, - lineHeight = 61, - lineNumbers = 62, - lineNumbersMinChars = 63, - linkedEditing = 64, - links = 65, - matchBrackets = 66, - minimap = 67, - mouseStyle = 68, - mouseWheelScrollSensitivity = 69, - mouseWheelZoom = 70, - multiCursorMergeOverlapping = 71, - multiCursorModifier = 72, - multiCursorPaste = 73, - multiCursorLimit = 74, - occurrencesHighlight = 75, - overviewRulerBorder = 76, - overviewRulerLanes = 77, - padding = 78, - parameterHints = 79, - peekWidgetDefaultFocus = 80, - definitionLinkOpensInPeek = 81, - quickSuggestions = 82, - quickSuggestionsDelay = 83, - readOnly = 84, - renameOnType = 85, - renderControlCharacters = 86, - renderFinalNewline = 87, - renderLineHighlight = 88, - renderLineHighlightOnlyWhenFocus = 89, - renderValidationDecorations = 90, - renderWhitespace = 91, - revealHorizontalRightPadding = 92, - roundedSelection = 93, - rulers = 94, - scrollbar = 95, - scrollBeyondLastColumn = 96, - scrollBeyondLastLine = 97, - scrollPredominantAxis = 98, - selectionClipboard = 99, - selectionHighlight = 100, - selectOnLineNumbers = 101, - showFoldingControls = 102, - showUnused = 103, - snippetSuggestions = 104, - smartSelect = 105, - smoothScrolling = 106, - stickyScroll = 107, - stickyTabStops = 108, - stopRenderingLineAfter = 109, - suggest = 110, - suggestFontSize = 111, - suggestLineHeight = 112, - suggestOnTriggerCharacters = 113, - suggestSelection = 114, - tabCompletion = 115, - tabIndex = 116, - unicodeHighlighting = 117, - unusualLineTerminators = 118, - useShadowDOM = 119, - useTabStops = 120, - wordBreak = 121, - wordSeparators = 122, - wordWrap = 123, - wordWrapBreakAfterCharacters = 124, - wordWrapBreakBeforeCharacters = 125, - wordWrapColumn = 126, - wordWrapOverride1 = 127, - wordWrapOverride2 = 128, - wrappingIndent = 129, - wrappingStrategy = 130, - showDeprecated = 131, - inlayHints = 132, - editorClassName = 133, - pixelRatio = 134, - tabFocusMode = 135, - layoutInfo = 136, - wrappingInfo = 137 + experimentalWhitespaceRendering = 34, + extraEditorClassName = 35, + fastScrollSensitivity = 36, + find = 37, + fixedOverflowWidgets = 38, + folding = 39, + foldingStrategy = 40, + foldingHighlight = 41, + foldingImportsByDefault = 42, + foldingMaximumRegions = 43, + unfoldOnClickAfterEndOfLine = 44, + fontFamily = 45, + fontInfo = 46, + fontLigatures = 47, + fontSize = 48, + fontWeight = 49, + fontVariations = 50, + formatOnPaste = 51, + formatOnType = 52, + glyphMargin = 53, + gotoLocation = 54, + hideCursorInOverviewRuler = 55, + hover = 56, + inDiffEditor = 57, + inlineSuggest = 58, + letterSpacing = 59, + lightbulb = 60, + lineDecorationsWidth = 61, + lineHeight = 62, + lineNumbers = 63, + lineNumbersMinChars = 64, + linkedEditing = 65, + links = 66, + matchBrackets = 67, + minimap = 68, + mouseStyle = 69, + mouseWheelScrollSensitivity = 70, + mouseWheelZoom = 71, + multiCursorMergeOverlapping = 72, + multiCursorModifier = 73, + multiCursorPaste = 74, + multiCursorLimit = 75, + occurrencesHighlight = 76, + overviewRulerBorder = 77, + overviewRulerLanes = 78, + padding = 79, + parameterHints = 80, + peekWidgetDefaultFocus = 81, + definitionLinkOpensInPeek = 82, + quickSuggestions = 83, + quickSuggestionsDelay = 84, + readOnly = 85, + renameOnType = 86, + renderControlCharacters = 87, + renderFinalNewline = 88, + renderLineHighlight = 89, + renderLineHighlightOnlyWhenFocus = 90, + renderValidationDecorations = 91, + renderWhitespace = 92, + revealHorizontalRightPadding = 93, + roundedSelection = 94, + rulers = 95, + scrollbar = 96, + scrollBeyondLastColumn = 97, + scrollBeyondLastLine = 98, + scrollPredominantAxis = 99, + selectionClipboard = 100, + selectionHighlight = 101, + selectOnLineNumbers = 102, + showFoldingControls = 103, + showUnused = 104, + snippetSuggestions = 105, + smartSelect = 106, + smoothScrolling = 107, + stickyScroll = 108, + stickyTabStops = 109, + stopRenderingLineAfter = 110, + suggest = 111, + suggestFontSize = 112, + suggestLineHeight = 113, + suggestOnTriggerCharacters = 114, + suggestSelection = 115, + tabCompletion = 116, + tabIndex = 117, + unicodeHighlighting = 118, + unusualLineTerminators = 119, + useShadowDOM = 120, + useTabStops = 121, + wordBreak = 122, + wordSeparators = 123, + wordWrap = 124, + wordWrapBreakAfterCharacters = 125, + wordWrapBreakBeforeCharacters = 126, + wordWrapColumn = 127, + wordWrapOverride1 = 128, + wordWrapOverride2 = 129, + wrappingIndent = 130, + wrappingStrategy = 131, + showDeprecated = 132, + inlayHints = 133, + editorClassName = 134, + pixelRatio = 135, + tabFocusMode = 136, + layoutInfo = 137, + wrappingInfo = 138 } /** diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index f9f4e219195..9f3c87203f1 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -3555,6 +3555,11 @@ declare namespace monaco.editor { * Defaults to 'always'. */ matchBrackets?: 'never' | 'near' | 'always'; + /** + * Enable experimental whitespace rendering. + * Defaults to 'true'. + */ + experimentalWhitespaceRendering?: boolean; /** * Enable rendering of whitespace. * Defaults to 'selection'. @@ -4593,110 +4598,111 @@ declare namespace monaco.editor { dragAndDrop = 31, dropIntoEditor = 32, emptySelectionClipboard = 33, - extraEditorClassName = 34, - fastScrollSensitivity = 35, - find = 36, - fixedOverflowWidgets = 37, - folding = 38, - foldingStrategy = 39, - foldingHighlight = 40, - foldingImportsByDefault = 41, - foldingMaximumRegions = 42, - unfoldOnClickAfterEndOfLine = 43, - fontFamily = 44, - fontInfo = 45, - fontLigatures = 46, - fontSize = 47, - fontWeight = 48, - fontVariations = 49, - formatOnPaste = 50, - formatOnType = 51, - glyphMargin = 52, - gotoLocation = 53, - hideCursorInOverviewRuler = 54, - hover = 55, - inDiffEditor = 56, - inlineSuggest = 57, - letterSpacing = 58, - lightbulb = 59, - lineDecorationsWidth = 60, - lineHeight = 61, - lineNumbers = 62, - lineNumbersMinChars = 63, - linkedEditing = 64, - links = 65, - matchBrackets = 66, - minimap = 67, - mouseStyle = 68, - mouseWheelScrollSensitivity = 69, - mouseWheelZoom = 70, - multiCursorMergeOverlapping = 71, - multiCursorModifier = 72, - multiCursorPaste = 73, - multiCursorLimit = 74, - occurrencesHighlight = 75, - overviewRulerBorder = 76, - overviewRulerLanes = 77, - padding = 78, - parameterHints = 79, - peekWidgetDefaultFocus = 80, - definitionLinkOpensInPeek = 81, - quickSuggestions = 82, - quickSuggestionsDelay = 83, - readOnly = 84, - renameOnType = 85, - renderControlCharacters = 86, - renderFinalNewline = 87, - renderLineHighlight = 88, - renderLineHighlightOnlyWhenFocus = 89, - renderValidationDecorations = 90, - renderWhitespace = 91, - revealHorizontalRightPadding = 92, - roundedSelection = 93, - rulers = 94, - scrollbar = 95, - scrollBeyondLastColumn = 96, - scrollBeyondLastLine = 97, - scrollPredominantAxis = 98, - selectionClipboard = 99, - selectionHighlight = 100, - selectOnLineNumbers = 101, - showFoldingControls = 102, - showUnused = 103, - snippetSuggestions = 104, - smartSelect = 105, - smoothScrolling = 106, - stickyScroll = 107, - stickyTabStops = 108, - stopRenderingLineAfter = 109, - suggest = 110, - suggestFontSize = 111, - suggestLineHeight = 112, - suggestOnTriggerCharacters = 113, - suggestSelection = 114, - tabCompletion = 115, - tabIndex = 116, - unicodeHighlighting = 117, - unusualLineTerminators = 118, - useShadowDOM = 119, - useTabStops = 120, - wordBreak = 121, - wordSeparators = 122, - wordWrap = 123, - wordWrapBreakAfterCharacters = 124, - wordWrapBreakBeforeCharacters = 125, - wordWrapColumn = 126, - wordWrapOverride1 = 127, - wordWrapOverride2 = 128, - wrappingIndent = 129, - wrappingStrategy = 130, - showDeprecated = 131, - inlayHints = 132, - editorClassName = 133, - pixelRatio = 134, - tabFocusMode = 135, - layoutInfo = 136, - wrappingInfo = 137 + experimentalWhitespaceRendering = 34, + extraEditorClassName = 35, + fastScrollSensitivity = 36, + find = 37, + fixedOverflowWidgets = 38, + folding = 39, + foldingStrategy = 40, + foldingHighlight = 41, + foldingImportsByDefault = 42, + foldingMaximumRegions = 43, + unfoldOnClickAfterEndOfLine = 44, + fontFamily = 45, + fontInfo = 46, + fontLigatures = 47, + fontSize = 48, + fontWeight = 49, + fontVariations = 50, + formatOnPaste = 51, + formatOnType = 52, + glyphMargin = 53, + gotoLocation = 54, + hideCursorInOverviewRuler = 55, + hover = 56, + inDiffEditor = 57, + inlineSuggest = 58, + letterSpacing = 59, + lightbulb = 60, + lineDecorationsWidth = 61, + lineHeight = 62, + lineNumbers = 63, + lineNumbersMinChars = 64, + linkedEditing = 65, + links = 66, + matchBrackets = 67, + minimap = 68, + mouseStyle = 69, + mouseWheelScrollSensitivity = 70, + mouseWheelZoom = 71, + multiCursorMergeOverlapping = 72, + multiCursorModifier = 73, + multiCursorPaste = 74, + multiCursorLimit = 75, + occurrencesHighlight = 76, + overviewRulerBorder = 77, + overviewRulerLanes = 78, + padding = 79, + parameterHints = 80, + peekWidgetDefaultFocus = 81, + definitionLinkOpensInPeek = 82, + quickSuggestions = 83, + quickSuggestionsDelay = 84, + readOnly = 85, + renameOnType = 86, + renderControlCharacters = 87, + renderFinalNewline = 88, + renderLineHighlight = 89, + renderLineHighlightOnlyWhenFocus = 90, + renderValidationDecorations = 91, + renderWhitespace = 92, + revealHorizontalRightPadding = 93, + roundedSelection = 94, + rulers = 95, + scrollbar = 96, + scrollBeyondLastColumn = 97, + scrollBeyondLastLine = 98, + scrollPredominantAxis = 99, + selectionClipboard = 100, + selectionHighlight = 101, + selectOnLineNumbers = 102, + showFoldingControls = 103, + showUnused = 104, + snippetSuggestions = 105, + smartSelect = 106, + smoothScrolling = 107, + stickyScroll = 108, + stickyTabStops = 109, + stopRenderingLineAfter = 110, + suggest = 111, + suggestFontSize = 112, + suggestLineHeight = 113, + suggestOnTriggerCharacters = 114, + suggestSelection = 115, + tabCompletion = 116, + tabIndex = 117, + unicodeHighlighting = 118, + unusualLineTerminators = 119, + useShadowDOM = 120, + useTabStops = 121, + wordBreak = 122, + wordSeparators = 123, + wordWrap = 124, + wordWrapBreakAfterCharacters = 125, + wordWrapBreakBeforeCharacters = 126, + wordWrapColumn = 127, + wordWrapOverride1 = 128, + wordWrapOverride2 = 129, + wrappingIndent = 130, + wrappingStrategy = 131, + showDeprecated = 132, + inlayHints = 133, + editorClassName = 134, + pixelRatio = 135, + tabFocusMode = 136, + layoutInfo = 137, + wrappingInfo = 138 } export const EditorOptions: { @@ -4736,6 +4742,7 @@ declare namespace monaco.editor { emptySelectionClipboard: IEditorOption; dropIntoEditor: IEditorOption>>; stickyScroll: IEditorOption>>; + experimentalWhitespaceRendering: IEditorOption; extraEditorClassName: IEditorOption; fastScrollSensitivity: IEditorOption; find: IEditorOption>>;