monaco-editor-core 0.55.0-dev-20251101 → 0.55.0-dev-20251103

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 (71) 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/dom.js.map +1 -1
  15. package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
  16. package/esm/vs/base/browser/ui/list/listView.js.map +1 -1
  17. package/esm/vs/base/browser/ui/tree/abstractTree.js +2 -0
  18. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  19. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +2 -0
  20. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  21. package/esm/vs/base/common/arrays.js.map +1 -1
  22. package/esm/vs/base/common/event.js.map +1 -1
  23. package/esm/vs/base/common/glob.js.map +1 -1
  24. package/esm/vs/base/common/lifecycle.js.map +1 -1
  25. package/esm/vs/base/common/network.js.map +1 -1
  26. package/esm/vs/base/common/ternarySearchTree.js.map +1 -1
  27. package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
  28. package/esm/vs/editor/browser/controller/mouseTarget.js.map +1 -1
  29. package/esm/vs/editor/browser/dataTransfer.js.map +1 -1
  30. package/esm/vs/editor/browser/viewParts/viewLines/viewLine.js.map +1 -1
  31. package/esm/vs/editor/browser/viewParts/viewLinesGpu/viewLinesGpu.js.map +1 -1
  32. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  33. package/esm/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js.map +1 -1
  34. package/esm/vs/editor/browser/widget/diffEditor/diffEditorViewModel.js.map +1 -1
  35. package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js.map +1 -1
  36. package/esm/vs/editor/browser/widget/diffEditor/features/gutterFeature.js.map +1 -1
  37. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  38. package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
  39. package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js.map +1 -1
  40. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.js.map +1 -1
  41. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees.js.map +1 -1
  42. package/esm/vs/editor/common/model/tokens/treeSitter/tokenStore.js.map +1 -1
  43. package/esm/vs/editor/common/model/tokens/treeSitter/treeSitterTree.js.map +1 -1
  44. package/esm/vs/editor/common/viewModel/viewModelLines.js.map +1 -1
  45. package/esm/vs/editor/contrib/editorState/browser/editorState.js.map +1 -1
  46. package/esm/vs/editor/contrib/find/browser/findDecorations.js.map +1 -1
  47. package/esm/vs/editor/contrib/find/browser/findModel.js.map +1 -1
  48. package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
  49. package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
  50. package/esm/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.js.map +1 -1
  51. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
  52. package/esm/vs/editor/contrib/links/browser/links.js.map +1 -1
  53. package/esm/vs/editor/contrib/rename/browser/renameWidget.js.map +1 -1
  54. package/esm/vs/editor/contrib/snippet/browser/snippetParser.js.map +1 -1
  55. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
  56. package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollModelProvider.js.map +1 -1
  57. package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
  58. package/esm/vs/editor/standalone/common/monarch/monarchCompile.js.map +1 -1
  59. package/esm/vs/platform/configuration/common/configurationRegistry.js.map +1 -1
  60. package/esm/vs/platform/contextkey/common/contextkey.js +0 -4
  61. package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
  62. package/esm/vs/platform/hover/browser/hoverService.js.map +1 -1
  63. package/esm/vs/platform/observable/common/wrapInHotClass.js.map +1 -1
  64. package/esm/vs/platform/observable/common/wrapInReloadableClass.js +0 -1
  65. package/esm/vs/platform/observable/common/wrapInReloadableClass.js.map +1 -1
  66. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
  67. package/esm/vs/platform/quickinput/browser/quickInput.js +4 -0
  68. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  69. package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
  70. package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
  71. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.ts","vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.ts"],"names":[],"mappings":"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","file":"suggestWidgetAdapter.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 { compareBy, numberComparator } from '../../../../../base/common/arrays.js';\nimport { findFirstMax } from '../../../../../base/common/arraysFind.js';\nimport { Emitter, Event } from '../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../../browser/editorBrowser.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { CompletionItemInsertTextRule, CompletionItemKind, SelectedSuggestionInfo } from '../../../../common/languages.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { singleTextEditAugments, singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js';\nimport { SnippetParser } from '../../../snippet/browser/snippetParser.js';\nimport { SnippetSession } from '../../../snippet/browser/snippetSession.js';\nimport { CompletionItem } from '../../../suggest/browser/suggest.js';\nimport { SuggestController } from '../../../suggest/browser/suggestController.js';\nimport { ObservableCodeEditor } from '../../../../browser/observableCodeEditor.js';\nimport { observableFromEvent } from '../../../../../base/common/observable.js';\n\nexport class SuggestWidgetAdaptor extends Disposable {\n\tprivate isSuggestWidgetVisible: boolean = false;\n\tprivate isShiftKeyPressed = false;\n\tprivate _isActive = false;\n\tprivate _currentSuggestItemInfo: SuggestItemInfo | undefined = undefined;\n\tpublic get selectedItem(): SuggestItemInfo | undefined {\n\t\treturn this._currentSuggestItemInfo;\n\t}\n\tprivate _onDidSelectedItemChange = this._register(new Emitter<void>());\n\tpublic readonly onDidSelectedItemChange: Event<void> = this._onDidSelectedItemChange.event;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly suggestControllerPreselector: () => TextReplacement | undefined,\n\t\tprivate readonly onWillAccept: (item: SuggestItemInfo) => void,\n\t) {\n\t\tsuper();\n\n\t\t// See the command acceptAlternativeSelectedSuggestion that is bound to shift+tab\n\t\tthis._register(editor.onKeyDown(e => {\n\t\t\tif (e.shiftKey && !this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = true;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\t\tthis._register(editor.onKeyUp(e => {\n\t\t\tif (e.shiftKey && this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = false;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (suggestController) {\n\t\t\tthis._register(suggestController.registerSelector({\n\t\t\t\tpriority: 100,\n\t\t\t\tselect: (model, pos, suggestItems) => {\n\t\t\t\t\tconst textModel = this.editor.getModel();\n\t\t\t\t\tif (!textModel) {\n\t\t\t\t\t\t// Should not happen\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst i = this.suggestControllerPreselector();\n\t\t\t\t\tconst itemToPreselect = i ? singleTextRemoveCommonPrefix(i, textModel) : undefined;\n\t\t\t\t\tif (!itemToPreselect) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tconst position = Position.lift(pos);\n\n\t\t\t\t\tconst candidates = suggestItems\n\t\t\t\t\t\t.map((suggestItem, index) => {\n\t\t\t\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(suggestController, textModel, position, suggestItem, this.isShiftKeyPressed);\n\t\t\t\t\t\t\tconst suggestItemTextEdit = singleTextRemoveCommonPrefix(suggestItemInfo.getSingleTextEdit(), textModel);\n\t\t\t\t\t\t\tconst valid = singleTextEditAugments(itemToPreselect, suggestItemTextEdit);\n\t\t\t\t\t\t\treturn { index, valid, prefixLength: suggestItemTextEdit.text.length, suggestItem };\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(item => item && item.valid && item.prefixLength > 0);\n\n\t\t\t\t\tconst result = findFirstMax(\n\t\t\t\t\t\tcandidates,\n\t\t\t\t\t\tcompareBy(s => s!.prefixLength, numberComparator)\n\t\t\t\t\t);\n\t\t\t\t\treturn result ? result.index : -1;\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tlet isBoundToSuggestWidget = false;\n\t\t\tconst bindToSuggestWidget = () => {\n\t\t\t\tif (isBoundToSuggestWidget) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tisBoundToSuggestWidget = true;\n\n\t\t\t\tthis._register(suggestController.widget.value.onDidShow(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidHide(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = false;\n\t\t\t\t\tthis.update(false);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidFocus(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t};\n\n\t\t\tthis._register(Event.once(suggestController.model.onDidTrigger)(e => {\n\t\t\t\tbindToSuggestWidget();\n\t\t\t}));\n\n\t\t\tthis._register(suggestController.onWillInsertSuggestItem(e => {\n\t\t\t\tconst position = this.editor.getPosition();\n\t\t\t\tconst model = this.editor.getModel();\n\t\t\t\tif (!position || !model) { return undefined; }\n\n\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(\n\t\t\t\t\tsuggestController,\n\t\t\t\t\tmodel,\n\t\t\t\t\tposition,\n\t\t\t\t\te.item,\n\t\t\t\t\tthis.isShiftKeyPressed\n\t\t\t\t);\n\n\t\t\t\tthis.onWillAccept(suggestItemInfo);\n\t\t\t}));\n\t\t}\n\t\tthis.update(this._isActive);\n\t}\n\n\tprivate update(newActive: boolean): void {\n\t\tconst newInlineCompletion = this.getSuggestItemInfo();\n\n\t\tif (this._isActive !== newActive || !suggestItemInfoEquals(this._currentSuggestItemInfo, newInlineCompletion)) {\n\t\t\tthis._isActive = newActive;\n\t\t\tthis._currentSuggestItemInfo = newInlineCompletion;\n\n\t\t\tthis._onDidSelectedItemChange.fire();\n\t\t}\n\t}\n\n\tprivate getSuggestItemInfo(): SuggestItemInfo | undefined {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (!suggestController || !this.isSuggestWidgetVisible) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst focusedItem = suggestController.widget.value.getFocusedItem();\n\t\tconst position = this.editor.getPosition();\n\t\tconst model = this.editor.getModel();\n\n\t\tif (!focusedItem || !position || !model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn SuggestItemInfo.fromSuggestion(\n\t\t\tsuggestController,\n\t\t\tmodel,\n\t\t\tposition,\n\t\t\tfocusedItem.item,\n\t\t\tthis.isShiftKeyPressed\n\t\t);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.forceRenderingAbove();\n\t}\n}\n\nexport class SuggestItemInfo {\n\tpublic static fromSuggestion(suggestController: SuggestController, model: ITextModel, position: Position, item: CompletionItem, toggleMode: boolean): SuggestItemInfo {\n\t\tlet { insertText } = item.completion;\n\t\tlet isSnippetText = false;\n\t\tif (item.completion.insertTextRules! & CompletionItemInsertTextRule.InsertAsSnippet) {\n\t\t\tconst snippet = new SnippetParser().parse(insertText);\n\n\t\t\tif (snippet.children.length < 100) {\n\t\t\t\t// Adjust whitespace is expensive.\n\t\t\t\tSnippetSession.adjustWhitespace(model, position, true, snippet);\n\t\t\t}\n\n\t\t\tinsertText = snippet.toString();\n\t\t\tisSnippetText = true;\n\t\t}\n\n\t\tconst info = suggestController.getOverwriteInfo(item, toggleMode);\n\n\t\treturn new SuggestItemInfo(\n\t\t\tRange.fromPositions(\n\t\t\t\tposition.delta(0, -info.overwriteBefore),\n\t\t\t\tposition.delta(0, Math.max(info.overwriteAfter, 0))\n\t\t\t),\n\t\t\tinsertText,\n\t\t\titem.completion.kind,\n\t\t\tisSnippetText,\n\t\t\titem.container.incomplete ?? false,\n\t\t);\n\t}\n\n\tprivate constructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly completionItemKind: CompletionItemKind,\n\t\tpublic readonly isSnippetText: boolean,\n\t\tpublic readonly listIncomplete: boolean,\n\t) { }\n\n\tpublic equals(other: SuggestItemInfo): boolean {\n\t\treturn this.range.equalsRange(other.range)\n\t\t\t&& this.insertText === other.insertText\n\t\t\t&& this.completionItemKind === other.completionItemKind\n\t\t\t&& this.isSnippetText === other.isSnippetText;\n\t}\n\n\tpublic toSelectedSuggestionInfo(): SelectedSuggestionInfo {\n\t\treturn new SelectedSuggestionInfo(this.range, this.insertText, this.completionItemKind, this.isSnippetText);\n\t}\n\n\tpublic getSingleTextEdit(): TextReplacement {\n\t\treturn new TextReplacement(this.range, this.insertText);\n\t}\n}\n\nfunction suggestItemInfoEquals(a: SuggestItemInfo | undefined, b: SuggestItemInfo | undefined): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (!a || !b) {\n\t\treturn false;\n\t}\n\treturn a.equals(b);\n}\n\nexport class ObservableSuggestWidgetAdapter extends Disposable {\n\tprivate readonly _suggestWidgetAdaptor;\n\n\tpublic readonly selectedItem;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\n\t\tprivate readonly _handleSuggestAccepted: (item: SuggestItemInfo) => void,\n\t\tprivate readonly _suggestControllerPreselector: () => TextReplacement | undefined,\n\t) {\n\t\tsuper();\n\t\tthis._suggestWidgetAdaptor = this._register(new SuggestWidgetAdaptor(\n\t\t\tthis._editorObs.editor,\n\t\t\t() => {\n\t\t\t\tthis._editorObs.forceUpdate();\n\t\t\t\treturn this._suggestControllerPreselector();\n\t\t\t},\n\t\t\t(item) => this._editorObs.forceUpdate(_tx => {\n\t\t\t\t/** @description InlineCompletionsController.handleSuggestAccepted */\n\t\t\t\tthis._handleSuggestAccepted(item);\n\t\t\t})\n\t\t));\n\t\tthis.selectedItem = observableFromEvent(this, cb => this._suggestWidgetAdaptor.onDidSelectedItemChange(() => {\n\t\t\tthis._editorObs.forceUpdate(_tx => cb(undefined));\n\t\t}), () => this._suggestWidgetAdaptor.selectedItem);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.forceRenderingAbove();\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 { compareBy, numberComparator } from '../../../../../base/common/arrays.js';\nimport { findFirstMax } from '../../../../../base/common/arraysFind.js';\nimport { Emitter, Event } from '../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../../browser/editorBrowser.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { CompletionItemInsertTextRule, CompletionItemKind, SelectedSuggestionInfo } from '../../../../common/languages.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { singleTextEditAugments, singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js';\nimport { SnippetParser } from '../../../snippet/browser/snippetParser.js';\nimport { SnippetSession } from '../../../snippet/browser/snippetSession.js';\nimport { CompletionItem } from '../../../suggest/browser/suggest.js';\nimport { SuggestController } from '../../../suggest/browser/suggestController.js';\nimport { ObservableCodeEditor } from '../../../../browser/observableCodeEditor.js';\nimport { observableFromEvent } from '../../../../../base/common/observable.js';\n\nexport class SuggestWidgetAdaptor extends Disposable {\n\tprivate isSuggestWidgetVisible: boolean = false;\n\tprivate isShiftKeyPressed = false;\n\tprivate _isActive = false;\n\tprivate _currentSuggestItemInfo: SuggestItemInfo | undefined = undefined;\n\tpublic get selectedItem(): SuggestItemInfo | undefined {\n\t\treturn this._currentSuggestItemInfo;\n\t}\n\tprivate _onDidSelectedItemChange = this._register(new Emitter<void>());\n\tpublic readonly onDidSelectedItemChange: Event<void> = this._onDidSelectedItemChange.event;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly suggestControllerPreselector: () => TextReplacement | undefined,\n\t\tprivate readonly onWillAccept: (item: SuggestItemInfo) => void,\n\t) {\n\t\tsuper();\n\n\t\t// See the command acceptAlternativeSelectedSuggestion that is bound to shift+tab\n\t\tthis._register(editor.onKeyDown(e => {\n\t\t\tif (e.shiftKey && !this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = true;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\t\tthis._register(editor.onKeyUp(e => {\n\t\t\tif (e.shiftKey && this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = false;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (suggestController) {\n\t\t\tthis._register(suggestController.registerSelector({\n\t\t\t\tpriority: 100,\n\t\t\t\tselect: (model, pos, suggestItems) => {\n\t\t\t\t\tconst textModel = this.editor.getModel();\n\t\t\t\t\tif (!textModel) {\n\t\t\t\t\t\t// Should not happen\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst i = this.suggestControllerPreselector();\n\t\t\t\t\tconst itemToPreselect = i ? singleTextRemoveCommonPrefix(i, textModel) : undefined;\n\t\t\t\t\tif (!itemToPreselect) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tconst position = Position.lift(pos);\n\n\t\t\t\t\tconst candidates = suggestItems\n\t\t\t\t\t\t.map((suggestItem, index) => {\n\t\t\t\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(suggestController, textModel, position, suggestItem, this.isShiftKeyPressed);\n\t\t\t\t\t\t\tconst suggestItemTextEdit = singleTextRemoveCommonPrefix(suggestItemInfo.getSingleTextEdit(), textModel);\n\t\t\t\t\t\t\tconst valid = singleTextEditAugments(itemToPreselect, suggestItemTextEdit);\n\t\t\t\t\t\t\treturn { index, valid, prefixLength: suggestItemTextEdit.text.length, suggestItem };\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(item => item && item.valid && item.prefixLength > 0);\n\n\t\t\t\t\tconst result = findFirstMax(\n\t\t\t\t\t\tcandidates,\n\t\t\t\t\t\tcompareBy(s => s!.prefixLength, numberComparator)\n\t\t\t\t\t);\n\t\t\t\t\treturn result ? result.index : -1;\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tlet isBoundToSuggestWidget = false;\n\t\t\tconst bindToSuggestWidget = () => {\n\t\t\t\tif (isBoundToSuggestWidget) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tisBoundToSuggestWidget = true;\n\n\t\t\t\tthis._register(suggestController.widget.value.onDidShow(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidHide(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = false;\n\t\t\t\t\tthis.update(false);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidFocus(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t};\n\n\t\t\tthis._register(Event.once(suggestController.model.onDidTrigger)(e => {\n\t\t\t\tbindToSuggestWidget();\n\t\t\t}));\n\n\t\t\tthis._register(suggestController.onWillInsertSuggestItem(e => {\n\t\t\t\tconst position = this.editor.getPosition();\n\t\t\t\tconst model = this.editor.getModel();\n\t\t\t\tif (!position || !model) { return undefined; }\n\n\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(\n\t\t\t\t\tsuggestController,\n\t\t\t\t\tmodel,\n\t\t\t\t\tposition,\n\t\t\t\t\te.item,\n\t\t\t\t\tthis.isShiftKeyPressed\n\t\t\t\t);\n\n\t\t\t\tthis.onWillAccept(suggestItemInfo);\n\t\t\t}));\n\t\t}\n\t\tthis.update(this._isActive);\n\t}\n\n\tprivate update(newActive: boolean): void {\n\t\tconst newInlineCompletion = this.getSuggestItemInfo();\n\n\t\tif (this._isActive !== newActive || !suggestItemInfoEquals(this._currentSuggestItemInfo, newInlineCompletion)) {\n\t\t\tthis._isActive = newActive;\n\t\t\tthis._currentSuggestItemInfo = newInlineCompletion;\n\n\t\t\tthis._onDidSelectedItemChange.fire();\n\t\t}\n\t}\n\n\tprivate getSuggestItemInfo(): SuggestItemInfo | undefined {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (!suggestController || !this.isSuggestWidgetVisible) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst focusedItem = suggestController.widget.value.getFocusedItem();\n\t\tconst position = this.editor.getPosition();\n\t\tconst model = this.editor.getModel();\n\n\t\tif (!focusedItem || !position || !model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn SuggestItemInfo.fromSuggestion(\n\t\t\tsuggestController,\n\t\t\tmodel,\n\t\t\tposition,\n\t\t\tfocusedItem.item,\n\t\t\tthis.isShiftKeyPressed\n\t\t);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.forceRenderingAbove();\n\t}\n}\n\nexport class SuggestItemInfo {\n\tpublic static fromSuggestion(suggestController: SuggestController, model: ITextModel, position: Position, item: CompletionItem, toggleMode: boolean): SuggestItemInfo {\n\t\tlet { insertText } = item.completion;\n\t\tlet isSnippetText = false;\n\t\tif (item.completion.insertTextRules! & CompletionItemInsertTextRule.InsertAsSnippet) {\n\t\t\tconst snippet = new SnippetParser().parse(insertText);\n\n\t\t\tif (snippet.children.length < 100) {\n\t\t\t\t// Adjust whitespace is expensive.\n\t\t\t\tSnippetSession.adjustWhitespace(model, position, true, snippet);\n\t\t\t}\n\n\t\t\tinsertText = snippet.toString();\n\t\t\tisSnippetText = true;\n\t\t}\n\n\t\tconst info = suggestController.getOverwriteInfo(item, toggleMode);\n\n\t\treturn new SuggestItemInfo(\n\t\t\tRange.fromPositions(\n\t\t\t\tposition.delta(0, -info.overwriteBefore),\n\t\t\t\tposition.delta(0, Math.max(info.overwriteAfter, 0))\n\t\t\t),\n\t\t\tinsertText,\n\t\t\titem.completion.kind,\n\t\t\tisSnippetText,\n\t\t\titem.container.incomplete ?? false,\n\t\t);\n\t}\n\n\tprivate constructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly completionItemKind: CompletionItemKind,\n\t\tpublic readonly isSnippetText: boolean,\n\t\tpublic readonly listIncomplete: boolean,\n\t) { }\n\n\tpublic equals(other: SuggestItemInfo): boolean {\n\t\treturn this.range.equalsRange(other.range)\n\t\t\t&& this.insertText === other.insertText\n\t\t\t&& this.completionItemKind === other.completionItemKind\n\t\t\t&& this.isSnippetText === other.isSnippetText;\n\t}\n\n\tpublic toSelectedSuggestionInfo(): SelectedSuggestionInfo {\n\t\treturn new SelectedSuggestionInfo(this.range, this.insertText, this.completionItemKind, this.isSnippetText);\n\t}\n\n\tpublic getSingleTextEdit(): TextReplacement {\n\t\treturn new TextReplacement(this.range, this.insertText);\n\t}\n}\n\nfunction suggestItemInfoEquals(a: SuggestItemInfo | undefined, b: SuggestItemInfo | undefined): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (!a || !b) {\n\t\treturn false;\n\t}\n\treturn a.equals(b);\n}\n\nexport class ObservableSuggestWidgetAdapter extends Disposable {\n\tprivate readonly _suggestWidgetAdaptor;\n\n\tpublic readonly selectedItem;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\n\t\tprivate readonly _handleSuggestAccepted: (item: SuggestItemInfo) => void,\n\t\tprivate readonly _suggestControllerPreselector: () => TextReplacement | undefined,\n\t) {\n\t\tsuper();\n\t\tthis._suggestWidgetAdaptor = this._register(new SuggestWidgetAdaptor(\n\t\t\tthis._editorObs.editor,\n\t\t\t() => {\n\t\t\t\tthis._editorObs.forceUpdate();\n\t\t\t\treturn this._suggestControllerPreselector();\n\t\t\t},\n\t\t\t(item) => this._editorObs.forceUpdate(_tx => {\n\t\t\t\t/** @description InlineCompletionsController.handleSuggestAccepted */\n\t\t\t\tthis._handleSuggestAccepted(item);\n\t\t\t})\n\t\t));\n\t\tthis.selectedItem = observableFromEvent(this, cb => this._suggestWidgetAdaptor.onDidSelectedItemChange(() => {\n\t\t\tthis._editorObs.forceUpdate(_tx => cb(undefined));\n\t\t}), () => this._suggestWidgetAdaptor.selectedItem);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.forceRenderingAbove();\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.ts","vs/editor/contrib/inlineCompletions/browser/model/suggestWidgetAdapter.ts"],"names":[],"mappings":"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","file":"suggestWidgetAdapter.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 { compareBy, numberComparator } from '../../../../../base/common/arrays.js';\nimport { findFirstMax } from '../../../../../base/common/arraysFind.js';\nimport { Emitter, Event } from '../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../../browser/editorBrowser.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { CompletionItemInsertTextRule, CompletionItemKind, SelectedSuggestionInfo } from '../../../../common/languages.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { singleTextEditAugments, singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js';\nimport { SnippetParser } from '../../../snippet/browser/snippetParser.js';\nimport { SnippetSession } from '../../../snippet/browser/snippetSession.js';\nimport { CompletionItem } from '../../../suggest/browser/suggest.js';\nimport { SuggestController } from '../../../suggest/browser/suggestController.js';\nimport { ObservableCodeEditor } from '../../../../browser/observableCodeEditor.js';\nimport { observableFromEvent } from '../../../../../base/common/observable.js';\n\nexport class SuggestWidgetAdaptor extends Disposable {\n\tprivate isSuggestWidgetVisible: boolean = false;\n\tprivate isShiftKeyPressed = false;\n\tprivate _isActive = false;\n\tprivate _currentSuggestItemInfo: SuggestItemInfo | undefined = undefined;\n\tpublic get selectedItem(): SuggestItemInfo | undefined {\n\t\treturn this._currentSuggestItemInfo;\n\t}\n\tprivate _onDidSelectedItemChange = this._register(new Emitter<void>());\n\tpublic readonly onDidSelectedItemChange: Event<void> = this._onDidSelectedItemChange.event;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly suggestControllerPreselector: () => TextReplacement | undefined,\n\t\tprivate readonly onWillAccept: (item: SuggestItemInfo) => void,\n\t) {\n\t\tsuper();\n\n\t\t// See the command acceptAlternativeSelectedSuggestion that is bound to shift+tab\n\t\tthis._register(editor.onKeyDown(e => {\n\t\t\tif (e.shiftKey && !this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = true;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\t\tthis._register(editor.onKeyUp(e => {\n\t\t\tif (e.shiftKey && this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = false;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (suggestController) {\n\t\t\tthis._register(suggestController.registerSelector({\n\t\t\t\tpriority: 100,\n\t\t\t\tselect: (model, pos, suggestItems) => {\n\t\t\t\t\tconst textModel = this.editor.getModel();\n\t\t\t\t\tif (!textModel) {\n\t\t\t\t\t\t// Should not happen\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst i = this.suggestControllerPreselector();\n\t\t\t\t\tconst itemToPreselect = i ? singleTextRemoveCommonPrefix(i, textModel) : undefined;\n\t\t\t\t\tif (!itemToPreselect) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tconst position = Position.lift(pos);\n\n\t\t\t\t\tconst candidates = suggestItems\n\t\t\t\t\t\t.map((suggestItem, index) => {\n\t\t\t\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(suggestController, textModel, position, suggestItem, this.isShiftKeyPressed);\n\t\t\t\t\t\t\tconst suggestItemTextEdit = singleTextRemoveCommonPrefix(suggestItemInfo.getSingleTextEdit(), textModel);\n\t\t\t\t\t\t\tconst valid = singleTextEditAugments(itemToPreselect, suggestItemTextEdit);\n\t\t\t\t\t\t\treturn { index, valid, prefixLength: suggestItemTextEdit.text.length, suggestItem };\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(item => item && item.valid && item.prefixLength > 0);\n\n\t\t\t\t\tconst result = findFirstMax(\n\t\t\t\t\t\tcandidates,\n\t\t\t\t\t\tcompareBy(s => s.prefixLength, numberComparator)\n\t\t\t\t\t);\n\t\t\t\t\treturn result ? result.index : -1;\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tlet isBoundToSuggestWidget = false;\n\t\t\tconst bindToSuggestWidget = () => {\n\t\t\t\tif (isBoundToSuggestWidget) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tisBoundToSuggestWidget = true;\n\n\t\t\t\tthis._register(suggestController.widget.value.onDidShow(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidHide(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = false;\n\t\t\t\t\tthis.update(false);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidFocus(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t};\n\n\t\t\tthis._register(Event.once(suggestController.model.onDidTrigger)(e => {\n\t\t\t\tbindToSuggestWidget();\n\t\t\t}));\n\n\t\t\tthis._register(suggestController.onWillInsertSuggestItem(e => {\n\t\t\t\tconst position = this.editor.getPosition();\n\t\t\t\tconst model = this.editor.getModel();\n\t\t\t\tif (!position || !model) { return undefined; }\n\n\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(\n\t\t\t\t\tsuggestController,\n\t\t\t\t\tmodel,\n\t\t\t\t\tposition,\n\t\t\t\t\te.item,\n\t\t\t\t\tthis.isShiftKeyPressed\n\t\t\t\t);\n\n\t\t\t\tthis.onWillAccept(suggestItemInfo);\n\t\t\t}));\n\t\t}\n\t\tthis.update(this._isActive);\n\t}\n\n\tprivate update(newActive: boolean): void {\n\t\tconst newInlineCompletion = this.getSuggestItemInfo();\n\n\t\tif (this._isActive !== newActive || !suggestItemInfoEquals(this._currentSuggestItemInfo, newInlineCompletion)) {\n\t\t\tthis._isActive = newActive;\n\t\t\tthis._currentSuggestItemInfo = newInlineCompletion;\n\n\t\t\tthis._onDidSelectedItemChange.fire();\n\t\t}\n\t}\n\n\tprivate getSuggestItemInfo(): SuggestItemInfo | undefined {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (!suggestController || !this.isSuggestWidgetVisible) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst focusedItem = suggestController.widget.value.getFocusedItem();\n\t\tconst position = this.editor.getPosition();\n\t\tconst model = this.editor.getModel();\n\n\t\tif (!focusedItem || !position || !model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn SuggestItemInfo.fromSuggestion(\n\t\t\tsuggestController,\n\t\t\tmodel,\n\t\t\tposition,\n\t\t\tfocusedItem.item,\n\t\t\tthis.isShiftKeyPressed\n\t\t);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.forceRenderingAbove();\n\t}\n}\n\nexport class SuggestItemInfo {\n\tpublic static fromSuggestion(suggestController: SuggestController, model: ITextModel, position: Position, item: CompletionItem, toggleMode: boolean): SuggestItemInfo {\n\t\tlet { insertText } = item.completion;\n\t\tlet isSnippetText = false;\n\t\tif (item.completion.insertTextRules! & CompletionItemInsertTextRule.InsertAsSnippet) {\n\t\t\tconst snippet = new SnippetParser().parse(insertText);\n\n\t\t\tif (snippet.children.length < 100) {\n\t\t\t\t// Adjust whitespace is expensive.\n\t\t\t\tSnippetSession.adjustWhitespace(model, position, true, snippet);\n\t\t\t}\n\n\t\t\tinsertText = snippet.toString();\n\t\t\tisSnippetText = true;\n\t\t}\n\n\t\tconst info = suggestController.getOverwriteInfo(item, toggleMode);\n\n\t\treturn new SuggestItemInfo(\n\t\t\tRange.fromPositions(\n\t\t\t\tposition.delta(0, -info.overwriteBefore),\n\t\t\t\tposition.delta(0, Math.max(info.overwriteAfter, 0))\n\t\t\t),\n\t\t\tinsertText,\n\t\t\titem.completion.kind,\n\t\t\tisSnippetText,\n\t\t\titem.container.incomplete ?? false,\n\t\t);\n\t}\n\n\tprivate constructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly completionItemKind: CompletionItemKind,\n\t\tpublic readonly isSnippetText: boolean,\n\t\tpublic readonly listIncomplete: boolean,\n\t) { }\n\n\tpublic equals(other: SuggestItemInfo): boolean {\n\t\treturn this.range.equalsRange(other.range)\n\t\t\t&& this.insertText === other.insertText\n\t\t\t&& this.completionItemKind === other.completionItemKind\n\t\t\t&& this.isSnippetText === other.isSnippetText;\n\t}\n\n\tpublic toSelectedSuggestionInfo(): SelectedSuggestionInfo {\n\t\treturn new SelectedSuggestionInfo(this.range, this.insertText, this.completionItemKind, this.isSnippetText);\n\t}\n\n\tpublic getSingleTextEdit(): TextReplacement {\n\t\treturn new TextReplacement(this.range, this.insertText);\n\t}\n}\n\nfunction suggestItemInfoEquals(a: SuggestItemInfo | undefined, b: SuggestItemInfo | undefined): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (!a || !b) {\n\t\treturn false;\n\t}\n\treturn a.equals(b);\n}\n\nexport class ObservableSuggestWidgetAdapter extends Disposable {\n\tprivate readonly _suggestWidgetAdaptor;\n\n\tpublic readonly selectedItem;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\n\t\tprivate readonly _handleSuggestAccepted: (item: SuggestItemInfo) => void,\n\t\tprivate readonly _suggestControllerPreselector: () => TextReplacement | undefined,\n\t) {\n\t\tsuper();\n\t\tthis._suggestWidgetAdaptor = this._register(new SuggestWidgetAdaptor(\n\t\t\tthis._editorObs.editor,\n\t\t\t() => {\n\t\t\t\tthis._editorObs.forceUpdate();\n\t\t\t\treturn this._suggestControllerPreselector();\n\t\t\t},\n\t\t\t(item) => this._editorObs.forceUpdate(_tx => {\n\t\t\t\t/** @description InlineCompletionsController.handleSuggestAccepted */\n\t\t\t\tthis._handleSuggestAccepted(item);\n\t\t\t})\n\t\t));\n\t\tthis.selectedItem = observableFromEvent(this, cb => this._suggestWidgetAdaptor.onDidSelectedItemChange(() => {\n\t\t\tthis._editorObs.forceUpdate(_tx => cb(undefined));\n\t\t}), () => this._suggestWidgetAdaptor.selectedItem);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.forceRenderingAbove();\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 { compareBy, numberComparator } from '../../../../../base/common/arrays.js';\nimport { findFirstMax } from '../../../../../base/common/arraysFind.js';\nimport { Emitter, Event } from '../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../../browser/editorBrowser.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { CompletionItemInsertTextRule, CompletionItemKind, SelectedSuggestionInfo } from '../../../../common/languages.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { singleTextEditAugments, singleTextRemoveCommonPrefix } from './singleTextEditHelpers.js';\nimport { SnippetParser } from '../../../snippet/browser/snippetParser.js';\nimport { SnippetSession } from '../../../snippet/browser/snippetSession.js';\nimport { CompletionItem } from '../../../suggest/browser/suggest.js';\nimport { SuggestController } from '../../../suggest/browser/suggestController.js';\nimport { ObservableCodeEditor } from '../../../../browser/observableCodeEditor.js';\nimport { observableFromEvent } from '../../../../../base/common/observable.js';\n\nexport class SuggestWidgetAdaptor extends Disposable {\n\tprivate isSuggestWidgetVisible: boolean = false;\n\tprivate isShiftKeyPressed = false;\n\tprivate _isActive = false;\n\tprivate _currentSuggestItemInfo: SuggestItemInfo | undefined = undefined;\n\tpublic get selectedItem(): SuggestItemInfo | undefined {\n\t\treturn this._currentSuggestItemInfo;\n\t}\n\tprivate _onDidSelectedItemChange = this._register(new Emitter<void>());\n\tpublic readonly onDidSelectedItemChange: Event<void> = this._onDidSelectedItemChange.event;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\tprivate readonly suggestControllerPreselector: () => TextReplacement | undefined,\n\t\tprivate readonly onWillAccept: (item: SuggestItemInfo) => void,\n\t) {\n\t\tsuper();\n\n\t\t// See the command acceptAlternativeSelectedSuggestion that is bound to shift+tab\n\t\tthis._register(editor.onKeyDown(e => {\n\t\t\tif (e.shiftKey && !this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = true;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\t\tthis._register(editor.onKeyUp(e => {\n\t\t\tif (e.shiftKey && this.isShiftKeyPressed) {\n\t\t\t\tthis.isShiftKeyPressed = false;\n\t\t\t\tthis.update(this._isActive);\n\t\t\t}\n\t\t}));\n\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (suggestController) {\n\t\t\tthis._register(suggestController.registerSelector({\n\t\t\t\tpriority: 100,\n\t\t\t\tselect: (model, pos, suggestItems) => {\n\t\t\t\t\tconst textModel = this.editor.getModel();\n\t\t\t\t\tif (!textModel) {\n\t\t\t\t\t\t// Should not happen\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst i = this.suggestControllerPreselector();\n\t\t\t\t\tconst itemToPreselect = i ? singleTextRemoveCommonPrefix(i, textModel) : undefined;\n\t\t\t\t\tif (!itemToPreselect) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\tconst position = Position.lift(pos);\n\n\t\t\t\t\tconst candidates = suggestItems\n\t\t\t\t\t\t.map((suggestItem, index) => {\n\t\t\t\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(suggestController, textModel, position, suggestItem, this.isShiftKeyPressed);\n\t\t\t\t\t\t\tconst suggestItemTextEdit = singleTextRemoveCommonPrefix(suggestItemInfo.getSingleTextEdit(), textModel);\n\t\t\t\t\t\t\tconst valid = singleTextEditAugments(itemToPreselect, suggestItemTextEdit);\n\t\t\t\t\t\t\treturn { index, valid, prefixLength: suggestItemTextEdit.text.length, suggestItem };\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(item => item && item.valid && item.prefixLength > 0);\n\n\t\t\t\t\tconst result = findFirstMax(\n\t\t\t\t\t\tcandidates,\n\t\t\t\t\t\tcompareBy(s => s.prefixLength, numberComparator)\n\t\t\t\t\t);\n\t\t\t\t\treturn result ? result.index : -1;\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tlet isBoundToSuggestWidget = false;\n\t\t\tconst bindToSuggestWidget = () => {\n\t\t\t\tif (isBoundToSuggestWidget) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tisBoundToSuggestWidget = true;\n\n\t\t\t\tthis._register(suggestController.widget.value.onDidShow(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidHide(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = false;\n\t\t\t\t\tthis.update(false);\n\t\t\t\t}));\n\t\t\t\tthis._register(suggestController.widget.value.onDidFocus(() => {\n\t\t\t\t\tthis.isSuggestWidgetVisible = true;\n\t\t\t\t\tthis.update(true);\n\t\t\t\t}));\n\t\t\t};\n\n\t\t\tthis._register(Event.once(suggestController.model.onDidTrigger)(e => {\n\t\t\t\tbindToSuggestWidget();\n\t\t\t}));\n\n\t\t\tthis._register(suggestController.onWillInsertSuggestItem(e => {\n\t\t\t\tconst position = this.editor.getPosition();\n\t\t\t\tconst model = this.editor.getModel();\n\t\t\t\tif (!position || !model) { return undefined; }\n\n\t\t\t\tconst suggestItemInfo = SuggestItemInfo.fromSuggestion(\n\t\t\t\t\tsuggestController,\n\t\t\t\t\tmodel,\n\t\t\t\t\tposition,\n\t\t\t\t\te.item,\n\t\t\t\t\tthis.isShiftKeyPressed\n\t\t\t\t);\n\n\t\t\t\tthis.onWillAccept(suggestItemInfo);\n\t\t\t}));\n\t\t}\n\t\tthis.update(this._isActive);\n\t}\n\n\tprivate update(newActive: boolean): void {\n\t\tconst newInlineCompletion = this.getSuggestItemInfo();\n\n\t\tif (this._isActive !== newActive || !suggestItemInfoEquals(this._currentSuggestItemInfo, newInlineCompletion)) {\n\t\t\tthis._isActive = newActive;\n\t\t\tthis._currentSuggestItemInfo = newInlineCompletion;\n\n\t\t\tthis._onDidSelectedItemChange.fire();\n\t\t}\n\t}\n\n\tprivate getSuggestItemInfo(): SuggestItemInfo | undefined {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tif (!suggestController || !this.isSuggestWidgetVisible) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst focusedItem = suggestController.widget.value.getFocusedItem();\n\t\tconst position = this.editor.getPosition();\n\t\tconst model = this.editor.getModel();\n\n\t\tif (!focusedItem || !position || !model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn SuggestItemInfo.fromSuggestion(\n\t\t\tsuggestController,\n\t\t\tmodel,\n\t\t\tposition,\n\t\t\tfocusedItem.item,\n\t\t\tthis.isShiftKeyPressed\n\t\t);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tconst suggestController = SuggestController.get(this.editor);\n\t\tsuggestController?.forceRenderingAbove();\n\t}\n}\n\nexport class SuggestItemInfo {\n\tpublic static fromSuggestion(suggestController: SuggestController, model: ITextModel, position: Position, item: CompletionItem, toggleMode: boolean): SuggestItemInfo {\n\t\tlet { insertText } = item.completion;\n\t\tlet isSnippetText = false;\n\t\tif (item.completion.insertTextRules! & CompletionItemInsertTextRule.InsertAsSnippet) {\n\t\t\tconst snippet = new SnippetParser().parse(insertText);\n\n\t\t\tif (snippet.children.length < 100) {\n\t\t\t\t// Adjust whitespace is expensive.\n\t\t\t\tSnippetSession.adjustWhitespace(model, position, true, snippet);\n\t\t\t}\n\n\t\t\tinsertText = snippet.toString();\n\t\t\tisSnippetText = true;\n\t\t}\n\n\t\tconst info = suggestController.getOverwriteInfo(item, toggleMode);\n\n\t\treturn new SuggestItemInfo(\n\t\t\tRange.fromPositions(\n\t\t\t\tposition.delta(0, -info.overwriteBefore),\n\t\t\t\tposition.delta(0, Math.max(info.overwriteAfter, 0))\n\t\t\t),\n\t\t\tinsertText,\n\t\t\titem.completion.kind,\n\t\t\tisSnippetText,\n\t\t\titem.container.incomplete ?? false,\n\t\t);\n\t}\n\n\tprivate constructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly completionItemKind: CompletionItemKind,\n\t\tpublic readonly isSnippetText: boolean,\n\t\tpublic readonly listIncomplete: boolean,\n\t) { }\n\n\tpublic equals(other: SuggestItemInfo): boolean {\n\t\treturn this.range.equalsRange(other.range)\n\t\t\t&& this.insertText === other.insertText\n\t\t\t&& this.completionItemKind === other.completionItemKind\n\t\t\t&& this.isSnippetText === other.isSnippetText;\n\t}\n\n\tpublic toSelectedSuggestionInfo(): SelectedSuggestionInfo {\n\t\treturn new SelectedSuggestionInfo(this.range, this.insertText, this.completionItemKind, this.isSnippetText);\n\t}\n\n\tpublic getSingleTextEdit(): TextReplacement {\n\t\treturn new TextReplacement(this.range, this.insertText);\n\t}\n}\n\nfunction suggestItemInfoEquals(a: SuggestItemInfo | undefined, b: SuggestItemInfo | undefined): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (!a || !b) {\n\t\treturn false;\n\t}\n\treturn a.equals(b);\n}\n\nexport class ObservableSuggestWidgetAdapter extends Disposable {\n\tprivate readonly _suggestWidgetAdaptor;\n\n\tpublic readonly selectedItem;\n\n\tconstructor(\n\t\tprivate readonly _editorObs: ObservableCodeEditor,\n\n\t\tprivate readonly _handleSuggestAccepted: (item: SuggestItemInfo) => void,\n\t\tprivate readonly _suggestControllerPreselector: () => TextReplacement | undefined,\n\t) {\n\t\tsuper();\n\t\tthis._suggestWidgetAdaptor = this._register(new SuggestWidgetAdaptor(\n\t\t\tthis._editorObs.editor,\n\t\t\t() => {\n\t\t\t\tthis._editorObs.forceUpdate();\n\t\t\t\treturn this._suggestControllerPreselector();\n\t\t\t},\n\t\t\t(item) => this._editorObs.forceUpdate(_tx => {\n\t\t\t\t/** @description InlineCompletionsController.handleSuggestAccepted */\n\t\t\t\tthis._handleSuggestAccepted(item);\n\t\t\t})\n\t\t));\n\t\tthis.selectedItem = observableFromEvent(this, cb => this._suggestWidgetAdaptor.onDidSelectedItemChange(() => {\n\t\t\tthis._editorObs.forceUpdate(_tx => cb(undefined));\n\t\t}), () => this._suggestWidgetAdaptor.selectedItem);\n\t}\n\n\tpublic stopForceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.stopForceRenderingAbove();\n\t}\n\n\tpublic forceRenderingAbove(): void {\n\t\tthis._suggestWidgetAdaptor.forceRenderingAbove();\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts"],"names":[],"mappings":"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","file":"originalEditorInlineDiffView.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 { IMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick;\n\treadonly onDidClick;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange()!,\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\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 { IMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick;\n\treadonly onDidClick;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange()!,\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.ts"],"names":[],"mappings":"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","file":"originalEditorInlineDiffView.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 { IMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick;\n\treadonly onDidClick;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange(),\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\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 { IMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived, IObservable, observableFromEvent } from '../../../../../../../base/common/observable.js';\nimport { ICodeEditor, MouseTargetType } from '../../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { rangeIsSingleLine } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js';\nimport { OffsetRange } from '../../../../../../common/core/ranges/offsetRange.js';\nimport { Range } from '../../../../../../common/core/range.js';\nimport { AbstractText } from '../../../../../../common/core/text/abstractText.js';\nimport { DetailedLineRangeMapping } from '../../../../../../common/diff/rangeMapping.js';\nimport { EndOfLinePreference, IModelDeltaDecoration, InjectedTextCursorStops, ITextModel } from '../../../../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../../../../common/model/textModel.js';\nimport { IInlineEditsView } from '../inlineEditsViewInterface.js';\nimport { classNames } from '../utils/utils.js';\n\nexport interface IOriginalEditorInlineDiffViewState {\n\tdiff: DetailedLineRangeMapping[];\n\tmodifiedText: AbstractText;\n\tmode: 'insertionInline' | 'sideBySide' | 'deletion' | 'lineReplacement';\n\tisInDiffEditor: boolean;\n\n\tmodifiedCodeEditor: ICodeEditor;\n}\n\nexport class OriginalEditorInlineDiffView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick;\n\treadonly onDidClick;\n\n\treadonly isHovered;\n\n\tprivate readonly _tokenizationFinished;\n\n\tconstructor(\n\t\tprivate readonly _originalEditor: ICodeEditor,\n\t\tprivate readonly _state: IObservable<IOriginalEditorInlineDiffViewState | undefined>,\n\t\tprivate readonly _modifiedTextModel: ITextModel,\n\t) {\n\t\tsuper();\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis.isHovered = observableCodeEditor(this._originalEditor).isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof InlineEditAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis._tokenizationFinished = modelTokenizationFinished(this._modifiedTextModel);\n\t\tthis._decorations = derived(this, reader => {\n\t\t\tconst diff = this._state.read(reader);\n\t\t\tif (!diff) { return undefined; }\n\n\t\t\tconst modified = diff.modifiedText;\n\t\t\tconst showInline = diff.mode === 'insertionInline';\n\t\t\tconst hasOneInnerChange = diff.diff.length === 1 && diff.diff[0].innerChanges?.length === 1;\n\n\t\t\tconst showEmptyDecorations = true;\n\n\t\t\tconst originalDecorations: IModelDeltaDecoration[] = [];\n\t\t\tconst modifiedDecorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst diffLineAddDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-insert',\n\t\t\t\tdescription: 'line-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-insert',\n\t\t\t});\n\n\t\t\tconst diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-line-delete',\n\t\t\t\tdescription: 'line-delete',\n\t\t\t\tisWholeLine: true,\n\t\t\t\tmarginClassName: 'gutter-delete',\n\t\t\t});\n\n\t\t\tconst diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-delete',\n\t\t\t\tdescription: 'char-delete',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tzIndex: 1, // be on top of diff background decoration\n\t\t\t});\n\n\t\t\tconst diffWholeLineAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tisWholeLine: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecoration = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert',\n\t\t\t\tdescription: 'char-insert',\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst diffAddDecorationEmpty = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-char-insert diff-range-empty',\n\t\t\t\tdescription: 'char-insert diff-range-empty',\n\t\t\t});\n\n\t\t\tconst NESOriginalBackground = ModelDecorationOptions.register({\n\t\t\t\tclassName: 'inlineCompletions-original-lines',\n\t\t\t\tdescription: 'inlineCompletions-original-lines',\n\t\t\t\tisWholeLine: false,\n\t\t\t\tshouldFillLineOnLineBreak: true,\n\t\t\t});\n\n\t\t\tconst showFullLineDecorations = diff.mode !== 'sideBySide' && diff.mode !== 'deletion' && diff.mode !== 'insertionInline' && diff.mode !== 'lineReplacement';\n\t\t\tconst hideEmptyInnerDecorations = diff.mode === 'lineReplacement';\n\t\t\tfor (const m of diff.diff) {\n\t\t\t\tif (showFullLineDecorations) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineDeleteDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\trange: m.modified.toInclusiveRange()!,\n\t\t\t\t\t\t\toptions: diffLineAddDecorationBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (m.modified.isEmpty || m.original.isEmpty) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({ range: m.original.toInclusiveRange()!, options: diffWholeLineDeleteDecoration });\n\t\t\t\t\t}\n\t\t\t\t\tif (!m.modified.isEmpty) {\n\t\t\t\t\t\tmodifiedDecorations.push({ range: m.modified.toInclusiveRange()!, options: diffWholeLineAddDecoration });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst useInlineDiff = showInline && allowsTrueInlineDiffRendering(m);\n\t\t\t\t\tfor (const i of m.innerChanges || []) {\n\t\t\t\t\t\t// Don't show empty markers outside the line range\n\t\t\t\t\t\tif (m.original.contains(i.originalRange.startLineNumber) && !(hideEmptyInnerDecorations && i.originalRange.isEmpty())) {\n\t\t\t\t\t\t\tconst replacedText = this._originalEditor.getModel()?.getValueInRange(i.originalRange, EndOfLinePreference.LF);\n\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\trange: i.originalRange,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\tdescription: 'char-delete',\n\t\t\t\t\t\t\t\t\tshouldFillLineOnLineBreak: false,\n\t\t\t\t\t\t\t\t\tclassName: classNames(\n\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-delete',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\ti.originalRange.isEmpty() && 'empty',\n\t\t\t\t\t\t\t\t\t\t((i.originalRange.isEmpty() && hasOneInnerChange || diff.mode === 'deletion' && replacedText === '\\n') && showEmptyDecorations && !useInlineDiff) && 'diff-range-empty'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tinlineClassName: useInlineDiff ? classNames('strike-through', 'inlineCompletions') : null,\n\t\t\t\t\t\t\t\t\tzIndex: 1\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (m.modified.contains(i.modifiedRange.startLineNumber)) {\n\t\t\t\t\t\t\tmodifiedDecorations.push({\n\t\t\t\t\t\t\t\trange: i.modifiedRange,\n\t\t\t\t\t\t\t\toptions: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff && hasOneInnerChange)\n\t\t\t\t\t\t\t\t\t? diffAddDecorationEmpty\n\t\t\t\t\t\t\t\t\t: diffAddDecoration\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (useInlineDiff) {\n\t\t\t\t\t\t\tconst insertedText = modified.getValueOfRange(i.modifiedRange);\n\t\t\t\t\t\t\t// when the injected text becomes long, the editor will split it into multiple spans\n\t\t\t\t\t\t\t// to be able to get the border around the start and end of the text, we need to split it into multiple segments\n\t\t\t\t\t\t\tconst textSegments = insertedText.length > 3 ?\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(0, 1), extraClasses: ['start'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.startColumn) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(1, -1), extraClasses: [], offsetRange: new OffsetRange(i.modifiedRange.startColumn, i.modifiedRange.endColumn - 2) },\n\t\t\t\t\t\t\t\t\t{ text: insertedText.slice(-1), extraClasses: ['end'], offsetRange: new OffsetRange(i.modifiedRange.endColumn - 2, i.modifiedRange.endColumn - 1) }\n\t\t\t\t\t\t\t\t] :\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t{ text: insertedText, extraClasses: ['start', 'end'], offsetRange: new OffsetRange(i.modifiedRange.startColumn - 1, i.modifiedRange.endColumn) }\n\t\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\t// Tokenization\n\t\t\t\t\t\t\tthis._tokenizationFinished.read(reader); // reconsider when tokenization is finished\n\t\t\t\t\t\t\tconst lineTokens = this._modifiedTextModel.tokenization.getLineTokens(i.modifiedRange.startLineNumber);\n\n\t\t\t\t\t\t\tfor (const { text, extraClasses, offsetRange } of textSegments) {\n\t\t\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\t\t\trange: Range.fromPositions(i.originalRange.getEndPosition()),\n\t\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\t\tdescription: 'inserted-text',\n\t\t\t\t\t\t\t\t\t\tbefore: {\n\t\t\t\t\t\t\t\t\t\t\ttokens: lineTokens.getTokensInRange(offsetRange),\n\t\t\t\t\t\t\t\t\t\t\tcontent: text,\n\t\t\t\t\t\t\t\t\t\t\tinlineClassName: classNames(\n\t\t\t\t\t\t\t\t\t\t\t\t'inlineCompletions-char-insert',\n\t\t\t\t\t\t\t\t\t\t\t\ti.modifiedRange.isSingleLine() && diff.mode === 'insertionInline' && 'single-line-inline',\n\t\t\t\t\t\t\t\t\t\t\t\t...extraClasses // include extraClasses for additional styling if provided\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.None,\n\t\t\t\t\t\t\t\t\t\t\tattachedData: new InlineEditAttachedData(this),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (diff.isInDiffEditor) {\n\t\t\t\tfor (const m of diff.diff) {\n\t\t\t\t\tif (!m.original.isEmpty) {\n\t\t\t\t\t\toriginalDecorations.push({\n\t\t\t\t\t\t\trange: m.original.toExclusiveRange(),\n\t\t\t\t\t\t\toptions: NESOriginalBackground,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { originalDecorations, modifiedDecorations };\n\t\t});\n\n\t\tthis._register(observableCodeEditor(this._originalEditor).setDecorations(this._decorations.map(d => d?.originalDecorations ?? [])));\n\n\t\tconst modifiedCodeEditor = this._state.map(s => s?.modifiedCodeEditor);\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tconst e = modifiedCodeEditor.read(reader);\n\t\t\tif (e) {\n\t\t\t\tstore.add(observableCodeEditor(e).setDecorations(this._decorations.map(d => d?.modifiedDecorations ?? [])));\n\t\t\t}\n\t\t}));\n\n\t\tthis._register(this._originalEditor.onMouseUp(e => {\n\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\tif (a instanceof InlineEditAttachedData && a.owner === this) {\n\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t}\n\t\t}));\n\t}\n\n\tprivate readonly _decorations;\n}\n\nclass InlineEditAttachedData {\n\tconstructor(public readonly owner: OriginalEditorInlineDiffView) { }\n}\n\nfunction allowsTrueInlineDiffRendering(mapping: DetailedLineRangeMapping): boolean {\n\tif (!mapping.innerChanges) {\n\t\treturn false;\n\t}\n\treturn mapping.innerChanges.every(c =>\n\t\t(rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange)));\n}\n\nlet i = 0;\nfunction modelTokenizationFinished(model: ITextModel): IObservable<number> {\n\treturn observableFromEvent(model.onDidChangeTokens, () => i++);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["vs/editor/contrib/links/browser/links.ts"],"names":[],"mappings":"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","file":"links.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 { createCancelablePromise, CancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { MarkdownString } from '../../../../base/common/htmlContent.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../../base/common/network.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport * as resources from '../../../../base/common/resources.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport './links.css';\nimport { ICodeEditor, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { LinkProvider } from '../../../common/languages.js';\nimport { IModelDecorationsChangeAccessor, IModelDeltaDecoration, TrackedRangeStickiness } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ClickLinkGesture, ClickLinkKeyboardEvent, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js';\nimport { getLinks, Link, LinksList } from './getLinks.js';\nimport * as nls from '../../../../nls.js';\nimport { INotificationService } from '../../../../platform/notification/common/notification.js';\nimport { IOpenerService } from '../../../../platform/opener/common/opener.js';\n\nexport class LinkDetector extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID: string = 'editor.linkDetector';\n\n\tpublic static get(editor: ICodeEditor): LinkDetector | null {\n\t\treturn editor.getContribution<LinkDetector>(LinkDetector.ID);\n\t}\n\n\tprivate readonly providers: LanguageFeatureRegistry<LinkProvider>;\n\tprivate readonly debounceInformation: IFeatureDebounceInformation;\n\tprivate readonly computeLinks: RunOnceScheduler;\n\tprivate computePromise: CancelablePromise<LinksList> | null;\n\tprivate activeLinksList: LinksList | null;\n\tprivate activeLinkDecorationId: string | null;\n\tprivate currentOccurrences: { [decorationId: string]: LinkOccurrence };\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\t@IOpenerService private readonly openerService: IOpenerService,\n\t\t@INotificationService private readonly notificationService: INotificationService,\n\t\t@ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t) {\n\t\tsuper();\n\n\t\tthis.providers = this.languageFeaturesService.linkProvider;\n\t\tthis.debounceInformation = languageFeatureDebounceService.for(this.providers, 'Links', { min: 1000, max: 4000 });\n\t\tthis.computeLinks = this._register(new RunOnceScheduler(() => this.computeLinksNow(), 1000));\n\t\tthis.computePromise = null;\n\t\tthis.activeLinksList = null;\n\t\tthis.currentOccurrences = {};\n\t\tthis.activeLinkDecorationId = null;\n\n\t\tconst clickLinkGesture = this._register(new ClickLinkGesture(editor));\n\n\t\tthis._register(clickLinkGesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, keyboardEvent]) => {\n\t\t\tthis._onEditorMouseMove(mouseEvent, keyboardEvent);\n\t\t}));\n\t\tthis._register(clickLinkGesture.onExecute((e) => {\n\t\t\tthis.onEditorMouseUp(e);\n\t\t}));\n\t\tthis._register(clickLinkGesture.onCancel((e) => {\n\t\t\tthis.cleanUpActiveLinkDecoration();\n\t\t}));\n\t\tthis._register(editor.onDidChangeConfiguration((e) => {\n\t\t\tif (!e.hasChanged(EditorOption.links)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Remove any links (for the getting disabled case)\n\t\t\tthis.updateDecorations([]);\n\n\t\t\t// Stop any computation (for the getting disabled case)\n\t\t\tthis.stop();\n\n\t\t\t// Start computing (for the getting enabled case)\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\t\tthis._register(editor.onDidChangeModelContent((e) => {\n\t\t\tif (!this.editor.hasModel()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.computeLinks.schedule(this.debounceInformation.get(this.editor.getModel()));\n\t\t}));\n\t\tthis._register(editor.onDidChangeModel((e) => {\n\t\t\tthis.currentOccurrences = {};\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t\tthis.stop();\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\t\tthis._register(editor.onDidChangeModelLanguage((e) => {\n\t\t\tthis.stop();\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\t\tthis._register(this.providers.onDidChange((e) => {\n\t\t\tthis.stop();\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\n\t\tthis.computeLinks.schedule(0);\n\t}\n\n\tprivate async computeLinksNow(): Promise<void> {\n\t\tif (!this.editor.hasModel() || !this.editor.getOption(EditorOption.links)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.editor.getModel();\n\n\t\tif (model.isTooLargeForSyncing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.providers.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.activeLinksList) {\n\t\t\tthis.activeLinksList.dispose();\n\t\t\tthis.activeLinksList = null;\n\t\t}\n\n\t\tthis.computePromise = createCancelablePromise(token => getLinks(this.providers, model, token));\n\t\ttry {\n\t\t\tconst sw = new StopWatch(false);\n\t\t\tthis.activeLinksList = await this.computePromise;\n\t\t\tthis.debounceInformation.update(model, sw.elapsed());\n\t\t\tif (model.isDisposed()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.updateDecorations(this.activeLinksList.links);\n\t\t} catch (err) {\n\t\t\tonUnexpectedError(err);\n\t\t} finally {\n\t\t\tthis.computePromise = null;\n\t\t}\n\t}\n\n\tprivate updateDecorations(links: Link[]): void {\n\t\tconst useMetaKey = (this.editor.getOption(EditorOption.multiCursorModifier) === 'altKey');\n\t\tconst oldDecorations: string[] = [];\n\t\tconst keys = Object.keys(this.currentOccurrences);\n\t\tfor (const decorationId of keys) {\n\t\t\tconst occurence = this.currentOccurrences[decorationId];\n\t\t\toldDecorations.push(occurence.decorationId);\n\t\t}\n\n\t\tconst newDecorations: IModelDeltaDecoration[] = [];\n\t\tif (links) {\n\t\t\t// Not sure why this is sometimes null\n\t\t\tfor (const link of links) {\n\t\t\t\tnewDecorations.push(LinkOccurrence.decoration(link, useMetaKey));\n\t\t\t}\n\t\t}\n\n\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\tconst decorations = changeAccessor.deltaDecorations(oldDecorations, newDecorations);\n\n\t\t\tthis.currentOccurrences = {};\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\t\tconst occurence = new LinkOccurrence(links[i], decorations[i]);\n\t\t\t\tthis.currentOccurrences[occurence.decorationId] = occurence;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _onEditorMouseMove(mouseEvent: ClickLinkMouseEvent, withKey: ClickLinkKeyboardEvent | null): void {\n\t\tconst useMetaKey = (this.editor.getOption(EditorOption.multiCursorModifier) === 'altKey');\n\t\tif (this.isEnabled(mouseEvent, withKey)) {\n\t\t\tthis.cleanUpActiveLinkDecoration(); // always remove previous link decoration as their can only be one\n\t\t\tconst occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n\t\t\tif (occurrence) {\n\t\t\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\t\t\toccurrence.activate(changeAccessor, useMetaKey);\n\t\t\t\t\tthis.activeLinkDecorationId = occurrence.decorationId;\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.cleanUpActiveLinkDecoration();\n\t\t}\n\t}\n\n\tprivate cleanUpActiveLinkDecoration(): void {\n\t\tconst useMetaKey = (this.editor.getOption(EditorOption.multiCursorModifier) === 'altKey');\n\t\tif (this.activeLinkDecorationId) {\n\t\t\tconst occurrence = this.currentOccurrences[this.activeLinkDecorationId];\n\t\t\tif (occurrence) {\n\t\t\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\t\t\toccurrence.deactivate(changeAccessor, useMetaKey);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t}\n\t}\n\n\tprivate onEditorMouseUp(mouseEvent: ClickLinkMouseEvent): void {\n\t\tif (!this.isEnabled(mouseEvent)) {\n\t\t\treturn;\n\t\t}\n\t\tconst occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n\t\tif (!occurrence) {\n\t\t\treturn;\n\t\t}\n\t\tthis.openLinkOccurrence(occurrence, mouseEvent.hasSideBySideModifier, true /* from user gesture */);\n\t}\n\n\tpublic openLinkOccurrence(occurrence: LinkOccurrence, openToSide: boolean, fromUserGesture = false): void {\n\n\t\tif (!this.openerService) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { link } = occurrence;\n\n\t\tlink.resolve(CancellationToken.None).then(uri => {\n\n\t\t\t// Support for relative file URIs of the shape file://./relativeFile.txt or file:///./relativeFile.txt\n\t\t\tif (typeof uri === 'string' && this.editor.hasModel()) {\n\t\t\t\tconst modelUri = this.editor.getModel().uri;\n\t\t\t\tif (modelUri.scheme === Schemas.file && uri.startsWith(`${Schemas.file}:`)) {\n\t\t\t\t\tconst parsedUri = URI.parse(uri);\n\t\t\t\t\tif (parsedUri.scheme === Schemas.file) {\n\t\t\t\t\t\tconst fsPath = resources.originalFSPath(parsedUri);\n\n\t\t\t\t\t\tlet relativePath: string | null = null;\n\t\t\t\t\t\tif (fsPath.startsWith('/./') || fsPath.startsWith('\\\\.\\\\')) {\n\t\t\t\t\t\t\trelativePath = `.${fsPath.substr(1)}`;\n\t\t\t\t\t\t} else if (fsPath.startsWith('//./') || fsPath.startsWith('\\\\\\\\.\\\\')) {\n\t\t\t\t\t\t\trelativePath = `.${fsPath.substr(2)}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (relativePath) {\n\t\t\t\t\t\t\turi = resources.joinPath(modelUri, relativePath);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.openerService.open(uri, { openToSide, fromUserGesture, allowContributedOpeners: true, allowCommands: true, fromWorkspace: true });\n\n\t\t}, err => {\n\t\t\tconst messageOrError =\n\t\t\t\terr instanceof Error ? (<Error>err).message : err;\n\t\t\t// different error cases\n\t\t\tif (messageOrError === 'invalid') {\n\t\t\t\tthis.notificationService.warn(nls.localize('invalid.url', 'Failed to open this link because it is not well-formed: {0}', link.url!.toString()));\n\t\t\t} else if (messageOrError === 'missing') {\n\t\t\t\tthis.notificationService.warn(nls.localize('missing.url', 'Failed to open this link because its target is missing.'));\n\t\t\t} else {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getLinkOccurrence(position: Position | null): LinkOccurrence | null {\n\t\tif (!this.editor.hasModel() || !position) {\n\t\t\treturn null;\n\t\t}\n\t\tconst decorations = this.editor.getModel().getDecorationsInRange({\n\t\t\tstartLineNumber: position.lineNumber,\n\t\t\tstartColumn: position.column,\n\t\t\tendLineNumber: position.lineNumber,\n\t\t\tendColumn: position.column\n\t\t}, 0, true);\n\n\t\tfor (const decoration of decorations) {\n\t\t\tconst currentOccurrence = this.currentOccurrences[decoration.id];\n\t\t\tif (currentOccurrence) {\n\t\t\t\treturn currentOccurrence;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate isEnabled(mouseEvent: ClickLinkMouseEvent, withKey?: ClickLinkKeyboardEvent | null): boolean {\n\t\treturn Boolean(\n\t\t\t(mouseEvent.target.type === MouseTargetType.CONTENT_TEXT)\n\t\t\t&& ((mouseEvent.hasTriggerModifier || (withKey && withKey.keyCodeIsTriggerKey)) || mouseEvent.isMiddleClick && mouseEvent.mouseMiddleClickAction === 'openLink')\n\t\t);\n\t}\n\n\tprivate stop(): void {\n\t\tthis.computeLinks.cancel();\n\t\tif (this.activeLinksList) {\n\t\t\tthis.activeLinksList?.dispose();\n\t\t\tthis.activeLinksList = null;\n\t\t}\n\t\tif (this.computePromise) {\n\t\t\tthis.computePromise.cancel();\n\t\t\tthis.computePromise = null;\n\t\t}\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.stop();\n\t}\n}\n\nconst decoration = {\n\tgeneral: ModelDecorationOptions.register({\n\t\tdescription: 'detected-link',\n\t\tstickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tcollapseOnReplaceEdit: true,\n\t\tinlineClassName: 'detected-link'\n\t}),\n\tactive: ModelDecorationOptions.register({\n\t\tdescription: 'detected-link-active',\n\t\tstickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tcollapseOnReplaceEdit: true,\n\t\tinlineClassName: 'detected-link-active'\n\t})\n};\n\nclass LinkOccurrence {\n\n\tpublic static decoration(link: Link, useMetaKey: boolean): IModelDeltaDecoration {\n\t\treturn {\n\t\t\trange: link.range,\n\t\t\toptions: LinkOccurrence._getOptions(link, useMetaKey, false)\n\t\t};\n\t}\n\n\tprivate static _getOptions(link: Link, useMetaKey: boolean, isActive: boolean): ModelDecorationOptions {\n\t\tconst options = { ... (isActive ? decoration.active : decoration.general) };\n\t\toptions.hoverMessage = getHoverMessage(link, useMetaKey);\n\t\treturn options;\n\t}\n\n\tpublic decorationId: string;\n\tpublic link: Link;\n\n\tconstructor(link: Link, decorationId: string) {\n\t\tthis.link = link;\n\t\tthis.decorationId = decorationId;\n\t}\n\n\tpublic activate(changeAccessor: IModelDecorationsChangeAccessor, useMetaKey: boolean): void {\n\t\tchangeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(this.link, useMetaKey, true));\n\t}\n\n\tpublic deactivate(changeAccessor: IModelDecorationsChangeAccessor, useMetaKey: boolean): void {\n\t\tchangeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(this.link, useMetaKey, false));\n\t}\n}\n\nfunction getHoverMessage(link: Link, useMetaKey: boolean): MarkdownString {\n\tconst executeCmd = link.url && /^command:/i.test(link.url.toString());\n\n\tconst label = link.tooltip\n\t\t? link.tooltip\n\t\t: executeCmd\n\t\t\t? nls.localize('links.navigate.executeCmd', 'Execute command')\n\t\t\t: nls.localize('links.navigate.follow', 'Follow link');\n\n\tconst kb = useMetaKey\n\t\t? platform.isMacintosh\n\t\t\t? nls.localize('links.navigate.kb.meta.mac', \"cmd + click\")\n\t\t\t: nls.localize('links.navigate.kb.meta', \"ctrl + click\")\n\t\t: platform.isMacintosh\n\t\t\t? nls.localize('links.navigate.kb.alt.mac', \"option + click\")\n\t\t\t: nls.localize('links.navigate.kb.alt', \"alt + click\");\n\n\tif (link.url) {\n\t\tlet nativeLabel = '';\n\t\tif (/^command:/i.test(link.url.toString())) {\n\t\t\t// Don't show complete command arguments in the native tooltip\n\t\t\tconst match = link.url.toString().match(/^command:([^?#]+)/);\n\t\t\tif (match) {\n\t\t\t\tconst commandId = match[1];\n\t\t\t\tnativeLabel = nls.localize('tooltip.explanation', \"Execute command {0}\", commandId);\n\t\t\t}\n\t\t}\n\t\tconst hoverMessage = new MarkdownString('', true)\n\t\t\t.appendLink(link.url.toString(true).replace(/ /g, '%20'), label, nativeLabel)\n\t\t\t.appendMarkdown(` (${kb})`);\n\t\treturn hoverMessage;\n\t} else {\n\t\treturn new MarkdownString().appendText(`${label} (${kb})`);\n\t}\n}\n\nclass OpenLinkAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.openLink',\n\t\t\tlabel: nls.localize2('label', \"Open Link\"),\n\t\t\tprecondition: undefined\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICodeEditor): void {\n\t\tconst linkDetector = LinkDetector.get(editor);\n\t\tif (!linkDetector) {\n\t\t\treturn;\n\t\t}\n\t\tif (!editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selections = editor.getSelections();\n\t\tfor (const sel of selections) {\n\t\t\tconst link = linkDetector.getLinkOccurrence(sel.getEndPosition());\n\t\t\tif (link) {\n\t\t\t\tlinkDetector.openLinkOccurrence(link, false);\n\t\t\t}\n\t\t}\n\t}\n}\n\nregisterEditorContribution(LinkDetector.ID, LinkDetector, EditorContributionInstantiation.AfterFirstRender);\nregisterEditorAction(OpenLinkAction);\n"]}
1
+ {"version":3,"sources":["vs/editor/contrib/links/browser/links.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;;;;;;;;;;;AAEhG,OAAO,EAAE,uBAAuB,EAAqB,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAChH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,KAAK,QAAQ,MAAM,qCAAqC,CAAC;AAChE,OAAO,KAAK,SAAS,MAAM,sCAAsC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAmC,oBAAoB,EAAE,0BAA0B,EAAoB,MAAM,sCAAsC,CAAC;AAOzK,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAA+B,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AACnI,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAA+C,MAAM,mDAAmD,CAAC;AAClI,OAAO,EAAE,QAAQ,EAAmB,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAEvE,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;;aAEpB,OAAE,GAAW,qBAAX,AAAgC,CAAC;IAEnD,MAAM,CAAC,GAAG,CAAC,MAAmB;QACpC,OAAO,MAAM,CAAC,eAAe,CAAe,cAAY,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAUD,YACkB,MAAmB,EACH,aAA6B,EACvB,mBAAyC,EACrC,uBAAiD,EAC3D,8BAA+D;QAEhG,KAAK,EAAE,CAAC;QANS,WAAM,GAAN,MAAM,CAAa;QACH,kBAAa,GAAb,aAAa,CAAgB;QACvB,wBAAmB,GAAnB,mBAAmB,CAAsB;QACrC,4BAAuB,GAAvB,uBAAuB,CAA0B;QAK5F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;QAC3D,IAAI,CAAC,mBAAmB,GAAG,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACjH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAEnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE;YAC5F,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/C,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YAC9C,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE;YACpD,IAAI,CAAC,CAAC,CAAC,UAAU,6BAAoB,EAAE,CAAC;gBACvC,OAAO;YACR,CAAC;YACD,mDAAmD;YACnD,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAE3B,uDAAuD;YACvD,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,iDAAiD;YACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAC7B,OAAO;YACR,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5C,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,eAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,6BAAoB,EAAE,CAAC;YAC3E,OAAO;QACR,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAErC,IAAI,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAClC,OAAO;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;QACR,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC;YACJ,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC;YACjD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;gBACxB,OAAO;YACR,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,CAAC;IACF,CAAC;IAEO,iBAAiB,CAAC,KAAa;QACtC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,2CAAkC,KAAK,QAAQ,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClD,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YACxD,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,cAAc,GAA4B,EAAE,CAAC;QACnD,IAAI,KAAK,EAAE,CAAC;YACX,sCAAsC;YACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;YAClE,CAAC;QACF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,cAAc,EAAE,EAAE;YAChD,MAAM,WAAW,GAAG,cAAc,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YAEpF,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxD,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;YAC7D,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,UAA+B,EAAE,OAAsC;QACjG,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,2CAAkC,KAAK,QAAQ,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,kEAAkE;YACtG,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,cAAc,EAAE,EAAE;oBAChD,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;oBAChD,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,YAAY,CAAC;gBACvD,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACpC,CAAC;IACF,CAAC;IAEO,2BAA2B;QAClC,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,2CAAkC,KAAK,QAAQ,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACxE,IAAI,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,cAAc,EAAE,EAAE;oBAChD,UAAU,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QACpC,CAAC;IACF,CAAC;IAEO,eAAe,CAAC,UAA+B;QACtD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,OAAO;QACR,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,qBAAqB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACrG,CAAC;IAEM,kBAAkB,CAAC,UAA0B,EAAE,UAAmB,EAAE,eAAe,GAAG,KAAK;QAEjG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO;QACR,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;QAE5B,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAE/C,sGAAsG;YACtG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC;gBAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBAC5E,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjC,IAAI,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;wBACvC,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;wBAEnD,IAAI,YAAY,GAAkB,IAAI,CAAC;wBACvC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;4BAC5D,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvC,CAAC;6BAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;4BACtE,YAAY,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;wBACvC,CAAC;wBAED,IAAI,YAAY,EAAE,CAAC;4BAClB,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;wBAClD,CAAC;oBACF,CAAC;gBACF,CAAC;YACF,CAAC;YAED,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,uBAAuB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/I,CAAC,EAAE,GAAG,CAAC,EAAE;YACR,MAAM,cAAc,GACnB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,wBAAwB;YACxB,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAa,EAAE,6DAA6D,EAAE,IAAI,CAAC,GAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjJ,CAAC;iBAAM,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAa,EAAE,yDAAyD,CAAC,CAAC,CAAC;YACvH,CAAC;iBAAM,CAAC;gBACP,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAEM,iBAAiB,CAAC,QAAyB;QACjD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,qBAAqB,CAAC;YAChE,eAAe,EAAE,QAAQ,CAAC,UAAU;YACpC,WAAW,EAAE,QAAQ,CAAC,MAAM;YAC5B,aAAa,EAAE,QAAQ,CAAC,UAAU;YAClC,SAAS,EAAE,QAAQ,CAAC,MAAM;SAC1B,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAEZ,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACjE,IAAI,iBAAiB,EAAE,CAAC;gBACvB,OAAO,iBAAiB,CAAC;YAC1B,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,SAAS,CAAC,UAA+B,EAAE,OAAuC;QACzF,OAAO,OAAO,CACb,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,yCAAiC,CAAC;eACtD,CAAC,CAAC,UAAU,CAAC,kBAAkB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC,IAAI,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,sBAAsB,KAAK,UAAU,CAAC,CAChK,CAAC;IACH,CAAC;IAEO,IAAI;QACX,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC5B,CAAC;IACF,CAAC;IAEe,OAAO;QACtB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;;AAtRW,YAAY;IAkBtB,WAAA,cAAc,CAAA;IACd,WAAA,oBAAoB,CAAA;IACpB,WAAA,wBAAwB,CAAA;IACxB,WAAA,+BAA+B,CAAA;GArBrB,YAAY,CAuRxB;;AAED,MAAM,UAAU,GAAG;IAClB,OAAO,EAAE,sBAAsB,CAAC,QAAQ,CAAC;QACxC,WAAW,EAAE,eAAe;QAC5B,UAAU,4DAAoD;QAC9D,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,eAAe;KAChC,CAAC;IACF,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC;QACvC,WAAW,EAAE,sBAAsB;QACnC,UAAU,4DAAoD;QAC9D,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,sBAAsB;KACvC,CAAC;CACF,CAAC;AAEF,MAAM,cAAc;IAEZ,MAAM,CAAC,UAAU,CAAC,IAAU,EAAE,UAAmB;QACvD,OAAO;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC;SAC5D,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,IAAU,EAAE,UAAmB,EAAE,QAAiB;QAC5E,MAAM,OAAO,GAAG,EAAE,GAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5E,OAAO,CAAC,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC;IAChB,CAAC;IAKD,YAAY,IAAU,EAAE,YAAoB;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAClC,CAAC;IAEM,QAAQ,CAAC,cAA+C,EAAE,UAAmB;QACnF,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;IACpH,CAAC;IAEM,UAAU,CAAC,cAA+C,EAAE,UAAmB;QACrF,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IACrH,CAAC;CACD;AAED,SAAS,eAAe,CAAC,IAAU,EAAE,UAAmB;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEtE,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;QACzB,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,UAAU;YACX,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAA2B,EAAE,iBAAiB,CAAC;YAC9D,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAuB,EAAE,aAAa,CAAC,CAAC;IAEzD,MAAM,EAAE,GAAG,UAAU;QACpB,CAAC,CAAC,QAAQ,CAAC,WAAW;YACrB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAA4B,EAAE,aAAa,CAAC;YAC3D,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAwB,EAAE,cAAc,CAAC;QACzD,CAAC,CAAC,QAAQ,CAAC,WAAW;YACrB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAA2B,EAAE,gBAAgB,CAAC;YAC7D,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAuB,EAAE,aAAa,CAAC,CAAC;IAEzD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YAC5C,8DAA8D;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7D,IAAI,KAAK,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAqB,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;YACrF,CAAC;QACF,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC;aAC/C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC;aAC5E,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7B,OAAO,YAAY,CAAC;IACrB,CAAC;SAAM,CAAC;QACP,OAAO,IAAI,cAAc,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;AACF,CAAC;AAED,MAAM,cAAe,SAAQ,YAAY;IAExC;QACC,KAAK,CAAC;YACL,EAAE,EAAE,wBAAwB;YAC5B,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,IAAO,EAAE,WAAW,CAAC;YAC1C,YAAY,EAAE,SAAS;SACvB,CAAC,CAAC;IACJ,CAAC;IAEM,GAAG,CAAC,QAA0B,EAAE,MAAmB;QACzD,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;YACxB,OAAO;QACR,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,YAAY,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;YAClE,IAAI,IAAI,EAAE,CAAC;gBACV,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAED,0BAA0B,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,2DAAmD,CAAC;AAC5G,oBAAoB,CAAC,cAAc,CAAC,CAAC","file":"links.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 { createCancelablePromise, CancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { MarkdownString } from '../../../../base/common/htmlContent.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../../base/common/network.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport * as resources from '../../../../base/common/resources.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport './links.css';\nimport { ICodeEditor, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { EditorAction, EditorContributionInstantiation, registerEditorAction, registerEditorContribution, ServicesAccessor } from '../../../browser/editorExtensions.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { LinkProvider } from '../../../common/languages.js';\nimport { IModelDecorationsChangeAccessor, IModelDeltaDecoration, TrackedRangeStickiness } from '../../../common/model.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ClickLinkGesture, ClickLinkKeyboardEvent, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js';\nimport { getLinks, Link, LinksList } from './getLinks.js';\nimport * as nls from '../../../../nls.js';\nimport { INotificationService } from '../../../../platform/notification/common/notification.js';\nimport { IOpenerService } from '../../../../platform/opener/common/opener.js';\n\nexport class LinkDetector extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID: string = 'editor.linkDetector';\n\n\tpublic static get(editor: ICodeEditor): LinkDetector | null {\n\t\treturn editor.getContribution<LinkDetector>(LinkDetector.ID);\n\t}\n\n\tprivate readonly providers: LanguageFeatureRegistry<LinkProvider>;\n\tprivate readonly debounceInformation: IFeatureDebounceInformation;\n\tprivate readonly computeLinks: RunOnceScheduler;\n\tprivate computePromise: CancelablePromise<LinksList> | null;\n\tprivate activeLinksList: LinksList | null;\n\tprivate activeLinkDecorationId: string | null;\n\tprivate currentOccurrences: { [decorationId: string]: LinkOccurrence };\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\t@IOpenerService private readonly openerService: IOpenerService,\n\t\t@INotificationService private readonly notificationService: INotificationService,\n\t\t@ILanguageFeaturesService private readonly languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t) {\n\t\tsuper();\n\n\t\tthis.providers = this.languageFeaturesService.linkProvider;\n\t\tthis.debounceInformation = languageFeatureDebounceService.for(this.providers, 'Links', { min: 1000, max: 4000 });\n\t\tthis.computeLinks = this._register(new RunOnceScheduler(() => this.computeLinksNow(), 1000));\n\t\tthis.computePromise = null;\n\t\tthis.activeLinksList = null;\n\t\tthis.currentOccurrences = {};\n\t\tthis.activeLinkDecorationId = null;\n\n\t\tconst clickLinkGesture = this._register(new ClickLinkGesture(editor));\n\n\t\tthis._register(clickLinkGesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, keyboardEvent]) => {\n\t\t\tthis._onEditorMouseMove(mouseEvent, keyboardEvent);\n\t\t}));\n\t\tthis._register(clickLinkGesture.onExecute((e) => {\n\t\t\tthis.onEditorMouseUp(e);\n\t\t}));\n\t\tthis._register(clickLinkGesture.onCancel((e) => {\n\t\t\tthis.cleanUpActiveLinkDecoration();\n\t\t}));\n\t\tthis._register(editor.onDidChangeConfiguration((e) => {\n\t\t\tif (!e.hasChanged(EditorOption.links)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Remove any links (for the getting disabled case)\n\t\t\tthis.updateDecorations([]);\n\n\t\t\t// Stop any computation (for the getting disabled case)\n\t\t\tthis.stop();\n\n\t\t\t// Start computing (for the getting enabled case)\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\t\tthis._register(editor.onDidChangeModelContent((e) => {\n\t\t\tif (!this.editor.hasModel()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.computeLinks.schedule(this.debounceInformation.get(this.editor.getModel()));\n\t\t}));\n\t\tthis._register(editor.onDidChangeModel((e) => {\n\t\t\tthis.currentOccurrences = {};\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t\tthis.stop();\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\t\tthis._register(editor.onDidChangeModelLanguage((e) => {\n\t\t\tthis.stop();\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\t\tthis._register(this.providers.onDidChange((e) => {\n\t\t\tthis.stop();\n\t\t\tthis.computeLinks.schedule(0);\n\t\t}));\n\n\t\tthis.computeLinks.schedule(0);\n\t}\n\n\tprivate async computeLinksNow(): Promise<void> {\n\t\tif (!this.editor.hasModel() || !this.editor.getOption(EditorOption.links)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.editor.getModel();\n\n\t\tif (model.isTooLargeForSyncing()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.providers.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.activeLinksList) {\n\t\t\tthis.activeLinksList.dispose();\n\t\t\tthis.activeLinksList = null;\n\t\t}\n\n\t\tthis.computePromise = createCancelablePromise(token => getLinks(this.providers, model, token));\n\t\ttry {\n\t\t\tconst sw = new StopWatch(false);\n\t\t\tthis.activeLinksList = await this.computePromise;\n\t\t\tthis.debounceInformation.update(model, sw.elapsed());\n\t\t\tif (model.isDisposed()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.updateDecorations(this.activeLinksList.links);\n\t\t} catch (err) {\n\t\t\tonUnexpectedError(err);\n\t\t} finally {\n\t\t\tthis.computePromise = null;\n\t\t}\n\t}\n\n\tprivate updateDecorations(links: Link[]): void {\n\t\tconst useMetaKey = (this.editor.getOption(EditorOption.multiCursorModifier) === 'altKey');\n\t\tconst oldDecorations: string[] = [];\n\t\tconst keys = Object.keys(this.currentOccurrences);\n\t\tfor (const decorationId of keys) {\n\t\t\tconst occurence = this.currentOccurrences[decorationId];\n\t\t\toldDecorations.push(occurence.decorationId);\n\t\t}\n\n\t\tconst newDecorations: IModelDeltaDecoration[] = [];\n\t\tif (links) {\n\t\t\t// Not sure why this is sometimes null\n\t\t\tfor (const link of links) {\n\t\t\t\tnewDecorations.push(LinkOccurrence.decoration(link, useMetaKey));\n\t\t\t}\n\t\t}\n\n\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\tconst decorations = changeAccessor.deltaDecorations(oldDecorations, newDecorations);\n\n\t\t\tthis.currentOccurrences = {};\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t\tfor (let i = 0, len = decorations.length; i < len; i++) {\n\t\t\t\tconst occurence = new LinkOccurrence(links[i], decorations[i]);\n\t\t\t\tthis.currentOccurrences[occurence.decorationId] = occurence;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _onEditorMouseMove(mouseEvent: ClickLinkMouseEvent, withKey: ClickLinkKeyboardEvent | null): void {\n\t\tconst useMetaKey = (this.editor.getOption(EditorOption.multiCursorModifier) === 'altKey');\n\t\tif (this.isEnabled(mouseEvent, withKey)) {\n\t\t\tthis.cleanUpActiveLinkDecoration(); // always remove previous link decoration as their can only be one\n\t\t\tconst occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n\t\t\tif (occurrence) {\n\t\t\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\t\t\toccurrence.activate(changeAccessor, useMetaKey);\n\t\t\t\t\tthis.activeLinkDecorationId = occurrence.decorationId;\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthis.cleanUpActiveLinkDecoration();\n\t\t}\n\t}\n\n\tprivate cleanUpActiveLinkDecoration(): void {\n\t\tconst useMetaKey = (this.editor.getOption(EditorOption.multiCursorModifier) === 'altKey');\n\t\tif (this.activeLinkDecorationId) {\n\t\t\tconst occurrence = this.currentOccurrences[this.activeLinkDecorationId];\n\t\t\tif (occurrence) {\n\t\t\t\tthis.editor.changeDecorations((changeAccessor) => {\n\t\t\t\t\toccurrence.deactivate(changeAccessor, useMetaKey);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.activeLinkDecorationId = null;\n\t\t}\n\t}\n\n\tprivate onEditorMouseUp(mouseEvent: ClickLinkMouseEvent): void {\n\t\tif (!this.isEnabled(mouseEvent)) {\n\t\t\treturn;\n\t\t}\n\t\tconst occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n\t\tif (!occurrence) {\n\t\t\treturn;\n\t\t}\n\t\tthis.openLinkOccurrence(occurrence, mouseEvent.hasSideBySideModifier, true /* from user gesture */);\n\t}\n\n\tpublic openLinkOccurrence(occurrence: LinkOccurrence, openToSide: boolean, fromUserGesture = false): void {\n\n\t\tif (!this.openerService) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { link } = occurrence;\n\n\t\tlink.resolve(CancellationToken.None).then(uri => {\n\n\t\t\t// Support for relative file URIs of the shape file://./relativeFile.txt or file:///./relativeFile.txt\n\t\t\tif (typeof uri === 'string' && this.editor.hasModel()) {\n\t\t\t\tconst modelUri = this.editor.getModel().uri;\n\t\t\t\tif (modelUri.scheme === Schemas.file && uri.startsWith(`${Schemas.file}:`)) {\n\t\t\t\t\tconst parsedUri = URI.parse(uri);\n\t\t\t\t\tif (parsedUri.scheme === Schemas.file) {\n\t\t\t\t\t\tconst fsPath = resources.originalFSPath(parsedUri);\n\n\t\t\t\t\t\tlet relativePath: string | null = null;\n\t\t\t\t\t\tif (fsPath.startsWith('/./') || fsPath.startsWith('\\\\.\\\\')) {\n\t\t\t\t\t\t\trelativePath = `.${fsPath.substr(1)}`;\n\t\t\t\t\t\t} else if (fsPath.startsWith('//./') || fsPath.startsWith('\\\\\\\\.\\\\')) {\n\t\t\t\t\t\t\trelativePath = `.${fsPath.substr(2)}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (relativePath) {\n\t\t\t\t\t\t\turi = resources.joinPath(modelUri, relativePath);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.openerService.open(uri, { openToSide, fromUserGesture, allowContributedOpeners: true, allowCommands: true, fromWorkspace: true });\n\n\t\t}, err => {\n\t\t\tconst messageOrError =\n\t\t\t\terr instanceof Error ? err.message : err;\n\t\t\t// different error cases\n\t\t\tif (messageOrError === 'invalid') {\n\t\t\t\tthis.notificationService.warn(nls.localize('invalid.url', 'Failed to open this link because it is not well-formed: {0}', link.url!.toString()));\n\t\t\t} else if (messageOrError === 'missing') {\n\t\t\t\tthis.notificationService.warn(nls.localize('missing.url', 'Failed to open this link because its target is missing.'));\n\t\t\t} else {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic getLinkOccurrence(position: Position | null): LinkOccurrence | null {\n\t\tif (!this.editor.hasModel() || !position) {\n\t\t\treturn null;\n\t\t}\n\t\tconst decorations = this.editor.getModel().getDecorationsInRange({\n\t\t\tstartLineNumber: position.lineNumber,\n\t\t\tstartColumn: position.column,\n\t\t\tendLineNumber: position.lineNumber,\n\t\t\tendColumn: position.column\n\t\t}, 0, true);\n\n\t\tfor (const decoration of decorations) {\n\t\t\tconst currentOccurrence = this.currentOccurrences[decoration.id];\n\t\t\tif (currentOccurrence) {\n\t\t\t\treturn currentOccurrence;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate isEnabled(mouseEvent: ClickLinkMouseEvent, withKey?: ClickLinkKeyboardEvent | null): boolean {\n\t\treturn Boolean(\n\t\t\t(mouseEvent.target.type === MouseTargetType.CONTENT_TEXT)\n\t\t\t&& ((mouseEvent.hasTriggerModifier || (withKey && withKey.keyCodeIsTriggerKey)) || mouseEvent.isMiddleClick && mouseEvent.mouseMiddleClickAction === 'openLink')\n\t\t);\n\t}\n\n\tprivate stop(): void {\n\t\tthis.computeLinks.cancel();\n\t\tif (this.activeLinksList) {\n\t\t\tthis.activeLinksList?.dispose();\n\t\t\tthis.activeLinksList = null;\n\t\t}\n\t\tif (this.computePromise) {\n\t\t\tthis.computePromise.cancel();\n\t\t\tthis.computePromise = null;\n\t\t}\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.stop();\n\t}\n}\n\nconst decoration = {\n\tgeneral: ModelDecorationOptions.register({\n\t\tdescription: 'detected-link',\n\t\tstickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tcollapseOnReplaceEdit: true,\n\t\tinlineClassName: 'detected-link'\n\t}),\n\tactive: ModelDecorationOptions.register({\n\t\tdescription: 'detected-link-active',\n\t\tstickiness: TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges,\n\t\tcollapseOnReplaceEdit: true,\n\t\tinlineClassName: 'detected-link-active'\n\t})\n};\n\nclass LinkOccurrence {\n\n\tpublic static decoration(link: Link, useMetaKey: boolean): IModelDeltaDecoration {\n\t\treturn {\n\t\t\trange: link.range,\n\t\t\toptions: LinkOccurrence._getOptions(link, useMetaKey, false)\n\t\t};\n\t}\n\n\tprivate static _getOptions(link: Link, useMetaKey: boolean, isActive: boolean): ModelDecorationOptions {\n\t\tconst options = { ... (isActive ? decoration.active : decoration.general) };\n\t\toptions.hoverMessage = getHoverMessage(link, useMetaKey);\n\t\treturn options;\n\t}\n\n\tpublic decorationId: string;\n\tpublic link: Link;\n\n\tconstructor(link: Link, decorationId: string) {\n\t\tthis.link = link;\n\t\tthis.decorationId = decorationId;\n\t}\n\n\tpublic activate(changeAccessor: IModelDecorationsChangeAccessor, useMetaKey: boolean): void {\n\t\tchangeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(this.link, useMetaKey, true));\n\t}\n\n\tpublic deactivate(changeAccessor: IModelDecorationsChangeAccessor, useMetaKey: boolean): void {\n\t\tchangeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(this.link, useMetaKey, false));\n\t}\n}\n\nfunction getHoverMessage(link: Link, useMetaKey: boolean): MarkdownString {\n\tconst executeCmd = link.url && /^command:/i.test(link.url.toString());\n\n\tconst label = link.tooltip\n\t\t? link.tooltip\n\t\t: executeCmd\n\t\t\t? nls.localize('links.navigate.executeCmd', 'Execute command')\n\t\t\t: nls.localize('links.navigate.follow', 'Follow link');\n\n\tconst kb = useMetaKey\n\t\t? platform.isMacintosh\n\t\t\t? nls.localize('links.navigate.kb.meta.mac', \"cmd + click\")\n\t\t\t: nls.localize('links.navigate.kb.meta', \"ctrl + click\")\n\t\t: platform.isMacintosh\n\t\t\t? nls.localize('links.navigate.kb.alt.mac', \"option + click\")\n\t\t\t: nls.localize('links.navigate.kb.alt', \"alt + click\");\n\n\tif (link.url) {\n\t\tlet nativeLabel = '';\n\t\tif (/^command:/i.test(link.url.toString())) {\n\t\t\t// Don't show complete command arguments in the native tooltip\n\t\t\tconst match = link.url.toString().match(/^command:([^?#]+)/);\n\t\t\tif (match) {\n\t\t\t\tconst commandId = match[1];\n\t\t\t\tnativeLabel = nls.localize('tooltip.explanation', \"Execute command {0}\", commandId);\n\t\t\t}\n\t\t}\n\t\tconst hoverMessage = new MarkdownString('', true)\n\t\t\t.appendLink(link.url.toString(true).replace(/ /g, '%20'), label, nativeLabel)\n\t\t\t.appendMarkdown(` (${kb})`);\n\t\treturn hoverMessage;\n\t} else {\n\t\treturn new MarkdownString().appendText(`${label} (${kb})`);\n\t}\n}\n\nclass OpenLinkAction extends EditorAction {\n\n\tconstructor() {\n\t\tsuper({\n\t\t\tid: 'editor.action.openLink',\n\t\t\tlabel: nls.localize2('label', \"Open Link\"),\n\t\t\tprecondition: undefined\n\t\t});\n\t}\n\n\tpublic run(accessor: ServicesAccessor, editor: ICodeEditor): void {\n\t\tconst linkDetector = LinkDetector.get(editor);\n\t\tif (!linkDetector) {\n\t\t\treturn;\n\t\t}\n\t\tif (!editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst selections = editor.getSelections();\n\t\tfor (const sel of selections) {\n\t\t\tconst link = linkDetector.getLinkOccurrence(sel.getEndPosition());\n\t\t\tif (link) {\n\t\t\t\tlinkDetector.openLinkOccurrence(link, false);\n\t\t\t}\n\t\t}\n\t}\n}\n\nregisterEditorContribution(LinkDetector.ID, LinkDetector, EditorContributionInstantiation.AfterFirstRender);\nregisterEditorAction(OpenLinkAction);\n"]}