monaco-editor-core 0.56.0-dev-20251226 → 0.56.0-dev-20251228

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/esm/nls.messages.cs.js +1 -1
  2. package/esm/nls.messages.de.js +1 -1
  3. package/esm/nls.messages.es.js +1 -1
  4. package/esm/nls.messages.fr.js +1 -1
  5. package/esm/nls.messages.it.js +1 -1
  6. package/esm/nls.messages.ja.js +1 -1
  7. package/esm/nls.messages.ko.js +1 -1
  8. package/esm/nls.messages.pl.js +1 -1
  9. package/esm/nls.messages.pt-br.js +1 -1
  10. package/esm/nls.messages.ru.js +1 -1
  11. package/esm/nls.messages.tr.js +1 -1
  12. package/esm/nls.messages.zh-cn.js +1 -1
  13. package/esm/nls.messages.zh-tw.js +1 -1
  14. package/esm/vs/base/browser/ui/toolbar/toolbar.js +3 -0
  15. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  16. package/esm/vs/editor/common/core/range.js +3 -0
  17. package/esm/vs/editor/common/core/range.js.map +1 -1
  18. package/esm/vs/editor/common/model/indentationGuesser.js +5 -5
  19. package/esm/vs/editor/common/model/indentationGuesser.js.map +1 -1
  20. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +3 -3
  21. package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
  22. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +87 -92
  23. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
  24. package/esm/vs/editor/editor.api.d.ts +3 -0
  25. package/esm/vs/platform/quickinput/browser/media/quickInput.css +5 -5
  26. package/esm/vs/platform/quickinput/browser/quickInput.js +7 -13
  27. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  28. package/esm/vs/platform/quickinput/browser/quickInputController.js +35 -20
  29. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  30. package/esm/vs/platform/quickinput/browser/quickInputList.js +34 -21
  31. package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
  32. package/esm/vs/platform/quickinput/browser/quickInputUtils.js +24 -3
  33. package/esm/vs/platform/quickinput/browser/quickInputUtils.js.map +1 -1
  34. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js +16 -9
  35. package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js.map +1 -1
  36. package/esm/vs/platform/quickinput/common/quickInput.js.map +1 -1
  37. package/monaco.d.ts +3 -0
  38. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * Version: 0.56.0-dev-20251226(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
3
+ * Version: 0.56.0-dev-20251228(ec78a33c7b34dba19e9d3cbe1b3b378465bbd8b8)
4
4
  * Released under the MIT license
5
5
  * https://github.com/microsoft/vscode/blob/main/LICENSE.txt
6
6
  *-----------------------------------------------------------*/
@@ -115,6 +115,9 @@ export class ToolBar extends Disposable {
115
115
  getItemWidth(index) {
116
116
  return this.actionBar.getWidth(index);
117
117
  }
118
+ getItemsLength() {
119
+ return this.actionBar.length();
120
+ }
118
121
  setActions(primaryActions, secondaryActions) {
119
122
  this.clear();
120
123
  // Store primary and secondary actions as rendered initially
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/base/browser/ui/toolbar/toolbar.ts"],"names":[],"mappings":"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","file":"toolbar.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IContextMenuProvider } from '../../contextmenu.js';\nimport { ActionBar, ActionsOrientation, IActionViewItemProvider } from '../actionbar/actionbar.js';\nimport { AnchorAlignment } from '../contextview/contextview.js';\nimport { DropdownMenuActionViewItem } from '../dropdown/dropdownActionViewItem.js';\nimport { Action, IAction, IActionRunner, Separator, SubmenuAction } from '../../../common/actions.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { EventMultiplexer } from '../../../common/event.js';\nimport { ResolvedKeybinding } from '../../../common/keybindings.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport './toolbar.css';\nimport * as nls from '../../../../nls.js';\nimport { IHoverDelegate } from '../hover/hoverDelegate.js';\nimport { createInstantHoverDelegate } from '../hover/hoverDelegateFactory.js';\n\nconst ACTION_MIN_WIDTH = 24; /* 20px codicon + 4px left padding*/\n\nexport interface IToolBarOptions {\n\torientation?: ActionsOrientation;\n\tactionViewItemProvider?: IActionViewItemProvider;\n\tariaLabel?: string;\n\tgetKeyBinding?: (action: IAction) => ResolvedKeybinding | undefined;\n\tactionRunner?: IActionRunner;\n\ttoggleMenuTitle?: string;\n\tanchorAlignmentProvider?: () => AnchorAlignment;\n\trenderDropdownAsChildElement?: boolean;\n\tmoreIcon?: ThemeIcon;\n\tallowContextMenu?: boolean;\n\tskipTelemetry?: boolean;\n\thoverDelegate?: IHoverDelegate;\n\ttrailingSeparator?: boolean;\n\n\t/**\n\t * If true, toggled primary items are highlighted with a background color.\n\t */\n\thighlightToggledItems?: boolean;\n\n\t/**\n\t * Render action with icons (default: `true`)\n\t */\n\ticon?: boolean;\n\n\t/**\n\t * Render action with label (default: `false`)\n\t */\n\tlabel?: boolean;\n\n\t/**\n\t * Controls the responsive behavior of the primary group of the toolbar.\n\t * - `enabled`: Whether the responsive behavior is enabled.\n\t * - `minItems`: The minimum number of items that should always be visible.\n\t */\n\tresponsiveBehavior?: { enabled: boolean; minItems?: number };\n}\n\n/**\n * A widget that combines an action bar for primary actions and a dropdown for secondary actions.\n */\nexport class ToolBar extends Disposable {\n\tprivate options: IToolBarOptions;\n\tprotected readonly actionBar: ActionBar;\n\tprivate toggleMenuAction: ToggleMenuAction;\n\tprivate toggleMenuActionViewItem: DropdownMenuActionViewItem | undefined;\n\tprivate submenuActionViewItems: DropdownMenuActionViewItem[] = [];\n\tprivate hasSecondaryActions: boolean = false;\n\tprivate readonly element: HTMLElement;\n\n\tprivate _onDidChangeDropdownVisibility = this._register(new EventMultiplexer<boolean>());\n\tget onDidChangeDropdownVisibility() { return this._onDidChangeDropdownVisibility.event; }\n\tprivate originalPrimaryActions: ReadonlyArray<IAction> = [];\n\tprivate originalSecondaryActions: ReadonlyArray<IAction> = [];\n\tprivate hiddenActions: { action: IAction; size: number }[] = [];\n\tprivate readonly disposables = this._register(new DisposableStore());\n\n\tconstructor(private readonly container: HTMLElement, contextMenuProvider: IContextMenuProvider, options: IToolBarOptions = { orientation: ActionsOrientation.HORIZONTAL }) {\n\t\tsuper();\n\n\t\toptions.hoverDelegate = options.hoverDelegate ?? this._register(createInstantHoverDelegate());\n\t\tthis.options = options;\n\n\t\tthis.toggleMenuAction = this._register(new ToggleMenuAction(() => this.toggleMenuActionViewItem?.show(), options.toggleMenuTitle));\n\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = 'monaco-toolbar';\n\t\tcontainer.appendChild(this.element);\n\n\t\tthis.actionBar = this._register(new ActionBar(this.element, {\n\t\t\torientation: options.orientation,\n\t\t\tariaLabel: options.ariaLabel,\n\t\t\tactionRunner: options.actionRunner,\n\t\t\tallowContextMenu: options.allowContextMenu,\n\t\t\thighlightToggledItems: options.highlightToggledItems,\n\t\t\thoverDelegate: options.hoverDelegate,\n\t\t\tactionViewItemProvider: (action, viewItemOptions) => {\n\t\t\t\tif (action.id === ToggleMenuAction.ID) {\n\t\t\t\t\tthis.toggleMenuActionViewItem = new DropdownMenuActionViewItem(\n\t\t\t\t\t\taction,\n\t\t\t\t\t\t{ getActions: () => this.toggleMenuAction.menuActions },\n\t\t\t\t\t\tcontextMenuProvider,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tactionViewItemProvider: this.options.actionViewItemProvider,\n\t\t\t\t\t\t\tactionRunner: this.actionRunner,\n\t\t\t\t\t\t\tkeybindingProvider: this.options.getKeyBinding,\n\t\t\t\t\t\t\tclassNames: ThemeIcon.asClassNameArray(options.moreIcon ?? Codicon.toolBarMore),\n\t\t\t\t\t\t\tanchorAlignmentProvider: this.options.anchorAlignmentProvider,\n\t\t\t\t\t\t\tmenuAsChild: !!this.options.renderDropdownAsChildElement,\n\t\t\t\t\t\t\tskipTelemetry: this.options.skipTelemetry,\n\t\t\t\t\t\t\tisMenu: true,\n\t\t\t\t\t\t\thoverDelegate: this.options.hoverDelegate\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tthis.toggleMenuActionViewItem.setActionContext(this.actionBar.context);\n\t\t\t\t\tthis.disposables.add(this._onDidChangeDropdownVisibility.add(this.toggleMenuActionViewItem.onDidChangeVisibility));\n\n\t\t\t\t\treturn this.toggleMenuActionViewItem;\n\t\t\t\t}\n\n\t\t\t\tif (options.actionViewItemProvider) {\n\t\t\t\t\tconst result = options.actionViewItemProvider(action, viewItemOptions);\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (action instanceof SubmenuAction) {\n\t\t\t\t\tconst result = new DropdownMenuActionViewItem(\n\t\t\t\t\t\taction,\n\t\t\t\t\t\taction.actions,\n\t\t\t\t\t\tcontextMenuProvider,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tactionViewItemProvider: this.options.actionViewItemProvider,\n\t\t\t\t\t\t\tactionRunner: this.actionRunner,\n\t\t\t\t\t\t\tkeybindingProvider: this.options.getKeyBinding,\n\t\t\t\t\t\t\tclassNames: action.class,\n\t\t\t\t\t\t\tanchorAlignmentProvider: this.options.anchorAlignmentProvider,\n\t\t\t\t\t\t\tmenuAsChild: !!this.options.renderDropdownAsChildElement,\n\t\t\t\t\t\t\tskipTelemetry: this.options.skipTelemetry,\n\t\t\t\t\t\t\thoverDelegate: this.options.hoverDelegate\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tresult.setActionContext(this.actionBar.context);\n\t\t\t\t\tthis.submenuActionViewItems.push(result);\n\t\t\t\t\tthis.disposables.add(this._onDidChangeDropdownVisibility.add(result.onDidChangeVisibility));\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}));\n\n\t\t// Responsive support\n\t\tif (this.options.responsiveBehavior?.enabled) {\n\t\t\tthis.element.classList.add('responsive');\n\n\t\t\tconst observer = new ResizeObserver(() => {\n\t\t\t\tthis.updateActions(this.element.getBoundingClientRect().width);\n\t\t\t});\n\t\t\tobserver.observe(this.element);\n\t\t\tthis._store.add(toDisposable(() => observer.disconnect()));\n\t\t}\n\t}\n\n\tset actionRunner(actionRunner: IActionRunner) {\n\t\tthis.actionBar.actionRunner = actionRunner;\n\t}\n\n\tget actionRunner(): IActionRunner {\n\t\treturn this.actionBar.actionRunner;\n\t}\n\n\tset context(context: unknown) {\n\t\tthis.actionBar.context = context;\n\t\tthis.toggleMenuActionViewItem?.setActionContext(context);\n\t\tfor (const actionViewItem of this.submenuActionViewItems) {\n\t\t\tactionViewItem.setActionContext(context);\n\t\t}\n\t}\n\n\tgetElement(): HTMLElement {\n\t\treturn this.element;\n\t}\n\n\tgetItemAction(indexOrElement: number | HTMLElement) {\n\t\treturn this.actionBar.getAction(indexOrElement);\n\t}\n\n\tgetItemWidth(index: number): number {\n\t\treturn this.actionBar.getWidth(index);\n\t}\n\n\tsetActions(primaryActions: ReadonlyArray<IAction>, secondaryActions?: ReadonlyArray<IAction>): void {\n\t\tthis.clear();\n\n\t\t// Store primary and secondary actions as rendered initially\n\t\tthis.originalPrimaryActions = primaryActions ? primaryActions.slice(0) : [];\n\t\tthis.originalSecondaryActions = secondaryActions ? secondaryActions.slice(0) : [];\n\n\t\tconst primaryActionsToSet = primaryActions ? primaryActions.slice(0) : [];\n\n\t\t// Inject additional action to open secondary actions if present\n\t\tthis.hasSecondaryActions = !!(secondaryActions && secondaryActions.length > 0);\n\t\tif (this.hasSecondaryActions && secondaryActions) {\n\t\t\tthis.toggleMenuAction.menuActions = secondaryActions.slice(0);\n\t\t\tprimaryActionsToSet.push(this.toggleMenuAction);\n\t\t}\n\n\t\tif (primaryActionsToSet.length > 0 && this.options.trailingSeparator) {\n\t\t\tprimaryActionsToSet.push(new Separator());\n\t\t}\n\n\t\tprimaryActionsToSet.forEach(action => {\n\t\t\tthis.actionBar.push(action, { icon: this.options.icon ?? true, label: this.options.label ?? false, keybinding: this.getKeybindingLabel(action) });\n\t\t});\n\n\t\tif (this.options.responsiveBehavior?.enabled) {\n\t\t\t// Reset hidden actions\n\t\t\tthis.hiddenActions.length = 0;\n\n\t\t\t// Set the minimum width\n\t\t\tif (this.options.responsiveBehavior?.minItems !== undefined) {\n\t\t\t\tlet itemCount = this.options.responsiveBehavior.minItems;\n\n\t\t\t\t// Account for overflow menu\n\t\t\t\tif (\n\t\t\t\t\tthis.originalSecondaryActions.length > 0 ||\n\t\t\t\t\titemCount < this.originalPrimaryActions.length\n\t\t\t\t) {\n\t\t\t\t\titemCount += 1;\n\t\t\t\t}\n\n\t\t\t\tthis.container.style.minWidth = `${itemCount * ACTION_MIN_WIDTH}px`;\n\t\t\t\tthis.element.style.minWidth = `${itemCount * ACTION_MIN_WIDTH}px`;\n\t\t\t} else {\n\t\t\t\tthis.container.style.minWidth = `${ACTION_MIN_WIDTH}px`;\n\t\t\t\tthis.element.style.minWidth = `${ACTION_MIN_WIDTH}px`;\n\t\t\t}\n\n\t\t\t// Update toolbar actions to fit with container width\n\t\t\tthis.updateActions(this.element.getBoundingClientRect().width);\n\t\t}\n\t}\n\n\tprivate getKeybindingLabel(action: IAction): string | undefined {\n\t\tconst key = this.options.getKeyBinding?.(action);\n\n\t\treturn key?.getLabel() ?? undefined;\n\t}\n\n\tprivate updateActions(containerWidth: number) {\n\t\t// Actions bar is empty\n\t\tif (this.actionBar.isEmpty()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ensure that the container width respects the minimum width of the\n\t\t// element which is set based on the `responsiveBehavior.minItems` option\n\t\tcontainerWidth = Math.max(containerWidth, parseInt(this.element.style.minWidth));\n\n\t\t// Each action is assumed to have a minimum width so that actions with a label\n\t\t// can shrink to the action's minimum width. We do this so that action visibility\n\t\t// takes precedence over the action label.\n\t\tconst actionBarWidth = () => this.actionBar.length() * ACTION_MIN_WIDTH;\n\n\t\t// Action bar fits and there are no hidden actions to show\n\t\tif (actionBarWidth() <= containerWidth && this.hiddenActions.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (actionBarWidth() > containerWidth) {\n\t\t\t// Check for max items limit\n\t\t\tif (this.options.responsiveBehavior?.minItems !== undefined) {\n\t\t\t\tconst primaryActionsCount = this.actionBar.hasAction(this.toggleMenuAction)\n\t\t\t\t\t? this.actionBar.length() - 1\n\t\t\t\t\t: this.actionBar.length();\n\n\t\t\t\tif (primaryActionsCount <= this.options.responsiveBehavior.minItems) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hide actions from the right\n\t\t\twhile (actionBarWidth() > containerWidth && this.actionBar.length() > 0) {\n\t\t\t\tconst index = this.originalPrimaryActions.length - this.hiddenActions.length - 1;\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Store the action and its size\n\t\t\t\tconst size = Math.min(ACTION_MIN_WIDTH, this.getItemWidth(index));\n\t\t\t\tconst action = this.originalPrimaryActions[index];\n\t\t\t\tthis.hiddenActions.unshift({ action, size });\n\n\t\t\t\t// Remove the action\n\t\t\t\tthis.actionBar.pull(index);\n\n\t\t\t\t// There are no secondary actions, but we have actions that we need to hide so we\n\t\t\t\t// create the overflow menu. This will ensure that another primary action will be\n\t\t\t\t// removed making space for the overflow menu.\n\t\t\t\tif (this.originalSecondaryActions.length === 0 && this.hiddenActions.length === 1) {\n\t\t\t\t\tthis.actionBar.push(this.toggleMenuAction, {\n\t\t\t\t\t\ticon: this.options.icon ?? true,\n\t\t\t\t\t\tlabel: this.options.label ?? false,\n\t\t\t\t\t\tkeybinding: this.getKeybindingLabel(this.toggleMenuAction),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Show actions from the top of the toggle menu\n\t\t\twhile (this.hiddenActions.length > 0) {\n\t\t\t\tconst entry = this.hiddenActions.shift()!;\n\t\t\t\tif (actionBarWidth() + entry.size > containerWidth) {\n\t\t\t\t\t// Not enough space to show the action\n\t\t\t\t\tthis.hiddenActions.unshift(entry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Add the action\n\t\t\t\tthis.actionBar.push(entry.action, {\n\t\t\t\t\ticon: this.options.icon ?? true,\n\t\t\t\t\tlabel: this.options.label ?? false,\n\t\t\t\t\tkeybinding: this.getKeybindingLabel(entry.action),\n\t\t\t\t\tindex: this.originalPrimaryActions.length - this.hiddenActions.length - 1\n\t\t\t\t});\n\n\t\t\t\t// There are no secondary actions, and there is only one hidden item left so we\n\t\t\t\t// remove the overflow menu making space for the last hidden action to be shown.\n\t\t\t\tif (this.originalSecondaryActions.length === 0 && this.hiddenActions.length === 1) {\n\t\t\t\t\tthis.toggleMenuAction.menuActions = [];\n\t\t\t\t\tthis.actionBar.pull(this.actionBar.length() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update overflow menu\n\t\tconst hiddenActions = this.hiddenActions.map(entry => entry.action);\n\t\tif (this.originalSecondaryActions.length > 0 || hiddenActions.length > 0) {\n\t\t\tconst secondaryActions = this.originalSecondaryActions.slice(0);\n\t\t\tthis.toggleMenuAction.menuActions = Separator.join(hiddenActions, secondaryActions);\n\t\t}\n\t}\n\n\tprivate clear(): void {\n\t\tthis.submenuActionViewItems = [];\n\t\tthis.disposables.clear();\n\t\tthis.actionBar.clear();\n\t}\n\n\toverride dispose(): void {\n\t\tthis.clear();\n\t\tthis.disposables.dispose();\n\t\tsuper.dispose();\n\t}\n}\n\nexport class ToggleMenuAction extends Action {\n\n\tstatic readonly ID = 'toolbar.toggle.more';\n\n\tprivate _menuActions: ReadonlyArray<IAction>;\n\tprivate toggleDropdownMenu: () => void;\n\n\tconstructor(toggleDropdownMenu: () => void, title?: string) {\n\t\ttitle = title || nls.localize('moreActions', \"More Actions...\");\n\t\tsuper(ToggleMenuAction.ID, title, undefined, true);\n\n\t\tthis._menuActions = [];\n\t\tthis.toggleDropdownMenu = toggleDropdownMenu;\n\t}\n\n\toverride async run(): Promise<void> {\n\t\tthis.toggleDropdownMenu();\n\t}\n\n\tget menuActions(): ReadonlyArray<IAction> {\n\t\treturn this._menuActions;\n\t}\n\n\tset menuActions(actions: ReadonlyArray<IAction>) {\n\t\tthis._menuActions = actions;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["vs/base/browser/ui/toolbar/toolbar.ts"],"names":[],"mappings":"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","file":"toolbar.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IContextMenuProvider } from '../../contextmenu.js';\nimport { ActionBar, ActionsOrientation, IActionViewItemProvider } from '../actionbar/actionbar.js';\nimport { AnchorAlignment } from '../contextview/contextview.js';\nimport { DropdownMenuActionViewItem } from '../dropdown/dropdownActionViewItem.js';\nimport { Action, IAction, IActionRunner, Separator, SubmenuAction } from '../../../common/actions.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { EventMultiplexer } from '../../../common/event.js';\nimport { ResolvedKeybinding } from '../../../common/keybindings.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport './toolbar.css';\nimport * as nls from '../../../../nls.js';\nimport { IHoverDelegate } from '../hover/hoverDelegate.js';\nimport { createInstantHoverDelegate } from '../hover/hoverDelegateFactory.js';\n\nconst ACTION_MIN_WIDTH = 24; /* 20px codicon + 4px left padding*/\n\nexport interface IToolBarOptions {\n\torientation?: ActionsOrientation;\n\tactionViewItemProvider?: IActionViewItemProvider;\n\tariaLabel?: string;\n\tgetKeyBinding?: (action: IAction) => ResolvedKeybinding | undefined;\n\tactionRunner?: IActionRunner;\n\ttoggleMenuTitle?: string;\n\tanchorAlignmentProvider?: () => AnchorAlignment;\n\trenderDropdownAsChildElement?: boolean;\n\tmoreIcon?: ThemeIcon;\n\tallowContextMenu?: boolean;\n\tskipTelemetry?: boolean;\n\thoverDelegate?: IHoverDelegate;\n\ttrailingSeparator?: boolean;\n\n\t/**\n\t * If true, toggled primary items are highlighted with a background color.\n\t */\n\thighlightToggledItems?: boolean;\n\n\t/**\n\t * Render action with icons (default: `true`)\n\t */\n\ticon?: boolean;\n\n\t/**\n\t * Render action with label (default: `false`)\n\t */\n\tlabel?: boolean;\n\n\t/**\n\t * Controls the responsive behavior of the primary group of the toolbar.\n\t * - `enabled`: Whether the responsive behavior is enabled.\n\t * - `minItems`: The minimum number of items that should always be visible.\n\t */\n\tresponsiveBehavior?: { enabled: boolean; minItems?: number };\n}\n\n/**\n * A widget that combines an action bar for primary actions and a dropdown for secondary actions.\n */\nexport class ToolBar extends Disposable {\n\tprivate options: IToolBarOptions;\n\tprotected readonly actionBar: ActionBar;\n\tprivate toggleMenuAction: ToggleMenuAction;\n\tprivate toggleMenuActionViewItem: DropdownMenuActionViewItem | undefined;\n\tprivate submenuActionViewItems: DropdownMenuActionViewItem[] = [];\n\tprivate hasSecondaryActions: boolean = false;\n\tprivate readonly element: HTMLElement;\n\n\tprivate _onDidChangeDropdownVisibility = this._register(new EventMultiplexer<boolean>());\n\tget onDidChangeDropdownVisibility() { return this._onDidChangeDropdownVisibility.event; }\n\tprivate originalPrimaryActions: ReadonlyArray<IAction> = [];\n\tprivate originalSecondaryActions: ReadonlyArray<IAction> = [];\n\tprivate hiddenActions: { action: IAction; size: number }[] = [];\n\tprivate readonly disposables = this._register(new DisposableStore());\n\n\tconstructor(private readonly container: HTMLElement, contextMenuProvider: IContextMenuProvider, options: IToolBarOptions = { orientation: ActionsOrientation.HORIZONTAL }) {\n\t\tsuper();\n\n\t\toptions.hoverDelegate = options.hoverDelegate ?? this._register(createInstantHoverDelegate());\n\t\tthis.options = options;\n\n\t\tthis.toggleMenuAction = this._register(new ToggleMenuAction(() => this.toggleMenuActionViewItem?.show(), options.toggleMenuTitle));\n\n\t\tthis.element = document.createElement('div');\n\t\tthis.element.className = 'monaco-toolbar';\n\t\tcontainer.appendChild(this.element);\n\n\t\tthis.actionBar = this._register(new ActionBar(this.element, {\n\t\t\torientation: options.orientation,\n\t\t\tariaLabel: options.ariaLabel,\n\t\t\tactionRunner: options.actionRunner,\n\t\t\tallowContextMenu: options.allowContextMenu,\n\t\t\thighlightToggledItems: options.highlightToggledItems,\n\t\t\thoverDelegate: options.hoverDelegate,\n\t\t\tactionViewItemProvider: (action, viewItemOptions) => {\n\t\t\t\tif (action.id === ToggleMenuAction.ID) {\n\t\t\t\t\tthis.toggleMenuActionViewItem = new DropdownMenuActionViewItem(\n\t\t\t\t\t\taction,\n\t\t\t\t\t\t{ getActions: () => this.toggleMenuAction.menuActions },\n\t\t\t\t\t\tcontextMenuProvider,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tactionViewItemProvider: this.options.actionViewItemProvider,\n\t\t\t\t\t\t\tactionRunner: this.actionRunner,\n\t\t\t\t\t\t\tkeybindingProvider: this.options.getKeyBinding,\n\t\t\t\t\t\t\tclassNames: ThemeIcon.asClassNameArray(options.moreIcon ?? Codicon.toolBarMore),\n\t\t\t\t\t\t\tanchorAlignmentProvider: this.options.anchorAlignmentProvider,\n\t\t\t\t\t\t\tmenuAsChild: !!this.options.renderDropdownAsChildElement,\n\t\t\t\t\t\t\tskipTelemetry: this.options.skipTelemetry,\n\t\t\t\t\t\t\tisMenu: true,\n\t\t\t\t\t\t\thoverDelegate: this.options.hoverDelegate\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tthis.toggleMenuActionViewItem.setActionContext(this.actionBar.context);\n\t\t\t\t\tthis.disposables.add(this._onDidChangeDropdownVisibility.add(this.toggleMenuActionViewItem.onDidChangeVisibility));\n\n\t\t\t\t\treturn this.toggleMenuActionViewItem;\n\t\t\t\t}\n\n\t\t\t\tif (options.actionViewItemProvider) {\n\t\t\t\t\tconst result = options.actionViewItemProvider(action, viewItemOptions);\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (action instanceof SubmenuAction) {\n\t\t\t\t\tconst result = new DropdownMenuActionViewItem(\n\t\t\t\t\t\taction,\n\t\t\t\t\t\taction.actions,\n\t\t\t\t\t\tcontextMenuProvider,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tactionViewItemProvider: this.options.actionViewItemProvider,\n\t\t\t\t\t\t\tactionRunner: this.actionRunner,\n\t\t\t\t\t\t\tkeybindingProvider: this.options.getKeyBinding,\n\t\t\t\t\t\t\tclassNames: action.class,\n\t\t\t\t\t\t\tanchorAlignmentProvider: this.options.anchorAlignmentProvider,\n\t\t\t\t\t\t\tmenuAsChild: !!this.options.renderDropdownAsChildElement,\n\t\t\t\t\t\t\tskipTelemetry: this.options.skipTelemetry,\n\t\t\t\t\t\t\thoverDelegate: this.options.hoverDelegate\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tresult.setActionContext(this.actionBar.context);\n\t\t\t\t\tthis.submenuActionViewItems.push(result);\n\t\t\t\t\tthis.disposables.add(this._onDidChangeDropdownVisibility.add(result.onDidChangeVisibility));\n\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}));\n\n\t\t// Responsive support\n\t\tif (this.options.responsiveBehavior?.enabled) {\n\t\t\tthis.element.classList.add('responsive');\n\n\t\t\tconst observer = new ResizeObserver(() => {\n\t\t\t\tthis.updateActions(this.element.getBoundingClientRect().width);\n\t\t\t});\n\t\t\tobserver.observe(this.element);\n\t\t\tthis._store.add(toDisposable(() => observer.disconnect()));\n\t\t}\n\t}\n\n\tset actionRunner(actionRunner: IActionRunner) {\n\t\tthis.actionBar.actionRunner = actionRunner;\n\t}\n\n\tget actionRunner(): IActionRunner {\n\t\treturn this.actionBar.actionRunner;\n\t}\n\n\tset context(context: unknown) {\n\t\tthis.actionBar.context = context;\n\t\tthis.toggleMenuActionViewItem?.setActionContext(context);\n\t\tfor (const actionViewItem of this.submenuActionViewItems) {\n\t\t\tactionViewItem.setActionContext(context);\n\t\t}\n\t}\n\n\tgetElement(): HTMLElement {\n\t\treturn this.element;\n\t}\n\n\tgetItemAction(indexOrElement: number | HTMLElement) {\n\t\treturn this.actionBar.getAction(indexOrElement);\n\t}\n\n\tgetItemWidth(index: number): number {\n\t\treturn this.actionBar.getWidth(index);\n\t}\n\n\tgetItemsLength(): number {\n\t\treturn this.actionBar.length();\n\t}\n\n\tsetActions(primaryActions: ReadonlyArray<IAction>, secondaryActions?: ReadonlyArray<IAction>): void {\n\t\tthis.clear();\n\n\t\t// Store primary and secondary actions as rendered initially\n\t\tthis.originalPrimaryActions = primaryActions ? primaryActions.slice(0) : [];\n\t\tthis.originalSecondaryActions = secondaryActions ? secondaryActions.slice(0) : [];\n\n\t\tconst primaryActionsToSet = primaryActions ? primaryActions.slice(0) : [];\n\n\t\t// Inject additional action to open secondary actions if present\n\t\tthis.hasSecondaryActions = !!(secondaryActions && secondaryActions.length > 0);\n\t\tif (this.hasSecondaryActions && secondaryActions) {\n\t\t\tthis.toggleMenuAction.menuActions = secondaryActions.slice(0);\n\t\t\tprimaryActionsToSet.push(this.toggleMenuAction);\n\t\t}\n\n\t\tif (primaryActionsToSet.length > 0 && this.options.trailingSeparator) {\n\t\t\tprimaryActionsToSet.push(new Separator());\n\t\t}\n\n\t\tprimaryActionsToSet.forEach(action => {\n\t\t\tthis.actionBar.push(action, { icon: this.options.icon ?? true, label: this.options.label ?? false, keybinding: this.getKeybindingLabel(action) });\n\t\t});\n\n\t\tif (this.options.responsiveBehavior?.enabled) {\n\t\t\t// Reset hidden actions\n\t\t\tthis.hiddenActions.length = 0;\n\n\t\t\t// Set the minimum width\n\t\t\tif (this.options.responsiveBehavior?.minItems !== undefined) {\n\t\t\t\tlet itemCount = this.options.responsiveBehavior.minItems;\n\n\t\t\t\t// Account for overflow menu\n\t\t\t\tif (\n\t\t\t\t\tthis.originalSecondaryActions.length > 0 ||\n\t\t\t\t\titemCount < this.originalPrimaryActions.length\n\t\t\t\t) {\n\t\t\t\t\titemCount += 1;\n\t\t\t\t}\n\n\t\t\t\tthis.container.style.minWidth = `${itemCount * ACTION_MIN_WIDTH}px`;\n\t\t\t\tthis.element.style.minWidth = `${itemCount * ACTION_MIN_WIDTH}px`;\n\t\t\t} else {\n\t\t\t\tthis.container.style.minWidth = `${ACTION_MIN_WIDTH}px`;\n\t\t\t\tthis.element.style.minWidth = `${ACTION_MIN_WIDTH}px`;\n\t\t\t}\n\n\t\t\t// Update toolbar actions to fit with container width\n\t\t\tthis.updateActions(this.element.getBoundingClientRect().width);\n\t\t}\n\t}\n\n\tprivate getKeybindingLabel(action: IAction): string | undefined {\n\t\tconst key = this.options.getKeyBinding?.(action);\n\n\t\treturn key?.getLabel() ?? undefined;\n\t}\n\n\tprivate updateActions(containerWidth: number) {\n\t\t// Actions bar is empty\n\t\tif (this.actionBar.isEmpty()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ensure that the container width respects the minimum width of the\n\t\t// element which is set based on the `responsiveBehavior.minItems` option\n\t\tcontainerWidth = Math.max(containerWidth, parseInt(this.element.style.minWidth));\n\n\t\t// Each action is assumed to have a minimum width so that actions with a label\n\t\t// can shrink to the action's minimum width. We do this so that action visibility\n\t\t// takes precedence over the action label.\n\t\tconst actionBarWidth = () => this.actionBar.length() * ACTION_MIN_WIDTH;\n\n\t\t// Action bar fits and there are no hidden actions to show\n\t\tif (actionBarWidth() <= containerWidth && this.hiddenActions.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (actionBarWidth() > containerWidth) {\n\t\t\t// Check for max items limit\n\t\t\tif (this.options.responsiveBehavior?.minItems !== undefined) {\n\t\t\t\tconst primaryActionsCount = this.actionBar.hasAction(this.toggleMenuAction)\n\t\t\t\t\t? this.actionBar.length() - 1\n\t\t\t\t\t: this.actionBar.length();\n\n\t\t\t\tif (primaryActionsCount <= this.options.responsiveBehavior.minItems) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hide actions from the right\n\t\t\twhile (actionBarWidth() > containerWidth && this.actionBar.length() > 0) {\n\t\t\t\tconst index = this.originalPrimaryActions.length - this.hiddenActions.length - 1;\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Store the action and its size\n\t\t\t\tconst size = Math.min(ACTION_MIN_WIDTH, this.getItemWidth(index));\n\t\t\t\tconst action = this.originalPrimaryActions[index];\n\t\t\t\tthis.hiddenActions.unshift({ action, size });\n\n\t\t\t\t// Remove the action\n\t\t\t\tthis.actionBar.pull(index);\n\n\t\t\t\t// There are no secondary actions, but we have actions that we need to hide so we\n\t\t\t\t// create the overflow menu. This will ensure that another primary action will be\n\t\t\t\t// removed making space for the overflow menu.\n\t\t\t\tif (this.originalSecondaryActions.length === 0 && this.hiddenActions.length === 1) {\n\t\t\t\t\tthis.actionBar.push(this.toggleMenuAction, {\n\t\t\t\t\t\ticon: this.options.icon ?? true,\n\t\t\t\t\t\tlabel: this.options.label ?? false,\n\t\t\t\t\t\tkeybinding: this.getKeybindingLabel(this.toggleMenuAction),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Show actions from the top of the toggle menu\n\t\t\twhile (this.hiddenActions.length > 0) {\n\t\t\t\tconst entry = this.hiddenActions.shift()!;\n\t\t\t\tif (actionBarWidth() + entry.size > containerWidth) {\n\t\t\t\t\t// Not enough space to show the action\n\t\t\t\t\tthis.hiddenActions.unshift(entry);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Add the action\n\t\t\t\tthis.actionBar.push(entry.action, {\n\t\t\t\t\ticon: this.options.icon ?? true,\n\t\t\t\t\tlabel: this.options.label ?? false,\n\t\t\t\t\tkeybinding: this.getKeybindingLabel(entry.action),\n\t\t\t\t\tindex: this.originalPrimaryActions.length - this.hiddenActions.length - 1\n\t\t\t\t});\n\n\t\t\t\t// There are no secondary actions, and there is only one hidden item left so we\n\t\t\t\t// remove the overflow menu making space for the last hidden action to be shown.\n\t\t\t\tif (this.originalSecondaryActions.length === 0 && this.hiddenActions.length === 1) {\n\t\t\t\t\tthis.toggleMenuAction.menuActions = [];\n\t\t\t\t\tthis.actionBar.pull(this.actionBar.length() - 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update overflow menu\n\t\tconst hiddenActions = this.hiddenActions.map(entry => entry.action);\n\t\tif (this.originalSecondaryActions.length > 0 || hiddenActions.length > 0) {\n\t\t\tconst secondaryActions = this.originalSecondaryActions.slice(0);\n\t\t\tthis.toggleMenuAction.menuActions = Separator.join(hiddenActions, secondaryActions);\n\t\t}\n\t}\n\n\tprivate clear(): void {\n\t\tthis.submenuActionViewItems = [];\n\t\tthis.disposables.clear();\n\t\tthis.actionBar.clear();\n\t}\n\n\toverride dispose(): void {\n\t\tthis.clear();\n\t\tthis.disposables.dispose();\n\t\tsuper.dispose();\n\t}\n}\n\nexport class ToggleMenuAction extends Action {\n\n\tstatic readonly ID = 'toolbar.toggle.more';\n\n\tprivate _menuActions: ReadonlyArray<IAction>;\n\tprivate toggleDropdownMenu: () => void;\n\n\tconstructor(toggleDropdownMenu: () => void, title?: string) {\n\t\ttitle = title || nls.localize('moreActions', \"More Actions...\");\n\t\tsuper(ToggleMenuAction.ID, title, undefined, true);\n\n\t\tthis._menuActions = [];\n\t\tthis.toggleDropdownMenu = toggleDropdownMenu;\n\t}\n\n\toverride async run(): Promise<void> {\n\t\tthis.toggleDropdownMenu();\n\t}\n\n\tget menuActions(): ReadonlyArray<IAction> {\n\t\treturn this._menuActions;\n\t}\n\n\tset menuActions(actions: ReadonlyArray<IAction>) {\n\t\tthis._menuActions = actions;\n\t}\n}\n"]}
@@ -293,6 +293,9 @@ export class Range {
293
293
  delta(lineCount) {
294
294
  return new Range(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);
295
295
  }
296
+ /**
297
+ * Test if this range starts and ends on the same line.
298
+ */
296
299
  isSingleLine() {
297
300
  return this.startLineNumber === this.endLineNumber;
298
301
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/core/range.ts","vs/editor/common/core/range.ts"],"names":[],"mappings":"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","file":"range.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IPosition, Position } from './position.js';\n\n/**\n * A range in the editor. This interface is suitable for serialization.\n */\nexport interface IRange {\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\treadonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\treadonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\treadonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\treadonly endColumn: number;\n}\n\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\tpublic readonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\tpublic readonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\tpublic readonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tif ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n\t\t\tthis.startLineNumber = endLineNumber;\n\t\t\tthis.startColumn = endColumn;\n\t\t\tthis.endLineNumber = startLineNumber;\n\t\t\tthis.endColumn = startColumn;\n\t\t} else {\n\t\t\tthis.startLineNumber = startLineNumber;\n\t\t\tthis.startColumn = startColumn;\n\t\t\tthis.endLineNumber = endLineNumber;\n\t\t\tthis.endColumn = endColumn;\n\t\t}\n\t}\n\n\t/**\n\t * Test if this range is empty.\n\t */\n\tpublic isEmpty(): boolean {\n\t\treturn Range.isEmpty(this);\n\t}\n\n\t/**\n\t * Test if `range` is empty.\n\t */\n\tpublic static isEmpty(range: IRange): boolean {\n\t\treturn (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n\t}\n\n\t/**\n\t * Test if position is in this range. If the position is at the edges, will return true.\n\t */\n\tpublic containsPosition(position: IPosition): boolean {\n\t\treturn Range.containsPosition(this, position);\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return true.\n\t */\n\tpublic static containsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return false.\n\t * @internal\n\t */\n\tpublic static strictContainsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if range is in this range. If the range is equal to this range, will return true.\n\t */\n\tpublic containsRange(range: IRange): boolean {\n\t\treturn Range.containsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n\t */\n\tpublic static containsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n\t */\n\tpublic strictContainsRange(range: IRange): boolean {\n\t\treturn Range.strictContainsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n\t */\n\tpublic static strictContainsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic plusRange(range: IRange): Range {\n\t\treturn Range.plusRange(this, range);\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic static plusRange(a: IRange, b: IRange): Range {\n\t\tlet startLineNumber: number;\n\t\tlet startColumn: number;\n\t\tlet endLineNumber: number;\n\t\tlet endColumn: number;\n\n\t\tif (b.startLineNumber < a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = b.startColumn;\n\t\t} else if (b.startLineNumber === a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = Math.min(b.startColumn, a.startColumn);\n\t\t} else {\n\t\t\tstartLineNumber = a.startLineNumber;\n\t\t\tstartColumn = a.startColumn;\n\t\t}\n\n\t\tif (b.endLineNumber > a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = b.endColumn;\n\t\t} else if (b.endLineNumber === a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = Math.max(b.endColumn, a.endColumn);\n\t\t} else {\n\t\t\tendLineNumber = a.endLineNumber;\n\t\t\tendColumn = a.endColumn;\n\t\t}\n\n\t\treturn new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic intersectRanges(range: IRange): Range | null {\n\t\treturn Range.intersectRanges(this, range);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic static intersectRanges(a: IRange, b: IRange): Range | null {\n\t\tlet resultStartLineNumber = a.startLineNumber;\n\t\tlet resultStartColumn = a.startColumn;\n\t\tlet resultEndLineNumber = a.endLineNumber;\n\t\tlet resultEndColumn = a.endColumn;\n\t\tconst otherStartLineNumber = b.startLineNumber;\n\t\tconst otherStartColumn = b.startColumn;\n\t\tconst otherEndLineNumber = b.endLineNumber;\n\t\tconst otherEndColumn = b.endColumn;\n\n\t\tif (resultStartLineNumber < otherStartLineNumber) {\n\t\t\tresultStartLineNumber = otherStartLineNumber;\n\t\t\tresultStartColumn = otherStartColumn;\n\t\t} else if (resultStartLineNumber === otherStartLineNumber) {\n\t\t\tresultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n\t\t}\n\n\t\tif (resultEndLineNumber > otherEndLineNumber) {\n\t\t\tresultEndLineNumber = otherEndLineNumber;\n\t\t\tresultEndColumn = otherEndColumn;\n\t\t} else if (resultEndLineNumber === otherEndLineNumber) {\n\t\t\tresultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n\t\t}\n\n\t\t// Check if selection is now empty\n\t\tif (resultStartLineNumber > resultEndLineNumber) {\n\t\t\treturn null;\n\t\t}\n\t\tif (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n\t}\n\n\t/**\n\t * Test if this range equals other.\n\t */\n\tpublic equalsRange(other: IRange | null | undefined): boolean {\n\t\treturn Range.equalsRange(this, other);\n\t}\n\n\t/**\n\t * Test if range `a` equals `b`.\n\t */\n\tpublic static equalsRange(a: IRange | null | undefined, b: IRange | null | undefined): boolean {\n\t\tif (!a && !b) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (\n\t\t\t!!a &&\n\t\t\t!!b &&\n\t\t\ta.startLineNumber === b.startLineNumber &&\n\t\t\ta.startColumn === b.startColumn &&\n\t\t\ta.endLineNumber === b.endLineNumber &&\n\t\t\ta.endColumn === b.endColumn\n\t\t);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic getEndPosition(): Position {\n\t\treturn Range.getEndPosition(this);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic static getEndPosition(range: IRange): Position {\n\t\treturn new Position(range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic getStartPosition(): Position {\n\t\treturn Range.getStartPosition(this);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic static getStartPosition(range: IRange): Position {\n\t\treturn new Position(range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Transform to a user presentable string representation.\n\t */\n\tpublic toString(): string {\n\t\treturn '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n\t}\n\n\t/**\n\t * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n\t */\n\tpublic setEndPosition(endLineNumber: number, endColumn: number): Range {\n\t\treturn new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n\t */\n\tpublic setStartPosition(startLineNumber: number, startColumn: number): Range {\n\t\treturn new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic collapseToStart(): Range {\n\t\treturn Range.collapseToStart(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic static collapseToStart(range: IRange): Range {\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic collapseToEnd(): Range {\n\t\treturn Range.collapseToEnd(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic static collapseToEnd(range: IRange): Range {\n\t\treturn new Range(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Moves the range by the given amount of lines.\n\t */\n\tpublic delta(lineCount: number): Range {\n\t\treturn new Range(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);\n\t}\n\n\tpublic isSingleLine(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumber;\n\t}\n\n\t// ---\n\n\tpublic static fromPositions(start: IPosition, end: IPosition = start): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\t/**\n\t * Create a `Range` from an `IRange`.\n\t */\n\tpublic static lift(range: undefined | null): null;\n\tpublic static lift(range: IRange): Range;\n\tpublic static lift(range: IRange | undefined | null): Range | null;\n\tpublic static lift(range: IRange | undefined | null): Range | null {\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Test if `obj` is an `IRange`.\n\t */\n\tpublic static isIRange(obj: unknown): obj is IRange {\n\t\treturn (\n\t\t\t!!obj\n\t\t\t&& (typeof (obj as IRange).startLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).startColumn === 'number')\n\t\t\t&& (typeof (obj as IRange).endLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).endColumn === 'number')\n\t\t);\n\t}\n\n\t/**\n\t * Test if the two ranges are touching in any way.\n\t */\n\tpublic static areIntersectingOrTouching(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n\t */\n\tpublic static areIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting, but not touching at all.\n\t */\n\tpublic static areOnlyIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < (b.startLineNumber - 1) || (a.endLineNumber === b.startLineNumber && a.endColumn < (b.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < (a.startLineNumber - 1) || (b.endLineNumber === a.startLineNumber && b.endColumn < (a.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the startPosition and then on the endPosition\n\t */\n\tpublic static compareRangesUsingStarts(a: IRange | null | undefined, b: IRange | null | undefined): number {\n\t\tif (a && b) {\n\t\t\tconst aStartLineNumber = a.startLineNumber | 0;\n\t\t\tconst bStartLineNumber = b.startLineNumber | 0;\n\n\t\t\tif (aStartLineNumber === bStartLineNumber) {\n\t\t\t\tconst aStartColumn = a.startColumn | 0;\n\t\t\t\tconst bStartColumn = b.startColumn | 0;\n\n\t\t\t\tif (aStartColumn === bStartColumn) {\n\t\t\t\t\tconst aEndLineNumber = a.endLineNumber | 0;\n\t\t\t\t\tconst bEndLineNumber = b.endLineNumber | 0;\n\n\t\t\t\t\tif (aEndLineNumber === bEndLineNumber) {\n\t\t\t\t\t\tconst aEndColumn = a.endColumn | 0;\n\t\t\t\t\t\tconst bEndColumn = b.endColumn | 0;\n\t\t\t\t\t\treturn aEndColumn - bEndColumn;\n\t\t\t\t\t}\n\t\t\t\t\treturn aEndLineNumber - bEndLineNumber;\n\t\t\t\t}\n\t\t\t\treturn aStartColumn - bStartColumn;\n\t\t\t}\n\t\t\treturn aStartLineNumber - bStartLineNumber;\n\t\t}\n\t\tconst aExists = (a ? 1 : 0);\n\t\tconst bExists = (b ? 1 : 0);\n\t\treturn aExists - bExists;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the endPosition and then on the startPosition\n\t */\n\tpublic static compareRangesUsingEnds(a: IRange, b: IRange): number {\n\t\tif (a.endLineNumber === b.endLineNumber) {\n\t\t\tif (a.endColumn === b.endColumn) {\n\t\t\t\tif (a.startLineNumber === b.startLineNumber) {\n\t\t\t\t\treturn a.startColumn - b.startColumn;\n\t\t\t\t}\n\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t}\n\t\t\treturn a.endColumn - b.endColumn;\n\t\t}\n\t\treturn a.endLineNumber - b.endLineNumber;\n\t}\n\n\t/**\n\t * Test if the range spans multiple lines.\n\t */\n\tpublic static spansMultipleLines(range: IRange): boolean {\n\t\treturn range.endLineNumber > range.startLineNumber;\n\t}\n\n\tpublic toJSON(): IRange {\n\t\treturn this;\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IPosition, Position } from './position.js';\n\n/**\n * A range in the editor. This interface is suitable for serialization.\n */\nexport interface IRange {\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\treadonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\treadonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\treadonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\treadonly endColumn: number;\n}\n\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\tpublic readonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\tpublic readonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\tpublic readonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tif ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n\t\t\tthis.startLineNumber = endLineNumber;\n\t\t\tthis.startColumn = endColumn;\n\t\t\tthis.endLineNumber = startLineNumber;\n\t\t\tthis.endColumn = startColumn;\n\t\t} else {\n\t\t\tthis.startLineNumber = startLineNumber;\n\t\t\tthis.startColumn = startColumn;\n\t\t\tthis.endLineNumber = endLineNumber;\n\t\t\tthis.endColumn = endColumn;\n\t\t}\n\t}\n\n\t/**\n\t * Test if this range is empty.\n\t */\n\tpublic isEmpty(): boolean {\n\t\treturn Range.isEmpty(this);\n\t}\n\n\t/**\n\t * Test if `range` is empty.\n\t */\n\tpublic static isEmpty(range: IRange): boolean {\n\t\treturn (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n\t}\n\n\t/**\n\t * Test if position is in this range. If the position is at the edges, will return true.\n\t */\n\tpublic containsPosition(position: IPosition): boolean {\n\t\treturn Range.containsPosition(this, position);\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return true.\n\t */\n\tpublic static containsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return false.\n\t * @internal\n\t */\n\tpublic static strictContainsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if range is in this range. If the range is equal to this range, will return true.\n\t */\n\tpublic containsRange(range: IRange): boolean {\n\t\treturn Range.containsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n\t */\n\tpublic static containsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n\t */\n\tpublic strictContainsRange(range: IRange): boolean {\n\t\treturn Range.strictContainsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n\t */\n\tpublic static strictContainsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic plusRange(range: IRange): Range {\n\t\treturn Range.plusRange(this, range);\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic static plusRange(a: IRange, b: IRange): Range {\n\t\tlet startLineNumber: number;\n\t\tlet startColumn: number;\n\t\tlet endLineNumber: number;\n\t\tlet endColumn: number;\n\n\t\tif (b.startLineNumber < a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = b.startColumn;\n\t\t} else if (b.startLineNumber === a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = Math.min(b.startColumn, a.startColumn);\n\t\t} else {\n\t\t\tstartLineNumber = a.startLineNumber;\n\t\t\tstartColumn = a.startColumn;\n\t\t}\n\n\t\tif (b.endLineNumber > a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = b.endColumn;\n\t\t} else if (b.endLineNumber === a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = Math.max(b.endColumn, a.endColumn);\n\t\t} else {\n\t\t\tendLineNumber = a.endLineNumber;\n\t\t\tendColumn = a.endColumn;\n\t\t}\n\n\t\treturn new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic intersectRanges(range: IRange): Range | null {\n\t\treturn Range.intersectRanges(this, range);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic static intersectRanges(a: IRange, b: IRange): Range | null {\n\t\tlet resultStartLineNumber = a.startLineNumber;\n\t\tlet resultStartColumn = a.startColumn;\n\t\tlet resultEndLineNumber = a.endLineNumber;\n\t\tlet resultEndColumn = a.endColumn;\n\t\tconst otherStartLineNumber = b.startLineNumber;\n\t\tconst otherStartColumn = b.startColumn;\n\t\tconst otherEndLineNumber = b.endLineNumber;\n\t\tconst otherEndColumn = b.endColumn;\n\n\t\tif (resultStartLineNumber < otherStartLineNumber) {\n\t\t\tresultStartLineNumber = otherStartLineNumber;\n\t\t\tresultStartColumn = otherStartColumn;\n\t\t} else if (resultStartLineNumber === otherStartLineNumber) {\n\t\t\tresultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n\t\t}\n\n\t\tif (resultEndLineNumber > otherEndLineNumber) {\n\t\t\tresultEndLineNumber = otherEndLineNumber;\n\t\t\tresultEndColumn = otherEndColumn;\n\t\t} else if (resultEndLineNumber === otherEndLineNumber) {\n\t\t\tresultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n\t\t}\n\n\t\t// Check if selection is now empty\n\t\tif (resultStartLineNumber > resultEndLineNumber) {\n\t\t\treturn null;\n\t\t}\n\t\tif (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n\t}\n\n\t/**\n\t * Test if this range equals other.\n\t */\n\tpublic equalsRange(other: IRange | null | undefined): boolean {\n\t\treturn Range.equalsRange(this, other);\n\t}\n\n\t/**\n\t * Test if range `a` equals `b`.\n\t */\n\tpublic static equalsRange(a: IRange | null | undefined, b: IRange | null | undefined): boolean {\n\t\tif (!a && !b) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (\n\t\t\t!!a &&\n\t\t\t!!b &&\n\t\t\ta.startLineNumber === b.startLineNumber &&\n\t\t\ta.startColumn === b.startColumn &&\n\t\t\ta.endLineNumber === b.endLineNumber &&\n\t\t\ta.endColumn === b.endColumn\n\t\t);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic getEndPosition(): Position {\n\t\treturn Range.getEndPosition(this);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic static getEndPosition(range: IRange): Position {\n\t\treturn new Position(range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic getStartPosition(): Position {\n\t\treturn Range.getStartPosition(this);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic static getStartPosition(range: IRange): Position {\n\t\treturn new Position(range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Transform to a user presentable string representation.\n\t */\n\tpublic toString(): string {\n\t\treturn '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n\t}\n\n\t/**\n\t * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n\t */\n\tpublic setEndPosition(endLineNumber: number, endColumn: number): Range {\n\t\treturn new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n\t */\n\tpublic setStartPosition(startLineNumber: number, startColumn: number): Range {\n\t\treturn new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic collapseToStart(): Range {\n\t\treturn Range.collapseToStart(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic static collapseToStart(range: IRange): Range {\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic collapseToEnd(): Range {\n\t\treturn Range.collapseToEnd(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic static collapseToEnd(range: IRange): Range {\n\t\treturn new Range(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Moves the range by the given amount of lines.\n\t */\n\tpublic delta(lineCount: number): Range {\n\t\treturn new Range(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);\n\t}\n\n\tpublic isSingleLine(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumber;\n\t}\n\n\t// ---\n\n\tpublic static fromPositions(start: IPosition, end: IPosition = start): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\t/**\n\t * Create a `Range` from an `IRange`.\n\t */\n\tpublic static lift(range: undefined | null): null;\n\tpublic static lift(range: IRange): Range;\n\tpublic static lift(range: IRange | undefined | null): Range | null;\n\tpublic static lift(range: IRange | undefined | null): Range | null {\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Test if `obj` is an `IRange`.\n\t */\n\tpublic static isIRange(obj: unknown): obj is IRange {\n\t\treturn (\n\t\t\t!!obj\n\t\t\t&& (typeof (obj as IRange).startLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).startColumn === 'number')\n\t\t\t&& (typeof (obj as IRange).endLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).endColumn === 'number')\n\t\t);\n\t}\n\n\t/**\n\t * Test if the two ranges are touching in any way.\n\t */\n\tpublic static areIntersectingOrTouching(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n\t */\n\tpublic static areIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting, but not touching at all.\n\t */\n\tpublic static areOnlyIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < (b.startLineNumber - 1) || (a.endLineNumber === b.startLineNumber && a.endColumn < (b.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < (a.startLineNumber - 1) || (b.endLineNumber === a.startLineNumber && b.endColumn < (a.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the startPosition and then on the endPosition\n\t */\n\tpublic static compareRangesUsingStarts(a: IRange | null | undefined, b: IRange | null | undefined): number {\n\t\tif (a && b) {\n\t\t\tconst aStartLineNumber = a.startLineNumber | 0;\n\t\t\tconst bStartLineNumber = b.startLineNumber | 0;\n\n\t\t\tif (aStartLineNumber === bStartLineNumber) {\n\t\t\t\tconst aStartColumn = a.startColumn | 0;\n\t\t\t\tconst bStartColumn = b.startColumn | 0;\n\n\t\t\t\tif (aStartColumn === bStartColumn) {\n\t\t\t\t\tconst aEndLineNumber = a.endLineNumber | 0;\n\t\t\t\t\tconst bEndLineNumber = b.endLineNumber | 0;\n\n\t\t\t\t\tif (aEndLineNumber === bEndLineNumber) {\n\t\t\t\t\t\tconst aEndColumn = a.endColumn | 0;\n\t\t\t\t\t\tconst bEndColumn = b.endColumn | 0;\n\t\t\t\t\t\treturn aEndColumn - bEndColumn;\n\t\t\t\t\t}\n\t\t\t\t\treturn aEndLineNumber - bEndLineNumber;\n\t\t\t\t}\n\t\t\t\treturn aStartColumn - bStartColumn;\n\t\t\t}\n\t\t\treturn aStartLineNumber - bStartLineNumber;\n\t\t}\n\t\tconst aExists = (a ? 1 : 0);\n\t\tconst bExists = (b ? 1 : 0);\n\t\treturn aExists - bExists;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the endPosition and then on the startPosition\n\t */\n\tpublic static compareRangesUsingEnds(a: IRange, b: IRange): number {\n\t\tif (a.endLineNumber === b.endLineNumber) {\n\t\t\tif (a.endColumn === b.endColumn) {\n\t\t\t\tif (a.startLineNumber === b.startLineNumber) {\n\t\t\t\t\treturn a.startColumn - b.startColumn;\n\t\t\t\t}\n\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t}\n\t\t\treturn a.endColumn - b.endColumn;\n\t\t}\n\t\treturn a.endLineNumber - b.endLineNumber;\n\t}\n\n\t/**\n\t * Test if the range spans multiple lines.\n\t */\n\tpublic static spansMultipleLines(range: IRange): boolean {\n\t\treturn range.endLineNumber > range.startLineNumber;\n\t}\n\n\tpublic toJSON(): IRange {\n\t\treturn this;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/common/core/range.ts","vs/editor/common/core/range.ts"],"names":[],"mappings":"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","file":"range.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IPosition, Position } from './position.js';\n\n/**\n * A range in the editor. This interface is suitable for serialization.\n */\nexport interface IRange {\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\treadonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\treadonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\treadonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\treadonly endColumn: number;\n}\n\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\tpublic readonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\tpublic readonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\tpublic readonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tif ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n\t\t\tthis.startLineNumber = endLineNumber;\n\t\t\tthis.startColumn = endColumn;\n\t\t\tthis.endLineNumber = startLineNumber;\n\t\t\tthis.endColumn = startColumn;\n\t\t} else {\n\t\t\tthis.startLineNumber = startLineNumber;\n\t\t\tthis.startColumn = startColumn;\n\t\t\tthis.endLineNumber = endLineNumber;\n\t\t\tthis.endColumn = endColumn;\n\t\t}\n\t}\n\n\t/**\n\t * Test if this range is empty.\n\t */\n\tpublic isEmpty(): boolean {\n\t\treturn Range.isEmpty(this);\n\t}\n\n\t/**\n\t * Test if `range` is empty.\n\t */\n\tpublic static isEmpty(range: IRange): boolean {\n\t\treturn (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n\t}\n\n\t/**\n\t * Test if position is in this range. If the position is at the edges, will return true.\n\t */\n\tpublic containsPosition(position: IPosition): boolean {\n\t\treturn Range.containsPosition(this, position);\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return true.\n\t */\n\tpublic static containsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return false.\n\t * @internal\n\t */\n\tpublic static strictContainsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if range is in this range. If the range is equal to this range, will return true.\n\t */\n\tpublic containsRange(range: IRange): boolean {\n\t\treturn Range.containsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n\t */\n\tpublic static containsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n\t */\n\tpublic strictContainsRange(range: IRange): boolean {\n\t\treturn Range.strictContainsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n\t */\n\tpublic static strictContainsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic plusRange(range: IRange): Range {\n\t\treturn Range.plusRange(this, range);\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic static plusRange(a: IRange, b: IRange): Range {\n\t\tlet startLineNumber: number;\n\t\tlet startColumn: number;\n\t\tlet endLineNumber: number;\n\t\tlet endColumn: number;\n\n\t\tif (b.startLineNumber < a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = b.startColumn;\n\t\t} else if (b.startLineNumber === a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = Math.min(b.startColumn, a.startColumn);\n\t\t} else {\n\t\t\tstartLineNumber = a.startLineNumber;\n\t\t\tstartColumn = a.startColumn;\n\t\t}\n\n\t\tif (b.endLineNumber > a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = b.endColumn;\n\t\t} else if (b.endLineNumber === a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = Math.max(b.endColumn, a.endColumn);\n\t\t} else {\n\t\t\tendLineNumber = a.endLineNumber;\n\t\t\tendColumn = a.endColumn;\n\t\t}\n\n\t\treturn new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic intersectRanges(range: IRange): Range | null {\n\t\treturn Range.intersectRanges(this, range);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic static intersectRanges(a: IRange, b: IRange): Range | null {\n\t\tlet resultStartLineNumber = a.startLineNumber;\n\t\tlet resultStartColumn = a.startColumn;\n\t\tlet resultEndLineNumber = a.endLineNumber;\n\t\tlet resultEndColumn = a.endColumn;\n\t\tconst otherStartLineNumber = b.startLineNumber;\n\t\tconst otherStartColumn = b.startColumn;\n\t\tconst otherEndLineNumber = b.endLineNumber;\n\t\tconst otherEndColumn = b.endColumn;\n\n\t\tif (resultStartLineNumber < otherStartLineNumber) {\n\t\t\tresultStartLineNumber = otherStartLineNumber;\n\t\t\tresultStartColumn = otherStartColumn;\n\t\t} else if (resultStartLineNumber === otherStartLineNumber) {\n\t\t\tresultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n\t\t}\n\n\t\tif (resultEndLineNumber > otherEndLineNumber) {\n\t\t\tresultEndLineNumber = otherEndLineNumber;\n\t\t\tresultEndColumn = otherEndColumn;\n\t\t} else if (resultEndLineNumber === otherEndLineNumber) {\n\t\t\tresultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n\t\t}\n\n\t\t// Check if selection is now empty\n\t\tif (resultStartLineNumber > resultEndLineNumber) {\n\t\t\treturn null;\n\t\t}\n\t\tif (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n\t}\n\n\t/**\n\t * Test if this range equals other.\n\t */\n\tpublic equalsRange(other: IRange | null | undefined): boolean {\n\t\treturn Range.equalsRange(this, other);\n\t}\n\n\t/**\n\t * Test if range `a` equals `b`.\n\t */\n\tpublic static equalsRange(a: IRange | null | undefined, b: IRange | null | undefined): boolean {\n\t\tif (!a && !b) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (\n\t\t\t!!a &&\n\t\t\t!!b &&\n\t\t\ta.startLineNumber === b.startLineNumber &&\n\t\t\ta.startColumn === b.startColumn &&\n\t\t\ta.endLineNumber === b.endLineNumber &&\n\t\t\ta.endColumn === b.endColumn\n\t\t);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic getEndPosition(): Position {\n\t\treturn Range.getEndPosition(this);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic static getEndPosition(range: IRange): Position {\n\t\treturn new Position(range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic getStartPosition(): Position {\n\t\treturn Range.getStartPosition(this);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic static getStartPosition(range: IRange): Position {\n\t\treturn new Position(range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Transform to a user presentable string representation.\n\t */\n\tpublic toString(): string {\n\t\treturn '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n\t}\n\n\t/**\n\t * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n\t */\n\tpublic setEndPosition(endLineNumber: number, endColumn: number): Range {\n\t\treturn new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n\t */\n\tpublic setStartPosition(startLineNumber: number, startColumn: number): Range {\n\t\treturn new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic collapseToStart(): Range {\n\t\treturn Range.collapseToStart(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic static collapseToStart(range: IRange): Range {\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic collapseToEnd(): Range {\n\t\treturn Range.collapseToEnd(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic static collapseToEnd(range: IRange): Range {\n\t\treturn new Range(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Moves the range by the given amount of lines.\n\t */\n\tpublic delta(lineCount: number): Range {\n\t\treturn new Range(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);\n\t}\n\n\t/**\n\t * Test if this range starts and ends on the same line.\n\t */\n\tpublic isSingleLine(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumber;\n\t}\n\n\t// ---\n\n\tpublic static fromPositions(start: IPosition, end: IPosition = start): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\t/**\n\t * Create a `Range` from an `IRange`.\n\t */\n\tpublic static lift(range: undefined | null): null;\n\tpublic static lift(range: IRange): Range;\n\tpublic static lift(range: IRange | undefined | null): Range | null;\n\tpublic static lift(range: IRange | undefined | null): Range | null {\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Test if `obj` is an `IRange`.\n\t */\n\tpublic static isIRange(obj: unknown): obj is IRange {\n\t\treturn (\n\t\t\t!!obj\n\t\t\t&& (typeof (obj as IRange).startLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).startColumn === 'number')\n\t\t\t&& (typeof (obj as IRange).endLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).endColumn === 'number')\n\t\t);\n\t}\n\n\t/**\n\t * Test if the two ranges are touching in any way.\n\t */\n\tpublic static areIntersectingOrTouching(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n\t */\n\tpublic static areIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting, but not touching at all.\n\t */\n\tpublic static areOnlyIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < (b.startLineNumber - 1) || (a.endLineNumber === b.startLineNumber && a.endColumn < (b.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < (a.startLineNumber - 1) || (b.endLineNumber === a.startLineNumber && b.endColumn < (a.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the startPosition and then on the endPosition\n\t */\n\tpublic static compareRangesUsingStarts(a: IRange | null | undefined, b: IRange | null | undefined): number {\n\t\tif (a && b) {\n\t\t\tconst aStartLineNumber = a.startLineNumber | 0;\n\t\t\tconst bStartLineNumber = b.startLineNumber | 0;\n\n\t\t\tif (aStartLineNumber === bStartLineNumber) {\n\t\t\t\tconst aStartColumn = a.startColumn | 0;\n\t\t\t\tconst bStartColumn = b.startColumn | 0;\n\n\t\t\t\tif (aStartColumn === bStartColumn) {\n\t\t\t\t\tconst aEndLineNumber = a.endLineNumber | 0;\n\t\t\t\t\tconst bEndLineNumber = b.endLineNumber | 0;\n\n\t\t\t\t\tif (aEndLineNumber === bEndLineNumber) {\n\t\t\t\t\t\tconst aEndColumn = a.endColumn | 0;\n\t\t\t\t\t\tconst bEndColumn = b.endColumn | 0;\n\t\t\t\t\t\treturn aEndColumn - bEndColumn;\n\t\t\t\t\t}\n\t\t\t\t\treturn aEndLineNumber - bEndLineNumber;\n\t\t\t\t}\n\t\t\t\treturn aStartColumn - bStartColumn;\n\t\t\t}\n\t\t\treturn aStartLineNumber - bStartLineNumber;\n\t\t}\n\t\tconst aExists = (a ? 1 : 0);\n\t\tconst bExists = (b ? 1 : 0);\n\t\treturn aExists - bExists;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the endPosition and then on the startPosition\n\t */\n\tpublic static compareRangesUsingEnds(a: IRange, b: IRange): number {\n\t\tif (a.endLineNumber === b.endLineNumber) {\n\t\t\tif (a.endColumn === b.endColumn) {\n\t\t\t\tif (a.startLineNumber === b.startLineNumber) {\n\t\t\t\t\treturn a.startColumn - b.startColumn;\n\t\t\t\t}\n\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t}\n\t\t\treturn a.endColumn - b.endColumn;\n\t\t}\n\t\treturn a.endLineNumber - b.endLineNumber;\n\t}\n\n\t/**\n\t * Test if the range spans multiple lines.\n\t */\n\tpublic static spansMultipleLines(range: IRange): boolean {\n\t\treturn range.endLineNumber > range.startLineNumber;\n\t}\n\n\tpublic toJSON(): IRange {\n\t\treturn this;\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IPosition, Position } from './position.js';\n\n/**\n * A range in the editor. This interface is suitable for serialization.\n */\nexport interface IRange {\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\treadonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\treadonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\treadonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\treadonly endColumn: number;\n}\n\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n\n\t/**\n\t * Line number on which the range starts (starts at 1).\n\t */\n\tpublic readonly startLineNumber: number;\n\t/**\n\t * Column on which the range starts in line `startLineNumber` (starts at 1).\n\t */\n\tpublic readonly startColumn: number;\n\t/**\n\t * Line number on which the range ends.\n\t */\n\tpublic readonly endLineNumber: number;\n\t/**\n\t * Column on which the range ends in line `endLineNumber`.\n\t */\n\tpublic readonly endColumn: number;\n\n\tconstructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number) {\n\t\tif ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n\t\t\tthis.startLineNumber = endLineNumber;\n\t\t\tthis.startColumn = endColumn;\n\t\t\tthis.endLineNumber = startLineNumber;\n\t\t\tthis.endColumn = startColumn;\n\t\t} else {\n\t\t\tthis.startLineNumber = startLineNumber;\n\t\t\tthis.startColumn = startColumn;\n\t\t\tthis.endLineNumber = endLineNumber;\n\t\t\tthis.endColumn = endColumn;\n\t\t}\n\t}\n\n\t/**\n\t * Test if this range is empty.\n\t */\n\tpublic isEmpty(): boolean {\n\t\treturn Range.isEmpty(this);\n\t}\n\n\t/**\n\t * Test if `range` is empty.\n\t */\n\tpublic static isEmpty(range: IRange): boolean {\n\t\treturn (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n\t}\n\n\t/**\n\t * Test if position is in this range. If the position is at the edges, will return true.\n\t */\n\tpublic containsPosition(position: IPosition): boolean {\n\t\treturn Range.containsPosition(this, position);\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return true.\n\t */\n\tpublic static containsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `position` is in `range`. If the position is at the edges, will return false.\n\t * @internal\n\t */\n\tpublic static strictContainsPosition(range: IRange, position: IPosition): boolean {\n\t\tif (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.startLineNumber && position.column <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (position.lineNumber === range.endLineNumber && position.column >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if range is in this range. If the range is equal to this range, will return true.\n\t */\n\tpublic containsRange(range: IRange): boolean {\n\t\treturn Range.containsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n\t */\n\tpublic static containsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n\t */\n\tpublic strictContainsRange(range: IRange): boolean {\n\t\treturn Range.strictContainsRange(this, range);\n\t}\n\n\t/**\n\t * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false.\n\t */\n\tpublic static strictContainsRange(range: IRange, otherRange: IRange): boolean {\n\t\tif (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\n\t\t\treturn false;\n\t\t}\n\t\tif (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic plusRange(range: IRange): Range {\n\t\treturn Range.plusRange(this, range);\n\t}\n\n\t/**\n\t * A reunion of the two ranges.\n\t * The smallest position will be used as the start point, and the largest one as the end point.\n\t */\n\tpublic static plusRange(a: IRange, b: IRange): Range {\n\t\tlet startLineNumber: number;\n\t\tlet startColumn: number;\n\t\tlet endLineNumber: number;\n\t\tlet endColumn: number;\n\n\t\tif (b.startLineNumber < a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = b.startColumn;\n\t\t} else if (b.startLineNumber === a.startLineNumber) {\n\t\t\tstartLineNumber = b.startLineNumber;\n\t\t\tstartColumn = Math.min(b.startColumn, a.startColumn);\n\t\t} else {\n\t\t\tstartLineNumber = a.startLineNumber;\n\t\t\tstartColumn = a.startColumn;\n\t\t}\n\n\t\tif (b.endLineNumber > a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = b.endColumn;\n\t\t} else if (b.endLineNumber === a.endLineNumber) {\n\t\t\tendLineNumber = b.endLineNumber;\n\t\t\tendColumn = Math.max(b.endColumn, a.endColumn);\n\t\t} else {\n\t\t\tendLineNumber = a.endLineNumber;\n\t\t\tendColumn = a.endColumn;\n\t\t}\n\n\t\treturn new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic intersectRanges(range: IRange): Range | null {\n\t\treturn Range.intersectRanges(this, range);\n\t}\n\n\t/**\n\t * A intersection of the two ranges.\n\t */\n\tpublic static intersectRanges(a: IRange, b: IRange): Range | null {\n\t\tlet resultStartLineNumber = a.startLineNumber;\n\t\tlet resultStartColumn = a.startColumn;\n\t\tlet resultEndLineNumber = a.endLineNumber;\n\t\tlet resultEndColumn = a.endColumn;\n\t\tconst otherStartLineNumber = b.startLineNumber;\n\t\tconst otherStartColumn = b.startColumn;\n\t\tconst otherEndLineNumber = b.endLineNumber;\n\t\tconst otherEndColumn = b.endColumn;\n\n\t\tif (resultStartLineNumber < otherStartLineNumber) {\n\t\t\tresultStartLineNumber = otherStartLineNumber;\n\t\t\tresultStartColumn = otherStartColumn;\n\t\t} else if (resultStartLineNumber === otherStartLineNumber) {\n\t\t\tresultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n\t\t}\n\n\t\tif (resultEndLineNumber > otherEndLineNumber) {\n\t\t\tresultEndLineNumber = otherEndLineNumber;\n\t\t\tresultEndColumn = otherEndColumn;\n\t\t} else if (resultEndLineNumber === otherEndLineNumber) {\n\t\t\tresultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n\t\t}\n\n\t\t// Check if selection is now empty\n\t\tif (resultStartLineNumber > resultEndLineNumber) {\n\t\t\treturn null;\n\t\t}\n\t\tif (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n\t}\n\n\t/**\n\t * Test if this range equals other.\n\t */\n\tpublic equalsRange(other: IRange | null | undefined): boolean {\n\t\treturn Range.equalsRange(this, other);\n\t}\n\n\t/**\n\t * Test if range `a` equals `b`.\n\t */\n\tpublic static equalsRange(a: IRange | null | undefined, b: IRange | null | undefined): boolean {\n\t\tif (!a && !b) {\n\t\t\treturn true;\n\t\t}\n\t\treturn (\n\t\t\t!!a &&\n\t\t\t!!b &&\n\t\t\ta.startLineNumber === b.startLineNumber &&\n\t\t\ta.startColumn === b.startColumn &&\n\t\t\ta.endLineNumber === b.endLineNumber &&\n\t\t\ta.endColumn === b.endColumn\n\t\t);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic getEndPosition(): Position {\n\t\treturn Range.getEndPosition(this);\n\t}\n\n\t/**\n\t * Return the end position (which will be after or equal to the start position)\n\t */\n\tpublic static getEndPosition(range: IRange): Position {\n\t\treturn new Position(range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic getStartPosition(): Position {\n\t\treturn Range.getStartPosition(this);\n\t}\n\n\t/**\n\t * Return the start position (which will be before or equal to the end position)\n\t */\n\tpublic static getStartPosition(range: IRange): Position {\n\t\treturn new Position(range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Transform to a user presentable string representation.\n\t */\n\tpublic toString(): string {\n\t\treturn '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n\t}\n\n\t/**\n\t * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n\t */\n\tpublic setEndPosition(endLineNumber: number, endColumn: number): Range {\n\t\treturn new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n\t}\n\n\t/**\n\t * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n\t */\n\tpublic setStartPosition(startLineNumber: number, startColumn: number): Range {\n\t\treturn new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic collapseToStart(): Range {\n\t\treturn Range.collapseToStart(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's start position.\n\t */\n\tpublic static collapseToStart(range: IRange): Range {\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic collapseToEnd(): Range {\n\t\treturn Range.collapseToEnd(this);\n\t}\n\n\t/**\n\t * Create a new empty range using this range's end position.\n\t */\n\tpublic static collapseToEnd(range: IRange): Range {\n\t\treturn new Range(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Moves the range by the given amount of lines.\n\t */\n\tpublic delta(lineCount: number): Range {\n\t\treturn new Range(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);\n\t}\n\n\t/**\n\t * Test if this range starts and ends on the same line.\n\t */\n\tpublic isSingleLine(): boolean {\n\t\treturn this.startLineNumber === this.endLineNumber;\n\t}\n\n\t// ---\n\n\tpublic static fromPositions(start: IPosition, end: IPosition = start): Range {\n\t\treturn new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n\t}\n\n\t/**\n\t * Create a `Range` from an `IRange`.\n\t */\n\tpublic static lift(range: undefined | null): null;\n\tpublic static lift(range: IRange): Range;\n\tpublic static lift(range: IRange | undefined | null): Range | null;\n\tpublic static lift(range: IRange | undefined | null): Range | null {\n\t\tif (!range) {\n\t\t\treturn null;\n\t\t}\n\t\treturn new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n\t}\n\n\t/**\n\t * Test if `obj` is an `IRange`.\n\t */\n\tpublic static isIRange(obj: unknown): obj is IRange {\n\t\treturn (\n\t\t\t!!obj\n\t\t\t&& (typeof (obj as IRange).startLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).startColumn === 'number')\n\t\t\t&& (typeof (obj as IRange).endLineNumber === 'number')\n\t\t\t&& (typeof (obj as IRange).endColumn === 'number')\n\t\t);\n\t}\n\n\t/**\n\t * Test if the two ranges are touching in any way.\n\t */\n\tpublic static areIntersectingOrTouching(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n\t */\n\tpublic static areIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * Test if the two ranges are intersecting, but not touching at all.\n\t */\n\tpublic static areOnlyIntersecting(a: IRange, b: IRange): boolean {\n\t\t// Check if `a` is before `b`\n\t\tif (a.endLineNumber < (b.startLineNumber - 1) || (a.endLineNumber === b.startLineNumber && a.endColumn < (b.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check if `b` is before `a`\n\t\tif (b.endLineNumber < (a.startLineNumber - 1) || (b.endLineNumber === a.startLineNumber && b.endColumn < (a.startColumn - 1))) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// These ranges must intersect\n\t\treturn true;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the startPosition and then on the endPosition\n\t */\n\tpublic static compareRangesUsingStarts(a: IRange | null | undefined, b: IRange | null | undefined): number {\n\t\tif (a && b) {\n\t\t\tconst aStartLineNumber = a.startLineNumber | 0;\n\t\t\tconst bStartLineNumber = b.startLineNumber | 0;\n\n\t\t\tif (aStartLineNumber === bStartLineNumber) {\n\t\t\t\tconst aStartColumn = a.startColumn | 0;\n\t\t\t\tconst bStartColumn = b.startColumn | 0;\n\n\t\t\t\tif (aStartColumn === bStartColumn) {\n\t\t\t\t\tconst aEndLineNumber = a.endLineNumber | 0;\n\t\t\t\t\tconst bEndLineNumber = b.endLineNumber | 0;\n\n\t\t\t\t\tif (aEndLineNumber === bEndLineNumber) {\n\t\t\t\t\t\tconst aEndColumn = a.endColumn | 0;\n\t\t\t\t\t\tconst bEndColumn = b.endColumn | 0;\n\t\t\t\t\t\treturn aEndColumn - bEndColumn;\n\t\t\t\t\t}\n\t\t\t\t\treturn aEndLineNumber - bEndLineNumber;\n\t\t\t\t}\n\t\t\t\treturn aStartColumn - bStartColumn;\n\t\t\t}\n\t\t\treturn aStartLineNumber - bStartLineNumber;\n\t\t}\n\t\tconst aExists = (a ? 1 : 0);\n\t\tconst bExists = (b ? 1 : 0);\n\t\treturn aExists - bExists;\n\t}\n\n\t/**\n\t * A function that compares ranges, useful for sorting ranges\n\t * It will first compare ranges on the endPosition and then on the startPosition\n\t */\n\tpublic static compareRangesUsingEnds(a: IRange, b: IRange): number {\n\t\tif (a.endLineNumber === b.endLineNumber) {\n\t\t\tif (a.endColumn === b.endColumn) {\n\t\t\t\tif (a.startLineNumber === b.startLineNumber) {\n\t\t\t\t\treturn a.startColumn - b.startColumn;\n\t\t\t\t}\n\t\t\t\treturn a.startLineNumber - b.startLineNumber;\n\t\t\t}\n\t\t\treturn a.endColumn - b.endColumn;\n\t\t}\n\t\treturn a.endLineNumber - b.endLineNumber;\n\t}\n\n\t/**\n\t * Test if the range spans multiple lines.\n\t */\n\tpublic static spansMultipleLines(range: IRange): boolean {\n\t\treturn range.endLineNumber > range.startLineNumber;\n\t}\n\n\tpublic toJSON(): IRange {\n\t\treturn this;\n\t}\n}\n"]}
@@ -150,8 +150,7 @@ export function guessIndentation(source, defaultTabSize, defaultInsertSpaces) {
150
150
  let tabSize = defaultTabSize;
151
151
  // Guess tabSize only if inserting spaces...
152
152
  if (insertSpaces) {
153
- let tabSizeScore = (insertSpaces ? 0 : 0.1 * linesCount);
154
- // console.log("score threshold: " + tabSizeScore);
153
+ let tabSizeScore = 0;
155
154
  ALLOWED_TAB_SIZE_GUESSES.forEach((possibleTabSize) => {
156
155
  const possibleTabSizeScore = spacesDiffCount[possibleTabSize];
157
156
  if (possibleTabSizeScore > tabSizeScore) {
@@ -159,9 +158,10 @@ export function guessIndentation(source, defaultTabSize, defaultInsertSpaces) {
159
158
  tabSize = possibleTabSize;
160
159
  }
161
160
  });
162
- // Let a tabSize of 2 win even if it is not the maximum
163
- // (only in case 4 was guessed)
164
- if (tabSize === 4 && spacesDiffCount[4] > 0 && spacesDiffCount[2] > 0 && spacesDiffCount[2] >= spacesDiffCount[4] / 2) {
161
+ // Let a tabSize of 2 win over 4 only if it has at least 2/3 of the occurrences of 4
162
+ // This helps detect 2-space indentation in cases like YAML files where there might be
163
+ // some 4-space diffs from deeper nesting, while still preferring 4 when it's clearly predominant
164
+ if (tabSize === 4 && spacesDiffCount[4] > 0 && spacesDiffCount[2] > 0 && spacesDiffCount[2] >= spacesDiffCount[4] * 2 / 3) {
165
165
  tabSize = 2;
166
166
  }
167
167
  }