diff --git a/src/vs/editor/browser/controller/mouseHandler.ts b/src/vs/editor/browser/controller/mouseHandler.ts index ce65849c418..a28b811da24 100644 --- a/src/vs/editor/browser/controller/mouseHandler.ts +++ b/src/vs/editor/browser/controller/mouseHandler.ts @@ -21,7 +21,8 @@ import { HorizontalRange } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + /** * Merges mouse events when mouse move events are throttled @@ -217,7 +218,7 @@ export class MouseHandler extends ViewEventHandler { const targetIsContent = (t.type === editorBrowser.MouseTargetType.CONTENT_TEXT || t.type === editorBrowser.MouseTargetType.CONTENT_EMPTY); const targetIsGutter = (t.type === editorBrowser.MouseTargetType.GUTTER_GLYPH_MARGIN || t.type === editorBrowser.MouseTargetType.GUTTER_LINE_NUMBERS || t.type === editorBrowser.MouseTargetType.GUTTER_LINE_DECORATIONS); const targetIsLineNumbers = (t.type === editorBrowser.MouseTargetType.GUTTER_LINE_NUMBERS); - const selectOnLineNumbers = this._context.configuration.options.get(EditorOptionId.selectOnLineNumbers); + const selectOnLineNumbers = this._context.configuration.options.get(EditorOptionId.selectOnLineNumbers); const targetIsViewZone = (t.type === editorBrowser.MouseTargetType.CONTENT_VIEW_ZONE || t.type === editorBrowser.MouseTargetType.GUTTER_VIEW_ZONE); const targetIsWidget = (t.type === editorBrowser.MouseTargetType.CONTENT_WIDGET); @@ -352,7 +353,10 @@ class MouseDownOperation extends Disposable { // Overwrite the detail of the MouseEvent, as it will be sent out in an event and contributions might rely on it. e.detail = this._mouseState.count; - if (!this._context.configuration.editor.readOnly + const options = this._context.configuration.options; + const readOnly = options.get(EditorOptionId.readOnly); + + if (!readOnly && this._context.configuration.editor.dragAndDrop && !this._mouseState.altKey // we don't support multiple mouse && e.detail < 2 // only single click on a selection can work diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index 58948e740aa..cde6cad5f2d 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -10,7 +10,7 @@ import { ClientCoordinates, EditorMouseEvent, EditorPagePosition, PageCoordinate import { PartFingerprint, PartFingerprints } from 'vs/editor/browser/view/viewPart'; import { ViewLine } from 'vs/editor/browser/viewParts/lines/viewLine'; import { IViewCursorRenderData } from 'vs/editor/browser/viewParts/viewCursors/viewCursor'; -import { EditorLayoutInfo, EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorLayoutInfo, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { Range as EditorRange } from 'vs/editor/common/core/range'; import { HorizontalRange } from 'vs/editor/common/view/renderingContext'; @@ -240,7 +240,7 @@ export class HitTestContext { constructor(context: ViewContext, viewHelper: IPointerHandlerHelper, lastViewCursorsRenderData: IViewCursorRenderData[]) { this.model = context.model; const options = context.configuration.options; - this.layoutInfo = options.get(EditorOptionId.layoutInfo); + this.layoutInfo = options.get(EditorOptionId.layoutInfo); this.viewDomNode = viewHelper.viewDomNode; this.lineHeight = context.configuration.editor.lineHeight; this.typicalHalfwidthCharacterWidth = context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth; @@ -715,7 +715,7 @@ export class MouseTargetFactory { public getMouseColumn(editorPos: EditorPagePosition, pos: PageCoordinates): number { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); const mouseContentHorizontalOffset = this._context.viewLayout.getCurrentScrollLeft() + pos.x - editorPos.x - layoutInfo.contentLeft; return MouseTargetFactory._getMouseColumn(mouseContentHorizontalOffset, this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth); } diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/src/vs/editor/browser/controller/textAreaHandler.ts index bfefbfff922..c02aaef8ecd 100644 --- a/src/vs/editor/browser/controller/textAreaHandler.ts +++ b/src/vs/editor/browser/controller/textAreaHandler.ts @@ -16,7 +16,7 @@ import { ViewController } from 'vs/editor/browser/view/viewController'; import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; import { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers'; import { Margin } from 'vs/editor/browser/viewParts/margin/margin'; -import { RenderLineNumbersType, EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { RenderLineNumbersType, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { BareFontInfo } from 'vs/editor/common/config/fontInfo'; import { WordCharacterClass, getMapForWordSeparators } from 'vs/editor/common/controller/wordCharacterClassifier'; import { Position } from 'vs/editor/common/core/position'; @@ -120,9 +120,9 @@ export class TextAreaHandler extends ViewPart { const conf = this._context.configuration.editor; const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); - this._accessibilitySupport = conf.accessibilitySupport; + this._accessibilitySupport = options.get(EditorOptionId.accessibilitySupport); this._contentLeft = layoutInfo.contentLeft; this._contentWidth = layoutInfo.contentWidth; this._contentHeight = layoutInfo.contentHeight; @@ -145,7 +145,7 @@ export class TextAreaHandler extends ViewPart { this.textArea.setAttribute('autocapitalize', 'off'); this.textArea.setAttribute('autocomplete', 'off'); this.textArea.setAttribute('spellcheck', 'false'); - this.textArea.setAttribute('aria-label', options.get(EditorOptionId.ariaLabel)); + this.textArea.setAttribute('aria-label', options.get(EditorOptionId.ariaLabel)); this.textArea.setAttribute('role', 'textbox'); this.textArea.setAttribute('aria-multiline', 'true'); this.textArea.setAttribute('aria-haspopup', 'false'); @@ -379,10 +379,10 @@ export class TextAreaHandler extends ViewPart { this._fontInfo = conf.fontInfo; } if (e.viewInfo) { - this.textArea.setAttribute('aria-label', options.get(EditorOptionId.ariaLabel)); + this.textArea.setAttribute('aria-label', options.get(EditorOptionId.ariaLabel)); } if (e.hasChanged(EditorOptionId.layoutInfo)) { - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentLeft = layoutInfo.contentLeft; this._contentWidth = layoutInfo.contentWidth; this._contentHeight = layoutInfo.contentHeight; @@ -391,7 +391,7 @@ export class TextAreaHandler extends ViewPart { this._lineHeight = conf.lineHeight; } if (e.hasChanged(EditorOptionId.accessibilitySupport)) { - this._accessibilitySupport = conf.accessibilitySupport; + this._accessibilitySupport = options.get(EditorOptionId.accessibilitySupport); this._textAreaInput.writeScreenReaderContent('strategy changed'); } if (e.emptySelectionClipboard) { @@ -553,7 +553,7 @@ export class TextAreaHandler extends ViewPart { if (this._context.configuration.editor.viewInfo.glyphMargin) { tac.setClassName('monaco-editor-background textAreaCover ' + Margin.OUTER_CLASS_NAME); } else { - const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); + const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); if (renderLineNumbers.renderType !== RenderLineNumbersType.Off) { tac.setClassName('monaco-editor-background textAreaCover ' + LineNumbersOverlay.CLASS_NAME); } else { diff --git a/src/vs/editor/browser/editorBrowser.ts b/src/vs/editor/browser/editorBrowser.ts index de7dcc54683..5e94f07990b 100644 --- a/src/vs/editor/browser/editorBrowser.ts +++ b/src/vs/editor/browser/editorBrowser.ts @@ -6,7 +6,7 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { IMouseEvent, IMouseWheelEvent } from 'vs/base/browser/mouseEvent'; import { IDisposable } from 'vs/base/common/lifecycle'; -import * as editorOptions from 'vs/editor/common/config/editorOptions'; +import { OverviewRulerPosition, IConfigurationChangedEvent, EditorLayoutInfo, InternalEditorOptions, IComputedEditorOptions, EditorOptionId, FindComputedEditorOptionValueById, IEditorOptions } from 'vs/editor/common/config/editorOptions'; import { ICursors } from 'vs/editor/common/controller/cursorCommon'; import { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents'; import { IPosition, Position } from 'vs/editor/common/core/position'; @@ -315,7 +315,7 @@ export interface IOverviewRuler { getDomNode(): HTMLElement; dispose(): void; setZones(zones: OverviewRulerZone[]): void; - setLayout(position: editorOptions.OverviewRulerPosition): void; + setLayout(position: OverviewRulerPosition): void; } /** @@ -351,7 +351,7 @@ export interface ICodeEditor extends editorCommon.IEditor { * An event emitted when the configuration of the editor has changed. (e.g. `editor.updateOptions()`) * @event */ - onDidChangeConfiguration(listener: (e: editorOptions.IConfigurationChangedEvent) => void): IDisposable; + onDidChangeConfiguration(listener: (e: IConfigurationChangedEvent) => void): IDisposable; /** * An event emitted when the cursor position has changed. * @event @@ -481,7 +481,7 @@ export interface ICodeEditor extends editorCommon.IEditor { * An event emitted when the layout of the editor has changed. * @event */ - onDidLayoutChange(listener: (e: editorOptions.EditorLayoutInfo) => void): IDisposable; + onDidLayoutChange(listener: (e: EditorLayoutInfo) => void): IDisposable; /** * An event emitted when the scroll in the editor has changed. * @event @@ -534,17 +534,16 @@ export interface ICodeEditor extends editorCommon.IEditor { /** * Returns the current editor's configuration */ - getConfiguration(): editorOptions.InternalEditorOptions; + getConfiguration(): InternalEditorOptions; - getOptions(): editorOptions.IComputedEditorOptions; - - getOption>(id: editorOptions.EditorOptionId): editorOptions.ComputedEditorOptionValue; + getOptions(): IComputedEditorOptions; + getOption(id: T): FindComputedEditorOptionValueById; /** * Returns the 'raw' editor's configuration (without any validation or defaults). * @internal */ - getRawConfiguration(): editorOptions.IEditorOptions; + getRawConfiguration(): IEditorOptions; /** * Get value of the current model attached to this editor. @@ -659,7 +658,7 @@ export interface ICodeEditor extends editorCommon.IEditor { /** * Get the layout info for the editor. */ - getLayoutInfo(): editorOptions.EditorLayoutInfo; + getLayoutInfo(): EditorLayoutInfo; /** * Returns the ranges that are currently visible. diff --git a/src/vs/editor/browser/view/viewImpl.ts b/src/vs/editor/browser/view/viewImpl.ts index 67fca037793..41a04db7b4a 100644 --- a/src/vs/editor/browser/view/viewImpl.ts +++ b/src/vs/editor/browser/view/viewImpl.ts @@ -48,7 +48,8 @@ import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData' import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler'; import { IViewModel } from 'vs/editor/common/viewModel/viewModel'; import { IThemeService, getThemeTypeSelector } from 'vs/platform/theme/common/themeService'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export interface IContentWidgetData { widget: editorBrowser.IContentWidget; @@ -283,7 +284,7 @@ export class View extends ViewEventHandler { private _setLayout(): void { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this.domNode.setWidth(layoutInfo.width); this.domNode.setHeight(layoutInfo.height); diff --git a/src/vs/editor/browser/view/viewOverlays.ts b/src/vs/editor/browser/view/viewOverlays.ts index 5182408db5a..5e0015eb0a9 100644 --- a/src/vs/editor/browser/view/viewOverlays.ts +++ b/src/vs/editor/browser/view/viewOverlays.ts @@ -14,7 +14,8 @@ import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/v import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class ViewOverlays extends ViewPart implements IVisibleLinesHost { @@ -217,7 +218,7 @@ export class ContentViewOverlays extends ViewOverlays { constructor(context: ViewContext) { super(context); const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentWidth = layoutInfo.contentWidth; this.domNode.setHeight(0); @@ -228,7 +229,7 @@ export class ContentViewOverlays extends ViewOverlays { public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { if (e.hasChanged(EditorOptionId.layoutInfo)) { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentWidth = layoutInfo.contentWidth; } return super.onConfigurationChanged(e); @@ -254,7 +255,7 @@ export class MarginViewOverlays extends ViewOverlays { super(context); const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentLeft = layoutInfo.contentLeft; this.domNode.setClassName('margin-view-overlays'); @@ -271,7 +272,7 @@ export class MarginViewOverlays extends ViewOverlays { } if (e.hasChanged(EditorOptionId.layoutInfo)) { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentLeft = layoutInfo.contentLeft; shouldRender = true; } diff --git a/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts b/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts index 9c7998b7427..6975b25a6bc 100644 --- a/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts +++ b/src/vs/editor/browser/viewParts/contentWidgets/contentWidgets.ts @@ -14,7 +14,8 @@ import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/v import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + class Coordinate { _coordinateBrand: void; @@ -209,7 +210,7 @@ class Widget { this.suppressMouseDown = this._actual.suppressMouseDown || false; const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._fixedOverflowWidgets = this._context.configuration.editor.viewInfo.fixedOverflowWidgets; this._contentWidth = layoutInfo.contentWidth; @@ -239,7 +240,7 @@ class Widget { } if (e.hasChanged(EditorOptionId.layoutInfo)) { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentLeft = layoutInfo.contentLeft; this._contentWidth = layoutInfo.contentWidth; this._maxWidth = this._getMaxWidth(); diff --git a/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts b/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts index 65343ec07eb..63aa1334022 100644 --- a/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts +++ b/src/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.ts @@ -10,7 +10,8 @@ import { RenderingContext } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class CurrentLineHighlightOverlay extends DynamicViewOverlay { private readonly _context: ViewContext; @@ -25,7 +26,7 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay { super(); this._context = context; const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._lineHeight = this._context.configuration.editor.lineHeight; this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight; @@ -55,7 +56,7 @@ export class CurrentLineHighlightOverlay extends DynamicViewOverlay { } if (e.hasChanged(EditorOptionId.layoutInfo)) { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentWidth = layoutInfo.contentWidth; } return true; diff --git a/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts b/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts index 1389ed0e1b0..3601770f5b8 100644 --- a/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts +++ b/src/vs/editor/browser/viewParts/currentLineMarginHighlight/currentLineMarginHighlight.ts @@ -10,7 +10,8 @@ import { RenderingContext } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { private readonly _context: ViewContext; @@ -24,7 +25,7 @@ export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { super(); this._context = context; const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._lineHeight = this._context.configuration.editor.lineHeight; this._renderLineHighlight = this._context.configuration.editor.viewInfo.renderLineHighlight; @@ -51,7 +52,7 @@ export class CurrentLineMarginHighlightOverlay extends DynamicViewOverlay { } if (e.hasChanged(EditorOptionId.layoutInfo)) { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentLeft = layoutInfo.contentLeft; } return true; diff --git a/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts b/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts index 24185fbc1c5..df5316bfb80 100644 --- a/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts +++ b/src/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.ts @@ -14,7 +14,7 @@ import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/v import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { getThemeTypeSelector } from 'vs/platform/theme/common/themeService'; -import { EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export class EditorScrollbar extends ViewPart { @@ -31,9 +31,9 @@ export class EditorScrollbar extends ViewPart { const options = this._context.configuration.options; - const scrollbar = options.get(EditorOptionId.scrollbar); - const mouseWheelScrollSensitivity = options.get(EditorOptionId.mouseWheelScrollSensitivity); - const fastScrollSensitivity = options.get(EditorOptionId.fastScrollSensitivity); + const scrollbar = options.get(EditorOptionId.scrollbar); + const mouseWheelScrollSensitivity = options.get(EditorOptionId.mouseWheelScrollSensitivity); + const fastScrollSensitivity = options.get(EditorOptionId.fastScrollSensitivity); const scrollbarOptions: ScrollableElementCreationOptions = { listenOnDomNode: viewDomNode.domNode, @@ -101,11 +101,11 @@ export class EditorScrollbar extends ViewPart { private _setLayout(): void { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this.scrollbarDomNode.setLeft(layoutInfo.contentLeft); - const minimap = options.get(EditorOptionId.minimap); + const minimap = options.get(EditorOptionId.minimap); const side = minimap.side; if (side === 'right') { this.scrollbarDomNode.setWidth(layoutInfo.contentWidth + layoutInfo.minimapWidth); @@ -136,9 +136,9 @@ export class EditorScrollbar extends ViewPart { || e.hasChanged(EditorOptionId.fastScrollSensitivity) ) { const options = this._context.configuration.options; - const scrollbar = options.get(EditorOptionId.scrollbar); - const mouseWheelScrollSensitivity = options.get(EditorOptionId.mouseWheelScrollSensitivity); - const fastScrollSensitivity = options.get(EditorOptionId.fastScrollSensitivity); + const scrollbar = options.get(EditorOptionId.scrollbar); + const mouseWheelScrollSensitivity = options.get(EditorOptionId.mouseWheelScrollSensitivity); + const fastScrollSensitivity = options.get(EditorOptionId.fastScrollSensitivity); const newOpts: ScrollableElementChangeOptions = { handleMouseWheel: scrollbar.handleMouseWheel, mouseWheelScrollSensitivity: mouseWheelScrollSensitivity, diff --git a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts index c063c668071..516cdb1f468 100644 --- a/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts +++ b/src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts @@ -8,7 +8,8 @@ import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; import { RenderingContext } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class DecorationToRender { _decorationToRenderBrand: void; @@ -86,7 +87,7 @@ export class GlyphMarginOverlay extends DedupOverlay { super(); this._context = context; const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._lineHeight = this._context.configuration.editor.lineHeight; this._glyphMargin = this._context.configuration.editor.viewInfo.glyphMargin; this._glyphMarginLeft = layoutInfo.glyphMarginLeft; @@ -113,7 +114,7 @@ export class GlyphMarginOverlay extends DedupOverlay { this._glyphMargin = this._context.configuration.editor.viewInfo.glyphMargin; } if (e.hasChanged(EditorOptionId.layoutInfo)) { - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._glyphMarginLeft = layoutInfo.glyphMarginLeft; this._glyphMarginWidth = layoutInfo.glyphMarginWidth; } diff --git a/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts b/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts index a8ba2a3936a..9da6446edf9 100644 --- a/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts +++ b/src/vs/editor/browser/viewParts/indentGuides/indentGuides.ts @@ -11,7 +11,8 @@ import { RenderingContext } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class IndentGuidesOverlay extends DynamicViewOverlay { @@ -33,7 +34,7 @@ export class IndentGuidesOverlay extends DynamicViewOverlay { this._spaceWidth = this._context.configuration.editor.fontInfo.spaceWidth; this._enabled = this._context.configuration.editor.viewInfo.renderIndentGuides; this._activeIndentEnabled = this._context.configuration.editor.viewInfo.highlightActiveIndentGuide; - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); const wrappingColumn = wrappingInfo.wrappingColumn; this._maxIndentLeft = wrappingColumn === -1 ? -1 : (wrappingColumn * this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth); @@ -63,7 +64,7 @@ export class IndentGuidesOverlay extends DynamicViewOverlay { this._activeIndentEnabled = this._context.configuration.editor.viewInfo.highlightActiveIndentGuide; } if (e.hasChanged(EditorOptionId.wrappingInfo) || e.fontInfo) { - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); const wrappingColumn = wrappingInfo.wrappingColumn; this._maxIndentLeft = wrappingColumn === -1 ? -1 : (wrappingColumn * this._context.configuration.editor.fontInfo.typicalHalfwidthCharacterWidth); } diff --git a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts index d07bbdc92ae..aa078b1b834 100644 --- a/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts +++ b/src/vs/editor/browser/viewParts/lineNumbers/lineNumbers.ts @@ -6,7 +6,7 @@ import 'vs/css!./lineNumbers'; import * as platform from 'vs/base/common/platform'; import { DynamicViewOverlay } from 'vs/editor/browser/view/dynamicViewOverlay'; -import { RenderLineNumbersType, EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { RenderLineNumbersType, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { editorActiveLineNumber, editorLineNumbers } from 'vs/editor/common/view/editorColorRegistry'; import { RenderingContext } from 'vs/editor/common/view/renderingContext'; @@ -44,11 +44,11 @@ export class LineNumbersOverlay extends DynamicViewOverlay { const options = this._context.configuration.options; const config = this._context.configuration.editor; this._lineHeight = config.lineHeight; - const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); + const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); this._renderLineNumbers = renderLineNumbers.renderType; this._renderCustomLineNumbers = renderLineNumbers.renderFn; - this._renderFinalNewline = options.get(EditorOptionId.renderFinalNewline); - const layoutInfo = options.get(EditorOptionId.layoutInfo); + this._renderFinalNewline = options.get(EditorOptionId.renderFinalNewline); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._lineNumbersLeft = layoutInfo.lineNumbersLeft; this._lineNumbersWidth = layoutInfo.lineNumbersWidth; } diff --git a/src/vs/editor/browser/viewParts/lines/viewLines.ts b/src/vs/editor/browser/viewParts/lines/viewLines.ts index 2e64c0c8056..80c851b0084 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLines.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLines.ts @@ -18,7 +18,7 @@ import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; import { Viewport } from 'vs/editor/common/viewModel/viewModel'; -import { EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; class LastRenderedData { @@ -92,7 +92,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, const conf = this._context.configuration; const options = this._context.configuration.options; - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); this._lineHeight = conf.editor.lineHeight; this._typicalHalfwidthCharacterWidth = conf.editor.fontInfo.typicalHalfwidthCharacterWidth; @@ -152,7 +152,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, this._typicalHalfwidthCharacterWidth = conf.editor.fontInfo.typicalHalfwidthCharacterWidth; } if (e.hasChanged(EditorOptionId.wrappingInfo)) { - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); this._isViewportWrapping = wrappingInfo.isViewportWrapping; } if (e.viewInfo) { diff --git a/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts b/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts index 1d709f5b917..4beec4716a1 100644 --- a/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts +++ b/src/vs/editor/browser/viewParts/linesDecorations/linesDecorations.ts @@ -8,7 +8,8 @@ import { DecorationToRender, DedupOverlay } from 'vs/editor/browser/viewParts/gl import { RenderingContext } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class LinesDecorationsOverlay extends DedupOverlay { @@ -22,7 +23,7 @@ export class LinesDecorationsOverlay extends DedupOverlay { super(); this._context = context; const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._decorationsLeft = layoutInfo.decorationsLeft; this._decorationsWidth = layoutInfo.decorationsWidth; this._renderResult = null; @@ -40,7 +41,7 @@ export class LinesDecorationsOverlay extends DedupOverlay { public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { const options = this._context.configuration.options; if (e.hasChanged(EditorOptionId.layoutInfo)) { - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._decorationsLeft = layoutInfo.decorationsLeft; this._decorationsWidth = layoutInfo.decorationsWidth; } diff --git a/src/vs/editor/browser/viewParts/margin/margin.ts b/src/vs/editor/browser/viewParts/margin/margin.ts index f49a24845e7..79cc1b4f500 100644 --- a/src/vs/editor/browser/viewParts/margin/margin.ts +++ b/src/vs/editor/browser/viewParts/margin/margin.ts @@ -8,7 +8,8 @@ import { ViewPart } from 'vs/editor/browser/view/viewPart'; import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class Margin extends ViewPart { @@ -25,7 +26,7 @@ export class Margin extends ViewPart { constructor(context: ViewContext) { super(context); const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._canUseLayerHinting = this._context.configuration.editor.canUseLayerHinting; this._contentLeft = layoutInfo.contentLeft; @@ -62,7 +63,7 @@ export class Margin extends ViewPart { } if (e.hasChanged(EditorOptionId.layoutInfo)) { - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentLeft = layoutInfo.contentLeft; this._glyphMarginLeft = layoutInfo.glyphMarginLeft; this._glyphMarginWidth = layoutInfo.glyphMarginWidth; diff --git a/src/vs/editor/browser/viewParts/minimap/minimap.ts b/src/vs/editor/browser/viewParts/minimap/minimap.ts index 747ef261830..ce8218c915f 100644 --- a/src/vs/editor/browser/viewParts/minimap/minimap.ts +++ b/src/vs/editor/browser/viewParts/minimap/minimap.ts @@ -13,7 +13,7 @@ import * as platform from 'vs/base/common/platform'; import * as strings from 'vs/base/common/strings'; import { ILine, RenderedLinesCollection } from 'vs/editor/browser/view/viewLayer'; import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { RenderMinimap, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { RenderMinimap, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; import { RGBA8 } from 'vs/editor/common/core/rgba'; import { IConfiguration, ScrollType } from 'vs/editor/common/editorCommon'; @@ -109,13 +109,13 @@ class MinimapOptions { constructor(configuration: IConfiguration) { const options = configuration.options; const pixelRatio = configuration.editor.pixelRatio; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); const viewInfo = configuration.editor.viewInfo; const fontInfo = configuration.editor.fontInfo; this.renderMinimap = layoutInfo.renderMinimap | 0; this.scrollBeyondLastLine = viewInfo.scrollBeyondLastLine; - const minimapOpts = options.get(EditorOptionId.minimap); + const minimapOpts = options.get(EditorOptionId.minimap); this.showSlider = minimapOpts.showSlider; this.pixelRatio = pixelRatio; this.typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth; diff --git a/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts b/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts index 0fa9087323d..2d138034568 100644 --- a/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts +++ b/src/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.ts @@ -10,7 +10,8 @@ import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/v import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + interface IWidgetData { widget: IOverlayWidget; @@ -37,7 +38,7 @@ export class ViewOverlayWidgets extends ViewPart { super(context); const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._widgets = {}; this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth; @@ -66,7 +67,7 @@ export class ViewOverlayWidgets extends ViewPart { const options = this._context.configuration.options; if (e.hasChanged(EditorOptionId.layoutInfo)) { - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth; this._minimapWidth = layoutInfo.minimapWidth; this._horizontalScrollbarHeight = layoutInfo.horizontalScrollbarHeight; diff --git a/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts b/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts index b620c0ed4ea..463a4592c27 100644 --- a/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts +++ b/src/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.ts @@ -15,7 +15,7 @@ import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/v import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { ITheme } from 'vs/platform/theme/common/themeService'; -import { EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; class Settings { @@ -58,7 +58,7 @@ class Settings { this.themeType = theme.type; - const minimapOpts = options.get(EditorOptionId.minimap); + const minimapOpts = options.get(EditorOptionId.minimap); const minimapEnabled = minimapOpts.enabled; const minimapSide = minimapOpts.side; const backgroundColor = (minimapEnabled ? TokenizationRegistry.getDefaultBackground() : null); @@ -68,7 +68,7 @@ class Settings { this.backgroundColor = Color.Format.CSS.formatHex(backgroundColor); } - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); const position = layoutInfo.overviewRuler; this.top = position.top; this.right = position.right; diff --git a/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts b/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts index d3b4ae392cd..8a482e56031 100644 --- a/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts +++ b/src/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.ts @@ -11,7 +11,8 @@ import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { scrollbarShadow } from 'vs/platform/theme/common/colorRegistry'; import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export class ScrollDecorationViewPart extends ViewPart { @@ -29,7 +30,7 @@ export class ScrollDecorationViewPart extends ViewPart { this._updateWidth(); this._shouldShow = false; const options = this._context.configuration.options; - const scrollbar = options.get(EditorOptionId.scrollbar); + const scrollbar = options.get(EditorOptionId.scrollbar); this._useShadows = scrollbar.useShadows; this._domNode = createFastDomNode(document.createElement('div')); this._domNode.setAttribute('role', 'presentation'); @@ -55,7 +56,7 @@ export class ScrollDecorationViewPart extends ViewPart { private _updateWidth(): boolean { const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); let newWidth = 0; if (layoutInfo.renderMinimap === 0 || (layoutInfo.minimapWidth > 0 && layoutInfo.minimapLeft === 0)) { newWidth = layoutInfo.width; @@ -75,7 +76,7 @@ export class ScrollDecorationViewPart extends ViewPart { let shouldRender = false; if (e.hasChanged(EditorOptionId.scrollbar)) { const options = this._context.configuration.options; - const scrollbar = options.get(EditorOptionId.scrollbar); + const scrollbar = options.get(EditorOptionId.scrollbar); this._useShadows = scrollbar.useShadows; } if (e.hasChanged(EditorOptionId.layoutInfo)) { diff --git a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts index 023e031dd02..ede284d3543 100644 --- a/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts +++ b/src/vs/editor/browser/viewParts/viewCursors/viewCursors.ts @@ -8,7 +8,7 @@ import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; import { IntervalTimer, TimeoutTimer } from 'vs/base/common/async'; import { ViewPart } from 'vs/editor/browser/view/viewPart'; import { IViewCursorRenderData, ViewCursor } from 'vs/editor/browser/viewParts/viewCursors/viewCursor'; -import { TextEditorCursorBlinkingStyle, TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions'; +import { TextEditorCursorBlinkingStyle, TextEditorCursorStyle, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { Position } from 'vs/editor/common/core/position'; import { editorCursorBackground, editorCursorForeground } from 'vs/editor/common/view/editorColorRegistry'; import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/view/renderingContext'; @@ -43,7 +43,8 @@ export class ViewCursors extends ViewPart { constructor(context: ViewContext) { super(context); - this._readOnly = this._context.configuration.editor.readOnly; + const options = this._context.configuration.options; + this._readOnly = options.get(EditorOptionId.readOnly); this._cursorBlinking = this._context.configuration.editor.viewInfo.cursorBlinking; this._cursorStyle = this._context.configuration.editor.viewInfo.cursorStyle; this._cursorSmoothCaretAnimation = this._context.configuration.editor.viewInfo.cursorSmoothCaretAnimation; @@ -84,9 +85,10 @@ export class ViewCursors extends ViewPart { // --- begin event handlers public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { + const options = this._context.configuration.options; - if (e.readOnly) { - this._readOnly = this._context.configuration.editor.readOnly; + if (e.hasChanged(EditorOptionId.readOnly)) { + this._readOnly = options.get(EditorOptionId.readOnly); } if (e.viewInfo) { this._cursorBlinking = this._context.configuration.editor.viewInfo.cursorBlinking; diff --git a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts index 3e0f58f5475..13bf932d19b 100644 --- a/src/vs/editor/browser/viewParts/viewZones/viewZones.ts +++ b/src/vs/editor/browser/viewParts/viewZones/viewZones.ts @@ -12,7 +12,8 @@ import { RenderingContext, RestrictedRenderingContext } from 'vs/editor/common/v import { ViewContext } from 'vs/editor/common/view/viewContext'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { IViewWhitespaceViewportData } from 'vs/editor/common/viewModel/viewModel'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + export interface IMyViewZone { whitespaceId: string; @@ -42,7 +43,7 @@ export class ViewZones extends ViewPart { constructor(context: ViewContext) { super(context); const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._lineHeight = this._context.configuration.editor.lineHeight; this._contentWidth = layoutInfo.contentWidth; @@ -96,7 +97,7 @@ export class ViewZones extends ViewPart { } if (e.hasChanged(EditorOptionId.layoutInfo)) { - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._contentWidth = layoutInfo.contentWidth; this._contentLeft = layoutInfo.contentLeft; } diff --git a/src/vs/editor/browser/widget/codeEditorWidget.ts b/src/vs/editor/browser/widget/codeEditorWidget.ts index ca2133d8ab2..d0cdffa1ca2 100644 --- a/src/vs/editor/browser/widget/codeEditorWidget.ts +++ b/src/vs/editor/browser/widget/codeEditorWidget.ts @@ -23,7 +23,7 @@ import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService import { ICommandDelegate } from 'vs/editor/browser/view/viewController'; import { IContentWidgetData, IOverlayWidgetData, View } from 'vs/editor/browser/view/viewImpl'; import { ViewOutgoingEvents } from 'vs/editor/browser/view/viewOutgoingEvents'; -import * as editorOptions from 'vs/editor/common/config/editorOptions'; +import { IConfigurationChangedEvent, EditorLayoutInfo, IEditorOptions, EditorOptionId, InternalEditorOptions, IComputedEditorOptions, FindComputedEditorOptionValueById } from 'vs/editor/common/config/editorOptions'; import { Cursor, CursorStateChangedEvent } from 'vs/editor/common/controller/cursor'; import { CursorColumns, ICursors } from 'vs/editor/common/controller/cursorCommon'; import { ICursorPositionChangedEvent, ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents'; @@ -125,8 +125,8 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE private readonly _onDidChangeModelDecorations: Emitter = this._register(new Emitter()); public readonly onDidChangeModelDecorations: Event = this._onDidChangeModelDecorations.event; - private readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter()); - public readonly onDidChangeConfiguration: Event = this._onDidChangeConfiguration.event; + private readonly _onDidChangeConfiguration: Emitter = this._register(new Emitter()); + public readonly onDidChangeConfiguration: Event = this._onDidChangeConfiguration.event; protected readonly _onDidChangeModel: Emitter = this._register(new Emitter()); public readonly onDidChangeModel: Event = this._onDidChangeModel.event; @@ -140,8 +140,8 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE private readonly _onDidAttemptReadOnlyEdit: Emitter = this._register(new Emitter()); public readonly onDidAttemptReadOnlyEdit: Event = this._onDidAttemptReadOnlyEdit.event; - private readonly _onDidLayoutChange: Emitter = this._register(new Emitter()); - public readonly onDidLayoutChange: Event = this._onDidLayoutChange.event; + private readonly _onDidLayoutChange: Emitter = this._register(new Emitter()); + public readonly onDidLayoutChange: Event = this._onDidLayoutChange.event; private readonly _editorTextFocus: BooleanEventEmitter = this._register(new BooleanEventEmitter()); public readonly onDidFocusEditorText: Event = this._editorTextFocus.onDidChangeToTrue; @@ -236,7 +236,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE constructor( domElement: HTMLElement, - options: editorOptions.IEditorOptions, + options: IEditorOptions, codeEditorWidgetOptions: ICodeEditorWidgetOptions, @IInstantiationService instantiationService: IInstantiationService, @ICodeEditorService codeEditorService: ICodeEditorService, @@ -259,9 +259,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._register(this._configuration.onDidChange((e) => { this._onDidChangeConfiguration.fire(e); - if (e.hasChanged(editorOptions.EditorOptionId.layoutInfo)) { + if (e.hasChanged(EditorOptionId.layoutInfo)) { const options = this._configuration.options; - const layoutInfo = options.get(editorOptions.EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._onDidLayoutChange.fire(layoutInfo); } if (this._configuration.editor.showUnused) { @@ -329,7 +329,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE this._codeEditorService.addCodeEditor(this); } - protected _createConfiguration(options: editorOptions.IEditorOptions, accessibilityService: IAccessibilityService): editorCommon.IConfiguration { + protected _createConfiguration(options: IEditorOptions, accessibilityService: IAccessibilityService): editorCommon.IConfiguration { return new Configuration(this.isSimpleWidget, options, this._domElement, accessibilityService); } @@ -364,23 +364,23 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE return this._instantiationService.invokeFunction(fn); } - public updateOptions(newOptions: editorOptions.IEditorOptions): void { + public updateOptions(newOptions: IEditorOptions): void { this._configuration.updateOptions(newOptions); } - public getConfiguration(): editorOptions.InternalEditorOptions { + public getConfiguration(): InternalEditorOptions { return this._configuration.editor; } - public getOptions(): editorOptions.IComputedEditorOptions { + public getOptions(): IComputedEditorOptions { return this._configuration.options; } - public getOption>(id: editorOptions.EditorOptionId): editorOptions.ComputedEditorOptionValue { - return this._configuration.options.get(id); + public getOption(id: T): FindComputedEditorOptionValueById { + return this._configuration.options.get(id); } - public getRawConfiguration(): editorOptions.IEditorOptions { + public getRawConfiguration(): IEditorOptions { return this._configuration.getRawOptions(); } @@ -982,7 +982,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE if (!this._modelData) { return false; } - if (this._configuration.editor.readOnly) { + if (this._configuration.options.get(EditorOptionId.readOnly)) { // read only editor => sorry! return false; } @@ -994,7 +994,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE if (!this._modelData) { return false; } - if (this._configuration.editor.readOnly) { + if (this._configuration.options.get(EditorOptionId.readOnly)) { // read only editor => sorry! return false; } @@ -1038,7 +1038,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE if (!this._modelData) { return null; } - return this._modelData.model.getLineDecorations(lineNumber, this._id, this._configuration.editor.readOnly); + return this._modelData.model.getLineDecorations(lineNumber, this._id, this._configuration.options.get(EditorOptionId.readOnly)); } public deltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[]): string[] { @@ -1129,9 +1129,9 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE } } - public getLayoutInfo(): editorOptions.EditorLayoutInfo { + public getLayoutInfo(): EditorLayoutInfo { const options = this._configuration.options; - const layoutInfo = options.get(editorOptions.EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); return layoutInfo; } @@ -1281,7 +1281,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE const position = this._modelData.model.validatePosition(rawPosition); const options = this._configuration.options; - const layoutInfo = options.get(editorOptions.EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); const top = CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, position.lineNumber, position.column) - this.getScrollTop(); const left = this._modelData.view.getOffsetForColumn(position.lineNumber, position.column) + layoutInfo.glyphMarginWidth + layoutInfo.lineNumbersWidth + layoutInfo.decorationsWidth - this.getScrollLeft(); @@ -1614,10 +1614,10 @@ class EditorContextKeysManager extends Disposable { } private _updateFromConfig(): void { - const config = this._editor.getConfiguration(); + const options = this._editor.getOptions(); - this._editorTabMovesFocus.set(config.tabFocusMode); - this._editorReadonly.set(config.readOnly); + this._editorTabMovesFocus.set(options.get(EditorOptionId.tabFocusMode)); + this._editorReadonly.set(options.get(EditorOptionId.readOnly)); } private _updateFromSelection(): void { diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index da9e1ddf553..d2ba7bd565d 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -20,7 +20,7 @@ import * as editorBrowser from 'vs/editor/browser/editorBrowser'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; import { DiffReview } from 'vs/editor/browser/widget/diffReview'; -import * as editorOptions from 'vs/editor/common/config/editorOptions'; +import { IDiffEditorOptions, IEditorOptions, EDITOR_DEFAULTS, EditorLayoutInfo, InternalEditorOptions, IComputedEditorOptions, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { IPosition, Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; import { ISelection, Selection } from 'vs/editor/common/core/selection'; @@ -213,7 +213,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE constructor( domElement: HTMLElement, - options: editorOptions.IDiffEditorOptions, + options: IDiffEditorOptions, @IEditorWorkerService editorWorkerService: IEditorWorkerService, @IContextKeyService contextKeyService: IContextKeyService, @IInstantiationService instantiationService: IInstantiationService, @@ -422,7 +422,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE this._layoutOverviewRulers(); } - private _createLeftHandSideEditor(options: editorOptions.IDiffEditorOptions, instantiationService: IInstantiationService): CodeEditorWidget { + private _createLeftHandSideEditor(options: IDiffEditorOptions, instantiationService: IInstantiationService): CodeEditorWidget { const editor = this._createInnerEditor(instantiationService, this._originalDomNode, this._adjustOptionsForLeftHandSide(options, this._originalIsEditable)); this._register(editor.onDidScrollChange((e) => { @@ -455,7 +455,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE return editor; } - private _createRightHandSideEditor(options: editorOptions.IDiffEditorOptions, instantiationService: IInstantiationService): CodeEditorWidget { + private _createRightHandSideEditor(options: IDiffEditorOptions, instantiationService: IInstantiationService): CodeEditorWidget { const editor = this._createInnerEditor(instantiationService, this._modifiedDomNode, this._adjustOptionsForRightHandSide(options)); this._register(editor.onDidScrollChange((e) => { @@ -494,7 +494,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE return editor; } - protected _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: editorOptions.IEditorOptions): CodeEditorWidget { + protected _createInnerEditor(instantiationService: IInstantiationService, container: HTMLElement, options: IEditorOptions): CodeEditorWidget { return instantiationService.createInstance(CodeEditorWidget, container, options, {}); } @@ -568,7 +568,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE return this.modifiedEditor; } - public updateOptions(newOptions: editorOptions.IDiffEditorOptions): void { + public updateOptions(newOptions: IDiffEditorOptions): void { // Handle side by side let renderSideBySideChanged = false; @@ -967,8 +967,8 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE } } - private _adjustOptionsForSubEditor(options: editorOptions.IDiffEditorOptions): editorOptions.IDiffEditorOptions { - let clonedOptions: editorOptions.IDiffEditorOptions = objects.deepClone(options || {}); + private _adjustOptionsForSubEditor(options: IDiffEditorOptions): IDiffEditorOptions { + let clonedOptions: IDiffEditorOptions = objects.deepClone(options || {}); clonedOptions.inDiffEditor = true; clonedOptions.wordWrap = 'off'; clonedOptions.wordWrapMinified = false; @@ -986,7 +986,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE return clonedOptions; } - private _adjustOptionsForLeftHandSide(options: editorOptions.IDiffEditorOptions, isEditable: boolean): editorOptions.IEditorOptions { + private _adjustOptionsForLeftHandSide(options: IDiffEditorOptions, isEditable: boolean): IEditorOptions { let result = this._adjustOptionsForSubEditor(options); result.readOnly = !isEditable; result.overviewRulerLanes = 1; @@ -994,9 +994,9 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE return result; } - private _adjustOptionsForRightHandSide(options: editorOptions.IDiffEditorOptions): editorOptions.IEditorOptions { + private _adjustOptionsForRightHandSide(options: IDiffEditorOptions): IEditorOptions { let result = this._adjustOptionsForSubEditor(options); - result.revealHorizontalRightPadding = editorOptions.EDITOR_DEFAULTS.viewInfo.revealHorizontalRightPadding + DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH; + result.revealHorizontalRightPadding = EDITOR_DEFAULTS.viewInfo.revealHorizontalRightPadding + DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH; result.scrollbar!.verticalHasArrows = false; result.extraEditorClassName = 'modified-in-monaco-diff-editor'; return result; @@ -1830,7 +1830,7 @@ class DiffEditorWidgetInline extends DiffEditorWidgetStyle implements IDiffEdito this.decorationsLeft = dataSource.getOriginalEditor().getLayoutInfo().decorationsLeft; - this._register(dataSource.getOriginalEditor().onDidLayoutChange((layoutInfo: editorOptions.EditorLayoutInfo) => { + this._register(dataSource.getOriginalEditor().onDidLayoutChange((layoutInfo: EditorLayoutInfo) => { if (this.decorationsLeft !== layoutInfo.decorationsLeft) { this.decorationsLeft = layoutInfo.decorationsLeft; dataSource.relayoutEditors(); @@ -1946,8 +1946,8 @@ class DiffEditorWidgetInline extends DiffEditorWidgetStyle implements IDiffEdito class InlineViewZonesComputer extends ViewZonesComputer { private readonly originalModel: ITextModel; - private readonly modifiedEditorConfiguration: editorOptions.InternalEditorOptions; - private readonly modifiedEditorOptions: editorOptions.IComputedEditorOptions; + private readonly modifiedEditorConfiguration: InternalEditorOptions; + private readonly modifiedEditorOptions: IComputedEditorOptions; private readonly modifiedEditorTabSize: number; private readonly renderIndicators: boolean; @@ -1995,7 +1995,7 @@ class InlineViewZonesComputer extends ViewZonesComputer { let sb = createStringBuilder(10000); let marginHTML: string[] = []; - const layoutInfo = this.modifiedEditorOptions.get(editorOptions.EditorOptionId.layoutInfo); + const layoutInfo = this.modifiedEditorOptions.get(EditorOptionId.layoutInfo); const lineDecorationsWidth = layoutInfo.decorationsWidth; let lineHeight = this.modifiedEditorConfiguration.lineHeight; @@ -2042,7 +2042,7 @@ class InlineViewZonesComputer extends ViewZonesComputer { }; } - private _renderOriginalLine(count: number, originalModel: ITextModel, config: editorOptions.InternalEditorOptions, tabSize: number, lineNumber: number, decorations: InlineDecoration[], sb: IStringBuilder): number { + private _renderOriginalLine(count: number, originalModel: ITextModel, config: InternalEditorOptions, tabSize: number, lineNumber: number, decorations: InlineDecoration[], sb: IStringBuilder): number { const lineTokens = originalModel.getLineTokens(lineNumber); const lineContent = lineTokens.getLineContent(); diff --git a/src/vs/editor/browser/widget/diffReview.ts b/src/vs/editor/browser/widget/diffReview.ts index f6ab9ce2f14..8c51ecede42 100644 --- a/src/vs/editor/browser/widget/diffReview.ts +++ b/src/vs/editor/browser/widget/diffReview.ts @@ -667,10 +667,10 @@ export class DiffReview extends Disposable { originalLineEnd - originalLineStart ); - const originalLayoutInfo = originalOptions.get(editorOptions.EditorOptionId.layoutInfo); + const originalLayoutInfo = originalOptions.get(editorOptions.EditorOptionId.layoutInfo); const originalLineNumbersWidth = originalLayoutInfo.glyphMarginWidth + originalLayoutInfo.lineNumbersWidth; - const modifiedLayoutInfo = modifiedOptions.get(editorOptions.EditorOptionId.layoutInfo); + const modifiedLayoutInfo = modifiedOptions.get(editorOptions.EditorOptionId.layoutInfo); const modifiedLineNumbersWidth = 10 + modifiedLayoutInfo.glyphMarginWidth + modifiedLayoutInfo.lineNumbersWidth; for (let i = 0; i <= cnt; i++) { diff --git a/src/vs/editor/browser/widget/inlineDiffMargin.ts b/src/vs/editor/browser/widget/inlineDiffMargin.ts index 7933869ab4f..afc6287dc02 100644 --- a/src/vs/editor/browser/widget/inlineDiffMargin.ts +++ b/src/vs/editor/browser/widget/inlineDiffMargin.ts @@ -12,6 +12,7 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService import * as editorBrowser from 'vs/editor/browser/editorBrowser'; import { Range } from 'vs/editor/common/core/range'; import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export interface IDiffLinesChange { readonly originalStartLineNumber: number; @@ -97,7 +98,7 @@ export class InlineDiffMargin extends Disposable { actions.push(copyLineAction); } - const readOnly = editor.getConfiguration().readOnly; + const readOnly = editor.getOption(EditorOptionId.readOnly); if (!readOnly) { actions.push(new Action('diff.inline.revertChange', nls.localize('diff.inline.revertChange.label', "Revert this change"), undefined, true, async () => { if (diff.modifiedEndLineNumber === 0) { diff --git a/src/vs/editor/common/config/commonEditorConfig.ts b/src/vs/editor/common/config/commonEditorConfig.ts index a5dc25319e2..921bb9d99b8 100644 --- a/src/vs/editor/common/config/commonEditorConfig.ts +++ b/src/vs/editor/common/config/commonEditorConfig.ts @@ -8,15 +8,12 @@ import { Emitter, Event } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; import * as objects from 'vs/base/common/objects'; import * as platform from 'vs/base/common/platform'; -import * as editorOptions from 'vs/editor/common/config/editorOptions'; +import { IEditorOptions, RawEditorOptions, editorOptionsRegistry, ValidatedEditorOptions, IEnvironmentalOptions, ComputedEditorOptions, ChangedEditorOptions, IValidatedEditorOptions, InternalEditorOptions, IConfigurationChangedEvent, EditorOptionsValidator, EDITOR_DEFAULTS, InternalEditorOptionsFactory, EDITOR_FONT_DEFAULTS, EditorOption, EDITOR_MODEL_DEFAULTS, blinkingStyleToString, cursorStyleToString } from 'vs/editor/common/config/editorOptions'; import { EditorZoom } from 'vs/editor/common/config/editorZoom'; import { BareFontInfo, FontInfo } from 'vs/editor/common/config/fontInfo'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { ConfigurationScope, Extensions, IConfigurationNode, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { Registry } from 'vs/platform/registry/common/platform'; -import EDITOR_DEFAULTS = editorOptions.EDITOR_DEFAULTS; -import EDITOR_FONT_DEFAULTS = editorOptions.EDITOR_FONT_DEFAULTS; -import EDITOR_MODEL_DEFAULTS = editorOptions.EDITOR_MODEL_DEFAULTS; import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; /** @@ -64,47 +61,47 @@ export interface IEnvConfiguration { const hasOwnProperty = Object.hasOwnProperty; export class EditorConfiguration2 { - public static readOptions(options: editorOptions.IEditorOptions): editorOptions.RawEditorOptions { + public static readOptions(options: IEditorOptions): RawEditorOptions { // console.log(`parseOptions`, options); - const result = new editorOptions.RawEditorOptions(); - for (const editorOption of editorOptions.editorOptionsRegistry) { + const result = new RawEditorOptions(); + for (const editorOption of editorOptionsRegistry) { result._write(editorOption.id, editorOption.read(options)); } return result; } - public static mixOptions(a: editorOptions.RawEditorOptions, b: editorOptions.IEditorOptions): editorOptions.RawEditorOptions { + public static mixOptions(a: RawEditorOptions, b: IEditorOptions): RawEditorOptions { // console.log(`mixOptions`, a, b); - const result = new editorOptions.RawEditorOptions(); - for (const editorOption of editorOptions.editorOptionsRegistry) { + const result = new RawEditorOptions(); + for (const editorOption of editorOptionsRegistry) { result._write(editorOption.id, editorOption.mix(a._read(editorOption.id), editorOption.read(b))); } return result; } - public static validateOptions(options: editorOptions.RawEditorOptions): editorOptions.ValidatedEditorOptions { + public static validateOptions(options: RawEditorOptions): ValidatedEditorOptions { // console.log(`validateOptions`, options); - const result = new editorOptions.ValidatedEditorOptions(); - for (const editorOption of editorOptions.editorOptionsRegistry) { + const result = new ValidatedEditorOptions(); + for (const editorOption of editorOptionsRegistry) { result._write(editorOption.id, editorOption.validate(options._read(editorOption.id))); } return result; } - public static computeOptions(options: editorOptions.ValidatedEditorOptions, env: editorOptions.IEnvironmentalOptions): editorOptions.ComputedEditorOptions { + public static computeOptions(options: ValidatedEditorOptions, env: IEnvironmentalOptions): ComputedEditorOptions { // console.log(`computeOptions`, options, env); - const result = new editorOptions.ComputedEditorOptions(); - for (const editorOption of editorOptions.editorOptionsRegistry) { + const result = new ComputedEditorOptions(); + for (const editorOption of editorOptionsRegistry) { result._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id))); } return result; } - public static checkEquals(a: editorOptions.ComputedEditorOptions, b: editorOptions.ComputedEditorOptions): editorOptions.ChangedEditorOptions | null { + public static checkEquals(a: ComputedEditorOptions, b: ComputedEditorOptions): ChangedEditorOptions | null { // console.log(`equals`, a, b); - const result = new editorOptions.ChangedEditorOptions(); + const result = new ChangedEditorOptions(); let somethingChanged = false; - for (const editorOption of editorOptions.editorOptionsRegistry) { + for (const editorOption of editorOptionsRegistry) { const changed = !editorOption.equals(a._read(editorOption.id), b._read(editorOption.id)); result._write(editorOption.id, changed); if (changed) { @@ -118,7 +115,7 @@ export class EditorConfiguration2 { /** * Compatibility with old options */ -function migrateOptions(options: editorOptions.IEditorOptions): void { +function migrateOptions(options: IEditorOptions): void { let wordWrap = options.wordWrap; if (wordWrap === true) { options.wordWrap = 'on'; @@ -137,20 +134,20 @@ function migrateOptions(options: editorOptions.IEditorOptions): void { export abstract class CommonEditorConfiguration extends Disposable implements editorCommon.IConfiguration { public readonly isSimpleWidget: boolean; - protected _rawOptions: editorOptions.IEditorOptions; - protected _validatedOptions: editorOptions.IValidatedEditorOptions; - public editor!: editorOptions.InternalEditorOptions; + protected _rawOptions: IEditorOptions; + protected _validatedOptions: IValidatedEditorOptions; + public editor!: InternalEditorOptions; private _isDominatedByLongLines: boolean; private _lineNumbersDigitCount: number; - private _onDidChange = this._register(new Emitter()); - public readonly onDidChange: Event = this._onDidChange.event; + private _onDidChange = this._register(new Emitter()); + public readonly onDidChange: Event = this._onDidChange.event; - private _rawOptions2: editorOptions.RawEditorOptions; - private _validatedOptions2: editorOptions.ValidatedEditorOptions; - public options!: editorOptions.ComputedEditorOptions; + private _rawOptions2: RawEditorOptions; + private _validatedOptions2: ValidatedEditorOptions; + public options!: ComputedEditorOptions; - constructor(isSimpleWidget: boolean, options: editorOptions.IEditorOptions) { + constructor(isSimpleWidget: boolean, options: IEditorOptions) { super(); migrateOptions(options); @@ -164,7 +161,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed this._rawOptions.hover = objects.mixin({}, this._rawOptions.hover || {}); this._rawOptions.parameterHints = objects.mixin({}, this._rawOptions.parameterHints || {}); - this._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS); + this._validatedOptions = EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS); this._rawOptions2 = EditorConfiguration2.readOptions(options); this._validatedOptions2 = EditorConfiguration2.validateOptions(this._rawOptions2); @@ -202,15 +199,15 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed } } - public getRawOptions(): editorOptions.IEditorOptions { + public getRawOptions(): IEditorOptions { return this._rawOptions; } - private _computeInternalOptions(): [editorOptions.InternalEditorOptions, editorOptions.ComputedEditorOptions] { + private _computeInternalOptions(): [InternalEditorOptions, ComputedEditorOptions] { const opts = this._validatedOptions; const partialEnv = this._getEnvConfiguration(); const bareFontInfo = BareFontInfo.createFromRawSettings(this._rawOptions, partialEnv.zoomLevel, this.isSimpleWidget); - const env: editorOptions.IEnvironmentalOptions = { + const env: IEnvironmentalOptions = { outerWidth: partialEnv.outerWidth, outerHeight: partialEnv.outerHeight, fontInfo: this.readConfiguration(bareFontInfo), @@ -222,7 +219,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed tabFocusMode: TabFocus.getTabFocusMode(), accessibilitySupport: partialEnv.accessibilitySupport }; - const r = editorOptions.InternalEditorOptionsFactory.createInternalEditorOptions(env, opts); + const r = InternalEditorOptionsFactory.createInternalEditorOptions(env, opts); const r2 = EditorConfiguration2.computeOptions(this._validatedOptions2, env); return [r, r2]; } @@ -267,7 +264,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed return true; } - public updateOptions(newOptions: editorOptions.IEditorOptions): void { + public updateOptions(newOptions: IEditorOptions): void { if (typeof newOptions === 'undefined') { return; } @@ -278,7 +275,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed this._rawOptions = objects.mixin(this._rawOptions, newOptions || {}); this._rawOptions2 = EditorConfiguration2.mixOptions(this._rawOptions2, newOptions); - this._validatedOptions = editorOptions.EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS); + this._validatedOptions = EditorOptionsValidator.validate(this._rawOptions, EDITOR_DEFAULTS); this._validatedOptions2 = EditorConfiguration2.validateOptions(this._rawOptions2); this._recomputeOptions(); @@ -366,7 +363,7 @@ const editorConfiguration: IConfigurationNode = { }, 'editor.renderFinalNewline': { 'type': 'boolean', - 'default': editorOptions.EditorOption.renderFinalNewline.defaultValue, + 'default': EditorOption.renderFinalNewline.defaultValue, 'description': nls.localize('renderFinalNewline', "Render last line number when the file ends with a newline.") }, 'editor.rulers': { @@ -434,29 +431,29 @@ const editorConfiguration: IConfigurationNode = { }, 'editor.minimap.enabled': { 'type': 'boolean', - 'default': editorOptions.EditorOption.minimap.defaultValue.enabled, + 'default': EditorOption.minimap.defaultValue.enabled, 'description': nls.localize('minimap.enabled', "Controls whether the minimap is shown.") }, 'editor.minimap.side': { 'type': 'string', 'enum': ['left', 'right'], - 'default': editorOptions.EditorOption.minimap.defaultValue.side, + 'default': EditorOption.minimap.defaultValue.side, 'description': nls.localize('minimap.side', "Controls the side where to render the minimap.") }, 'editor.minimap.showSlider': { 'type': 'string', 'enum': ['always', 'mouseover'], - 'default': editorOptions.EditorOption.minimap.defaultValue.showSlider, + 'default': EditorOption.minimap.defaultValue.showSlider, 'description': nls.localize('minimap.showSlider', "Controls whether the minimap slider is automatically hidden.") }, 'editor.minimap.renderCharacters': { 'type': 'boolean', - 'default': editorOptions.EditorOption.minimap.defaultValue.renderCharacters, + 'default': EditorOption.minimap.defaultValue.renderCharacters, 'description': nls.localize('minimap.renderCharacters', "Render the actual characters on a line as opposed to color blocks.") }, 'editor.minimap.maxColumn': { 'type': 'number', - 'default': editorOptions.EditorOption.minimap.defaultValue.maxColumn, + 'default': EditorOption.minimap.defaultValue.maxColumn, 'description': nls.localize('minimap.maxColumn', "Limit the width of the minimap to render at most a certain number of columns.") }, 'editor.hover.enabled': { @@ -515,7 +512,7 @@ const editorConfiguration: IConfigurationNode = { ] }, "Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`."), ], - 'default': editorOptions.EditorOption.wordWrap.defaultValue, + 'default': EditorOption.wordWrap.defaultValue, 'description': nls.localize({ key: 'wordWrap', comment: [ @@ -526,7 +523,7 @@ const editorConfiguration: IConfigurationNode = { }, 'editor.wordWrapColumn': { 'type': 'integer', - 'default': editorOptions.EditorOption.wordWrapColumn.defaultValue, + 'default': EditorOption.wordWrapColumn.defaultValue, 'minimum': 1, 'markdownDescription': nls.localize({ key: 'wordWrapColumn', @@ -550,12 +547,12 @@ const editorConfiguration: IConfigurationNode = { }, 'editor.mouseWheelScrollSensitivity': { 'type': 'number', - 'default': editorOptions.EditorOption.mouseWheelScrollSensitivity.defaultValue, + 'default': EditorOption.mouseWheelScrollSensitivity.defaultValue, 'markdownDescription': nls.localize('mouseWheelScrollSensitivity', "A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.") }, 'editor.fastScrollSensitivity': { 'type': 'number', - 'default': editorOptions.EditorOption.fastScrollSensitivity.defaultValue, + 'default': EditorOption.fastScrollSensitivity.defaultValue, 'markdownDescription': nls.localize('fastScrollSensitivity', "Scrolling speed multiplier when pressing `Alt`.") }, 'editor.multiCursorModifier': { @@ -972,7 +969,7 @@ const editorConfiguration: IConfigurationNode = { 'editor.cursorBlinking': { 'type': 'string', 'enum': ['blink', 'smooth', 'phase', 'expand', 'solid'], - 'default': editorOptions.blinkingStyleToString(EDITOR_DEFAULTS.viewInfo.cursorBlinking), + 'default': blinkingStyleToString(EDITOR_DEFAULTS.viewInfo.cursorBlinking), 'description': nls.localize('cursorBlinking', "Control the cursor animation style.") }, 'editor.mouseWheelZoom': { @@ -988,7 +985,7 @@ const editorConfiguration: IConfigurationNode = { 'editor.cursorStyle': { 'type': 'string', 'enum': ['block', 'block-outline', 'line', 'line-thin', 'underline', 'underline-thin'], - 'default': editorOptions.cursorStyleToString(EDITOR_DEFAULTS.viewInfo.cursorStyle), + 'default': cursorStyleToString(EDITOR_DEFAULTS.viewInfo.cursorStyle), 'description': nls.localize('cursorStyle', "Controls the cursor style.") }, 'editor.cursorWidth': { @@ -1052,7 +1049,7 @@ const editorConfiguration: IConfigurationNode = { }, 'editor.folding': { 'type': 'boolean', - 'default': editorOptions.EditorOption.folding.defaultValue, + 'default': EditorOption.folding.defaultValue, 'description': nls.localize('folding', "Controls whether the editor has code folding enabled.") }, 'editor.foldingStrategy': { @@ -1105,7 +1102,7 @@ const editorConfiguration: IConfigurationNode = { 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': editorOptions.EditorOption.accessibilitySupport.defaultValue, + 'default': EditorOption.accessibilitySupport.defaultValue, 'description': nls.localize('accessibilitySupport', "Controls whether the editor should run in a mode where it is optimized for screen readers.") }, 'editor.showUnused': { @@ -1158,7 +1155,7 @@ const editorConfiguration: IConfigurationNode = { }, 'editor.selectionClipboard': { 'type': 'boolean', - 'default': editorOptions.EditorOption.selectionClipboard.defaultValue, + 'default': EditorOption.selectionClipboard.defaultValue, 'description': nls.localize('selectionClipboard', "Controls whether the Linux primary clipboard should be supported."), 'included': platform.isLinux }, diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index dc915f4f80b..8b81ce7e464 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -729,7 +729,20 @@ export interface IEditorOptions { */ showUnused?: boolean; + /** + * Do not use. + * @internal + */ + tabFocusMode?: undefined; + /** + * Do not use. + * @internal + */ layoutInfo?: undefined; + /** + * Do not use. + * @internal + */ wrappingInfo?: undefined; } @@ -1018,7 +1031,6 @@ export interface EditorContribOptions { export interface IValidatedEditorOptions { readonly wordSeparators: string; readonly lineDecorationsWidth: number | string; - readonly readOnly: boolean; readonly mouseStyle: 'text' | 'default' | 'copy'; readonly disableLayerHinting: boolean; readonly automaticLayout: boolean; @@ -1049,11 +1061,6 @@ export class InternalEditorOptions { readonly pixelRatio: number; readonly editorClassName: string; readonly lineHeight: number; - readonly readOnly: boolean; - /** - * @internal - */ - readonly accessibilitySupport: AccessibilitySupport; readonly multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey'; readonly multiCursorMergeOverlapping: boolean; readonly showUnused: boolean; @@ -1066,7 +1073,6 @@ export class InternalEditorOptions { readonly autoSurround: EditorAutoSurroundStrategy; readonly autoIndent: boolean; readonly useTabStops: boolean; - readonly tabFocusMode: boolean; readonly dragAndDrop: boolean; readonly emptySelectionClipboard: boolean; readonly copyWithSyntaxHighlighting: boolean; @@ -1084,7 +1090,6 @@ export class InternalEditorOptions { pixelRatio: number; editorClassName: string; lineHeight: number; - readOnly: boolean; multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey'; multiCursorMergeOverlapping: boolean; wordSeparators: string; @@ -1094,7 +1099,6 @@ export class InternalEditorOptions { autoSurround: EditorAutoSurroundStrategy; autoIndent: boolean; useTabStops: boolean; - tabFocusMode: boolean; dragAndDrop: boolean; emptySelectionClipboard: boolean; copyWithSyntaxHighlighting: boolean; @@ -1107,7 +1111,6 @@ export class InternalEditorOptions { this.pixelRatio = source.pixelRatio; this.editorClassName = source.editorClassName; this.lineHeight = source.lineHeight | 0; - this.readOnly = source.readOnly; this.multiCursorModifier = source.multiCursorModifier; this.multiCursorMergeOverlapping = source.multiCursorMergeOverlapping; this.wordSeparators = source.wordSeparators; @@ -1117,7 +1120,6 @@ export class InternalEditorOptions { this.autoSurround = source.autoSurround; this.autoIndent = source.autoIndent; this.useTabStops = source.useTabStops; - this.tabFocusMode = source.tabFocusMode; this.dragAndDrop = source.dragAndDrop; this.emptySelectionClipboard = source.emptySelectionClipboard; this.copyWithSyntaxHighlighting = source.copyWithSyntaxHighlighting; @@ -1136,7 +1138,6 @@ export class InternalEditorOptions { && this.pixelRatio === other.pixelRatio && this.editorClassName === other.editorClassName && this.lineHeight === other.lineHeight - && this.readOnly === other.readOnly && this.multiCursorModifier === other.multiCursorModifier && this.multiCursorMergeOverlapping === other.multiCursorMergeOverlapping && this.wordSeparators === other.wordSeparators @@ -1146,7 +1147,6 @@ export class InternalEditorOptions { && this.autoSurround === other.autoSurround && this.autoIndent === other.autoIndent && this.useTabStops === other.useTabStops - && this.tabFocusMode === other.tabFocusMode && this.dragAndDrop === other.dragAndDrop && this.showUnused === other.showUnused && this.emptySelectionClipboard === other.emptySelectionClipboard @@ -1172,7 +1172,6 @@ export class InternalEditorOptions { pixelRatio: (this.pixelRatio !== newOpts.pixelRatio), editorClassName: (this.editorClassName !== newOpts.editorClassName), lineHeight: (this.lineHeight !== newOpts.lineHeight), - readOnly: (this.readOnly !== newOpts.readOnly), multiCursorModifier: (this.multiCursorModifier !== newOpts.multiCursorModifier), multiCursorMergeOverlapping: (this.multiCursorMergeOverlapping !== newOpts.multiCursorMergeOverlapping), wordSeparators: (this.wordSeparators !== newOpts.wordSeparators), @@ -1182,7 +1181,6 @@ export class InternalEditorOptions { autoSurround: (this.autoSurround !== newOpts.autoSurround), autoIndent: (this.autoIndent !== newOpts.autoIndent), useTabStops: (this.useTabStops !== newOpts.useTabStops), - tabFocusMode: (this.tabFocusMode !== newOpts.tabFocusMode), dragAndDrop: (this.dragAndDrop !== newOpts.dragAndDrop), emptySelectionClipboard: (this.emptySelectionClipboard !== newOpts.emptySelectionClipboard), copyWithSyntaxHighlighting: (this.copyWithSyntaxHighlighting !== newOpts.copyWithSyntaxHighlighting), @@ -1353,7 +1351,6 @@ export interface IConfigurationChangedEvent { readonly pixelRatio: boolean; readonly editorClassName: boolean; readonly lineHeight: boolean; - readonly readOnly: boolean; readonly multiCursorModifier: boolean; readonly multiCursorMergeOverlapping: boolean; readonly wordSeparators: boolean; @@ -1363,7 +1360,6 @@ export interface IConfigurationChangedEvent { readonly autoSurround: boolean; readonly autoIndent: boolean; readonly useTabStops: boolean; - readonly tabFocusMode: boolean; readonly dragAndDrop: boolean; readonly emptySelectionClipboard: boolean; readonly copyWithSyntaxHighlighting: boolean; @@ -1534,7 +1530,6 @@ export class EditorOptionsValidator { return { wordSeparators: _string(opts.wordSeparators, defaults.wordSeparators), lineDecorationsWidth: (typeof opts.lineDecorationsWidth === 'undefined' ? defaults.lineDecorationsWidth : opts.lineDecorationsWidth), - readOnly: _boolean(opts.readOnly, defaults.readOnly), mouseStyle: _stringSet<'text' | 'default' | 'copy'>(opts.mouseStyle, defaults.mouseStyle, ['text', 'default', 'copy']), disableLayerHinting: _boolean(opts.disableLayerHinting, defaults.disableLayerHinting), automaticLayout: _boolean(opts.automaticLayout, defaults.automaticLayout), @@ -1768,7 +1763,6 @@ export class InternalEditorOptionsFactory { pixelRatio: env.pixelRatio, editorClassName: className, lineHeight: env.fontInfo.lineHeight, - readOnly: opts.readOnly, multiCursorModifier: opts.multiCursorModifier, multiCursorMergeOverlapping: opts.multiCursorMergeOverlapping, wordSeparators: opts.wordSeparators, @@ -1778,7 +1772,6 @@ export class InternalEditorOptionsFactory { 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, @@ -1858,7 +1851,6 @@ export const EDITOR_MODEL_DEFAULTS = { export const EDITOR_DEFAULTS: IValidatedEditorOptions = { wordSeparators: USUAL_WORD_SEPARATORS, lineDecorationsWidth: 10, - readOnly: false, mouseStyle: 'text', disableLayerHinting: false, automaticLayout: false, @@ -1991,7 +1983,7 @@ export class ValidatedEditorOptions { } export interface IComputedEditorOptions { - get>(id: EditorOptionId): ComputedEditorOptionValue; + get(id: T): FindComputedEditorOptionValueById; } /** @@ -2002,7 +1994,7 @@ export class ComputedEditorOptions implements IComputedEditorOptions { public _read(id: EditorOptionId): T { return this._values[id]; } - public get>(id: EditorOptionId): ComputedEditorOptionValue { + public get(id: T): FindComputedEditorOptionValueById { return this._values[id]; } public _write(id: EditorOptionId, value: T): void { @@ -2025,8 +2017,8 @@ export class ChangedEditorOptions { export type PossibleKeyName = { [K in keyof IEditorOptions]: IEditorOptions[K] extends V | undefined ? K : never }[keyof IEditorOptions]; -export interface IEditorOption { - readonly id: EditorOptionId; +export interface IEditorOption { + readonly id: K; readonly name: PossibleKeyName; readonly defaultValue: T2; read(options: IRawEditorOptionsBag): T1 | undefined; @@ -2039,20 +2031,20 @@ export interface IEditorOption { /** * @internal */ -export const editorOptionsRegistry: IEditorOption[] = []; +export const editorOptionsRegistry: IEditorOption[] = []; -function registerEditorOption(option: IEditorOption): IEditorOption { +function registerEditorOption(option: IEditorOption): IEditorOption { editorOptionsRegistry[option.id] = option; return option; } -export abstract class BaseEditorOption implements IEditorOption { +export abstract class BaseEditorOption implements IEditorOption { - public readonly id: EditorOptionId; + public readonly id: K; public readonly name: PossibleKeyName; public readonly defaultValue: T2; - constructor(id: EditorOptionId, name: PossibleKeyName, defaultValue: T2, deps: EditorOptionId[] = []) { + constructor(id: K, name: PossibleKeyName, defaultValue: T2, deps: EditorOptionId[] = []) { this.id = id; this.name = name; this.defaultValue = defaultValue; @@ -2082,7 +2074,7 @@ export abstract class BaseEditorOption implements IEditorO } } -class EditorBooleanOption extends BaseEditorOption { +class EditorBooleanOption extends BaseEditorOption { public validate(input: boolean | undefined): boolean { return _boolean(input, this.defaultValue); } @@ -2091,10 +2083,10 @@ class EditorBooleanOption extends BaseEditorOption { } } -class EditorIntOption extends BaseEditorOption { +class EditorIntOption extends BaseEditorOption { public readonly minimum: number; public readonly maximum: number; - constructor(id: EditorOptionId, name: PossibleKeyName, defaultValue: number, minimum: number, maximum: number, deps: EditorOptionId[] = []) { + constructor(id: K, name: PossibleKeyName, defaultValue: number, minimum: number, maximum: number, deps: EditorOptionId[] = []) { super(id, name, defaultValue, deps); this.minimum = minimum; this.maximum = maximum; @@ -2107,9 +2099,9 @@ class EditorIntOption extends BaseEditorOption { } } -class EditorFloatOption extends BaseEditorOption { +class EditorFloatOption extends BaseEditorOption { public readonly validationFn: (value: number) => number; - constructor(id: EditorOptionId, name: PossibleKeyName, defaultValue: number, validationFn: (value: number) => number, deps: EditorOptionId[] = []) { + constructor(id: K, name: PossibleKeyName, defaultValue: number, validationFn: (value: number) => number, deps: EditorOptionId[] = []) { super(id, name, defaultValue, deps); this.validationFn = validationFn; } @@ -2121,7 +2113,7 @@ class EditorFloatOption extends BaseEditorOption { } } -class EditorStringOption extends BaseEditorOption { +class EditorStringOption extends BaseEditorOption { public validate(input: string | undefined): string { return _string(input, this.defaultValue); } @@ -2130,10 +2122,10 @@ class EditorStringOption extends BaseEditorOption { } } -class EditorEnumOption extends BaseEditorOption { +class EditorEnumOption extends BaseEditorOption { public readonly allowedValues: T1[]; public readonly convert: (value: T1) => T2; - constructor(id: EditorOptionId, name: PossibleKeyName, defaultValue: T1, allowedValues: T1[], convert: (value: T1) => T2, deps: EditorOptionId[] = []) { + constructor(id: K, name: PossibleKeyName, defaultValue: T1, allowedValues: T1[], convert: (value: T1) => T2, deps: EditorOptionId[] = []) { super(id, name, defaultValue, deps); this.allowedValues = allowedValues; this.convert = convert; @@ -2146,7 +2138,7 @@ class EditorEnumOption extends BaseEditorOption { } } -class EditorPassthroughOption extends BaseEditorOption { +class EditorPassthroughOption extends BaseEditorOption { public validate(input: T | undefined): T { if (typeof input === 'undefined') { return this.defaultValue; @@ -2175,7 +2167,7 @@ export interface InternalEditorRenderLineNumbersOptions { readonly renderFn: ((lineNumber: number) => string) | null; } -class EditorRenderLineNumbersOption extends BaseEditorOption { +class EditorRenderLineNumbersOption extends BaseEditorOption { public validate(lineNumbers: LineNumbersType | undefined): InternalEditorRenderLineNumbersOptions { let renderType: RenderLineNumbersType = this.defaultValue.renderType; let renderFn: ((lineNumber: number) => string) | null = this.defaultValue.renderFn; @@ -2223,7 +2215,7 @@ export interface InternalEditorMinimapOptions { readonly maxColumn: number; } -class EditorMinimapOption extends BaseEditorOption { +class EditorMinimapOption extends BaseEditorOption { public validate(input: IEditorMinimapOptions | undefined): InternalEditorMinimapOptions { if (typeof input !== 'object') { return this.defaultValue; @@ -2254,7 +2246,7 @@ class EditorMinimapOption extends BaseEditorOption { +class EditorAccessibilitySupportOption extends BaseEditorOption { public validate(input: 'auto' | 'off' | 'on' | undefined): 'auto' | 'off' | 'on' { return _stringSet<'auto' | 'off' | 'on'>(input, this.defaultValue, ['auto', 'off', 'on']); } @@ -2274,12 +2266,12 @@ class EditorAccessibilitySupportOption extends BaseEditorOption<'auto' | 'off' | //#region ariaLabel -class EditorAriaLabel extends BaseEditorOption { +class EditorAriaLabel extends BaseEditorOption { public validate(input: string | undefined): string { return _string(input, this.defaultValue); } public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: string): string { - const accessibilitySupport = options.get(EditorOptionId.accessibilitySupport); + const accessibilitySupport = options.get(EditorOptionId.accessibilitySupport); if (accessibilitySupport === AccessibilitySupport.Disabled) { return nls.localize('accessibilityOffAriaLabel', "The editor is not accessible at this time. Press Alt+F1 for options."); } @@ -2289,6 +2281,20 @@ class EditorAriaLabel extends BaseEditorOption { //#endregion +//#region tabFocusMode + +class EditorTabFocusMode extends BaseEditorOption { + public validate(input: undefined): undefined { + return undefined; + } + public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: undefined): boolean { + const readOnly = options.get(EditorOptionId.readOnly); + return (readOnly ? true : env.tabFocusMode); + } +} + +//#endregion + //#region scrollbar export interface InternalEditorScrollbarOptions { @@ -2305,7 +2311,7 @@ export interface InternalEditorScrollbarOptions { readonly verticalSliderSize: number; } -class EditorScrollbarOption extends BaseEditorOption { +class EditorScrollbarOption extends BaseEditorOption { public validate(input: IEditorScrollbarOptions | undefined): InternalEditorScrollbarOptions { if (typeof input !== 'object') { return this.defaultValue; @@ -2475,18 +2481,18 @@ export interface EditorLayoutInfo { /** * @internal */ -export class EditorLayoutInfoComputer extends BaseEditorOption { +export class EditorLayoutInfoComputer extends BaseEditorOption { public validate(input: undefined): undefined { return undefined; } public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: undefined): EditorLayoutInfo { - const glyphMargin = options.get(EditorOptionId.glyphMargin); - const lineNumbersMinChars = options.get(EditorOptionId.lineNumbersMinChars); - const rawLineDecorationsWidth = options.get(EditorOptionId.lineDecorationsWidth); - const folding = options.get(EditorOptionId.folding); - const minimap = options.get(EditorOptionId.minimap); - const scrollbar = options.get(EditorOptionId.scrollbar); - const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); + const glyphMargin = options.get(EditorOptionId.glyphMargin); + const lineNumbersMinChars = options.get(EditorOptionId.lineNumbersMinChars); + const rawLineDecorationsWidth = options.get(EditorOptionId.lineDecorationsWidth); + const folding = options.get(EditorOptionId.folding); + const minimap = options.get(EditorOptionId.minimap); + const scrollbar = options.get(EditorOptionId.scrollbar); + const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); let lineDecorationsWidth: number; if (typeof rawLineDecorationsWidth === 'string' && /^\d+(\.\d+)?ch$/.test(rawLineDecorationsWidth)) { @@ -2547,9 +2553,6 @@ export class EditorLayoutInfoComputer extends BaseEditorOption { +class EditorWrappingInfoComputer extends BaseEditorOption { public mix(a: undefined, b: undefined): undefined { return undefined; } @@ -2711,11 +2714,11 @@ class EditorWrappingInfoComputer extends BaseEditorOption(EditorOptionId.wordWrap); - const wordWrapColumn = options.get(EditorOptionId.wordWrapColumn); - const wordWrapMinified = options.get(EditorOptionId.wordWrapMinified); - const layoutInfo = options.get(EditorOptionId.layoutInfo); - const accessibilitySupport = options.get(EditorOptionId.accessibilitySupport); + const wordWrap = options.get(EditorOptionId.wordWrap); + const wordWrapColumn = options.get(EditorOptionId.wordWrapColumn); + const wordWrapMinified = options.get(EditorOptionId.wordWrapMinified); + const layoutInfo = options.get(EditorOptionId.layoutInfo); + const accessibilitySupport = options.get(EditorOptionId.accessibilitySupport); let bareWrappingInfo: { isWordWrapMinified: boolean; isViewportWrapping: boolean; wrappingColumn: number; } | null = null; { @@ -2793,11 +2796,13 @@ export const enum EditorOptionId { lineNumbersMinChars, minimap, mouseWheelScrollSensitivity, + readOnly, renderFinalNewline, renderLineNumbers, scrollbar, selectionClipboard, selectOnLineNumbers, + tabFocusMode, wordWrap, wordWrapBreakAfterCharacters, wordWrapBreakBeforeCharacters, @@ -2817,7 +2822,7 @@ export const EditorOption = { folding: registerEditorOption(new EditorBooleanOption(EditorOptionId.folding, 'folding', true)), glyphMargin: registerEditorOption(new EditorBooleanOption(EditorOptionId.glyphMargin, 'glyphMargin', true)), inDiffEditor: registerEditorOption(new EditorBooleanOption(EditorOptionId.inDiffEditor, 'inDiffEditor', false)), - lineDecorationsWidth: registerEditorOption(new EditorPassthroughOption(EditorOptionId.lineDecorationsWidth, 'lineDecorationsWidth', 10)), + lineDecorationsWidth: registerEditorOption(new EditorPassthroughOption(EditorOptionId.lineDecorationsWidth, 'lineDecorationsWidth', 10)), lineNumbersMinChars: registerEditorOption(new EditorIntOption(EditorOptionId.lineNumbersMinChars, 'lineNumbersMinChars', 5, 1, 10)), minimap: registerEditorOption(new EditorMinimapOption(EditorOptionId.minimap, 'minimap', { enabled: true, @@ -2827,6 +2832,7 @@ export const EditorOption = { maxColumn: 120, })), mouseWheelScrollSensitivity: registerEditorOption(new EditorFloatOption(EditorOptionId.mouseWheelScrollSensitivity, 'mouseWheelScrollSensitivity', 1, x => (x === 0 ? 1 : x))), + readOnly: registerEditorOption(new EditorBooleanOption(EditorOptionId.readOnly, 'readOnly', false)), renderFinalNewline: registerEditorOption(new EditorBooleanOption(EditorOptionId.renderFinalNewline, 'renderFinalNewline', true)), renderLineNumbers: registerEditorOption(new EditorRenderLineNumbersOption(EditorOptionId.renderLineNumbers, 'lineNumbers', { renderType: RenderLineNumbersType.On, renderFn: null })), scrollbar: registerEditorOption(new EditorScrollbarOption(EditorOptionId.scrollbar, 'scrollbar', { @@ -2844,17 +2850,21 @@ export const EditorOption = { })), selectionClipboard: registerEditorOption(new EditorBooleanOption(EditorOptionId.selectionClipboard, 'selectionClipboard', true)), selectOnLineNumbers: registerEditorOption(new EditorBooleanOption(EditorOptionId.selectOnLineNumbers, 'selectOnLineNumbers', true)), - wordWrap: registerEditorOption(new EditorEnumOption<'off' | 'on' | 'wordWrapColumn' | 'bounded'>(EditorOptionId.wordWrap, 'wordWrap', 'off', ['off', 'on', 'wordWrapColumn', 'bounded'], x => x)), + tabFocusMode: registerEditorOption(new EditorTabFocusMode(EditorOptionId.tabFocusMode, 'tabFocusMode', undefined, [EditorOptionId.readOnly])), + wordWrap: registerEditorOption(new EditorEnumOption(EditorOptionId.wordWrap, 'wordWrap', 'off', ['off', 'on', 'wordWrapColumn', 'bounded'], x => x)), wordWrapBreakAfterCharacters: registerEditorOption(new EditorStringOption(EditorOptionId.wordWrapBreakAfterCharacters, 'wordWrapBreakAfterCharacters', ' \t})]?|/&,;¢°′″‰℃、。。、¢,.:;?!%・・ゝゞヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻ァィゥェォャュョッー”〉》」』】〕)]}」')), wordWrapBreakBeforeCharacters: registerEditorOption(new EditorStringOption(EditorOptionId.wordWrapBreakBeforeCharacters, 'wordWrapBreakBeforeCharacters', '([{‘“〈《「『【〔([{「£¥$£¥++')), wordWrapBreakObtrusiveCharacters: registerEditorOption(new EditorStringOption(EditorOptionId.wordWrapBreakObtrusiveCharacters, 'wordWrapBreakObtrusiveCharacters', '.')), wordWrapColumn: registerEditorOption(new EditorIntOption(EditorOptionId.wordWrapColumn, 'wordWrapColumn', 80, 1, Constants.MAX_SAFE_SMALL_INTEGER)), wordWrapMinified: registerEditorOption(new EditorBooleanOption(EditorOptionId.wordWrapMinified, 'wordWrapMinified', true)), - wrappingIndent: registerEditorOption(new EditorEnumOption<'none' | 'same' | 'indent' | 'deepIndent', WrappingIndent>(EditorOptionId.wrappingIndent, 'wrappingIndent', 'same', ['none', 'same', 'indent', 'deepIndent'], _wrappingIndentFromString)), + wrappingIndent: registerEditorOption(new EditorEnumOption(EditorOptionId.wrappingIndent, 'wrappingIndent', 'same', ['none', 'same', 'indent', 'deepIndent'], _wrappingIndentFromString)), // Leave these at the end! layoutInfo: registerEditorOption(new EditorLayoutInfoComputer(EditorOptionId.layoutInfo, 'layoutInfo', undefined, [EditorOptionId.glyphMargin, EditorOptionId.lineDecorationsWidth, EditorOptionId.folding, EditorOptionId.minimap, EditorOptionId.scrollbar, EditorOptionId.renderLineNumbers])), wrappingInfo: registerEditorOption(new EditorWrappingInfoComputer(EditorOptionId.wrappingInfo, 'wrappingInfo', undefined, [EditorOptionId.wordWrap, EditorOptionId.wordWrapColumn, EditorOptionId.wordWrapMinified, EditorOptionId.layoutInfo, EditorOptionId.accessibilitySupport])), }; -export type ComputedEditorOptionValue> = T extends IEditorOption ? R : never; +export type EditorOptionType = typeof EditorOption; +export type FindEditorOptionKeyById = { [K in keyof EditorOptionType]: EditorOptionType[K]['id'] extends T ? K : never }[keyof EditorOptionType]; +export type ComputedEditorOptionValue> = T extends IEditorOption ? R : never; +export type FindComputedEditorOptionValueById = ComputedEditorOptionValue]>; diff --git a/src/vs/editor/common/controller/cursor.ts b/src/vs/editor/common/controller/cursor.ts index b76218fe99b..fce316527de 100644 --- a/src/vs/editor/common/controller/cursor.ts +++ b/src/vs/editor/common/controller/cursor.ts @@ -20,6 +20,7 @@ import { RawContentChangedType } from 'vs/editor/common/model/textModelEvents'; import * as viewEvents from 'vs/editor/common/view/viewEvents'; import { IViewModel } from 'vs/editor/common/viewModel/viewModel'; import { dispose } from 'vs/base/common/lifecycle'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; function containsLineMappingChanged(events: viewEvents.ViewEvent[]): boolean { for (let i = 0, len = events.length; i < len; i++) { @@ -673,7 +674,7 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors { this._isDoingComposition = false; } - if (this._configuration.editor.readOnly) { + if (this._configuration.options.get(EditorOptionId.readOnly)) { // All the remaining handlers will try to edit the model, // but we cannot edit when read only... this._onDidAttemptReadOnlyEdit.fire(undefined); diff --git a/src/vs/editor/common/controller/cursorCommon.ts b/src/vs/editor/common/controller/cursorCommon.ts index 80775a63bd2..8c9ecb6a3d7 100644 --- a/src/vs/editor/common/controller/cursorCommon.ts +++ b/src/vs/editor/common/controller/cursorCommon.ts @@ -6,7 +6,7 @@ import { CharCode } from 'vs/base/common/charCode'; import { onUnexpectedError } from 'vs/base/common/errors'; import * as strings from 'vs/base/common/strings'; -import { EditorAutoClosingStrategy, EditorAutoSurroundStrategy, IConfigurationChangedEvent, EditorAutoClosingOvertypeStrategy, EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorAutoClosingStrategy, EditorAutoSurroundStrategy, IConfigurationChangedEvent, EditorAutoClosingOvertypeStrategy, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { CursorChangeReason } from 'vs/editor/common/controller/cursorEvents'; import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; @@ -122,7 +122,7 @@ export class CursorConfiguration { || e.autoSurround || e.useTabStops || e.lineHeight - || e.readOnly + || e.hasChanged(EditorOptionId.readOnly) ); } @@ -135,9 +135,9 @@ export class CursorConfiguration { const c = configuration.editor; const options = configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); - this.readOnly = c.readOnly; + this.readOnly = options.get(EditorOptionId.readOnly); this.tabSize = modelOptions.tabSize; this.indentSize = modelOptions.indentSize; this.insertSpaces = modelOptions.insertSpaces; diff --git a/src/vs/editor/common/standalone/standaloneEnums.ts b/src/vs/editor/common/standalone/standaloneEnums.ts index d3b4118c433..b23d2a1b9b2 100644 --- a/src/vs/editor/common/standalone/standaloneEnums.ts +++ b/src/vs/editor/common/standalone/standaloneEnums.ts @@ -450,20 +450,22 @@ export enum EditorOptionId { lineNumbersMinChars = 7, minimap = 8, mouseWheelScrollSensitivity = 9, - renderFinalNewline = 10, - renderLineNumbers = 11, - scrollbar = 12, - selectionClipboard = 13, - selectOnLineNumbers = 14, - wordWrap = 15, - wordWrapBreakAfterCharacters = 16, - wordWrapBreakBeforeCharacters = 17, - wordWrapBreakObtrusiveCharacters = 18, - wordWrapColumn = 19, - wordWrapMinified = 20, - wrappingIndent = 21, - layoutInfo = 22, - wrappingInfo = 23 + readOnly = 10, + renderFinalNewline = 11, + renderLineNumbers = 12, + scrollbar = 13, + selectionClipboard = 14, + selectOnLineNumbers = 15, + tabFocusMode = 16, + wordWrap = 17, + wordWrapBreakAfterCharacters = 18, + wordWrapBreakBeforeCharacters = 19, + wordWrapBreakObtrusiveCharacters = 20, + wordWrapColumn = 21, + wordWrapMinified = 22, + wrappingIndent = 23, + layoutInfo = 24, + wrappingInfo = 25 } /** diff --git a/src/vs/editor/common/view/viewEvents.ts b/src/vs/editor/common/view/viewEvents.ts index 47006636def..ebb674197e0 100644 --- a/src/vs/editor/common/view/viewEvents.ts +++ b/src/vs/editor/common/view/viewEvents.ts @@ -39,7 +39,6 @@ export class ViewConfigurationChangedEvent { public readonly pixelRatio: boolean; public readonly editorClassName: boolean; public readonly lineHeight: boolean; - public readonly readOnly: boolean; public readonly emptySelectionClipboard: boolean; public readonly copyWithSyntaxHighlighting: boolean; public readonly fontInfo: boolean; @@ -51,7 +50,6 @@ export class ViewConfigurationChangedEvent { this.pixelRatio = source.pixelRatio; this.editorClassName = source.editorClassName; this.lineHeight = source.lineHeight; - this.readOnly = source.readOnly; this.emptySelectionClipboard = source.emptySelectionClipboard; this.copyWithSyntaxHighlighting = source.copyWithSyntaxHighlighting; this.fontInfo = source.fontInfo; diff --git a/src/vs/editor/common/viewLayout/viewLayout.ts b/src/vs/editor/common/viewLayout/viewLayout.ts index 978aa54a3bb..99cd7efff43 100644 --- a/src/vs/editor/common/viewLayout/viewLayout.ts +++ b/src/vs/editor/common/viewLayout/viewLayout.ts @@ -6,7 +6,7 @@ import { Event } from 'vs/base/common/event'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { IScrollDimensions, IScrollPosition, ScrollEvent, Scrollable, ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { IConfigurationChangedEvent, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { IConfigurationChangedEvent, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { LinesLayout } from 'vs/editor/common/viewLayout/linesLayout'; import { IPartialViewLinesViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; @@ -28,7 +28,7 @@ export class ViewLayout extends Disposable implements IViewLayout { this._configuration = configuration; const options = this._configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this._linesLayout = new LinesLayout(lineCount, this._configuration.editor.lineHeight); @@ -64,7 +64,7 @@ export class ViewLayout extends Disposable implements IViewLayout { } if (e.hasChanged(EditorOptionId.layoutInfo)) { const options = this._configuration.options; - const layoutInfo = options.get(EditorOptionId.layoutInfo); + const layoutInfo = options.get(EditorOptionId.layoutInfo); this.scrollable.setScrollDimensions({ width: layoutInfo.contentWidth, height: layoutInfo.contentHeight @@ -89,7 +89,7 @@ export class ViewLayout extends Disposable implements IViewLayout { private _getHorizontalScrollbarHeight(scrollDimensions: IScrollDimensions): number { const options = this._configuration.options; - const scrollbar = options.get(EditorOptionId.scrollbar); + const scrollbar = options.get(EditorOptionId.scrollbar); if (scrollbar.horizontal === ScrollbarVisibility.Hidden) { // horizontal scrollbar not visible return 0; @@ -146,7 +146,7 @@ export class ViewLayout extends Disposable implements IViewLayout { private _computeScrollWidth(maxLineWidth: number, viewportWidth: number): number { const options = this._configuration.options; - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); let isViewportWrapping = wrappingInfo.isViewportWrapping; if (!isViewportWrapping) { const extraHorizontalSpace = this._configuration.editor.viewInfo.scrollBeyondLastColumn * this._configuration.editor.fontInfo.typicalHalfwidthCharacterWidth; diff --git a/src/vs/editor/common/viewModel/viewModelDecorations.ts b/src/vs/editor/common/viewModel/viewModelDecorations.ts index 07df48c622e..bedcfb72b83 100644 --- a/src/vs/editor/common/viewModel/viewModelDecorations.ts +++ b/src/vs/editor/common/viewModel/viewModelDecorations.ts @@ -10,6 +10,7 @@ import * as editorCommon from 'vs/editor/common/editorCommon'; import { IModelDecoration, ITextModel } from 'vs/editor/common/model'; import { IViewModelLinesCollection } from 'vs/editor/common/viewModel/splitLinesCollection'; import { ICoordinatesConverter, InlineDecoration, InlineDecorationType, ViewModelDecoration } from 'vs/editor/common/viewModel/viewModel'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export interface IDecorationsViewportData { /** @@ -103,7 +104,7 @@ export class ViewModelDecorations implements IDisposable { } private _getDecorationsViewportData(viewportRange: Range): IDecorationsViewportData { - const modelDecorations = this._linesCollection.getDecorationsInRange(viewportRange, this.editorId, this.configuration.editor.readOnly); + const modelDecorations = this._linesCollection.getDecorationsInRange(viewportRange, this.editorId, this.configuration.options.get(EditorOptionId.readOnly)); const startLineNumber = viewportRange.startLineNumber; const endLineNumber = viewportRange.endLineNumber; diff --git a/src/vs/editor/common/viewModel/viewModelImpl.ts b/src/vs/editor/common/viewModel/viewModelImpl.ts index 73350e18214..8ccdd124225 100644 --- a/src/vs/editor/common/viewModel/viewModelImpl.ts +++ b/src/vs/editor/common/viewModel/viewModelImpl.ts @@ -6,7 +6,7 @@ import { Color } from 'vs/base/common/color'; import { IDisposable } from 'vs/base/common/lifecycle'; import * as strings from 'vs/base/common/strings'; -import { IConfigurationChangedEvent, EDITOR_FONT_DEFAULTS, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { IConfigurationChangedEvent, EDITOR_FONT_DEFAULTS, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { IPosition, Position } from 'vs/editor/common/core/position'; import { IRange, Range } from 'vs/editor/common/core/range'; import * as editorCommon from 'vs/editor/common/editorCommon'; @@ -61,11 +61,11 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel } else { const conf = this.configuration.editor; const options = this.configuration.options; - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); - const wordWrapBreakAfterCharacters = options.get(EditorOptionId.wordWrapBreakAfterCharacters); - const wordWrapBreakBeforeCharacters = options.get(EditorOptionId.wordWrapBreakBeforeCharacters); - const wordWrapBreakObtrusiveCharacters = options.get(EditorOptionId.wordWrapBreakObtrusiveCharacters); - const wrappingIndent = options.get(EditorOptionId.wrappingIndent); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wordWrapBreakAfterCharacters = options.get(EditorOptionId.wordWrapBreakAfterCharacters); + const wordWrapBreakBeforeCharacters = options.get(EditorOptionId.wordWrapBreakBeforeCharacters); + const wordWrapBreakObtrusiveCharacters = options.get(EditorOptionId.wordWrapBreakObtrusiveCharacters); + const wrappingIndent = options.get(EditorOptionId.wrappingIndent); let hardWrappingLineMapperFactory = new CharacterHardWrappingLineMapperFactory( wordWrapBreakBeforeCharacters, @@ -154,8 +154,8 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel const conf = this.configuration.editor; const options = this.configuration.options; - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); - const wrappingIndent = options.get(EditorOptionId.wrappingIndent); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingIndent = options.get(EditorOptionId.wrappingIndent); if (this.lines.setWrappingSettings(wrappingIndent, wrappingInfo.wrappingColumn, conf.fontInfo.typicalFullwidthCharacterWidth / conf.fontInfo.typicalHalfwidthCharacterWidth)) { eventsCollector.emit(new viewEvents.ViewFlushedEvent()); @@ -170,7 +170,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel } } - if (e.readOnly) { + if (e.hasChanged(EditorOptionId.readOnly)) { // Must read again all decorations due to readOnly filtering this.decorations.reset(); eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent()); @@ -561,7 +561,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel } public getAllOverviewRulerDecorations(theme: ITheme): IOverviewRulerDecorations { - return this.lines.getAllOverviewRulerDecorations(this.editorId, this.configuration.editor.readOnly, theme); + return this.lines.getAllOverviewRulerDecorations(this.editorId, this.configuration.options.get(EditorOptionId.readOnly), theme); } public invalidateOverviewRulerColorCache(): void { diff --git a/src/vs/editor/contrib/codeAction/codeActionModel.ts b/src/vs/editor/contrib/codeAction/codeActionModel.ts index d1b33028aee..3c8b4dacdd1 100644 --- a/src/vs/editor/contrib/codeAction/codeActionModel.ts +++ b/src/vs/editor/contrib/codeAction/codeActionModel.ts @@ -17,6 +17,7 @@ import { IMarkerService } from 'vs/platform/markers/common/markers'; import { IEditorProgressService } from 'vs/platform/progress/common/progress'; import { getCodeActions, CodeActionSet } from './codeAction'; import { CodeActionTrigger } from './codeActionTrigger'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export const SUPPORTED_CODE_ACTIONS = new RawContextKey('supportedCodeAction', ''); @@ -192,7 +193,7 @@ export class CodeActionModel extends Disposable { const model = this._editor.getModel(); if (model && CodeActionProviderRegistry.has(model) - && !this._editor.getConfiguration().readOnly + && !this._editor.getOption(EditorOptionId.readOnly) ) { const supportedActions: string[] = []; for (const provider of CodeActionProviderRegistry.all(model)) { diff --git a/src/vs/editor/contrib/find/findController.ts b/src/vs/editor/contrib/find/findController.ts index 664bc8c8bf3..253052dace3 100644 --- a/src/vs/editor/contrib/find/findController.ts +++ b/src/vs/editor/contrib/find/findController.ts @@ -26,6 +26,7 @@ import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegis import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { INotificationService } from 'vs/platform/notification/common/notification'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; const SEARCH_STRING_MAX_LENGTH = 524288; @@ -698,7 +699,7 @@ export class StartFindReplaceAction extends EditorAction { } public run(accessor: ServicesAccessor | null, editor: ICodeEditor): void { - if (!editor.hasModel() || editor.getConfiguration().readOnly) { + if (!editor.hasModel() || editor.getOption(EditorOptionId.readOnly)) { return; } diff --git a/src/vs/editor/contrib/find/findWidget.ts b/src/vs/editor/contrib/find/findWidget.ts index 3b31b2e3b57..c62ff1190bf 100644 --- a/src/vs/editor/contrib/find/findWidget.ts +++ b/src/vs/editor/contrib/find/findWidget.ts @@ -176,8 +176,8 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas this._findInput.inputBox.layout(); this._register(this._codeEditor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => { - if (e.readOnly) { - if (this._codeEditor.getConfiguration().readOnly) { + if (e.hasChanged(EditorOptionId.readOnly)) { + if (this._codeEditor.getOption(EditorOptionId.readOnly)) { // Hide replace part if editor becomes read only this._state.change({ isReplaceRevealed: false }, false); } @@ -315,7 +315,7 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas } if (e.isReplaceRevealed) { if (this._state.isReplaceRevealed) { - if (!this._codeEditor.getConfiguration().readOnly && !this._isReplaceVisible) { + if (!this._codeEditor.getOption(EditorOptionId.readOnly) && !this._isReplaceVisible) { this._isReplaceVisible = true; this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode); this._updateButtons(); @@ -456,7 +456,7 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas this._toggleReplaceBtn.toggleClass('expand', this._isReplaceVisible); this._toggleReplaceBtn.setExpanded(this._isReplaceVisible); - let canReplace = !this._codeEditor.getConfiguration().readOnly; + let canReplace = !this._codeEditor.getOption(EditorOptionId.readOnly); this._toggleReplaceBtn.setEnabled(this._isVisible && canReplace); } @@ -1210,7 +1210,7 @@ export class FindWidget extends Widget implements IOverlayWidget, IHorizontalSas } private updateAccessibilitySupport(): void { - const value = this._codeEditor.getConfiguration().accessibilitySupport; + const value = this._codeEditor.getOption(EditorOptionId.accessibilitySupport); this._findInput.setFocusInputOnOptionClick(value !== AccessibilitySupport.Enabled); } } diff --git a/src/vs/editor/contrib/folding/folding.ts b/src/vs/editor/contrib/folding/folding.ts index 4a705db696e..4c4c0f2adc7 100644 --- a/src/vs/editor/contrib/folding/folding.ts +++ b/src/vs/editor/contrib/folding/folding.ts @@ -18,7 +18,7 @@ import { FoldingModel, setCollapseStateAtLevel, CollapseMemento, setCollapseStat import { FoldingDecorationProvider } from './foldingDecorations'; import { FoldingRegions, FoldingRegion } from './foldingRanges'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { IConfigurationChangedEvent, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { IConfigurationChangedEvent, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { IMarginData, IEmptyContentData } from 'vs/editor/browser/controller/mouseTarget'; import { HiddenRangeModel } from 'vs/editor/contrib/folding/hiddenRangeModel'; import { IRange } from 'vs/editor/common/core/range'; @@ -88,7 +88,7 @@ export class FoldingController extends Disposable implements IEditorContribution super(); this.editor = editor; const options = this.editor.getOptions(); - this._isEnabled = options.get(EditorOptionId.folding); + this._isEnabled = options.get(EditorOptionId.folding); this._autoHideFoldingControls = this.editor.getConfiguration().contribInfo.showFoldingControls === 'mouseover'; this._useFoldingProviders = this.editor.getConfiguration().contribInfo.foldingStrategy !== 'indentation'; @@ -113,7 +113,7 @@ export class FoldingController extends Disposable implements IEditorContribution if (e.contribInfo || e.hasChanged(EditorOptionId.folding)) { let oldIsEnabled = this._isEnabled; const options = this.editor.getOptions(); - this._isEnabled = options.get(EditorOptionId.folding); + this._isEnabled = options.get(EditorOptionId.folding); this.foldingEnabled.set(this._isEnabled); if (oldIsEnabled !== this._isEnabled) { this.onModelChanged(); diff --git a/src/vs/editor/contrib/hover/hover.ts b/src/vs/editor/contrib/hover/hover.ts index 583e4c65dee..36cd010daff 100644 --- a/src/vs/editor/contrib/hover/hover.ts +++ b/src/vs/editor/contrib/hover/hover.ts @@ -11,7 +11,7 @@ import { IDisposable, DisposableStore } from 'vs/base/common/lifecycle'; import { IEmptyContentData } from 'vs/editor/browser/controller/mouseTarget'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions'; +import { IConfigurationChangedEvent, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution, IScrollEvent } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; @@ -265,7 +265,7 @@ class ShowHoverAction extends EditorAction { } const position = editor.getPosition(); const range = new Range(position.lineNumber, position.column, position.lineNumber, position.column); - const focus = editor.getConfiguration().accessibilitySupport === AccessibilitySupport.Enabled; + const focus = editor.getOption(EditorOptionId.accessibilitySupport) === AccessibilitySupport.Enabled; controller.showContentHover(range, HoverStartMode.Immediate, focus); } } diff --git a/src/vs/editor/contrib/suggest/suggestModel.ts b/src/vs/editor/contrib/suggest/suggestModel.ts index d34f911cea8..c82ea98b95b 100644 --- a/src/vs/editor/contrib/suggest/suggestModel.ts +++ b/src/vs/editor/contrib/suggest/suggestModel.ts @@ -20,6 +20,7 @@ import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2 import { CancellationTokenSource } from 'vs/base/common/cancellation'; import { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerService'; import { WordDistance } from 'vs/editor/contrib/suggest/wordDistance'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export interface ICancelEvent { readonly retrigger: boolean; @@ -183,7 +184,7 @@ export class SuggestModel implements IDisposable { dispose(this._triggerCharacterListener); - if (this._editor.getConfiguration().readOnly + if (this._editor.getOption(EditorOptionId.readOnly) || !this._editor.hasModel() || !this._editor.getConfiguration().contribInfo.suggestOnTriggerCharacters) { diff --git a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts index dc640cc2b3c..a0afb73c164 100644 --- a/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts +++ b/src/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.ts @@ -31,7 +31,7 @@ import { contrastBorder, editorWidgetBackground, widgetShadow, editorWidgetForeg import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; import { AccessibilityHelpNLS } from 'vs/editor/common/standaloneStrings'; -import { EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; const CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE = new RawContextKey('accessibilityHelpWidgetVisible', false); @@ -224,7 +224,6 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { } private _buildContent() { - let opts = this._editor.getConfiguration(); const options = this._editor.getOptions(); const selections = this._editor.getSelections(); @@ -241,14 +240,14 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { let text = getSelectionLabel(selections, charactersSelected); - if (options.get(EditorOptionId.inDiffEditor)) { - if (opts.readOnly) { + if (options.get(EditorOptionId.inDiffEditor)) { + if (options.get(EditorOptionId.readOnly)) { text += AccessibilityHelpNLS.readonlyDiffEditor; } else { text += AccessibilityHelpNLS.editableDiffEditor; } } else { - if (opts.readOnly) { + if (options.get(EditorOptionId.readOnly)) { text += AccessibilityHelpNLS.readonlyEditor; } else { text += AccessibilityHelpNLS.editableEditor; @@ -260,7 +259,7 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { ? AccessibilityHelpNLS.changeConfigToOnMac : AccessibilityHelpNLS.changeConfigToOnWinLinux ); - switch (opts.accessibilitySupport) { + switch (options.get(EditorOptionId.accessibilitySupport)) { case AccessibilitySupport.Unknown: text += '\n\n - ' + turnOnMessage; break; @@ -274,7 +273,7 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { } - if (opts.tabFocusMode) { + if (options.get(EditorOptionId.tabFocusMode)) { text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOnMsg, AccessibilityHelpNLS.tabFocusModeOnMsgNoKb); } else { text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOffMsg, AccessibilityHelpNLS.tabFocusModeOffMsgNoKb); diff --git a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts index b36f6ecdc23..82c5fb1a312 100644 --- a/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts +++ b/src/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.ts @@ -10,6 +10,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, OverlayWidgetPositionPreference } from 'vs/editor/browser/editorBrowser'; import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export class IPadShowKeyboard extends Disposable implements IEditorContribution { @@ -29,7 +30,7 @@ export class IPadShowKeyboard extends Disposable implements IEditorContribution } private update(): void { - const shouldHaveWidget = (!this.editor.getConfiguration().readOnly); + const shouldHaveWidget = (!this.editor.getOption(EditorOptionId.readOnly)); if (!this.widget && shouldHaveWidget) { diff --git a/src/vs/editor/test/common/config/commonEditorConfig.test.ts b/src/vs/editor/test/common/config/commonEditorConfig.test.ts index 649c7f9718b..9a0c8edad12 100644 --- a/src/vs/editor/test/common/config/commonEditorConfig.test.ts +++ b/src/vs/editor/test/common/config/commonEditorConfig.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; import { IEnvConfiguration } from 'vs/editor/common/config/commonEditorConfig'; -import { IEditorHoverOptions, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { IEditorHoverOptions, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { EditorZoom } from 'vs/editor/common/config/editorZoom'; import { TestConfiguration } from 'vs/editor/test/common/mocks/testConfiguration'; import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; @@ -68,7 +68,7 @@ suite('Common Editor Config', () => { function assertWrapping(config: TestConfiguration, isViewportWrapping: boolean, wrappingColumn: number): void { const options = config.options; - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); assert.equal(wrappingInfo.isViewportWrapping, isViewportWrapping); assert.equal(wrappingInfo.wrappingColumn, wrappingColumn); } diff --git a/src/vs/editor/test/common/viewModel/splitLinesCollection.test.ts b/src/vs/editor/test/common/viewModel/splitLinesCollection.test.ts index 20ba2e12437..faa9ac14097 100644 --- a/src/vs/editor/test/common/viewModel/splitLinesCollection.test.ts +++ b/src/vs/editor/test/common/viewModel/splitLinesCollection.test.ts @@ -19,7 +19,8 @@ import { PrefixSumComputer } from 'vs/editor/common/viewModel/prefixSumComputer' import { ILineMapping, ISimpleModel, SplitLine, SplitLinesCollection } from 'vs/editor/common/viewModel/splitLinesCollection'; import { ViewLineData } from 'vs/editor/common/viewModel/viewModel'; import { TestConfiguration } from 'vs/editor/test/common/mocks/testConfiguration'; -import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; + suite('Editor ViewModel - SplitLinesCollection', () => { test('SplitLine', () => { @@ -90,11 +91,11 @@ suite('Editor ViewModel - SplitLinesCollection', () => { function withSplitLinesCollection(text: string, callback: (model: TextModel, linesCollection: SplitLinesCollection) => void): void { const config = new TestConfiguration({}); - const wrappingInfo = config.options.get(EditorOptionId.wrappingInfo); - const wordWrapBreakAfterCharacters = config.options.get(EditorOptionId.wordWrapBreakAfterCharacters); - const wordWrapBreakBeforeCharacters = config.options.get(EditorOptionId.wordWrapBreakBeforeCharacters); - const wordWrapBreakObtrusiveCharacters = config.options.get(EditorOptionId.wordWrapBreakObtrusiveCharacters); - const wrappingIndent = config.options.get(EditorOptionId.wrappingIndent); + const wrappingInfo = config.options.get(EditorOptionId.wrappingInfo); + const wordWrapBreakAfterCharacters = config.options.get(EditorOptionId.wordWrapBreakAfterCharacters); + const wordWrapBreakBeforeCharacters = config.options.get(EditorOptionId.wordWrapBreakBeforeCharacters); + const wordWrapBreakObtrusiveCharacters = config.options.get(EditorOptionId.wordWrapBreakObtrusiveCharacters); + const wrappingIndent = config.options.get(EditorOptionId.wrappingIndent); const hardWrappingLineMapperFactory = new CharacterHardWrappingLineMapperFactory( wordWrapBreakBeforeCharacters, @@ -743,11 +744,11 @@ suite('SplitLinesCollection', () => { wordWrapColumn: wordWrapColumn, wrappingIndent: 'indent' }); - const wrappingInfo = configuration.options.get(EditorOptionId.wrappingInfo); - const wordWrapBreakAfterCharacters = configuration.options.get(EditorOptionId.wordWrapBreakAfterCharacters); - const wordWrapBreakBeforeCharacters = configuration.options.get(EditorOptionId.wordWrapBreakBeforeCharacters); - const wordWrapBreakObtrusiveCharacters = configuration.options.get(EditorOptionId.wordWrapBreakObtrusiveCharacters); - const wrappingIndent = configuration.options.get(EditorOptionId.wrappingIndent); + const wrappingInfo = configuration.options.get(EditorOptionId.wrappingInfo); + const wordWrapBreakAfterCharacters = configuration.options.get(EditorOptionId.wordWrapBreakAfterCharacters); + const wordWrapBreakBeforeCharacters = configuration.options.get(EditorOptionId.wordWrapBreakBeforeCharacters); + const wordWrapBreakObtrusiveCharacters = configuration.options.get(EditorOptionId.wordWrapBreakObtrusiveCharacters); + const wrappingIndent = configuration.options.get(EditorOptionId.wrappingIndent); const factory = new CharacterHardWrappingLineMapperFactory( wordWrapBreakBeforeCharacters, diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 32d7a932be4..ab2061dd683 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -3114,8 +3114,6 @@ declare namespace monaco.editor { * Controls fading out of unused variables. */ showUnused?: boolean; - layoutInfo?: undefined; - wrappingInfo?: undefined; } /** @@ -3345,7 +3343,6 @@ declare namespace monaco.editor { readonly pixelRatio: number; readonly editorClassName: string; readonly lineHeight: number; - readonly readOnly: boolean; readonly multiCursorModifier: 'altKey' | 'ctrlKey' | 'metaKey'; readonly multiCursorMergeOverlapping: boolean; readonly showUnused: boolean; @@ -3356,7 +3353,6 @@ declare namespace monaco.editor { readonly autoSurround: EditorAutoSurroundStrategy; readonly autoIndent: boolean; readonly useTabStops: boolean; - readonly tabFocusMode: boolean; readonly dragAndDrop: boolean; readonly emptySelectionClipboard: boolean; readonly copyWithSyntaxHighlighting: boolean; @@ -3374,7 +3370,6 @@ declare namespace monaco.editor { readonly pixelRatio: boolean; readonly editorClassName: boolean; readonly lineHeight: boolean; - readonly readOnly: boolean; readonly multiCursorModifier: boolean; readonly multiCursorMergeOverlapping: boolean; readonly wordSeparators: boolean; @@ -3384,7 +3379,6 @@ declare namespace monaco.editor { readonly autoSurround: boolean; readonly autoIndent: boolean; readonly useTabStops: boolean; - readonly tabFocusMode: boolean; readonly dragAndDrop: boolean; readonly emptySelectionClipboard: boolean; readonly copyWithSyntaxHighlighting: boolean; @@ -3411,15 +3405,15 @@ declare namespace monaco.editor { } export interface IComputedEditorOptions { - get>(id: EditorOptionId): ComputedEditorOptionValue; + get(id: T): FindComputedEditorOptionValueById; } export type PossibleKeyName = { [K in keyof IEditorOptions]: IEditorOptions[K] extends V | undefined ? K : never; }[keyof IEditorOptions]; - export interface IEditorOption { - readonly id: EditorOptionId; + export interface IEditorOption { + readonly id: K; readonly name: PossibleKeyName; readonly defaultValue: T2; read(options: IRawEditorOptionsBag): T1 | undefined; @@ -3429,11 +3423,11 @@ declare namespace monaco.editor { equals(a: T3, b: T3): boolean; } - export abstract class BaseEditorOption implements IEditorOption { - readonly id: EditorOptionId; + export abstract class BaseEditorOption implements IEditorOption { + readonly id: K; readonly name: PossibleKeyName; readonly defaultValue: T2; - constructor(id: EditorOptionId, name: PossibleKeyName, defaultValue: T2, deps?: EditorOptionId[]); + constructor(id: K, name: PossibleKeyName, defaultValue: T2, deps?: EditorOptionId[]); read(options: IRawEditorOptionsBag): T1 | undefined; mix(a: T1 | undefined, b: T1 | undefined): T1 | undefined; abstract validate(input: T1 | undefined): T2; @@ -3608,50 +3602,62 @@ declare namespace monaco.editor { lineNumbersMinChars = 7, minimap = 8, mouseWheelScrollSensitivity = 9, - renderFinalNewline = 10, - renderLineNumbers = 11, - scrollbar = 12, - selectionClipboard = 13, - selectOnLineNumbers = 14, - wordWrap = 15, - wordWrapBreakAfterCharacters = 16, - wordWrapBreakBeforeCharacters = 17, - wordWrapBreakObtrusiveCharacters = 18, - wordWrapColumn = 19, - wordWrapMinified = 20, - wrappingIndent = 21, - layoutInfo = 22, - wrappingInfo = 23 + readOnly = 10, + renderFinalNewline = 11, + renderLineNumbers = 12, + scrollbar = 13, + selectionClipboard = 14, + selectOnLineNumbers = 15, + tabFocusMode = 16, + wordWrap = 17, + wordWrapBreakAfterCharacters = 18, + wordWrapBreakBeforeCharacters = 19, + wordWrapBreakObtrusiveCharacters = 20, + wordWrapColumn = 21, + wordWrapMinified = 22, + wrappingIndent = 23, + layoutInfo = 24, + wrappingInfo = 25 } export const EditorOption: { - accessibilitySupport: IEditorOption<"auto" | "on" | "off", "auto" | "on" | "off", any>; - ariaLabel: IEditorOption; - fastScrollSensitivity: IEditorOption; - folding: IEditorOption; - glyphMargin: IEditorOption; - inDiffEditor: IEditorOption; - lineDecorationsWidth: IEditorOption; - lineNumbersMinChars: IEditorOption; - minimap: IEditorOption; - mouseWheelScrollSensitivity: IEditorOption; - renderFinalNewline: IEditorOption; - renderLineNumbers: IEditorOption; - scrollbar: IEditorOption; - selectionClipboard: IEditorOption; - selectOnLineNumbers: IEditorOption; - wordWrap: IEditorOption<"on" | "off" | "wordWrapColumn" | "bounded", "on" | "off" | "wordWrapColumn" | "bounded", "on" | "off" | "wordWrapColumn" | "bounded">; - wordWrapBreakAfterCharacters: IEditorOption; - wordWrapBreakBeforeCharacters: IEditorOption; - wordWrapBreakObtrusiveCharacters: IEditorOption; - wordWrapColumn: IEditorOption; - wordWrapMinified: IEditorOption; - wrappingIndent: IEditorOption<"none" | "same" | "indent" | "deepIndent", "none" | "same" | "indent" | "deepIndent", WrappingIndent>; - layoutInfo: IEditorOption; - wrappingInfo: IEditorOption; + accessibilitySupport: IEditorOption; + ariaLabel: IEditorOption; + fastScrollSensitivity: IEditorOption; + folding: IEditorOption; + glyphMargin: IEditorOption; + inDiffEditor: IEditorOption; + lineDecorationsWidth: IEditorOption; + lineNumbersMinChars: IEditorOption; + minimap: IEditorOption; + mouseWheelScrollSensitivity: IEditorOption; + readOnly: IEditorOption; + renderFinalNewline: IEditorOption; + renderLineNumbers: IEditorOption; + scrollbar: IEditorOption; + selectionClipboard: IEditorOption; + selectOnLineNumbers: IEditorOption; + tabFocusMode: IEditorOption; + wordWrap: IEditorOption; + wordWrapBreakAfterCharacters: IEditorOption; + wordWrapBreakBeforeCharacters: IEditorOption; + wordWrapBreakObtrusiveCharacters: IEditorOption; + wordWrapColumn: IEditorOption; + wordWrapMinified: IEditorOption; + wrappingIndent: IEditorOption; + layoutInfo: IEditorOption; + wrappingInfo: IEditorOption; }; - export type ComputedEditorOptionValue> = T extends IEditorOption ? R : never; + export type EditorOptionType = typeof EditorOption; + + export type FindEditorOptionKeyById = { + [K in keyof EditorOptionType]: EditorOptionType[K]['id'] extends T ? K : never; + }[keyof EditorOptionType]; + + export type ComputedEditorOptionValue> = T extends IEditorOption ? R : never; + + export type FindComputedEditorOptionValueById = ComputedEditorOptionValue]>; /** * A view zone is a full horizontal rectangle that 'pushes' text down. @@ -4103,7 +4109,7 @@ declare namespace monaco.editor { */ getConfiguration(): InternalEditorOptions; getOptions(): IComputedEditorOptions; - getOption>(id: EditorOptionId): ComputedEditorOptionValue; + getOption(id: T): FindComputedEditorOptionValueById; /** * Get value of the current model attached to this editor. * @see `ITextModel.getValue` diff --git a/src/vs/workbench/api/browser/mainThreadEditor.ts b/src/vs/workbench/api/browser/mainThreadEditor.ts index 10437ec2ed6..7d1d2022fed 100644 --- a/src/vs/workbench/api/browser/mainThreadEditor.ts +++ b/src/vs/workbench/api/browser/mainThreadEditor.ts @@ -6,7 +6,7 @@ import { Emitter, Event } from 'vs/base/common/event'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { RenderLineNumbersType, TextEditorCursorStyle, cursorStyleToString, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { RenderLineNumbersType, TextEditorCursorStyle, cursorStyleToString, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { IRange, Range } from 'vs/editor/common/core/range'; import { ISelection, Selection } from 'vs/editor/common/core/selection'; import * as editorCommon from 'vs/editor/common/editorCommon'; @@ -60,7 +60,7 @@ export class MainThreadTextEditorProperties { if (codeEditor) { const codeEditorOpts = codeEditor.getConfiguration(); const options = codeEditor.getOptions(); - const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); + const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); cursorStyle = codeEditorOpts.viewInfo.cursorStyle; lineNumbers = renderLineNumbers.renderType; } else if (previousProperties) { diff --git a/src/vs/workbench/browser/parts/editor/editorStatus.ts b/src/vs/workbench/browser/parts/editor/editorStatus.ts index f96fcd3b787..94e8258b4c1 100644 --- a/src/vs/workbench/browser/parts/editor/editorStatus.ts +++ b/src/vs/workbench/browser/parts/editor/editorStatus.ts @@ -708,7 +708,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution { } } - screenReaderMode = (editorWidget.getConfiguration().accessibilitySupport === AccessibilitySupport.Enabled); + screenReaderMode = (editorWidget.getOption(EditorOptionId.accessibilitySupport) === AccessibilitySupport.Enabled); } if (screenReaderMode === false && this.screenReaderNotification) { @@ -758,7 +758,7 @@ export class EditorStatus extends Disposable implements IWorkbenchContribution { private onEOLChange(editorWidget: ICodeEditor | undefined): void { const info: StateDelta = { EOL: undefined }; - if (editorWidget && !editorWidget.getConfiguration().readOnly) { + if (editorWidget && !editorWidget.getOption(EditorOptionId.readOnly)) { const codeEditorModel = editorWidget.getModel(); if (codeEditorModel) { info.EOL = codeEditorModel.getEOL(); @@ -819,8 +819,7 @@ function isWritableCodeEditor(codeEditor: ICodeEditor | undefined): boolean { if (!codeEditor) { return false; } - const config = codeEditor.getConfiguration(); - return (!config.readOnly); + return !codeEditor.getOption(EditorOptionId.readOnly); } function isWritableBaseEditor(e: IBaseEditor): boolean { diff --git a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts index a45ab650031..4f84e1dc2b4 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts @@ -17,7 +17,7 @@ import * as strings from 'vs/base/common/strings'; import { URI } from 'vs/base/common/uri'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser'; import { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import * as editorOptions from 'vs/editor/common/config/editorOptions'; +import { IEditorOptions, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; import { ToggleTabFocusModeAction } from 'vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode'; @@ -185,13 +185,13 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { } private _buildContent() { - let opts = this._editor.getConfiguration(); + const options = this._editor.getOptions(); let text = nls.localize('introMsg', "Thank you for trying out VS Code's accessibility options."); text += '\n\n' + nls.localize('status', "Status:"); - const configuredValue = this._configurationService.getValue('editor').accessibilitySupport; - const actualValue = opts.accessibilitySupport; + const configuredValue = this._configurationService.getValue('editor').accessibilitySupport; + const actualValue = options.get(EditorOptionId.accessibilitySupport); const emergencyTurnOnMessage = ( platform.isMacintosh @@ -229,7 +229,7 @@ class AccessibilityHelpWidget extends Widget implements IOverlayWidget { const NLS_TAB_FOCUS_MODE_OFF = nls.localize('tabFocusModeOffMsg', "Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}."); const NLS_TAB_FOCUS_MODE_OFF_NO_KB = nls.localize('tabFocusModeOffMsgNoKb', "Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding."); - if (opts.tabFocusMode) { + if (options.get(EditorOptionId.tabFocusMode)) { text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, NLS_TAB_FOCUS_MODE_ON, NLS_TAB_FOCUS_MODE_ON_NO_KB); } else { text += '\n\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, NLS_TAB_FOCUS_MODE_OFF, NLS_TAB_FOCUS_MODE_OFF_NO_KB); diff --git a/src/vs/workbench/contrib/codeEditor/browser/selectionClipboard.ts b/src/vs/workbench/contrib/codeEditor/browser/selectionClipboard.ts index 18aa8e4965e..da10b808d17 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/selectionClipboard.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/selectionClipboard.ts @@ -9,7 +9,7 @@ import * as process from 'vs/base/common/process'; import * as platform from 'vs/base/common/platform'; import { ICodeEditor, IEditorMouseEvent, MouseTargetType } from 'vs/editor/browser/editorBrowser'; import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; -import { IConfigurationChangedEvent, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { IConfigurationChangedEvent, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { ICursorSelectionChangedEvent } from 'vs/editor/common/controller/cursorEvents'; import { Range } from 'vs/editor/common/core/range'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -24,11 +24,11 @@ export class SelectionClipboard extends Disposable implements IEditorContributio super(); if (platform.isLinux) { - let isEnabled = editor.getOption(EditorOptionId.selectionClipboard); + let isEnabled = editor.getOption(EditorOptionId.selectionClipboard); this._register(editor.onDidChangeConfiguration((e: IConfigurationChangedEvent) => { if (e.hasChanged(EditorOptionId.selectionClipboard)) { - isEnabled = editor.getOption(EditorOptionId.selectionClipboard); + isEnabled = editor.getOption(EditorOptionId.selectionClipboard); } })); diff --git a/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts b/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts index e8472a05fe6..8d22a06dcba 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.ts @@ -10,7 +10,7 @@ import { URI } from 'vs/base/common/uri'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { EditorAction, ServicesAccessor, registerEditorAction, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; -import { EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId, EditorOption } from 'vs/editor/common/config/editorOptions'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { ITextModel } from 'vs/editor/common/model'; import { ITextResourceConfigurationService } from 'vs/editor/common/services/resourceConfiguration'; @@ -85,7 +85,7 @@ function toggleWordWrap(editor: ICodeEditor, state: IWordWrapState): IWordWrapSt let transientState: IWordWrapTransientState; - const actualWrappingInfo = editor.getOption(EditorOptionId.wrappingInfo); + const actualWrappingInfo = editor.getOption(EditorOptionId.wrappingInfo); if (actualWrappingInfo.isWordWrapMinified) { // => wrapping due to minified file transientState = { @@ -138,7 +138,7 @@ class ToggleWordWrapAction extends EditorAction { if (!editor.hasModel()) { return; } - if (editor.getOption(EditorOptionId.inDiffEditor)) { + if (editor.getOption(EditorOptionId.inDiffEditor)) { // Cannot change wrapping settings inside the diff editor const notificationService = accessor.get(INotificationService); notificationService.info(nls.localize('wordWrap.notInDiffEditor', "Cannot toggle word wrap in a diff editor.")); @@ -176,10 +176,10 @@ class ToggleWordWrapController extends Disposable implements IEditorContribution super(); const options = this.editor.getOptions(); - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); const isWordWrapMinified = this.contextKeyService.createKey(isWordWrapMinifiedKey, wrappingInfo.isWordWrapMinified); const isDominatedByLongLines = this.contextKeyService.createKey(isDominatedByLongLinesKey, wrappingInfo.isDominatedByLongLines); - const inDiffEditor = this.contextKeyService.createKey(inDiffEditorKey, options.get(EditorOptionId.inDiffEditor)); + const inDiffEditor = this.contextKeyService.createKey(inDiffEditorKey, options.get(EditorOptionId.inDiffEditor)); let currentlyApplyingEditorConfig = false; this._register(editor.onDidChangeConfiguration((e) => { @@ -187,10 +187,10 @@ class ToggleWordWrapController extends Disposable implements IEditorContribution return; } const options = this.editor.getOptions(); - const wrappingInfo = options.get(EditorOptionId.wrappingInfo); + const wrappingInfo = options.get(EditorOptionId.wrappingInfo); isWordWrapMinified.set(wrappingInfo.isWordWrapMinified); isDominatedByLongLines.set(wrappingInfo.isDominatedByLongLines); - inDiffEditor.set(options.get(EditorOptionId.inDiffEditor)); + inDiffEditor.set(options.get(EditorOptionId.inDiffEditor)); if (!currentlyApplyingEditorConfig) { // I am not the cause of the word wrap getting changed ensureWordWrapSettings(); @@ -216,7 +216,7 @@ class ToggleWordWrapController extends Disposable implements IEditorContribution return; } - if (this.editor.getOption(EditorOptionId.inDiffEditor)) { + if (this.editor.getOption(EditorOptionId.inDiffEditor)) { return; } diff --git a/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts b/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts index 94a1a359481..52068f454fc 100644 --- a/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts +++ b/src/vs/workbench/contrib/comments/browser/commentsEditorContribution.ts @@ -37,7 +37,7 @@ import { COMMENTEDITOR_DECORATION_KEY, ReviewZoneWidget } from 'vs/workbench/con import { ctxCommentEditorFocused, SimpleCommentEditor } from 'vs/workbench/contrib/comments/browser/simpleCommentEditor'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { EmbeddedCodeEditorWidget } from 'vs/editor/browser/widget/embeddedCodeEditorWidget'; -import { EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export const ID = 'editor.contrib.review'; @@ -603,7 +603,7 @@ export class ReviewController implements IEditorContribution { } const options = this.editor.getOptions(); - if (options.get(EditorOptionId.folding)) { + if (options.get(EditorOptionId.folding)) { lineDecorationsWidth -= 16; } lineDecorationsWidth += 9; diff --git a/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts b/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts index 2074a14ab74..d0d7906907c 100644 --- a/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts +++ b/src/vs/workbench/contrib/debug/browser/debugEditorContribution.ts @@ -41,7 +41,7 @@ import { ContextSubMenu } from 'vs/base/browser/contextmenu'; import { memoize } from 'vs/base/common/decorators'; import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { getHover } from 'vs/editor/contrib/hover/getHover'; -import { IEditorHoverOptions } from 'vs/editor/common/config/editorOptions'; +import { IEditorHoverOptions, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { CancellationToken } from 'vs/base/common/cancellation'; import { BreakpointWidget } from 'vs/workbench/contrib/debug/browser/breakpointWidget'; import { DebugHoverWidget } from 'vs/workbench/contrib/debug/browser/debugHover'; @@ -540,7 +540,7 @@ export class DebugEditorContribution implements IDebugEditorContribution { if (this.configurationWidget) { this.configurationWidget.dispose(); } - if (model && LAUNCH_JSON_REGEX.test(model.uri.toString()) && !this.editor.getConfiguration().readOnly) { + if (model && LAUNCH_JSON_REGEX.test(model.uri.toString()) && !this.editor.getOption(EditorOptionId.readOnly)) { this.configurationWidget = this.instantiationService.createInstance(FloatingClickWidget, this.editor, nls.localize('addConfiguration', "Add Configuration..."), null); this.configurationWidget.render(); this.toDispose.push(this.configurationWidget.onClick(() => this.addLaunchConfiguration())); diff --git a/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts b/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts index d9b7e38db91..f3e4b3ca255 100644 --- a/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts +++ b/src/vs/workbench/contrib/preferences/browser/keybindingsEditorContribution.ts @@ -30,6 +30,7 @@ import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegis import { KeybindingParser } from 'vs/base/common/keybindingParser'; import Severity from 'vs/base/common/severity'; import { SeverityIcon } from 'vs/platform/severityIcon/common/severityIcon'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; const NLS_LAUNCH_MESSAGE = nls.localize('defineKeybinding.start', "Define Keybinding"); const NLS_KB_LAYOUT_ERROR_MESSAGE = nls.localize('defineKeybinding.kbLayoutErrorMessage', "You won't be able to produce this key combination under your current keyboard layout."); @@ -82,7 +83,7 @@ export class DefineKeybindingController extends Disposable implements editorComm this._createKeybindingDecorationRenderer(); // The button to define keybindings is shown only for the user keybindings.json - if (!this._editor.getConfiguration().readOnly) { + if (!this._editor.getOption(EditorOptionId.readOnly)) { this._createKeybindingWidgetRenderer(); } else { this._disposeKeybindingWidgetRenderer(); @@ -377,7 +378,7 @@ class DefineKeybindingCommand extends EditorCommand { } runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor): void { - if (!isInterestingEditorModel(editor) || editor.getConfiguration().readOnly) { + if (!isInterestingEditorModel(editor) || editor.getOption(EditorOptionId.readOnly)) { return; } const controller = DefineKeybindingController.get(editor); diff --git a/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts b/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts index 6b738378609..6f4eb6a5551 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferencesWidgets.ts @@ -33,7 +33,7 @@ import { IWorkspaceContextService, IWorkspaceFolder, WorkbenchState } from 'vs/p import { PANEL_ACTIVE_TITLE_BORDER, PANEL_ACTIVE_TITLE_FOREGROUND, PANEL_INACTIVE_TITLE_FOREGROUND } from 'vs/workbench/common/theme'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { ISettingsGroup } from 'vs/workbench/services/preferences/common/preferences'; -import { EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; export class SettingsHeaderWidget extends Widget implements IViewZone { @@ -88,7 +88,7 @@ export class SettingsHeaderWidget extends Widget implements IViewZone { const configuration = this.editor.getConfiguration(); const options = this.editor.getOptions(); this.titleContainer.style.fontSize = configuration.fontInfo.fontSize + 'px'; - if (!options.get(EditorOptionId.folding)) { + if (!options.get(EditorOptionId.folding)) { this.titleContainer.style.paddingLeft = '6px'; } } diff --git a/src/vs/workbench/contrib/quickopen/browser/gotoLineHandler.ts b/src/vs/workbench/contrib/quickopen/browser/gotoLineHandler.ts index eaafa00f21b..418aafc0130 100644 --- a/src/vs/workbench/contrib/quickopen/browser/gotoLineHandler.ts +++ b/src/vs/workbench/contrib/quickopen/browser/gotoLineHandler.ts @@ -16,7 +16,7 @@ import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen'; import { IRange } from 'vs/editor/common/core/range'; import { overviewRulerRangeHighlight } from 'vs/editor/common/view/editorColorRegistry'; import { themeColorFromId } from 'vs/platform/theme/common/themeService'; -import { IEditorOptions, RenderLineNumbersType, EditorOption, EditorOptionId } from 'vs/editor/common/config/editorOptions'; +import { IEditorOptions, RenderLineNumbersType, EditorOptionId } from 'vs/editor/common/config/editorOptions'; import { IEditorService, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; import { isCodeEditor, isDiffEditor } from 'vs/editor/browser/editorBrowser'; import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService'; @@ -51,7 +51,7 @@ export class GotoLineAction extends QuickOpenAction { if (isCodeEditor(activeTextEditorWidget)) { const options = activeTextEditorWidget.getOptions(); - const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); + const renderLineNumbers = options.get(EditorOptionId.renderLineNumbers); if (renderLineNumbers.renderType === RenderLineNumbersType.Relative) { activeTextEditorWidget.updateOptions({ lineNumbers: 'on' diff --git a/src/vs/workbench/services/bulkEdit/browser/bulkEditService.ts b/src/vs/workbench/services/bulkEdit/browser/bulkEditService.ts index fff264d6463..4571d5e6ef8 100644 --- a/src/vs/workbench/services/bulkEdit/browser/bulkEditService.ts +++ b/src/vs/workbench/services/bulkEdit/browser/bulkEditService.ts @@ -23,6 +23,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { ILabelService } from 'vs/platform/label/common/label'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { EditorOptionId } from 'vs/editor/common/config/editorOptions'; abstract class Recording { @@ -414,7 +415,7 @@ export class BulkEditService implements IBulkEditService { } } - if (codeEditor && codeEditor.getConfiguration().readOnly) { + if (codeEditor && codeEditor.getOption(EditorOptionId.readOnly)) { // If the code editor is readonly still allow bulk edits to be applied #68549 codeEditor = undefined; }