monaco-editor-core 0.56.0-dev-20251124 → 0.56.0-dev-20251217
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.
- package/esm/nls.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +34 -2
- package/esm/vs/base/browser/dom.js +1 -4
- package/esm/vs/base/browser/dom.js.map +1 -1
- package/esm/vs/base/browser/markdownRenderer.js +25 -11
- package/esm/vs/base/browser/markdownRenderer.js.map +1 -1
- package/esm/vs/base/browser/ui/button/button.js +15 -8
- package/esm/vs/base/browser/ui/button/button.js.map +1 -1
- package/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css +3 -8
- package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
- package/esm/vs/base/browser/ui/list/list.css +1 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js +3 -0
- package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
- package/esm/vs/base/common/async.js +11 -0
- package/esm/vs/base/common/async.js.map +1 -1
- package/esm/vs/base/common/codiconsLibrary.js +11 -2
- package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
- package/esm/vs/base/common/defaultAccount.js +6 -0
- package/esm/vs/base/common/defaultAccount.js.map +1 -0
- package/esm/vs/base/common/equals.js +73 -24
- package/esm/vs/base/common/equals.js.map +1 -1
- package/esm/vs/base/common/event.js +14 -4
- package/esm/vs/base/common/event.js.map +1 -1
- package/esm/vs/base/common/iterator.js.map +1 -1
- package/esm/vs/base/common/keybindings.js +0 -8
- package/esm/vs/base/common/keybindings.js.map +1 -1
- package/esm/vs/base/common/lifecycle.js +2 -2
- package/esm/vs/base/common/lifecycle.js.map +1 -1
- package/esm/vs/base/common/marshallingIds.js.map +1 -1
- package/esm/vs/base/common/observableInternal/index.js +1 -1
- package/esm/vs/base/common/observableInternal/index.js.map +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -1
- package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +16 -0
- package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
- package/esm/vs/base/common/observableInternal/utils/utils.js +11 -0
- package/esm/vs/base/common/observableInternal/utils/utils.js.map +1 -1
- package/esm/vs/base/common/product.js.map +1 -1
- package/esm/vs/base/common/strings.js +3 -1
- package/esm/vs/base/common/strings.js.map +1 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js +2 -1
- package/esm/vs/editor/browser/controller/dragScrolling.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js +73 -2
- package/esm/vs/editor/browser/controller/editContext/clipboardUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js +7 -51
- package/esm/vs/editor/browser/controller/editContext/native/nativeEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/screenReaderUtils.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js +7 -20
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContext.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js +14 -44
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextInput.js.map +1 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js +19 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextRegistry.js.map +1 -0
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js +14 -1
- package/esm/vs/editor/browser/controller/editContext/textArea/textAreaEditContextState.js.map +1 -1
- package/esm/vs/editor/browser/controller/mouseHandler.js +5 -2
- package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
- package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
- package/esm/vs/editor/browser/observableCodeEditor.js +32 -15
- package/esm/vs/editor/browser/observableCodeEditor.js.map +1 -1
- package/esm/vs/editor/browser/view.js +11 -2
- package/esm/vs/editor/browser/view.js.map +1 -1
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +5 -2
- package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +10 -0
- package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js.map +1 -1
- package/esm/vs/editor/browser/widget/multiDiffEditor/style.css +48 -0
- package/esm/vs/editor/common/config/fontInfo.js +1 -1
- package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
- package/esm/vs/editor/common/core/edits/edit.js +19 -0
- package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/stringEdit.js +13 -0
- package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
- package/esm/vs/editor/common/core/edits/textEdit.js.map +1 -1
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js +24 -10
- package/esm/vs/editor/common/core/text/positionToOffsetImpl.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js +4 -4
- package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
- package/esm/vs/editor/common/cursor/cursorWordOperations.js +6 -3
- package/esm/vs/editor/common/cursor/cursorWordOperations.js.map +1 -1
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js +2 -2
- package/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js.map +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js +1 -1
- package/esm/vs/editor/common/languages/nullTokenize.js.map +1 -1
- package/esm/vs/editor/common/languages/supports/tokenization.js +3 -0
- package/esm/vs/editor/common/languages/supports/tokenization.js.map +1 -1
- package/esm/vs/editor/common/languages.js +2 -1
- package/esm/vs/editor/common/languages.js.map +1 -1
- package/esm/vs/editor/common/model/decorationProvider.js +21 -1
- package/esm/vs/editor/common/model/decorationProvider.js.map +1 -1
- package/esm/vs/editor/common/model/textModel.js +49 -30
- package/esm/vs/editor/common/model/textModel.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js +6 -3
- package/esm/vs/editor/common/model/tokens/abstractSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/annotations.js +177 -0
- package/esm/vs/editor/common/model/tokens/annotations.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js +131 -0
- package/esm/vs/editor/common/model/tokens/tokenizationFontDecorationsProvider.js.map +1 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizationTextModelPart.js.map +1 -1
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js +9 -0
- package/esm/vs/editor/common/model/tokens/tokenizerSyntaxTokenBackend.js.map +1 -1
- package/esm/vs/editor/common/textModelEditSource.js +2 -0
- package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
- package/esm/vs/editor/common/textModelEvents.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/lineDecorations.js.map +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +1 -1
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +54 -36
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +14 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/hover.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +1 -1
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +1 -0
- package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js +2 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js +33 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/commands.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js +13 -12
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionContextKeys.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js +7 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/controller/inlineCompletionsController.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/hoverParticipant.js +2 -2
- package/esm/vs/editor/contrib/inlineCompletions/browser/hintsWidget/inlineCompletionsHintsWidget.js +5 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js +8 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/InlineSuggestAlternativeAction.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js +198 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/editKind.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js +40 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionIsVisible.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +128 -65
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +69 -13
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +159 -94
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +124 -50
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +393 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/telemetry.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js +20 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +59 -42
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js +29 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorMenu.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +78 -46
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +9 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +11 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +81 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js +48 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +18 -15
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js +3 -4
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCollapsedView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +6 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js +4 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsDeletionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js +4 -3
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsInsertionView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js +8 -8
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsLineReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js +9 -7
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsSideBySideView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js +203 -41
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsWordReplacementView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js +189 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/jumpToView.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js +85 -102
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/inlineEditsLongDistanceHint.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js +75 -32
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistancePreviewEditor.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js +121 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/longDistanceHint/longDistnaceWidgetPlacement.js.map +1 -0
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js +2 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/originalEditorInlineDiffView.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js +22 -20
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/theme.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js +15 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/utils/utils.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/view.css +39 -6
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js +10 -5
- package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineSuggestionsView.js.map +1 -1
- package/esm/vs/editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js +1 -1
- package/esm/vs/editor/contrib/lineSelection/browser/lineSelection.js +1 -1
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js +32 -32
- package/esm/vs/editor/contrib/linesOperations/browser/linesOperations.js.map +1 -1
- package/esm/vs/editor/contrib/linkedEditing/browser/linkedEditing.js +2 -2
- package/esm/vs/editor/contrib/links/browser/links.js +10 -10
- package/esm/vs/editor/contrib/message/browser/messageController.js +1 -1
- package/esm/vs/editor/contrib/multicursor/browser/multicursor.js +22 -22
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHints.js +1 -1
- package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +4 -4
- package/esm/vs/editor/contrib/peekView/browser/peekView.js +18 -18
- package/esm/vs/editor/contrib/placeholderText/browser/placeholderText.contribution.js +1 -1
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js +11 -11
- package/esm/vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess.js +32 -32
- package/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +2 -2
- package/esm/vs/editor/contrib/rename/browser/rename.js +19 -11
- package/esm/vs/editor/contrib/rename/browser/rename.js.map +1 -1
- package/esm/vs/editor/contrib/rename/browser/renameWidget.js +7 -7
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js +3 -2
- package/esm/vs/editor/contrib/sectionHeaders/browser/sectionHeaders.js.map +1 -1
- package/esm/vs/editor/contrib/smartSelect/browser/smartSelect.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetController2.js +4 -4
- package/esm/vs/editor/contrib/snippet/browser/snippetParser.js +33 -0
- package/esm/vs/editor/contrib/snippet/browser/snippetParser.js.map +1 -1
- package/esm/vs/editor/contrib/snippet/browser/snippetVariables.js +4 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollActions.js +11 -11
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js +12 -4
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollController.js.map +1 -1
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js +1 -0
- package/esm/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggest.js +9 -8
- package/esm/vs/editor/contrib/suggest/browser/suggest.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js +39 -28
- package/esm/vs/editor/contrib/suggest/browser/suggestController.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +1 -0
- package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js +22 -18
- package/esm/vs/editor/contrib/suggest/browser/suggestWidget.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js +28 -6
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js.map +1 -1
- package/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js +2 -2
- package/esm/vs/editor/contrib/suggest/browser/wordContextKey.js +1 -1
- package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js +33 -33
- package/esm/vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js +4 -4
- package/esm/vs/editor/contrib/tokenization/browser/tokenization.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +1 -1
- package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +24 -24
- package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js +5 -5
- package/esm/vs/editor/contrib/wordHighlighter/browser/highlightDecorations.js +9 -9
- package/esm/vs/editor/contrib/wordHighlighter/browser/wordHighlighter.js +3 -3
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js +19 -2
- package/esm/vs/editor/contrib/wordOperations/browser/wordOperations.js.map +1 -1
- package/esm/vs/editor/editor.api.d.ts +37 -2
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js +2 -2
- package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js +11 -1
- package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.js +1 -1
- package/esm/vs/editor/standalone/common/monarch/monarchLexer.js.map +1 -1
- package/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js +62 -62
- package/esm/vs/platform/action/common/actionCommonCategories.js +6 -6
- package/esm/vs/platform/actionWidget/browser/actionList.js +4 -4
- package/esm/vs/platform/actionWidget/browser/actionWidget.css +11 -8
- package/esm/vs/platform/actionWidget/browser/actionWidget.js +7 -7
- package/esm/vs/platform/actions/browser/menuEntryActionViewItem.js +5 -5
- package/esm/vs/platform/actions/browser/toolbar.js +2 -2
- package/esm/vs/platform/actions/common/actions.js +11 -4
- package/esm/vs/platform/actions/common/actions.js.map +1 -1
- package/esm/vs/platform/actions/common/menuService.js +2 -2
- package/esm/vs/platform/configuration/common/configurationRegistry.js +10 -10
- package/esm/vs/platform/contextkey/browser/contextKeyService.js +1 -1
- package/esm/vs/platform/contextkey/common/contextkey.js +9 -9
- package/esm/vs/platform/contextkey/common/contextkeys.js +9 -9
- package/esm/vs/platform/contextkey/common/scanner.js +5 -5
- package/esm/vs/platform/{product/common/productService.js → defaultAccount/common/defaultAccount.js} +2 -2
- package/esm/vs/platform/defaultAccount/common/defaultAccount.js.map +1 -0
- package/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +1 -1
- package/esm/vs/platform/hover/browser/hoverWidget.js +1 -1
- package/esm/vs/platform/hover/browser/updatableHoverWidget.js +1 -1
- package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
- package/esm/vs/platform/instantiation/common/instantiationService.js +1 -8
- package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
- package/esm/vs/platform/keybinding/common/abstractKeybindingService.js +4 -4
- package/esm/vs/platform/list/browser/listService.js +27 -27
- package/esm/vs/platform/log/common/log.js +1 -1
- package/esm/vs/platform/log/common/log.js.map +1 -1
- package/esm/vs/platform/markers/common/markerService.js +6 -6
- package/esm/vs/platform/markers/common/markerService.js.map +1 -1
- package/esm/vs/platform/markers/common/markers.js +6 -6
- package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +8 -8
- package/esm/vs/platform/quickinput/browser/helpQuickAccess.js +1 -1
- package/esm/vs/platform/quickinput/browser/media/quickInput.css +7 -3
- package/esm/vs/platform/quickinput/browser/quickInput.js +19 -11
- package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputActions.js +5 -5
- package/esm/vs/platform/quickinput/browser/quickInputController.js +6 -6
- package/esm/vs/platform/quickinput/browser/quickInputList.js +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
- package/esm/vs/platform/theme/common/colorUtils.js +2 -2
- package/esm/vs/platform/theme/common/colors/baseColors.js +18 -17
- package/esm/vs/platform/theme/common/colors/baseColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/chartsColors.js +8 -8
- package/esm/vs/platform/theme/common/colors/editorColors.js +95 -95
- package/esm/vs/platform/theme/common/colors/inputColors.js +47 -47
- package/esm/vs/platform/theme/common/colors/listColors.js +36 -36
- package/esm/vs/platform/theme/common/colors/menuColors.js +7 -7
- package/esm/vs/platform/theme/common/colors/minimapColors.js +13 -13
- package/esm/vs/platform/theme/common/colors/minimapColors.js.map +1 -1
- package/esm/vs/platform/theme/common/colors/miscColors.js +16 -16
- package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
- package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
- package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
- package/esm/vs/platform/undoRedo/common/undoRedoService.js +21 -21
- package/esm/vs/platform/undoRedo/common/undoRedoService.js.map +1 -1
- package/esm/vs/platform/window/common/window.js +1 -1
- package/esm/vs/platform/window/common/window.js.map +1 -1
- package/esm/vs/platform/workspace/common/workspace.js +1 -1
- package/monaco.d.ts +37 -2
- package/package.json +2 -2
- package/version.txt +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js +0 -16
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineEdit.js.map +0 -1
- package/esm/vs/platform/product/common/productService.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts","vs/editor/contrib/inlayHints/browser/inlayHintsController.ts"],"names":[],"mappings":"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","file":"inlayHintsController.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 { isHTMLElement, ModifierKeyEmitter } from '../../../../base/browser/dom.js';\nimport { isNonEmptyArray } from '../../../../base/common/arrays.js';\nimport { disposableTimeout, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../../base/common/map.js';\nimport { IRange } from '../../../../base/common/range.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { IActiveCodeEditor, ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { ClassNameReference, CssProperties, DynamicCssRules } from '../../../browser/editorDom.js';\nimport { StableEditorScrollState } from '../../../browser/stableEditorScroll.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { EDITOR_FONT_DEFAULTS } from '../../../common/config/fontInfo.js';\nimport { EditOperation } from '../../../common/core/editOperation.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport * as languages from '../../../common/languages.js';\nimport { IModelDeltaDecoration, InjectedTextCursorStops, InjectedTextOptions, ITextModel, TrackedRangeStickiness } from '../../../common/model.js';\nimport { ModelDecorationInjectedTextOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { ClickLinkGesture, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js';\nimport { InlayHintAnchor, InlayHintItem, InlayHintsFragments } from './inlayHints.js';\nimport { goToDefinitionWithLocation, showGoToContextMenu } from './inlayHintsLocations.js';\nimport { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';\nimport { createDecorator, IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';\nimport * as colors from '../../../../platform/theme/common/colorRegistry.js';\nimport { themeColorFromId } from '../../../../platform/theme/common/themeService.js';\nimport { Position } from '../../../common/core/position.js';\n\n// --- hint caching service (per session)\n\nclass InlayHintsCache {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tprivate readonly _entries = new LRUCache<string, InlayHintItem[]>(50);\n\n\tget(model: ITextModel): InlayHintItem[] | undefined {\n\t\tconst key = InlayHintsCache._key(model);\n\t\treturn this._entries.get(key);\n\t}\n\n\tset(model: ITextModel, value: InlayHintItem[]): void {\n\t\tconst key = InlayHintsCache._key(model);\n\t\tthis._entries.set(key, value);\n\t}\n\n\tprivate static _key(model: ITextModel): string {\n\t\treturn `${model.uri.toString()}/${model.getVersionId()}`;\n\t}\n}\n\ninterface IInlayHintsCache extends InlayHintsCache { }\nconst IInlayHintsCache = createDecorator<IInlayHintsCache>('IInlayHintsCache');\nregisterSingleton(IInlayHintsCache, InlayHintsCache, InstantiationType.Delayed);\n\n// --- rendered label\n\nexport class RenderedInlayHintLabelPart {\n\tconstructor(readonly item: InlayHintItem, readonly index: number) { }\n\n\tget part() {\n\t\tconst label = this.item.hint.label;\n\t\tif (typeof label === 'string') {\n\t\t\treturn { label };\n\t\t} else {\n\t\t\treturn label[this.index];\n\t\t}\n\t}\n}\n\nclass ActiveInlayHintInfo {\n\tconstructor(readonly part: RenderedInlayHintLabelPart, readonly hasTriggerModifier: boolean) { }\n}\n\ntype InlayHintDecorationRenderInfo = {\n\titem: InlayHintItem;\n\tdecoration: IModelDeltaDecoration;\n\tclassNameRef: ClassNameReference;\n};\n\nconst enum RenderMode {\n\tNormal,\n\tInvisible\n}\n\n\n\n/**\n * Mix of CancellationTokenSource, DisposableStore and MutableDisposable\n */\nclass CancellationStore implements IDisposable {\n\n\tprivate readonly _store = new MutableDisposable<DisposableStore>();\n\tprivate _tokenSource = new CancellationTokenSource();\n\n\tdispose() {\n\t\tthis._store.dispose();\n\t\tthis._tokenSource.dispose(true);\n\t}\n\n\treset() {\n\t\tthis._tokenSource.dispose(true);\n\t\tthis._tokenSource = new CancellationTokenSource();\n\t\tthis._store.value = new DisposableStore();\n\n\t\treturn {\n\t\t\tstore: this._store.value,\n\t\t\ttoken: this._tokenSource.token\n\t\t};\n\t}\n}\n\n\n// --- controller\n\n\nexport class InlayHintsController implements IEditorContribution {\n\n\tstatic readonly ID: string = 'editor.contrib.InlayHints';\n\n\tprivate static readonly _MAX_DECORATORS = 1500;\n\tprivate static readonly _whitespaceData = {};\n\n\tstatic get(editor: ICodeEditor): InlayHintsController | undefined {\n\t\treturn editor.getContribution<InlayHintsController>(InlayHintsController.ID) ?? undefined;\n\t}\n\n\tprivate readonly _disposables = new DisposableStore();\n\tprivate readonly _sessionDisposables = new DisposableStore();\n\tprivate readonly _decorationsMetadata = new Map<string, InlayHintDecorationRenderInfo>();\n\tprivate readonly _debounceInfo: IFeatureDebounceInformation;\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate _cursorInfo?: { position: Position; notEarlierThan: number };\n\tprivate _activeRenderMode = RenderMode.Normal;\n\tprivate _activeInlayHintPart?: ActiveInlayHintInfo;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService _featureDebounce: ILanguageFeatureDebounceService,\n\t\t@IInlayHintsCache private readonly _inlayHintsCache: IInlayHintsCache,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@INotificationService private readonly _notificationService: INotificationService,\n\t\t@IInstantiationService private readonly _instaService: IInstantiationService,\n\t) {\n\t\tthis._ruleFactory = this._disposables.add(new DynamicCssRules(this._editor));\n\t\tthis._debounceInfo = _featureDebounce.for(_languageFeaturesService.inlayHintsProvider, 'InlayHint', { min: 25 });\n\t\tthis._disposables.add(_languageFeaturesService.inlayHintsProvider.onDidChange(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModel(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModelLanguage(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tthis._update();\n\t\t\t}\n\t\t}));\n\t\tthis._update();\n\n\t}\n\n\tdispose(): void {\n\t\tthis._sessionDisposables.dispose();\n\t\tthis._removeAllDecorations();\n\t\tthis._disposables.dispose();\n\t}\n\n\tprivate _update(): void {\n\t\tthis._sessionDisposables.clear();\n\t\tthis._removeAllDecorations();\n\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tif (options.enabled === 'off') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this._editor.getModel();\n\t\tif (!model || !this._languageFeaturesService.inlayHintsProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (options.enabled === 'on') {\n\t\t\t// different \"on\" modes: always\n\t\t\tthis._activeRenderMode = RenderMode.Normal;\n\t\t} else {\n\t\t\t// different \"on\" modes: offUnlessPressed, or onUnlessPressed\n\t\t\tlet defaultMode: RenderMode;\n\t\t\tlet altMode: RenderMode;\n\t\t\tif (options.enabled === 'onUnlessPressed') {\n\t\t\t\tdefaultMode = RenderMode.Normal;\n\t\t\t\taltMode = RenderMode.Invisible;\n\t\t\t} else {\n\t\t\t\tdefaultMode = RenderMode.Invisible;\n\t\t\t\taltMode = RenderMode.Normal;\n\t\t\t}\n\t\t\tthis._activeRenderMode = defaultMode;\n\n\t\t\tthis._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => {\n\t\t\t\tif (!this._editor.hasModel()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode;\n\t\t\t\tif (newRenderMode !== this._activeRenderMode) {\n\t\t\t\t\tthis._activeRenderMode = newRenderMode;\n\t\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\t\tconst copies = this._copyInlayHintsWithCurrentAnchor(model);\n\t\t\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], copies);\n\t\t\t\t\tscheduler.schedule(0);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\t// iff possible, quickly update from cache\n\t\tconst cached = this._inlayHintsCache.get(model);\n\t\tif (cached) {\n\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], cached);\n\t\t}\n\t\tthis._sessionDisposables.add(toDisposable(() => {\n\t\t\t// cache items when switching files etc\n\t\t\tif (!model.isDisposed()) {\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\t\t\t}\n\t\t}));\n\n\t\tlet cts: CancellationTokenSource | undefined;\n\t\tconst watchedProviders = new Set<languages.InlayHintsProvider>();\n\n\t\tthis._sessionDisposables.add(model.onWillDispose(() => cts?.cancel()));\n\n\t\tconst cancellationStore = this._sessionDisposables.add(new CancellationStore());\n\n\t\tconst scheduler = new RunOnceScheduler(async () => {\n\t\t\tconst t1 = Date.now();\n\n\t\t\tconst { store, token } = cancellationStore.reset();\n\n\t\t\ttry {\n\t\t\t\tconst inlayHints = await InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider, model, this._getHintsRanges(), token);\n\t\t\t\tscheduler.delay = this._debounceInfo.update(model, Date.now() - t1);\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\tinlayHints.dispose();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// listen to provider changes\n\t\t\t\tfor (const provider of inlayHints.provider) {\n\t\t\t\t\tif (typeof provider.onDidChangeInlayHints === 'function' && !watchedProviders.has(provider)) {\n\t\t\t\t\t\twatchedProviders.add(provider);\n\t\t\t\t\t\tstore.add(provider.onDidChangeInlayHints(() => {\n\t\t\t\t\t\t\tif (!scheduler.isScheduled()) { // ignore event when request is already scheduled\n\t\t\t\t\t\t\t\tscheduler.schedule();\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\tstore.add(inlayHints);\n\t\t\t\tthis._updateHintsDecorators(inlayHints.ranges, inlayHints.items);\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\n\t\t\t} catch (err) {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t}, this._debounceInfo.get(model));\n\n\t\tthis._sessionDisposables.add(scheduler);\n\t\tscheduler.schedule(0);\n\n\t\tthis._sessionDisposables.add(this._editor.onDidScrollChange((e) => {\n\t\t\t// update when scroll position changes\n\t\t\t// uses scrollTopChanged has weak heuristic to differenatiate between scrolling due to\n\t\t\t// typing or due to \"actual\" scrolling\n\t\t\tif (e.scrollTopChanged || !scheduler.isScheduled()) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tconst cursor = this._sessionDisposables.add(new MutableDisposable());\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => {\n\t\t\tcts?.cancel();\n\n\t\t\t// mark current cursor position and time after which the whole can be updated/redrawn\n\t\t\tconst delay = Math.max(scheduler.delay, 800);\n\t\t\tthis._cursorInfo = { position: this._editor.getPosition()!, notEarlierThan: Date.now() + delay };\n\t\t\tcursor.value = disposableTimeout(() => scheduler.schedule(0), delay);\n\n\t\t\tscheduler.schedule();\n\t\t}));\n\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\t// mouse gestures\n\t\tthis._sessionDisposables.add(this._installDblClickGesture(() => scheduler.schedule(0)));\n\t\tthis._sessionDisposables.add(this._installLinkGesture());\n\t\tthis._sessionDisposables.add(this._installContextMenu());\n\t}\n\n\tprivate _installLinkGesture(): IDisposable {\n\n\t\tconst store = new DisposableStore();\n\t\tconst gesture = store.add(new ClickLinkGesture(this._editor));\n\n\t\t// let removeHighlight = () => { };\n\n\t\tconst sessionStore = new DisposableStore();\n\t\tstore.add(sessionStore);\n\n\t\tstore.add(gesture.onMouseMoveOrRelevantKeyDown(e => {\n\t\t\tconst [mouseEvent] = e;\n\t\t\tconst labelPart = this._getInlayHintLabelPart(mouseEvent);\n\t\t\tconst model = this._editor.getModel();\n\n\t\t\tif (!labelPart || !model) {\n\t\t\t\tsessionStore.clear();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// resolve the item\n\t\t\tconst cts = new CancellationTokenSource();\n\t\t\tsessionStore.add(toDisposable(() => cts.dispose(true)));\n\t\t\tlabelPart.item.resolve(cts.token);\n\n\t\t\t// render link => when the modifier is pressed and when there is a command or location\n\t\t\tthis._activeInlayHintPart = labelPart.part.command || labelPart.part.location\n\t\t\t\t? new ActiveInlayHintInfo(labelPart, mouseEvent.hasTriggerModifier)\n\t\t\t\t: undefined;\n\n\t\t\tconst lineNumber = model.validatePosition(labelPart.item.hint.position).lineNumber;\n\t\t\tconst range = new Range(lineNumber, 1, lineNumber, model.getLineMaxColumn(lineNumber));\n\t\t\tconst lineHints = this._getInlineHintsForRange(range);\n\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\tsessionStore.add(toDisposable(() => {\n\t\t\t\tthis._activeInlayHintPart = undefined;\n\t\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\t}));\n\t\t}));\n\t\tstore.add(gesture.onCancel(() => sessionStore.clear()));\n\t\tstore.add(gesture.onExecute(async e => {\n\t\t\tconst label = this._getInlayHintLabelPart(e);\n\t\t\tif (label) {\n\t\t\t\tconst part = label.part;\n\t\t\t\tif (part.location) {\n\t\t\t\t\t// location -> execute go to def\n\t\t\t\t\tthis._instaService.invokeFunction(goToDefinitionWithLocation, e, this._editor as IActiveCodeEditor, part.location);\n\t\t\t\t} else if (languages.Command.is(part.command)) {\n\t\t\t\t\t// command -> execute it\n\t\t\t\t\tawait this._invokeCommand(part.command, label.item);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\treturn store;\n\t}\n\n\tprivate _getInlineHintsForRange(range: Range) {\n\t\tconst lineHints = new Set<InlayHintItem>();\n\t\tfor (const data of this._decorationsMetadata.values()) {\n\t\t\tif (range.containsRange(data.item.anchor.range)) {\n\t\t\t\tlineHints.add(data.item);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(lineHints);\n\t}\n\n\tprivate _installDblClickGesture(updateInlayHints: Function): IDisposable {\n\t\treturn this._editor.onMouseUp(async e => {\n\t\t\tif (e.event.detail !== 2) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (!part) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.event.preventDefault();\n\t\t\tawait part.item.resolve(CancellationToken.None);\n\t\t\tif (isNonEmptyArray(part.item.hint.textEdits)) {\n\t\t\t\tconst edits = part.item.hint.textEdits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text));\n\t\t\t\tthis._editor.executeEdits('inlayHint.default', edits);\n\t\t\t\tupdateInlayHints();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _installContextMenu(): IDisposable {\n\t\treturn this._editor.onContextMenu(async e => {\n\t\t\tif (!(isHTMLElement(e.event.target))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (part) {\n\t\t\t\tawait this._instaService.invokeFunction(showGoToContextMenu, this._editor, e.event.target, part);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _getInlayHintLabelPart(e: IEditorMouseEvent | ClickLinkMouseEvent): RenderedInlayHintLabelPart | undefined {\n\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = e.target.detail.injectedText?.options;\n\t\tif (options instanceof ModelDecorationInjectedTextOptions && options?.attachedData instanceof RenderedInlayHintLabelPart) {\n\t\t\treturn options.attachedData;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async _invokeCommand(command: languages.Command, item: InlayHintItem) {\n\t\ttry {\n\t\t\tawait this._commandService.executeCommand(command.id, ...(command.arguments ?? []));\n\t\t} catch (err) {\n\t\t\tthis._notificationService.notify({\n\t\t\t\tseverity: Severity.Error,\n\t\t\t\tsource: item.provider.displayName,\n\t\t\t\tmessage: err\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _cacheHintsForFastRestore(model: ITextModel): void {\n\t\tconst hints = this._copyInlayHintsWithCurrentAnchor(model);\n\t\tthis._inlayHintsCache.set(model, hints);\n\t}\n\n\t// return inlay hints but with an anchor that reflects \"updates\"\n\t// that happened after receiving them, e.g adding new lines before a hint\n\tprivate _copyInlayHintsWithCurrentAnchor(model: ITextModel): InlayHintItem[] {\n\t\tconst items = new Map<InlayHintItem, InlayHintItem>();\n\t\tfor (const [id, obj] of this._decorationsMetadata) {\n\t\t\tif (items.has(obj.item)) {\n\t\t\t\t// an inlay item can be rendered as multiple decorations\n\t\t\t\t// but they will all uses the same range\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst range = model.getDecorationRange(id);\n\t\t\tif (range) {\n\t\t\t\t// update range with whatever the editor has tweaked it to\n\t\t\t\tconst anchor = new InlayHintAnchor(range, obj.item.anchor.direction);\n\t\t\t\tconst copy = obj.item.with({ anchor });\n\t\t\t\titems.set(obj.item, copy);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(items.values());\n\t}\n\n\tprivate _getHintsRanges(): Range[] {\n\t\tconst extra = 30;\n\t\tconst model = this._editor.getModel()!;\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\t\tconst result: Range[] = [];\n\t\tfor (const range of visibleRanges.sort(Range.compareRangesUsingStarts)) {\n\t\t\tconst extendedRange = model.validateRange(new Range(range.startLineNumber - extra, range.startColumn, range.endLineNumber + extra, range.endColumn));\n\t\t\tif (result.length === 0 || !Range.areIntersectingOrTouching(result[result.length - 1], extendedRange)) {\n\t\t\t\tresult.push(extendedRange);\n\t\t\t} else {\n\t\t\t\tresult[result.length - 1] = Range.plusRange(result[result.length - 1], extendedRange);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateHintsDecorators(ranges: readonly Range[], items: readonly InlayHintItem[]): void {\n\n\t\tconst itemFixedLengths = new Map<InlayHintItem, number>();\n\n\t\tif (this._cursorInfo\n\t\t\t&& this._cursorInfo.notEarlierThan > Date.now()\n\t\t\t&& ranges.some(range => range.containsPosition(this._cursorInfo!.position))\n\t\t) {\n\t\t\t// collect inlay hints that are on the same line and before the cursor. Those \"old\" hints\n\t\t\t// define fixed lengths so that the cursor does not jump back and worth while typing.\n\t\t\tconst { position } = this._cursorInfo;\n\t\t\tthis._cursorInfo = undefined;\n\n\t\t\tconst lengths = new Map<InlayHintItem, number>();\n\n\t\t\tfor (const deco of this._editor.getLineDecorations(position.lineNumber) ?? []) {\n\n\t\t\t\tconst data = this._decorationsMetadata.get(deco.id);\n\t\t\t\tif (deco.range.startColumn > position.column) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst opts = data?.decoration.options[data.item.anchor.direction];\n\t\t\t\tif (opts && opts.attachedData !== InlayHintsController._whitespaceData) {\n\t\t\t\t\tconst len = lengths.get(data.item) ?? 0;\n\t\t\t\t\tlengths.set(data.item, len + opts.content.length);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// on the cursor line and before the cursor-column\n\t\t\tconst newItemsWithFixedLength = items.filter(item => item.anchor.range.startLineNumber === position.lineNumber && item.anchor.range.endColumn <= position.column);\n\t\t\tconst fixedLengths = Array.from(lengths.values());\n\n\t\t\t// match up fixed lengths with items and distribute the remaining lengths to the last item\n\t\t\tlet lastItem: InlayHintItem | undefined;\n\t\t\twhile (true) {\n\t\t\t\tconst targetItem = newItemsWithFixedLength.shift();\n\t\t\t\tconst fixedLength = fixedLengths.shift();\n\n\t\t\t\tif (!fixedLength && !targetItem) {\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\n\t\t\t\tif (targetItem) {\n\t\t\t\t\titemFixedLengths.set(targetItem, fixedLength ?? 0);\n\t\t\t\t\tlastItem = targetItem;\n\n\t\t\t\t} else if (lastItem && fixedLength) {\n\t\t\t\t\t// still lengths but no more item. give it all to the last\n\t\t\t\t\tlet len = itemFixedLengths.get(lastItem)!;\n\t\t\t\t\tlen += fixedLength;\n\t\t\t\t\tlen += fixedLengths.reduce((p, c) => p + c, 0);\n\t\t\t\t\tfixedLengths.length = 0;\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// utils to collect/create injected text decorations\n\t\tconst newDecorationsData: InlayHintDecorationRenderInfo[] = [];\n\t\tconst addInjectedText = (item: InlayHintItem, ref: ClassNameReference, content: string, cursorStops: InjectedTextCursorStops, attachedData?: RenderedInlayHintLabelPart | object): void => {\n\t\t\tconst opts: InjectedTextOptions = {\n\t\t\t\tcontent,\n\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\tinlineClassName: ref.className,\n\t\t\t\tcursorStops,\n\t\t\t\tattachedData\n\t\t\t};\n\t\t\tnewDecorationsData.push({\n\t\t\t\titem,\n\t\t\t\tclassNameRef: ref,\n\t\t\t\tdecoration: {\n\t\t\t\t\trange: item.anchor.range,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t// className: \"rangeHighlight\", // DEBUG highlight to see to what range a hint is attached\n\t\t\t\t\t\tdescription: 'InlayHint',\n\t\t\t\t\t\tshowIfCollapsed: item.anchor.range.isEmpty(), // \"original\" range is empty\n\t\t\t\t\t\tcollapseOnReplaceEdit: !item.anchor.range.isEmpty(),\n\t\t\t\t\t\tstickiness: TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges,\n\t\t\t\t\t\t[item.anchor.direction]: this._activeRenderMode === RenderMode.Normal ? opts : undefined\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst addInjectedWhitespace = (item: InlayHintItem, isLast: boolean): void => {\n\t\t\tconst marginRule = this._ruleFactory.createClassNameRef({\n\t\t\t\twidth: `${(fontSize / 3) | 0}px`,\n\t\t\t\tdisplay: 'inline-block'\n\t\t\t});\n\t\t\taddInjectedText(item, marginRule, '\\u200a', isLast ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None, InlayHintsController._whitespaceData);\n\t\t};\n\n\n\t\t//\n\t\tconst { fontSize, fontFamily, padding, isUniform } = this._getLayoutInfo();\n\t\tconst maxLength = this._editor.getOption(EditorOption.inlayHints).maximumLength;\n\t\tconst fontFamilyVar = '--code-editorInlayHintsFontFamily';\n\t\tthis._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily);\n\n\n\t\ttype ILineInfo = { line: number; totalLen: number };\n\t\tlet currentLineInfo: ILineInfo = { line: 0, totalLen: 0 };\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\n\t\t\tif (currentLineInfo.line !== item.anchor.range.startLineNumber) {\n\t\t\t\tcurrentLineInfo = { line: item.anchor.range.startLineNumber, totalLen: 0 };\n\t\t\t}\n\n\t\t\tif (maxLength && currentLineInfo.totalLen > maxLength) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// whitespace leading the actual label\n\t\t\tif (item.hint.paddingLeft) {\n\t\t\t\taddInjectedWhitespace(item, false);\n\t\t\t}\n\n\t\t\t// the label with its parts\n\t\t\tconst parts: languages.InlayHintLabelPart[] = typeof item.hint.label === 'string'\n\t\t\t\t? [{ label: item.hint.label }]\n\t\t\t\t: item.hint.label;\n\n\t\t\tconst itemFixedLength = itemFixedLengths.get(item);\n\t\t\tlet itemActualLength = 0;\n\n\t\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\t\tconst part = parts[i];\n\n\t\t\t\tconst isFirst = i === 0;\n\t\t\t\tconst isLast = i === parts.length - 1;\n\n\t\t\t\tconst cssProperties: CssProperties = {\n\t\t\t\t\tfontSize: `${fontSize}px`,\n\t\t\t\t\tfontFamily: `var(${fontFamilyVar}), ${EDITOR_FONT_DEFAULTS.fontFamily}`,\n\t\t\t\t\tverticalAlign: isUniform ? 'baseline' : 'middle',\n\t\t\t\t\tunicodeBidi: 'isolate'\n\t\t\t\t};\n\n\t\t\t\tif (isNonEmptyArray(item.hint.textEdits)) {\n\t\t\t\t\tcssProperties.cursor = 'default';\n\t\t\t\t}\n\n\t\t\t\tthis._fillInColors(cssProperties, item.hint);\n\n\t\t\t\tif ((part.command || part.location) && this._activeInlayHintPart?.part.item === item && this._activeInlayHintPart.part.index === i) {\n\t\t\t\t\t// active link!\n\t\t\t\t\tcssProperties.textDecoration = 'underline';\n\t\t\t\t\tif (this._activeInlayHintPart.hasTriggerModifier) {\n\t\t\t\t\t\tcssProperties.color = themeColorFromId(colors.editorActiveLinkForeground);\n\t\t\t\t\t\tcssProperties.cursor = 'pointer';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet textlabel = part.label;\n\t\t\t\tcurrentLineInfo.totalLen += textlabel.length;\n\t\t\t\tlet tooLong = false;\n\t\t\t\tconst over = maxLength !== 0 ? (currentLineInfo.totalLen - maxLength) : 0;\n\t\t\t\tif (over > 0) {\n\t\t\t\t\ttextlabel = textlabel.slice(0, -over) + '…';\n\t\t\t\t\ttooLong = true;\n\t\t\t\t}\n\n\t\t\t\titemActualLength += textlabel.length;\n\n\t\t\t\tif (itemFixedLength !== undefined) {\n\t\t\t\t\tconst overFixedLength = itemActualLength - itemFixedLength;\n\t\t\t\t\tif (overFixedLength >= 0) {\n\t\t\t\t\t\t// longer than fixed length, trim\n\t\t\t\t\t\titemActualLength -= overFixedLength;\n\t\t\t\t\t\ttextlabel = textlabel.slice(0, -(1 + overFixedLength)) + '…';\n\t\t\t\t\t\ttooLong = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (padding) {\n\t\t\t\t\tif (isFirst && (isLast || tooLong)) {\n\t\t\t\t\t\t// only element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if (isFirst) {\n\t\t\t\t\t\t// first element\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px 0 0 ${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if ((isLast || tooLong)) {\n\t\t\t\t\t\t// last element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px 1px 0`;\n\t\t\t\t\t\tcssProperties.borderRadius = `0 ${(fontSize / 4) | 0}px ${(fontSize / 4) | 0}px 0`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px 0`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef(cssProperties),\n\t\t\t\t\tfixSpace(textlabel),\n\t\t\t\t\tisLast && !item.hint.paddingRight ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None,\n\t\t\t\t\tnew RenderedInlayHintLabelPart(item, i)\n\t\t\t\t);\n\n\t\t\t\tif (tooLong) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (itemFixedLength !== undefined && itemActualLength < itemFixedLength) {\n\t\t\t\t// shorter than fixed length, pad\n\t\t\t\tconst pad = (itemFixedLength - itemActualLength);\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef({}),\n\t\t\t\t\t'\\u200a'.repeat(pad),\n\t\t\t\t\tInjectedTextCursorStops.None\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// whitespace trailing the actual label\n\t\t\tif (item.hint.paddingRight) {\n\t\t\t\taddInjectedWhitespace(item, true);\n\t\t\t}\n\n\t\t\tif (newDecorationsData.length > InlayHintsController._MAX_DECORATORS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// collect all decoration ids that are affected by the ranges\n\t\t// and only update those decorations\n\t\tconst decorationIdsToReplace: string[] = [];\n\t\tfor (const [id, metadata] of this._decorationsMetadata) {\n\t\t\tconst range = this._editor.getModel()?.getDecorationRange(id);\n\t\t\tif (range && ranges.some(r => r.containsRange(range))) {\n\t\t\t\tdecorationIdsToReplace.push(id);\n\t\t\t\tmetadata.classNameRef.dispose();\n\t\t\t\tthis._decorationsMetadata.delete(id);\n\t\t\t}\n\t\t}\n\n\t\tconst scrollState = StableEditorScrollState.capture(this._editor);\n\n\t\tthis._editor.changeDecorations(accessor => {\n\t\t\tconst newDecorationIds = accessor.deltaDecorations(decorationIdsToReplace, newDecorationsData.map(d => d.decoration));\n\t\t\tfor (let i = 0; i < newDecorationIds.length; i++) {\n\t\t\t\tconst data = newDecorationsData[i];\n\t\t\t\tthis._decorationsMetadata.set(newDecorationIds[i], data);\n\t\t\t}\n\t\t});\n\n\t\tscrollState.restore(this._editor);\n\t}\n\n\tprivate _fillInColors(props: CssProperties, hint: languages.InlayHint): void {\n\t\tif (hint.kind === languages.InlayHintKind.Parameter) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintParameterBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintParameterForeground);\n\t\t} else if (hint.kind === languages.InlayHintKind.Type) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintTypeBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintTypeForeground);\n\t\t} else {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintForeground);\n\t\t}\n\t}\n\n\tprivate _getLayoutInfo() {\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tconst padding = options.padding;\n\n\t\tconst editorFontSize = this._editor.getOption(EditorOption.fontSize);\n\t\tconst editorFontFamily = this._editor.getOption(EditorOption.fontFamily);\n\n\t\tlet fontSize = options.fontSize;\n\t\tif (!fontSize || fontSize < 5 || fontSize > editorFontSize) {\n\t\t\tfontSize = editorFontSize;\n\t\t}\n\n\t\tconst fontFamily = options.fontFamily || editorFontFamily;\n\n\t\tconst isUniform = !padding\n\t\t\t&& fontFamily === editorFontFamily\n\t\t\t&& fontSize === editorFontSize;\n\n\t\treturn { fontSize, fontFamily, padding, isUniform };\n\t}\n\n\tprivate _removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(Array.from(this._decorationsMetadata.keys()));\n\t\tfor (const obj of this._decorationsMetadata.values()) {\n\t\t\tobj.classNameRef.dispose();\n\t\t}\n\t\tthis._decorationsMetadata.clear();\n\t}\n}\n\n\n// Prevents the view from potentially visible whitespace\nfunction fixSpace(str: string): string {\n\tconst noBreakWhitespace = '\\xa0';\n\treturn str.replace(/[ \\t]/g, noBreakWhitespace);\n}\n\nCommandsRegistry.registerCommand('_executeInlayHintProvider', async (accessor, ...args: [URI, IRange]): Promise<languages.InlayHint[]> => {\n\n\tconst [uri, range] = args;\n\tassertType(URI.isUri(uri));\n\tassertType(Range.isIRange(range));\n\n\tconst { inlayHintsProvider } = accessor.get(ILanguageFeaturesService);\n\tconst ref = await accessor.get(ITextModelService).createModelReference(uri);\n\ttry {\n\t\tconst model = await InlayHintsFragments.create(inlayHintsProvider, ref.object.textEditorModel, [Range.lift(range)], CancellationToken.None);\n\t\tconst result = model.items.map(i => i.hint);\n\t\tsetTimeout(() => model.dispose(), 0); // dispose after sending to ext host\n\t\treturn result;\n\t} finally {\n\t\tref.dispose();\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 { isHTMLElement, ModifierKeyEmitter } from '../../../../base/browser/dom.js';\nimport { isNonEmptyArray } from '../../../../base/common/arrays.js';\nimport { disposableTimeout, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../../base/common/map.js';\nimport { IRange } from '../../../../base/common/range.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { IActiveCodeEditor, ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { ClassNameReference, CssProperties, DynamicCssRules } from '../../../browser/editorDom.js';\nimport { StableEditorScrollState } from '../../../browser/stableEditorScroll.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { EDITOR_FONT_DEFAULTS } from '../../../common/config/fontInfo.js';\nimport { EditOperation } from '../../../common/core/editOperation.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport * as languages from '../../../common/languages.js';\nimport { IModelDeltaDecoration, InjectedTextCursorStops, InjectedTextOptions, ITextModel, TrackedRangeStickiness } from '../../../common/model.js';\nimport { ModelDecorationInjectedTextOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { ClickLinkGesture, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js';\nimport { InlayHintAnchor, InlayHintItem, InlayHintsFragments } from './inlayHints.js';\nimport { goToDefinitionWithLocation, showGoToContextMenu } from './inlayHintsLocations.js';\nimport { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';\nimport { createDecorator, IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';\nimport * as colors from '../../../../platform/theme/common/colorRegistry.js';\nimport { themeColorFromId } from '../../../../platform/theme/common/themeService.js';\nimport { Position } from '../../../common/core/position.js';\n\n// --- hint caching service (per session)\n\nclass InlayHintsCache {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tprivate readonly _entries = new LRUCache<string, InlayHintItem[]>(50);\n\n\tget(model: ITextModel): InlayHintItem[] | undefined {\n\t\tconst key = InlayHintsCache._key(model);\n\t\treturn this._entries.get(key);\n\t}\n\n\tset(model: ITextModel, value: InlayHintItem[]): void {\n\t\tconst key = InlayHintsCache._key(model);\n\t\tthis._entries.set(key, value);\n\t}\n\n\tprivate static _key(model: ITextModel): string {\n\t\treturn `${model.uri.toString()}/${model.getVersionId()}`;\n\t}\n}\n\ninterface IInlayHintsCache extends InlayHintsCache { }\nconst IInlayHintsCache = createDecorator<IInlayHintsCache>('IInlayHintsCache');\nregisterSingleton(IInlayHintsCache, InlayHintsCache, InstantiationType.Delayed);\n\n// --- rendered label\n\nexport class RenderedInlayHintLabelPart {\n\tconstructor(readonly item: InlayHintItem, readonly index: number) { }\n\n\tget part() {\n\t\tconst label = this.item.hint.label;\n\t\tif (typeof label === 'string') {\n\t\t\treturn { label };\n\t\t} else {\n\t\t\treturn label[this.index];\n\t\t}\n\t}\n}\n\nclass ActiveInlayHintInfo {\n\tconstructor(readonly part: RenderedInlayHintLabelPart, readonly hasTriggerModifier: boolean) { }\n}\n\ntype InlayHintDecorationRenderInfo = {\n\titem: InlayHintItem;\n\tdecoration: IModelDeltaDecoration;\n\tclassNameRef: ClassNameReference;\n};\n\nconst enum RenderMode {\n\tNormal,\n\tInvisible\n}\n\n\n\n/**\n * Mix of CancellationTokenSource, DisposableStore and MutableDisposable\n */\nclass CancellationStore implements IDisposable {\n\n\tprivate readonly _store = new MutableDisposable<DisposableStore>();\n\tprivate _tokenSource = new CancellationTokenSource();\n\n\tdispose() {\n\t\tthis._store.dispose();\n\t\tthis._tokenSource.dispose(true);\n\t}\n\n\treset() {\n\t\tthis._tokenSource.dispose(true);\n\t\tthis._tokenSource = new CancellationTokenSource();\n\t\tthis._store.value = new DisposableStore();\n\n\t\treturn {\n\t\t\tstore: this._store.value,\n\t\t\ttoken: this._tokenSource.token\n\t\t};\n\t}\n}\n\n\n// --- controller\n\n\nexport class InlayHintsController implements IEditorContribution {\n\n\tstatic readonly ID: string = 'editor.contrib.InlayHints';\n\n\tprivate static readonly _MAX_DECORATORS = 1500;\n\tprivate static readonly _whitespaceData = {};\n\n\tstatic get(editor: ICodeEditor): InlayHintsController | undefined {\n\t\treturn editor.getContribution<InlayHintsController>(InlayHintsController.ID) ?? undefined;\n\t}\n\n\tprivate readonly _disposables = new DisposableStore();\n\tprivate readonly _sessionDisposables = new DisposableStore();\n\tprivate readonly _decorationsMetadata = new Map<string, InlayHintDecorationRenderInfo>();\n\tprivate readonly _debounceInfo: IFeatureDebounceInformation;\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate _cursorInfo?: { position: Position; notEarlierThan: number };\n\tprivate _activeRenderMode = RenderMode.Normal;\n\tprivate _activeInlayHintPart?: ActiveInlayHintInfo;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService _featureDebounce: ILanguageFeatureDebounceService,\n\t\t@IInlayHintsCache private readonly _inlayHintsCache: IInlayHintsCache,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@INotificationService private readonly _notificationService: INotificationService,\n\t\t@IInstantiationService private readonly _instaService: IInstantiationService,\n\t) {\n\t\tthis._ruleFactory = this._disposables.add(new DynamicCssRules(this._editor));\n\t\tthis._debounceInfo = _featureDebounce.for(_languageFeaturesService.inlayHintsProvider, 'InlayHint', { min: 25 });\n\t\tthis._disposables.add(_languageFeaturesService.inlayHintsProvider.onDidChange(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModel(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModelLanguage(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tthis._update();\n\t\t\t}\n\t\t}));\n\t\tthis._update();\n\n\t}\n\n\tdispose(): void {\n\t\tthis._sessionDisposables.dispose();\n\t\tthis._removeAllDecorations();\n\t\tthis._disposables.dispose();\n\t}\n\n\tprivate _update(): void {\n\t\tthis._sessionDisposables.clear();\n\t\tthis._removeAllDecorations();\n\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tif (options.enabled === 'off') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this._editor.getModel();\n\t\tif (!model || !this._languageFeaturesService.inlayHintsProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (options.enabled === 'on') {\n\t\t\t// different \"on\" modes: always\n\t\t\tthis._activeRenderMode = RenderMode.Normal;\n\t\t} else {\n\t\t\t// different \"on\" modes: offUnlessPressed, or onUnlessPressed\n\t\t\tlet defaultMode: RenderMode;\n\t\t\tlet altMode: RenderMode;\n\t\t\tif (options.enabled === 'onUnlessPressed') {\n\t\t\t\tdefaultMode = RenderMode.Normal;\n\t\t\t\taltMode = RenderMode.Invisible;\n\t\t\t} else {\n\t\t\t\tdefaultMode = RenderMode.Invisible;\n\t\t\t\taltMode = RenderMode.Normal;\n\t\t\t}\n\t\t\tthis._activeRenderMode = defaultMode;\n\n\t\t\tthis._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => {\n\t\t\t\tif (!this._editor.hasModel()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode;\n\t\t\t\tif (newRenderMode !== this._activeRenderMode) {\n\t\t\t\t\tthis._activeRenderMode = newRenderMode;\n\t\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\t\tconst copies = this._copyInlayHintsWithCurrentAnchor(model);\n\t\t\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], copies);\n\t\t\t\t\tscheduler.schedule(0);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\t// iff possible, quickly update from cache\n\t\tconst cached = this._inlayHintsCache.get(model);\n\t\tif (cached) {\n\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], cached);\n\t\t}\n\t\tthis._sessionDisposables.add(toDisposable(() => {\n\t\t\t// cache items when switching files etc\n\t\t\tif (!model.isDisposed()) {\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\t\t\t}\n\t\t}));\n\n\t\tlet cts: CancellationTokenSource | undefined;\n\t\tconst watchedProviders = new Set<languages.InlayHintsProvider>();\n\n\t\tthis._sessionDisposables.add(model.onWillDispose(() => cts?.cancel()));\n\n\t\tconst cancellationStore = this._sessionDisposables.add(new CancellationStore());\n\n\t\tconst scheduler = new RunOnceScheduler(async () => {\n\t\t\tconst t1 = Date.now();\n\n\t\t\tconst { store, token } = cancellationStore.reset();\n\n\t\t\ttry {\n\t\t\t\tconst inlayHints = await InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider, model, this._getHintsRanges(), token);\n\t\t\t\tscheduler.delay = this._debounceInfo.update(model, Date.now() - t1);\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\tinlayHints.dispose();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// listen to provider changes\n\t\t\t\tfor (const provider of inlayHints.provider) {\n\t\t\t\t\tif (typeof provider.onDidChangeInlayHints === 'function' && !watchedProviders.has(provider)) {\n\t\t\t\t\t\twatchedProviders.add(provider);\n\t\t\t\t\t\tstore.add(provider.onDidChangeInlayHints(() => {\n\t\t\t\t\t\t\tif (!scheduler.isScheduled()) { // ignore event when request is already scheduled\n\t\t\t\t\t\t\t\tscheduler.schedule();\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\tstore.add(inlayHints);\n\t\t\t\tthis._updateHintsDecorators(inlayHints.ranges, inlayHints.items);\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\n\t\t\t} catch (err) {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t}, this._debounceInfo.get(model));\n\n\t\tthis._sessionDisposables.add(scheduler);\n\t\tscheduler.schedule(0);\n\n\t\tthis._sessionDisposables.add(this._editor.onDidScrollChange((e) => {\n\t\t\t// update when scroll position changes\n\t\t\t// uses scrollTopChanged has weak heuristic to differenatiate between scrolling due to\n\t\t\t// typing or due to \"actual\" scrolling\n\t\t\tif (e.scrollTopChanged || !scheduler.isScheduled()) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tconst cursor = this._sessionDisposables.add(new MutableDisposable());\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => {\n\t\t\tcts?.cancel();\n\n\t\t\t// mark current cursor position and time after which the whole can be updated/redrawn\n\t\t\tconst delay = Math.max(scheduler.delay, 800);\n\t\t\tthis._cursorInfo = { position: this._editor.getPosition()!, notEarlierThan: Date.now() + delay };\n\t\t\tcursor.value = disposableTimeout(() => scheduler.schedule(0), delay);\n\n\t\t\tscheduler.schedule();\n\t\t}));\n\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\t// mouse gestures\n\t\tthis._sessionDisposables.add(this._installDblClickGesture(() => scheduler.schedule(0)));\n\t\tthis._sessionDisposables.add(this._installLinkGesture());\n\t\tthis._sessionDisposables.add(this._installContextMenu());\n\t}\n\n\tprivate _installLinkGesture(): IDisposable {\n\n\t\tconst store = new DisposableStore();\n\t\tconst gesture = store.add(new ClickLinkGesture(this._editor));\n\n\t\t// let removeHighlight = () => { };\n\n\t\tconst sessionStore = new DisposableStore();\n\t\tstore.add(sessionStore);\n\n\t\tstore.add(gesture.onMouseMoveOrRelevantKeyDown(e => {\n\t\t\tconst [mouseEvent] = e;\n\t\t\tconst labelPart = this._getInlayHintLabelPart(mouseEvent);\n\t\t\tconst model = this._editor.getModel();\n\n\t\t\tif (!labelPart || !model) {\n\t\t\t\tsessionStore.clear();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// resolve the item\n\t\t\tconst cts = new CancellationTokenSource();\n\t\t\tsessionStore.add(toDisposable(() => cts.dispose(true)));\n\t\t\tlabelPart.item.resolve(cts.token);\n\n\t\t\t// render link => when the modifier is pressed and when there is a command or location\n\t\t\tthis._activeInlayHintPart = labelPart.part.command || labelPart.part.location\n\t\t\t\t? new ActiveInlayHintInfo(labelPart, mouseEvent.hasTriggerModifier)\n\t\t\t\t: undefined;\n\n\t\t\tconst lineNumber = model.validatePosition(labelPart.item.hint.position).lineNumber;\n\t\t\tconst range = new Range(lineNumber, 1, lineNumber, model.getLineMaxColumn(lineNumber));\n\t\t\tconst lineHints = this._getInlineHintsForRange(range);\n\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\tsessionStore.add(toDisposable(() => {\n\t\t\t\tthis._activeInlayHintPart = undefined;\n\t\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\t}));\n\t\t}));\n\t\tstore.add(gesture.onCancel(() => sessionStore.clear()));\n\t\tstore.add(gesture.onExecute(async e => {\n\t\t\tconst label = this._getInlayHintLabelPart(e);\n\t\t\tif (label) {\n\t\t\t\tconst part = label.part;\n\t\t\t\tif (part.location) {\n\t\t\t\t\t// location -> execute go to def\n\t\t\t\t\tthis._instaService.invokeFunction(goToDefinitionWithLocation, e, this._editor as IActiveCodeEditor, part.location);\n\t\t\t\t} else if (languages.Command.is(part.command)) {\n\t\t\t\t\t// command -> execute it\n\t\t\t\t\tawait this._invokeCommand(part.command, label.item);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\treturn store;\n\t}\n\n\tprivate _getInlineHintsForRange(range: Range) {\n\t\tconst lineHints = new Set<InlayHintItem>();\n\t\tfor (const data of this._decorationsMetadata.values()) {\n\t\t\tif (range.containsRange(data.item.anchor.range)) {\n\t\t\t\tlineHints.add(data.item);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(lineHints);\n\t}\n\n\tprivate _installDblClickGesture(updateInlayHints: Function): IDisposable {\n\t\treturn this._editor.onMouseUp(async e => {\n\t\t\tif (e.event.detail !== 2) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (!part) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.event.preventDefault();\n\t\t\tawait part.item.resolve(CancellationToken.None);\n\t\t\tif (isNonEmptyArray(part.item.hint.textEdits)) {\n\t\t\t\tconst edits = part.item.hint.textEdits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text));\n\t\t\t\tthis._editor.executeEdits('inlayHint.default', edits);\n\t\t\t\tupdateInlayHints();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _installContextMenu(): IDisposable {\n\t\treturn this._editor.onContextMenu(async e => {\n\t\t\tif (!(isHTMLElement(e.event.target))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (part) {\n\t\t\t\tawait this._instaService.invokeFunction(showGoToContextMenu, this._editor, e.event.target, part);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _getInlayHintLabelPart(e: IEditorMouseEvent | ClickLinkMouseEvent): RenderedInlayHintLabelPart | undefined {\n\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = e.target.detail.injectedText?.options;\n\t\tif (options instanceof ModelDecorationInjectedTextOptions && options?.attachedData instanceof RenderedInlayHintLabelPart) {\n\t\t\treturn options.attachedData;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async _invokeCommand(command: languages.Command, item: InlayHintItem) {\n\t\ttry {\n\t\t\tawait this._commandService.executeCommand(command.id, ...(command.arguments ?? []));\n\t\t} catch (err) {\n\t\t\tthis._notificationService.notify({\n\t\t\t\tseverity: Severity.Error,\n\t\t\t\tsource: item.provider.displayName,\n\t\t\t\tmessage: err\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _cacheHintsForFastRestore(model: ITextModel): void {\n\t\tconst hints = this._copyInlayHintsWithCurrentAnchor(model);\n\t\tthis._inlayHintsCache.set(model, hints);\n\t}\n\n\t// return inlay hints but with an anchor that reflects \"updates\"\n\t// that happened after receiving them, e.g adding new lines before a hint\n\tprivate _copyInlayHintsWithCurrentAnchor(model: ITextModel): InlayHintItem[] {\n\t\tconst items = new Map<InlayHintItem, InlayHintItem>();\n\t\tfor (const [id, obj] of this._decorationsMetadata) {\n\t\t\tif (items.has(obj.item)) {\n\t\t\t\t// an inlay item can be rendered as multiple decorations\n\t\t\t\t// but they will all uses the same range\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst range = model.getDecorationRange(id);\n\t\t\tif (range) {\n\t\t\t\t// update range with whatever the editor has tweaked it to\n\t\t\t\tconst anchor = new InlayHintAnchor(range, obj.item.anchor.direction);\n\t\t\t\tconst copy = obj.item.with({ anchor });\n\t\t\t\titems.set(obj.item, copy);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(items.values());\n\t}\n\n\tprivate _getHintsRanges(): Range[] {\n\t\tconst extra = 30;\n\t\tconst model = this._editor.getModel()!;\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\t\tconst result: Range[] = [];\n\t\tfor (const range of visibleRanges.sort(Range.compareRangesUsingStarts)) {\n\t\t\tconst extendedRange = model.validateRange(new Range(range.startLineNumber - extra, range.startColumn, range.endLineNumber + extra, range.endColumn));\n\t\t\tif (result.length === 0 || !Range.areIntersectingOrTouching(result[result.length - 1], extendedRange)) {\n\t\t\t\tresult.push(extendedRange);\n\t\t\t} else {\n\t\t\t\tresult[result.length - 1] = Range.plusRange(result[result.length - 1], extendedRange);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateHintsDecorators(ranges: readonly Range[], items: readonly InlayHintItem[]): void {\n\n\t\tconst itemFixedLengths = new Map<InlayHintItem, number>();\n\n\t\tif (this._cursorInfo\n\t\t\t&& this._cursorInfo.notEarlierThan > Date.now()\n\t\t\t&& ranges.some(range => range.containsPosition(this._cursorInfo!.position))\n\t\t) {\n\t\t\t// collect inlay hints that are on the same line and before the cursor. Those \"old\" hints\n\t\t\t// define fixed lengths so that the cursor does not jump back and worth while typing.\n\t\t\tconst { position } = this._cursorInfo;\n\t\t\tthis._cursorInfo = undefined;\n\n\t\t\tconst lengths = new Map<InlayHintItem, number>();\n\n\t\t\tfor (const deco of this._editor.getLineDecorations(position.lineNumber) ?? []) {\n\n\t\t\t\tconst data = this._decorationsMetadata.get(deco.id);\n\t\t\t\tif (deco.range.startColumn > position.column) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst opts = data?.decoration.options[data.item.anchor.direction];\n\t\t\t\tif (opts && opts.attachedData !== InlayHintsController._whitespaceData) {\n\t\t\t\t\tconst len = lengths.get(data.item) ?? 0;\n\t\t\t\t\tlengths.set(data.item, len + opts.content.length);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// on the cursor line and before the cursor-column\n\t\t\tconst newItemsWithFixedLength = items.filter(item => item.anchor.range.startLineNumber === position.lineNumber && item.anchor.range.endColumn <= position.column);\n\t\t\tconst fixedLengths = Array.from(lengths.values());\n\n\t\t\t// match up fixed lengths with items and distribute the remaining lengths to the last item\n\t\t\tlet lastItem: InlayHintItem | undefined;\n\t\t\twhile (true) {\n\t\t\t\tconst targetItem = newItemsWithFixedLength.shift();\n\t\t\t\tconst fixedLength = fixedLengths.shift();\n\n\t\t\t\tif (!fixedLength && !targetItem) {\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\n\t\t\t\tif (targetItem) {\n\t\t\t\t\titemFixedLengths.set(targetItem, fixedLength ?? 0);\n\t\t\t\t\tlastItem = targetItem;\n\n\t\t\t\t} else if (lastItem && fixedLength) {\n\t\t\t\t\t// still lengths but no more item. give it all to the last\n\t\t\t\t\tlet len = itemFixedLengths.get(lastItem)!;\n\t\t\t\t\tlen += fixedLength;\n\t\t\t\t\tlen += fixedLengths.reduce((p, c) => p + c, 0);\n\t\t\t\t\tfixedLengths.length = 0;\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// utils to collect/create injected text decorations\n\t\tconst newDecorationsData: InlayHintDecorationRenderInfo[] = [];\n\t\tconst addInjectedText = (item: InlayHintItem, ref: ClassNameReference, content: string, cursorStops: InjectedTextCursorStops, attachedData?: RenderedInlayHintLabelPart | object): void => {\n\t\t\tconst opts: InjectedTextOptions = {\n\t\t\t\tcontent,\n\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\tinlineClassName: ref.className,\n\t\t\t\tcursorStops,\n\t\t\t\tattachedData\n\t\t\t};\n\t\t\tnewDecorationsData.push({\n\t\t\t\titem,\n\t\t\t\tclassNameRef: ref,\n\t\t\t\tdecoration: {\n\t\t\t\t\trange: item.anchor.range,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t// className: \"rangeHighlight\", // DEBUG highlight to see to what range a hint is attached\n\t\t\t\t\t\tdescription: 'InlayHint',\n\t\t\t\t\t\tshowIfCollapsed: item.anchor.range.isEmpty(), // \"original\" range is empty\n\t\t\t\t\t\tcollapseOnReplaceEdit: !item.anchor.range.isEmpty(),\n\t\t\t\t\t\tstickiness: TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges,\n\t\t\t\t\t\t[item.anchor.direction]: this._activeRenderMode === RenderMode.Normal ? opts : undefined\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst addInjectedWhitespace = (item: InlayHintItem, isLast: boolean): void => {\n\t\t\tconst marginRule = this._ruleFactory.createClassNameRef({\n\t\t\t\twidth: `${(fontSize / 3) | 0}px`,\n\t\t\t\tdisplay: 'inline-block'\n\t\t\t});\n\t\t\taddInjectedText(item, marginRule, '\\u200a', isLast ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None, InlayHintsController._whitespaceData);\n\t\t};\n\n\n\t\t//\n\t\tconst { fontSize, fontFamily, padding, isUniform } = this._getLayoutInfo();\n\t\tconst maxLength = this._editor.getOption(EditorOption.inlayHints).maximumLength;\n\t\tconst fontFamilyVar = '--code-editorInlayHintsFontFamily';\n\t\tthis._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily);\n\n\n\t\ttype ILineInfo = { line: number; totalLen: number };\n\t\tlet currentLineInfo: ILineInfo = { line: 0, totalLen: 0 };\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\n\t\t\tif (currentLineInfo.line !== item.anchor.range.startLineNumber) {\n\t\t\t\tcurrentLineInfo = { line: item.anchor.range.startLineNumber, totalLen: 0 };\n\t\t\t}\n\n\t\t\tif (maxLength && currentLineInfo.totalLen > maxLength) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// whitespace leading the actual label\n\t\t\tif (item.hint.paddingLeft) {\n\t\t\t\taddInjectedWhitespace(item, false);\n\t\t\t}\n\n\t\t\t// the label with its parts\n\t\t\tconst parts: languages.InlayHintLabelPart[] = typeof item.hint.label === 'string'\n\t\t\t\t? [{ label: item.hint.label }]\n\t\t\t\t: item.hint.label;\n\n\t\t\tconst itemFixedLength = itemFixedLengths.get(item);\n\t\t\tlet itemActualLength = 0;\n\n\t\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\t\tconst part = parts[i];\n\n\t\t\t\tconst isFirst = i === 0;\n\t\t\t\tconst isLast = i === parts.length - 1;\n\n\t\t\t\tconst cssProperties: CssProperties = {\n\t\t\t\t\tfontSize: `${fontSize}px`,\n\t\t\t\t\tfontFamily: `var(${fontFamilyVar}), ${EDITOR_FONT_DEFAULTS.fontFamily}`,\n\t\t\t\t\tverticalAlign: isUniform ? 'baseline' : 'middle',\n\t\t\t\t\tunicodeBidi: 'isolate'\n\t\t\t\t};\n\n\t\t\t\tif (isNonEmptyArray(item.hint.textEdits)) {\n\t\t\t\t\tcssProperties.cursor = 'default';\n\t\t\t\t}\n\n\t\t\t\tthis._fillInColors(cssProperties, item.hint);\n\n\t\t\t\tif ((part.command || part.location) && this._activeInlayHintPart?.part.item === item && this._activeInlayHintPart.part.index === i) {\n\t\t\t\t\t// active link!\n\t\t\t\t\tcssProperties.textDecoration = 'underline';\n\t\t\t\t\tif (this._activeInlayHintPart.hasTriggerModifier) {\n\t\t\t\t\t\tcssProperties.color = themeColorFromId(colors.editorActiveLinkForeground);\n\t\t\t\t\t\tcssProperties.cursor = 'pointer';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet textlabel = part.label;\n\t\t\t\tcurrentLineInfo.totalLen += textlabel.length;\n\t\t\t\tlet tooLong = false;\n\t\t\t\tconst over = maxLength !== 0 ? (currentLineInfo.totalLen - maxLength) : 0;\n\t\t\t\tif (over > 0) {\n\t\t\t\t\ttextlabel = textlabel.slice(0, -over) + '…';\n\t\t\t\t\ttooLong = true;\n\t\t\t\t}\n\n\t\t\t\titemActualLength += textlabel.length;\n\n\t\t\t\tif (itemFixedLength !== undefined) {\n\t\t\t\t\tconst overFixedLength = itemActualLength - itemFixedLength;\n\t\t\t\t\tif (overFixedLength >= 0) {\n\t\t\t\t\t\t// longer than fixed length, trim\n\t\t\t\t\t\titemActualLength -= overFixedLength;\n\t\t\t\t\t\ttextlabel = textlabel.slice(0, -(1 + overFixedLength)) + '…';\n\t\t\t\t\t\ttooLong = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (padding) {\n\t\t\t\t\tif (isFirst && (isLast || tooLong)) {\n\t\t\t\t\t\t// only element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if (isFirst) {\n\t\t\t\t\t\t// first element\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px 0 0 ${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if ((isLast || tooLong)) {\n\t\t\t\t\t\t// last element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px 1px 0`;\n\t\t\t\t\t\tcssProperties.borderRadius = `0 ${(fontSize / 4) | 0}px ${(fontSize / 4) | 0}px 0`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px 0`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef(cssProperties),\n\t\t\t\t\tfixSpace(textlabel),\n\t\t\t\t\tisLast && !item.hint.paddingRight ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None,\n\t\t\t\t\tnew RenderedInlayHintLabelPart(item, i)\n\t\t\t\t);\n\n\t\t\t\tif (tooLong) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (itemFixedLength !== undefined && itemActualLength < itemFixedLength) {\n\t\t\t\t// shorter than fixed length, pad\n\t\t\t\tconst pad = (itemFixedLength - itemActualLength);\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef({}),\n\t\t\t\t\t'\\u200a'.repeat(pad),\n\t\t\t\t\tInjectedTextCursorStops.None\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// whitespace trailing the actual label\n\t\t\tif (item.hint.paddingRight) {\n\t\t\t\taddInjectedWhitespace(item, true);\n\t\t\t}\n\n\t\t\tif (newDecorationsData.length > InlayHintsController._MAX_DECORATORS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// collect all decoration ids that are affected by the ranges\n\t\t// and only update those decorations\n\t\tconst decorationIdsToReplace: string[] = [];\n\t\tfor (const [id, metadata] of this._decorationsMetadata) {\n\t\t\tconst range = this._editor.getModel()?.getDecorationRange(id);\n\t\t\tif (range && ranges.some(r => r.containsRange(range))) {\n\t\t\t\tdecorationIdsToReplace.push(id);\n\t\t\t\tmetadata.classNameRef.dispose();\n\t\t\t\tthis._decorationsMetadata.delete(id);\n\t\t\t}\n\t\t}\n\n\t\tconst scrollState = StableEditorScrollState.capture(this._editor);\n\n\t\tthis._editor.changeDecorations(accessor => {\n\t\t\tconst newDecorationIds = accessor.deltaDecorations(decorationIdsToReplace, newDecorationsData.map(d => d.decoration));\n\t\t\tfor (let i = 0; i < newDecorationIds.length; i++) {\n\t\t\t\tconst data = newDecorationsData[i];\n\t\t\t\tthis._decorationsMetadata.set(newDecorationIds[i], data);\n\t\t\t}\n\t\t});\n\n\t\tscrollState.restore(this._editor);\n\t}\n\n\tprivate _fillInColors(props: CssProperties, hint: languages.InlayHint): void {\n\t\tif (hint.kind === languages.InlayHintKind.Parameter) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintParameterBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintParameterForeground);\n\t\t} else if (hint.kind === languages.InlayHintKind.Type) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintTypeBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintTypeForeground);\n\t\t} else {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintForeground);\n\t\t}\n\t}\n\n\tprivate _getLayoutInfo() {\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tconst padding = options.padding;\n\n\t\tconst editorFontSize = this._editor.getOption(EditorOption.fontSize);\n\t\tconst editorFontFamily = this._editor.getOption(EditorOption.fontFamily);\n\n\t\tlet fontSize = options.fontSize;\n\t\tif (!fontSize || fontSize < 5 || fontSize > editorFontSize) {\n\t\t\tfontSize = editorFontSize;\n\t\t}\n\n\t\tconst fontFamily = options.fontFamily || editorFontFamily;\n\n\t\tconst isUniform = !padding\n\t\t\t&& fontFamily === editorFontFamily\n\t\t\t&& fontSize === editorFontSize;\n\n\t\treturn { fontSize, fontFamily, padding, isUniform };\n\t}\n\n\tprivate _removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(Array.from(this._decorationsMetadata.keys()));\n\t\tfor (const obj of this._decorationsMetadata.values()) {\n\t\t\tobj.classNameRef.dispose();\n\t\t}\n\t\tthis._decorationsMetadata.clear();\n\t}\n}\n\n\n// Prevents the view from potentially visible whitespace\nfunction fixSpace(str: string): string {\n\tconst noBreakWhitespace = '\\xa0';\n\treturn str.replace(/[ \\t]/g, noBreakWhitespace);\n}\n\nCommandsRegistry.registerCommand('_executeInlayHintProvider', async (accessor, ...args: [URI, IRange]): Promise<languages.InlayHint[]> => {\n\n\tconst [uri, range] = args;\n\tassertType(URI.isUri(uri));\n\tassertType(Range.isIRange(range));\n\n\tconst { inlayHintsProvider } = accessor.get(ILanguageFeaturesService);\n\tconst ref = await accessor.get(ITextModelService).createModelReference(uri);\n\ttry {\n\t\tconst model = await InlayHintsFragments.create(inlayHintsProvider, ref.object.textEditorModel, [Range.lift(range)], CancellationToken.None);\n\t\tconst result = model.items.map(i => i.hint);\n\t\tsetTimeout(() => model.dispose(), 0); // dispose after sending to ext host\n\t\treturn result;\n\t} finally {\n\t\tref.dispose();\n\t}\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts","vs/editor/contrib/inlayHints/browser/inlayHintsController.ts"],"names":[],"mappings":"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","file":"inlayHintsController.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 { isHTMLElement, ModifierKeyEmitter } from '../../../../base/browser/dom.js';\nimport { isNonEmptyArray } from '../../../../base/common/arrays.js';\nimport { disposableTimeout, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../../base/common/map.js';\nimport { IRange } from '../../../../base/common/range.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { IActiveCodeEditor, ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { ClassNameReference, CssProperties, DynamicCssRules } from '../../../browser/editorDom.js';\nimport { StableEditorScrollState } from '../../../browser/stableEditorScroll.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { EDITOR_FONT_DEFAULTS } from '../../../common/config/fontInfo.js';\nimport { EditOperation } from '../../../common/core/editOperation.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport * as languages from '../../../common/languages.js';\nimport { IModelDeltaDecoration, InjectedTextCursorStops, InjectedTextOptions, ITextModel, TrackedRangeStickiness } from '../../../common/model.js';\nimport { ModelDecorationInjectedTextOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { ClickLinkGesture, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js';\nimport { InlayHintAnchor, InlayHintItem, InlayHintsFragments } from './inlayHints.js';\nimport { goToDefinitionWithLocation, showGoToContextMenu } from './inlayHintsLocations.js';\nimport { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';\nimport { createDecorator, IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';\nimport * as colors from '../../../../platform/theme/common/colorRegistry.js';\nimport { themeColorFromId } from '../../../../platform/theme/common/themeService.js';\nimport { Position } from '../../../common/core/position.js';\n\n// --- hint caching service (per session)\n\nclass InlayHintsCache {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tprivate readonly _entries = new LRUCache<string, InlayHintItem[]>(50);\n\n\tget(model: ITextModel): InlayHintItem[] | undefined {\n\t\tconst key = InlayHintsCache._key(model);\n\t\treturn this._entries.get(key);\n\t}\n\n\tset(model: ITextModel, value: InlayHintItem[]): void {\n\t\tconst key = InlayHintsCache._key(model);\n\t\tthis._entries.set(key, value);\n\t}\n\n\tprivate static _key(model: ITextModel): string {\n\t\treturn `${model.uri.toString()}/${model.getVersionId()}`;\n\t}\n}\n\ninterface IInlayHintsCache extends InlayHintsCache { }\nconst IInlayHintsCache = createDecorator<IInlayHintsCache>('IInlayHintsCache');\nregisterSingleton(IInlayHintsCache, InlayHintsCache, InstantiationType.Delayed);\n\n// --- rendered label\n\nexport class RenderedInlayHintLabelPart {\n\tconstructor(readonly item: InlayHintItem, readonly index: number) { }\n\n\tget part() {\n\t\tconst label = this.item.hint.label;\n\t\tif (typeof label === 'string') {\n\t\t\treturn { label };\n\t\t} else {\n\t\t\treturn label[this.index];\n\t\t}\n\t}\n}\n\nclass ActiveInlayHintInfo {\n\tconstructor(readonly part: RenderedInlayHintLabelPart, readonly hasTriggerModifier: boolean) { }\n}\n\ntype InlayHintDecorationRenderInfo = {\n\titem: InlayHintItem;\n\tdecoration: IModelDeltaDecoration;\n\tclassNameRef: ClassNameReference;\n};\n\nconst enum RenderMode {\n\tNormal,\n\tInvisible\n}\n\n\n\n/**\n * Mix of CancellationTokenSource, DisposableStore and MutableDisposable\n */\nclass CancellationStore implements IDisposable {\n\n\tprivate readonly _store = new MutableDisposable<DisposableStore>();\n\tprivate _tokenSource = new CancellationTokenSource();\n\n\tdispose() {\n\t\tthis._store.dispose();\n\t\tthis._tokenSource.dispose(true);\n\t}\n\n\treset() {\n\t\tthis._tokenSource.dispose(true);\n\t\tthis._tokenSource = new CancellationTokenSource();\n\t\tthis._store.value = new DisposableStore();\n\n\t\treturn {\n\t\t\tstore: this._store.value,\n\t\t\ttoken: this._tokenSource.token\n\t\t};\n\t}\n}\n\n\n// --- controller\n\n\nexport class InlayHintsController implements IEditorContribution {\n\n\tstatic readonly ID: string = 'editor.contrib.InlayHints';\n\n\tprivate static readonly _MAX_DECORATORS = 1500;\n\tprivate static readonly _whitespaceData = {};\n\n\tstatic get(editor: ICodeEditor): InlayHintsController | undefined {\n\t\treturn editor.getContribution<InlayHintsController>(InlayHintsController.ID) ?? undefined;\n\t}\n\n\tprivate readonly _disposables = new DisposableStore();\n\tprivate readonly _sessionDisposables = new DisposableStore();\n\tprivate readonly _decorationsMetadata = new Map<string, InlayHintDecorationRenderInfo>();\n\tprivate readonly _debounceInfo: IFeatureDebounceInformation;\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate _cursorInfo?: { position: Position; notEarlierThan: number };\n\tprivate _activeRenderMode = RenderMode.Normal;\n\tprivate _activeInlayHintPart?: ActiveInlayHintInfo;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService _featureDebounce: ILanguageFeatureDebounceService,\n\t\t@IInlayHintsCache private readonly _inlayHintsCache: IInlayHintsCache,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@INotificationService private readonly _notificationService: INotificationService,\n\t\t@IInstantiationService private readonly _instaService: IInstantiationService,\n\t) {\n\t\tthis._ruleFactory = this._disposables.add(new DynamicCssRules(this._editor));\n\t\tthis._debounceInfo = _featureDebounce.for(_languageFeaturesService.inlayHintsProvider, 'InlayHint', { min: 25 });\n\t\tthis._disposables.add(_languageFeaturesService.inlayHintsProvider.onDidChange(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModel(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModelLanguage(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tthis._update();\n\t\t\t}\n\t\t}));\n\t\tthis._update();\n\n\t}\n\n\tdispose(): void {\n\t\tthis._sessionDisposables.dispose();\n\t\tthis._removeAllDecorations();\n\t\tthis._disposables.dispose();\n\t}\n\n\tprivate _update(): void {\n\t\tthis._sessionDisposables.clear();\n\t\tthis._removeAllDecorations();\n\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tif (options.enabled === 'off') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this._editor.getModel();\n\t\tif (!model || !this._languageFeaturesService.inlayHintsProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (options.enabled === 'on') {\n\t\t\t// different \"on\" modes: always\n\t\t\tthis._activeRenderMode = RenderMode.Normal;\n\t\t} else {\n\t\t\t// different \"on\" modes: offUnlessPressed, or onUnlessPressed\n\t\t\tlet defaultMode: RenderMode;\n\t\t\tlet altMode: RenderMode;\n\t\t\tif (options.enabled === 'onUnlessPressed') {\n\t\t\t\tdefaultMode = RenderMode.Normal;\n\t\t\t\taltMode = RenderMode.Invisible;\n\t\t\t} else {\n\t\t\t\tdefaultMode = RenderMode.Invisible;\n\t\t\t\taltMode = RenderMode.Normal;\n\t\t\t}\n\t\t\tthis._activeRenderMode = defaultMode;\n\n\t\t\tthis._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => {\n\t\t\t\tif (!this._editor.hasModel()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode;\n\t\t\t\tif (newRenderMode !== this._activeRenderMode) {\n\t\t\t\t\tthis._activeRenderMode = newRenderMode;\n\t\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\t\tconst copies = this._copyInlayHintsWithCurrentAnchor(model);\n\t\t\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], copies);\n\t\t\t\t\tscheduler.schedule(0);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\t// iff possible, quickly update from cache\n\t\tconst cached = this._inlayHintsCache.get(model);\n\t\tif (cached) {\n\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], cached);\n\t\t}\n\t\tthis._sessionDisposables.add(toDisposable(() => {\n\t\t\t// cache items when switching files etc\n\t\t\tif (!model.isDisposed()) {\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\t\t\t}\n\t\t}));\n\n\t\tlet cts: CancellationTokenSource | undefined;\n\t\tconst watchedProviders = new Set<languages.InlayHintsProvider>();\n\n\t\tthis._sessionDisposables.add(model.onWillDispose(() => cts?.cancel()));\n\n\t\tconst cancellationStore = this._sessionDisposables.add(new CancellationStore());\n\n\t\tconst scheduler = new RunOnceScheduler(async () => {\n\t\t\tconst t1 = Date.now();\n\n\t\t\tconst { store, token } = cancellationStore.reset();\n\n\t\t\ttry {\n\t\t\t\tconst inlayHints = await InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider, model, this._getHintsRanges(), token);\n\t\t\t\tscheduler.delay = this._debounceInfo.update(model, Date.now() - t1);\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\tinlayHints.dispose();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// listen to provider changes\n\t\t\t\tfor (const provider of inlayHints.provider) {\n\t\t\t\t\tif (typeof provider.onDidChangeInlayHints === 'function' && !watchedProviders.has(provider)) {\n\t\t\t\t\t\twatchedProviders.add(provider);\n\t\t\t\t\t\tstore.add(provider.onDidChangeInlayHints(() => {\n\t\t\t\t\t\t\tif (!scheduler.isScheduled()) { // ignore event when request is already scheduled\n\t\t\t\t\t\t\t\tscheduler.schedule();\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\n\t\t\t\tstore.add(inlayHints);\n\t\t\t\tstore.add(toDisposable(() => watchedProviders.clear()));\n\t\t\t\tthis._updateHintsDecorators(inlayHints.ranges, inlayHints.items);\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\n\t\t\t} catch (err) {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t}, this._debounceInfo.get(model));\n\n\t\tthis._sessionDisposables.add(scheduler);\n\t\tscheduler.schedule(0);\n\n\t\tthis._sessionDisposables.add(this._editor.onDidScrollChange((e) => {\n\t\t\t// update when scroll position changes\n\t\t\t// uses scrollTopChanged has weak heuristic to differenatiate between scrolling due to\n\t\t\t// typing or due to \"actual\" scrolling\n\t\t\tif (e.scrollTopChanged || !scheduler.isScheduled()) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tconst cursor = this._sessionDisposables.add(new MutableDisposable());\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => {\n\t\t\tcts?.cancel();\n\n\t\t\t// mark current cursor position and time after which the whole can be updated/redrawn\n\t\t\tconst delay = Math.max(scheduler.delay, 800);\n\t\t\tthis._cursorInfo = { position: this._editor.getPosition()!, notEarlierThan: Date.now() + delay };\n\t\t\tcursor.value = disposableTimeout(() => scheduler.schedule(0), delay);\n\n\t\t\tscheduler.schedule();\n\t\t}));\n\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\t// mouse gestures\n\t\tthis._sessionDisposables.add(this._installDblClickGesture(() => scheduler.schedule(0)));\n\t\tthis._sessionDisposables.add(this._installLinkGesture());\n\t\tthis._sessionDisposables.add(this._installContextMenu());\n\t}\n\n\tprivate _installLinkGesture(): IDisposable {\n\n\t\tconst store = new DisposableStore();\n\t\tconst gesture = store.add(new ClickLinkGesture(this._editor));\n\n\t\t// let removeHighlight = () => { };\n\n\t\tconst sessionStore = new DisposableStore();\n\t\tstore.add(sessionStore);\n\n\t\tstore.add(gesture.onMouseMoveOrRelevantKeyDown(e => {\n\t\t\tconst [mouseEvent] = e;\n\t\t\tconst labelPart = this._getInlayHintLabelPart(mouseEvent);\n\t\t\tconst model = this._editor.getModel();\n\n\t\t\tif (!labelPart || !model) {\n\t\t\t\tsessionStore.clear();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// resolve the item\n\t\t\tconst cts = new CancellationTokenSource();\n\t\t\tsessionStore.add(toDisposable(() => cts.dispose(true)));\n\t\t\tlabelPart.item.resolve(cts.token);\n\n\t\t\t// render link => when the modifier is pressed and when there is a command or location\n\t\t\tthis._activeInlayHintPart = labelPart.part.command || labelPart.part.location\n\t\t\t\t? new ActiveInlayHintInfo(labelPart, mouseEvent.hasTriggerModifier)\n\t\t\t\t: undefined;\n\n\t\t\tconst lineNumber = model.validatePosition(labelPart.item.hint.position).lineNumber;\n\t\t\tconst range = new Range(lineNumber, 1, lineNumber, model.getLineMaxColumn(lineNumber));\n\t\t\tconst lineHints = this._getInlineHintsForRange(range);\n\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\tsessionStore.add(toDisposable(() => {\n\t\t\t\tthis._activeInlayHintPart = undefined;\n\t\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\t}));\n\t\t}));\n\t\tstore.add(gesture.onCancel(() => sessionStore.clear()));\n\t\tstore.add(gesture.onExecute(async e => {\n\t\t\tconst label = this._getInlayHintLabelPart(e);\n\t\t\tif (label) {\n\t\t\t\tconst part = label.part;\n\t\t\t\tif (part.location) {\n\t\t\t\t\t// location -> execute go to def\n\t\t\t\t\tthis._instaService.invokeFunction(goToDefinitionWithLocation, e, this._editor as IActiveCodeEditor, part.location);\n\t\t\t\t} else if (languages.Command.is(part.command)) {\n\t\t\t\t\t// command -> execute it\n\t\t\t\t\tawait this._invokeCommand(part.command, label.item);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\treturn store;\n\t}\n\n\tprivate _getInlineHintsForRange(range: Range) {\n\t\tconst lineHints = new Set<InlayHintItem>();\n\t\tfor (const data of this._decorationsMetadata.values()) {\n\t\t\tif (range.containsRange(data.item.anchor.range)) {\n\t\t\t\tlineHints.add(data.item);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(lineHints);\n\t}\n\n\tprivate _installDblClickGesture(updateInlayHints: Function): IDisposable {\n\t\treturn this._editor.onMouseUp(async e => {\n\t\t\tif (e.event.detail !== 2) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (!part) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.event.preventDefault();\n\t\t\tawait part.item.resolve(CancellationToken.None);\n\t\t\tif (isNonEmptyArray(part.item.hint.textEdits)) {\n\t\t\t\tconst edits = part.item.hint.textEdits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text));\n\t\t\t\tthis._editor.executeEdits('inlayHint.default', edits);\n\t\t\t\tupdateInlayHints();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _installContextMenu(): IDisposable {\n\t\treturn this._editor.onContextMenu(async e => {\n\t\t\tif (!(isHTMLElement(e.event.target))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (part) {\n\t\t\t\tawait this._instaService.invokeFunction(showGoToContextMenu, this._editor, e.event.target, part);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _getInlayHintLabelPart(e: IEditorMouseEvent | ClickLinkMouseEvent): RenderedInlayHintLabelPart | undefined {\n\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = e.target.detail.injectedText?.options;\n\t\tif (options instanceof ModelDecorationInjectedTextOptions && options?.attachedData instanceof RenderedInlayHintLabelPart) {\n\t\t\treturn options.attachedData;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async _invokeCommand(command: languages.Command, item: InlayHintItem) {\n\t\ttry {\n\t\t\tawait this._commandService.executeCommand(command.id, ...(command.arguments ?? []));\n\t\t} catch (err) {\n\t\t\tthis._notificationService.notify({\n\t\t\t\tseverity: Severity.Error,\n\t\t\t\tsource: item.provider.displayName,\n\t\t\t\tmessage: err\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _cacheHintsForFastRestore(model: ITextModel): void {\n\t\tconst hints = this._copyInlayHintsWithCurrentAnchor(model);\n\t\tthis._inlayHintsCache.set(model, hints);\n\t}\n\n\t// return inlay hints but with an anchor that reflects \"updates\"\n\t// that happened after receiving them, e.g adding new lines before a hint\n\tprivate _copyInlayHintsWithCurrentAnchor(model: ITextModel): InlayHintItem[] {\n\t\tconst items = new Map<InlayHintItem, InlayHintItem>();\n\t\tfor (const [id, obj] of this._decorationsMetadata) {\n\t\t\tif (items.has(obj.item)) {\n\t\t\t\t// an inlay item can be rendered as multiple decorations\n\t\t\t\t// but they will all uses the same range\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst range = model.getDecorationRange(id);\n\t\t\tif (range) {\n\t\t\t\t// update range with whatever the editor has tweaked it to\n\t\t\t\tconst anchor = new InlayHintAnchor(range, obj.item.anchor.direction);\n\t\t\t\tconst copy = obj.item.with({ anchor });\n\t\t\t\titems.set(obj.item, copy);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(items.values());\n\t}\n\n\tprivate _getHintsRanges(): Range[] {\n\t\tconst extra = 30;\n\t\tconst model = this._editor.getModel()!;\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\t\tconst result: Range[] = [];\n\t\tfor (const range of visibleRanges.sort(Range.compareRangesUsingStarts)) {\n\t\t\tconst extendedRange = model.validateRange(new Range(range.startLineNumber - extra, range.startColumn, range.endLineNumber + extra, range.endColumn));\n\t\t\tif (result.length === 0 || !Range.areIntersectingOrTouching(result[result.length - 1], extendedRange)) {\n\t\t\t\tresult.push(extendedRange);\n\t\t\t} else {\n\t\t\t\tresult[result.length - 1] = Range.plusRange(result[result.length - 1], extendedRange);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateHintsDecorators(ranges: readonly Range[], items: readonly InlayHintItem[]): void {\n\n\t\tconst itemFixedLengths = new Map<InlayHintItem, number>();\n\n\t\tif (this._cursorInfo\n\t\t\t&& this._cursorInfo.notEarlierThan > Date.now()\n\t\t\t&& ranges.some(range => range.containsPosition(this._cursorInfo!.position))\n\t\t) {\n\t\t\t// collect inlay hints that are on the same line and before the cursor. Those \"old\" hints\n\t\t\t// define fixed lengths so that the cursor does not jump back and worth while typing.\n\t\t\tconst { position } = this._cursorInfo;\n\t\t\tthis._cursorInfo = undefined;\n\n\t\t\tconst lengths = new Map<InlayHintItem, number>();\n\n\t\t\tfor (const deco of this._editor.getLineDecorations(position.lineNumber) ?? []) {\n\n\t\t\t\tconst data = this._decorationsMetadata.get(deco.id);\n\t\t\t\tif (deco.range.startColumn > position.column) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst opts = data?.decoration.options[data.item.anchor.direction];\n\t\t\t\tif (opts && opts.attachedData !== InlayHintsController._whitespaceData) {\n\t\t\t\t\tconst len = lengths.get(data.item) ?? 0;\n\t\t\t\t\tlengths.set(data.item, len + opts.content.length);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// on the cursor line and before the cursor-column\n\t\t\tconst newItemsWithFixedLength = items.filter(item => item.anchor.range.startLineNumber === position.lineNumber && item.anchor.range.endColumn <= position.column);\n\t\t\tconst fixedLengths = Array.from(lengths.values());\n\n\t\t\t// match up fixed lengths with items and distribute the remaining lengths to the last item\n\t\t\tlet lastItem: InlayHintItem | undefined;\n\t\t\twhile (true) {\n\t\t\t\tconst targetItem = newItemsWithFixedLength.shift();\n\t\t\t\tconst fixedLength = fixedLengths.shift();\n\n\t\t\t\tif (!fixedLength && !targetItem) {\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\n\t\t\t\tif (targetItem) {\n\t\t\t\t\titemFixedLengths.set(targetItem, fixedLength ?? 0);\n\t\t\t\t\tlastItem = targetItem;\n\n\t\t\t\t} else if (lastItem && fixedLength) {\n\t\t\t\t\t// still lengths but no more item. give it all to the last\n\t\t\t\t\tlet len = itemFixedLengths.get(lastItem)!;\n\t\t\t\t\tlen += fixedLength;\n\t\t\t\t\tlen += fixedLengths.reduce((p, c) => p + c, 0);\n\t\t\t\t\tfixedLengths.length = 0;\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// utils to collect/create injected text decorations\n\t\tconst newDecorationsData: InlayHintDecorationRenderInfo[] = [];\n\t\tconst addInjectedText = (item: InlayHintItem, ref: ClassNameReference, content: string, cursorStops: InjectedTextCursorStops, attachedData?: RenderedInlayHintLabelPart | object): void => {\n\t\t\tconst opts: InjectedTextOptions = {\n\t\t\t\tcontent,\n\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\tinlineClassName: ref.className,\n\t\t\t\tcursorStops,\n\t\t\t\tattachedData\n\t\t\t};\n\t\t\tnewDecorationsData.push({\n\t\t\t\titem,\n\t\t\t\tclassNameRef: ref,\n\t\t\t\tdecoration: {\n\t\t\t\t\trange: item.anchor.range,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t// className: \"rangeHighlight\", // DEBUG highlight to see to what range a hint is attached\n\t\t\t\t\t\tdescription: 'InlayHint',\n\t\t\t\t\t\tshowIfCollapsed: item.anchor.range.isEmpty(), // \"original\" range is empty\n\t\t\t\t\t\tcollapseOnReplaceEdit: !item.anchor.range.isEmpty(),\n\t\t\t\t\t\tstickiness: TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges,\n\t\t\t\t\t\t[item.anchor.direction]: this._activeRenderMode === RenderMode.Normal ? opts : undefined\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst addInjectedWhitespace = (item: InlayHintItem, isLast: boolean): void => {\n\t\t\tconst marginRule = this._ruleFactory.createClassNameRef({\n\t\t\t\twidth: `${(fontSize / 3) | 0}px`,\n\t\t\t\tdisplay: 'inline-block'\n\t\t\t});\n\t\t\taddInjectedText(item, marginRule, '\\u200a', isLast ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None, InlayHintsController._whitespaceData);\n\t\t};\n\n\n\t\t//\n\t\tconst { fontSize, fontFamily, padding, isUniform } = this._getLayoutInfo();\n\t\tconst maxLength = this._editor.getOption(EditorOption.inlayHints).maximumLength;\n\t\tconst fontFamilyVar = '--code-editorInlayHintsFontFamily';\n\t\tthis._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily);\n\n\n\t\ttype ILineInfo = { line: number; totalLen: number };\n\t\tlet currentLineInfo: ILineInfo = { line: 0, totalLen: 0 };\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\n\t\t\tif (currentLineInfo.line !== item.anchor.range.startLineNumber) {\n\t\t\t\tcurrentLineInfo = { line: item.anchor.range.startLineNumber, totalLen: 0 };\n\t\t\t}\n\n\t\t\tif (maxLength && currentLineInfo.totalLen > maxLength) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// whitespace leading the actual label\n\t\t\tif (item.hint.paddingLeft) {\n\t\t\t\taddInjectedWhitespace(item, false);\n\t\t\t}\n\n\t\t\t// the label with its parts\n\t\t\tconst parts: languages.InlayHintLabelPart[] = typeof item.hint.label === 'string'\n\t\t\t\t? [{ label: item.hint.label }]\n\t\t\t\t: item.hint.label;\n\n\t\t\tconst itemFixedLength = itemFixedLengths.get(item);\n\t\t\tlet itemActualLength = 0;\n\n\t\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\t\tconst part = parts[i];\n\n\t\t\t\tconst isFirst = i === 0;\n\t\t\t\tconst isLast = i === parts.length - 1;\n\n\t\t\t\tconst cssProperties: CssProperties = {\n\t\t\t\t\tfontSize: `${fontSize}px`,\n\t\t\t\t\tfontFamily: `var(${fontFamilyVar}), ${EDITOR_FONT_DEFAULTS.fontFamily}`,\n\t\t\t\t\tverticalAlign: isUniform ? 'baseline' : 'middle',\n\t\t\t\t\tunicodeBidi: 'isolate'\n\t\t\t\t};\n\n\t\t\t\tif (isNonEmptyArray(item.hint.textEdits)) {\n\t\t\t\t\tcssProperties.cursor = 'default';\n\t\t\t\t}\n\n\t\t\t\tthis._fillInColors(cssProperties, item.hint);\n\n\t\t\t\tif ((part.command || part.location) && this._activeInlayHintPart?.part.item === item && this._activeInlayHintPart.part.index === i) {\n\t\t\t\t\t// active link!\n\t\t\t\t\tcssProperties.textDecoration = 'underline';\n\t\t\t\t\tif (this._activeInlayHintPart.hasTriggerModifier) {\n\t\t\t\t\t\tcssProperties.color = themeColorFromId(colors.editorActiveLinkForeground);\n\t\t\t\t\t\tcssProperties.cursor = 'pointer';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet textlabel = part.label;\n\t\t\t\tcurrentLineInfo.totalLen += textlabel.length;\n\t\t\t\tlet tooLong = false;\n\t\t\t\tconst over = maxLength !== 0 ? (currentLineInfo.totalLen - maxLength) : 0;\n\t\t\t\tif (over > 0) {\n\t\t\t\t\ttextlabel = textlabel.slice(0, -over) + '…';\n\t\t\t\t\ttooLong = true;\n\t\t\t\t}\n\n\t\t\t\titemActualLength += textlabel.length;\n\n\t\t\t\tif (itemFixedLength !== undefined) {\n\t\t\t\t\tconst overFixedLength = itemActualLength - itemFixedLength;\n\t\t\t\t\tif (overFixedLength >= 0) {\n\t\t\t\t\t\t// longer than fixed length, trim\n\t\t\t\t\t\titemActualLength -= overFixedLength;\n\t\t\t\t\t\ttextlabel = textlabel.slice(0, -(1 + overFixedLength)) + '…';\n\t\t\t\t\t\ttooLong = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (padding) {\n\t\t\t\t\tif (isFirst && (isLast || tooLong)) {\n\t\t\t\t\t\t// only element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if (isFirst) {\n\t\t\t\t\t\t// first element\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px 0 0 ${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if ((isLast || tooLong)) {\n\t\t\t\t\t\t// last element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px 1px 0`;\n\t\t\t\t\t\tcssProperties.borderRadius = `0 ${(fontSize / 4) | 0}px ${(fontSize / 4) | 0}px 0`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px 0`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef(cssProperties),\n\t\t\t\t\tfixSpace(textlabel),\n\t\t\t\t\tisLast && !item.hint.paddingRight ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None,\n\t\t\t\t\tnew RenderedInlayHintLabelPart(item, i)\n\t\t\t\t);\n\n\t\t\t\tif (tooLong) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (itemFixedLength !== undefined && itemActualLength < itemFixedLength) {\n\t\t\t\t// shorter than fixed length, pad\n\t\t\t\tconst pad = (itemFixedLength - itemActualLength);\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef({}),\n\t\t\t\t\t'\\u200a'.repeat(pad),\n\t\t\t\t\tInjectedTextCursorStops.None\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// whitespace trailing the actual label\n\t\t\tif (item.hint.paddingRight) {\n\t\t\t\taddInjectedWhitespace(item, true);\n\t\t\t}\n\n\t\t\tif (newDecorationsData.length > InlayHintsController._MAX_DECORATORS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// collect all decoration ids that are affected by the ranges\n\t\t// and only update those decorations\n\t\tconst decorationIdsToReplace: string[] = [];\n\t\tfor (const [id, metadata] of this._decorationsMetadata) {\n\t\t\tconst range = this._editor.getModel()?.getDecorationRange(id);\n\t\t\tif (range && ranges.some(r => r.containsRange(range))) {\n\t\t\t\tdecorationIdsToReplace.push(id);\n\t\t\t\tmetadata.classNameRef.dispose();\n\t\t\t\tthis._decorationsMetadata.delete(id);\n\t\t\t}\n\t\t}\n\n\t\tconst scrollState = StableEditorScrollState.capture(this._editor);\n\n\t\tthis._editor.changeDecorations(accessor => {\n\t\t\tconst newDecorationIds = accessor.deltaDecorations(decorationIdsToReplace, newDecorationsData.map(d => d.decoration));\n\t\t\tfor (let i = 0; i < newDecorationIds.length; i++) {\n\t\t\t\tconst data = newDecorationsData[i];\n\t\t\t\tthis._decorationsMetadata.set(newDecorationIds[i], data);\n\t\t\t}\n\t\t});\n\n\t\tscrollState.restore(this._editor);\n\t}\n\n\tprivate _fillInColors(props: CssProperties, hint: languages.InlayHint): void {\n\t\tif (hint.kind === languages.InlayHintKind.Parameter) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintParameterBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintParameterForeground);\n\t\t} else if (hint.kind === languages.InlayHintKind.Type) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintTypeBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintTypeForeground);\n\t\t} else {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintForeground);\n\t\t}\n\t}\n\n\tprivate _getLayoutInfo() {\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tconst padding = options.padding;\n\n\t\tconst editorFontSize = this._editor.getOption(EditorOption.fontSize);\n\t\tconst editorFontFamily = this._editor.getOption(EditorOption.fontFamily);\n\n\t\tlet fontSize = options.fontSize;\n\t\tif (!fontSize || fontSize < 5 || fontSize > editorFontSize) {\n\t\t\tfontSize = editorFontSize;\n\t\t}\n\n\t\tconst fontFamily = options.fontFamily || editorFontFamily;\n\n\t\tconst isUniform = !padding\n\t\t\t&& fontFamily === editorFontFamily\n\t\t\t&& fontSize === editorFontSize;\n\n\t\treturn { fontSize, fontFamily, padding, isUniform };\n\t}\n\n\tprivate _removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(Array.from(this._decorationsMetadata.keys()));\n\t\tfor (const obj of this._decorationsMetadata.values()) {\n\t\t\tobj.classNameRef.dispose();\n\t\t}\n\t\tthis._decorationsMetadata.clear();\n\t}\n}\n\n\n// Prevents the view from potentially visible whitespace\nfunction fixSpace(str: string): string {\n\tconst noBreakWhitespace = '\\xa0';\n\treturn str.replace(/[ \\t]/g, noBreakWhitespace);\n}\n\nCommandsRegistry.registerCommand('_executeInlayHintProvider', async (accessor, ...args: [URI, IRange]): Promise<languages.InlayHint[]> => {\n\n\tconst [uri, range] = args;\n\tassertType(URI.isUri(uri));\n\tassertType(Range.isIRange(range));\n\n\tconst { inlayHintsProvider } = accessor.get(ILanguageFeaturesService);\n\tconst ref = await accessor.get(ITextModelService).createModelReference(uri);\n\ttry {\n\t\tconst model = await InlayHintsFragments.create(inlayHintsProvider, ref.object.textEditorModel, [Range.lift(range)], CancellationToken.None);\n\t\tconst result = model.items.map(i => i.hint);\n\t\tsetTimeout(() => model.dispose(), 0); // dispose after sending to ext host\n\t\treturn result;\n\t} finally {\n\t\tref.dispose();\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 { isHTMLElement, ModifierKeyEmitter } from '../../../../base/browser/dom.js';\nimport { isNonEmptyArray } from '../../../../base/common/arrays.js';\nimport { disposableTimeout, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { DisposableStore, IDisposable, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../../base/common/map.js';\nimport { IRange } from '../../../../base/common/range.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { IActiveCodeEditor, ICodeEditor, IEditorMouseEvent, MouseTargetType } from '../../../browser/editorBrowser.js';\nimport { ClassNameReference, CssProperties, DynamicCssRules } from '../../../browser/editorDom.js';\nimport { StableEditorScrollState } from '../../../browser/stableEditorScroll.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { EDITOR_FONT_DEFAULTS } from '../../../common/config/fontInfo.js';\nimport { EditOperation } from '../../../common/core/editOperation.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport * as languages from '../../../common/languages.js';\nimport { IModelDeltaDecoration, InjectedTextCursorStops, InjectedTextOptions, ITextModel, TrackedRangeStickiness } from '../../../common/model.js';\nimport { ModelDecorationInjectedTextOptions } from '../../../common/model/textModel.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { ClickLinkGesture, ClickLinkMouseEvent } from '../../gotoSymbol/browser/link/clickLinkGesture.js';\nimport { InlayHintAnchor, InlayHintItem, InlayHintsFragments } from './inlayHints.js';\nimport { goToDefinitionWithLocation, showGoToContextMenu } from './inlayHintsLocations.js';\nimport { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';\nimport { createDecorator, IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { INotificationService, Severity } from '../../../../platform/notification/common/notification.js';\nimport * as colors from '../../../../platform/theme/common/colorRegistry.js';\nimport { themeColorFromId } from '../../../../platform/theme/common/themeService.js';\nimport { Position } from '../../../common/core/position.js';\n\n// --- hint caching service (per session)\n\nclass InlayHintsCache {\n\n\tdeclare readonly _serviceBrand: undefined;\n\n\tprivate readonly _entries = new LRUCache<string, InlayHintItem[]>(50);\n\n\tget(model: ITextModel): InlayHintItem[] | undefined {\n\t\tconst key = InlayHintsCache._key(model);\n\t\treturn this._entries.get(key);\n\t}\n\n\tset(model: ITextModel, value: InlayHintItem[]): void {\n\t\tconst key = InlayHintsCache._key(model);\n\t\tthis._entries.set(key, value);\n\t}\n\n\tprivate static _key(model: ITextModel): string {\n\t\treturn `${model.uri.toString()}/${model.getVersionId()}`;\n\t}\n}\n\ninterface IInlayHintsCache extends InlayHintsCache { }\nconst IInlayHintsCache = createDecorator<IInlayHintsCache>('IInlayHintsCache');\nregisterSingleton(IInlayHintsCache, InlayHintsCache, InstantiationType.Delayed);\n\n// --- rendered label\n\nexport class RenderedInlayHintLabelPart {\n\tconstructor(readonly item: InlayHintItem, readonly index: number) { }\n\n\tget part() {\n\t\tconst label = this.item.hint.label;\n\t\tif (typeof label === 'string') {\n\t\t\treturn { label };\n\t\t} else {\n\t\t\treturn label[this.index];\n\t\t}\n\t}\n}\n\nclass ActiveInlayHintInfo {\n\tconstructor(readonly part: RenderedInlayHintLabelPart, readonly hasTriggerModifier: boolean) { }\n}\n\ntype InlayHintDecorationRenderInfo = {\n\titem: InlayHintItem;\n\tdecoration: IModelDeltaDecoration;\n\tclassNameRef: ClassNameReference;\n};\n\nconst enum RenderMode {\n\tNormal,\n\tInvisible\n}\n\n\n\n/**\n * Mix of CancellationTokenSource, DisposableStore and MutableDisposable\n */\nclass CancellationStore implements IDisposable {\n\n\tprivate readonly _store = new MutableDisposable<DisposableStore>();\n\tprivate _tokenSource = new CancellationTokenSource();\n\n\tdispose() {\n\t\tthis._store.dispose();\n\t\tthis._tokenSource.dispose(true);\n\t}\n\n\treset() {\n\t\tthis._tokenSource.dispose(true);\n\t\tthis._tokenSource = new CancellationTokenSource();\n\t\tthis._store.value = new DisposableStore();\n\n\t\treturn {\n\t\t\tstore: this._store.value,\n\t\t\ttoken: this._tokenSource.token\n\t\t};\n\t}\n}\n\n\n// --- controller\n\n\nexport class InlayHintsController implements IEditorContribution {\n\n\tstatic readonly ID: string = 'editor.contrib.InlayHints';\n\n\tprivate static readonly _MAX_DECORATORS = 1500;\n\tprivate static readonly _whitespaceData = {};\n\n\tstatic get(editor: ICodeEditor): InlayHintsController | undefined {\n\t\treturn editor.getContribution<InlayHintsController>(InlayHintsController.ID) ?? undefined;\n\t}\n\n\tprivate readonly _disposables = new DisposableStore();\n\tprivate readonly _sessionDisposables = new DisposableStore();\n\tprivate readonly _decorationsMetadata = new Map<string, InlayHintDecorationRenderInfo>();\n\tprivate readonly _debounceInfo: IFeatureDebounceInformation;\n\tprivate readonly _ruleFactory: DynamicCssRules;\n\n\tprivate _cursorInfo?: { position: Position; notEarlierThan: number };\n\tprivate _activeRenderMode = RenderMode.Normal;\n\tprivate _activeInlayHintPart?: ActiveInlayHintInfo;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\t@ILanguageFeaturesService private readonly _languageFeaturesService: ILanguageFeaturesService,\n\t\t@ILanguageFeatureDebounceService _featureDebounce: ILanguageFeatureDebounceService,\n\t\t@IInlayHintsCache private readonly _inlayHintsCache: IInlayHintsCache,\n\t\t@ICommandService private readonly _commandService: ICommandService,\n\t\t@INotificationService private readonly _notificationService: INotificationService,\n\t\t@IInstantiationService private readonly _instaService: IInstantiationService,\n\t) {\n\t\tthis._ruleFactory = this._disposables.add(new DynamicCssRules(this._editor));\n\t\tthis._debounceInfo = _featureDebounce.for(_languageFeaturesService.inlayHintsProvider, 'InlayHint', { min: 25 });\n\t\tthis._disposables.add(_languageFeaturesService.inlayHintsProvider.onDidChange(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModel(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeModelLanguage(() => this._update()));\n\t\tthis._disposables.add(_editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tthis._update();\n\t\t\t}\n\t\t}));\n\t\tthis._update();\n\n\t}\n\n\tdispose(): void {\n\t\tthis._sessionDisposables.dispose();\n\t\tthis._removeAllDecorations();\n\t\tthis._disposables.dispose();\n\t}\n\n\tprivate _update(): void {\n\t\tthis._sessionDisposables.clear();\n\t\tthis._removeAllDecorations();\n\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tif (options.enabled === 'off') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this._editor.getModel();\n\t\tif (!model || !this._languageFeaturesService.inlayHintsProvider.has(model)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (options.enabled === 'on') {\n\t\t\t// different \"on\" modes: always\n\t\t\tthis._activeRenderMode = RenderMode.Normal;\n\t\t} else {\n\t\t\t// different \"on\" modes: offUnlessPressed, or onUnlessPressed\n\t\t\tlet defaultMode: RenderMode;\n\t\t\tlet altMode: RenderMode;\n\t\t\tif (options.enabled === 'onUnlessPressed') {\n\t\t\t\tdefaultMode = RenderMode.Normal;\n\t\t\t\taltMode = RenderMode.Invisible;\n\t\t\t} else {\n\t\t\t\tdefaultMode = RenderMode.Invisible;\n\t\t\t\taltMode = RenderMode.Normal;\n\t\t\t}\n\t\t\tthis._activeRenderMode = defaultMode;\n\n\t\t\tthis._sessionDisposables.add(ModifierKeyEmitter.getInstance().event(e => {\n\t\t\t\tif (!this._editor.hasModel()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst newRenderMode = e.altKey && e.ctrlKey && !(e.shiftKey || e.metaKey) ? altMode : defaultMode;\n\t\t\t\tif (newRenderMode !== this._activeRenderMode) {\n\t\t\t\t\tthis._activeRenderMode = newRenderMode;\n\t\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\t\tconst copies = this._copyInlayHintsWithCurrentAnchor(model);\n\t\t\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], copies);\n\t\t\t\t\tscheduler.schedule(0);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\t// iff possible, quickly update from cache\n\t\tconst cached = this._inlayHintsCache.get(model);\n\t\tif (cached) {\n\t\t\tthis._updateHintsDecorators([model.getFullModelRange()], cached);\n\t\t}\n\t\tthis._sessionDisposables.add(toDisposable(() => {\n\t\t\t// cache items when switching files etc\n\t\t\tif (!model.isDisposed()) {\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\t\t\t}\n\t\t}));\n\n\t\tlet cts: CancellationTokenSource | undefined;\n\t\tconst watchedProviders = new Set<languages.InlayHintsProvider>();\n\n\t\tthis._sessionDisposables.add(model.onWillDispose(() => cts?.cancel()));\n\n\t\tconst cancellationStore = this._sessionDisposables.add(new CancellationStore());\n\n\t\tconst scheduler = new RunOnceScheduler(async () => {\n\t\t\tconst t1 = Date.now();\n\n\t\t\tconst { store, token } = cancellationStore.reset();\n\n\t\t\ttry {\n\t\t\t\tconst inlayHints = await InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider, model, this._getHintsRanges(), token);\n\t\t\t\tscheduler.delay = this._debounceInfo.update(model, Date.now() - t1);\n\t\t\t\tif (token.isCancellationRequested) {\n\t\t\t\t\tinlayHints.dispose();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// listen to provider changes\n\t\t\t\tfor (const provider of inlayHints.provider) {\n\t\t\t\t\tif (typeof provider.onDidChangeInlayHints === 'function' && !watchedProviders.has(provider)) {\n\t\t\t\t\t\twatchedProviders.add(provider);\n\t\t\t\t\t\tstore.add(provider.onDidChangeInlayHints(() => {\n\t\t\t\t\t\t\tif (!scheduler.isScheduled()) { // ignore event when request is already scheduled\n\t\t\t\t\t\t\t\tscheduler.schedule();\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\n\t\t\t\tstore.add(inlayHints);\n\t\t\t\tstore.add(toDisposable(() => watchedProviders.clear()));\n\t\t\t\tthis._updateHintsDecorators(inlayHints.ranges, inlayHints.items);\n\t\t\t\tthis._cacheHintsForFastRestore(model);\n\n\t\t\t} catch (err) {\n\t\t\t\tonUnexpectedError(err);\n\t\t\t}\n\t\t}, this._debounceInfo.get(model));\n\n\t\tthis._sessionDisposables.add(scheduler);\n\t\tscheduler.schedule(0);\n\n\t\tthis._sessionDisposables.add(this._editor.onDidScrollChange((e) => {\n\t\t\t// update when scroll position changes\n\t\t\t// uses scrollTopChanged has weak heuristic to differenatiate between scrolling due to\n\t\t\t// typing or due to \"actual\" scrolling\n\t\t\tif (e.scrollTopChanged || !scheduler.isScheduled()) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\tconst cursor = this._sessionDisposables.add(new MutableDisposable());\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeModelContent((e) => {\n\t\t\tcts?.cancel();\n\n\t\t\t// mark current cursor position and time after which the whole can be updated/redrawn\n\t\t\tconst delay = Math.max(scheduler.delay, 800);\n\t\t\tthis._cursorInfo = { position: this._editor.getPosition()!, notEarlierThan: Date.now() + delay };\n\t\t\tcursor.value = disposableTimeout(() => scheduler.schedule(0), delay);\n\n\t\t\tscheduler.schedule();\n\t\t}));\n\n\t\tthis._sessionDisposables.add(this._editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.inlayHints)) {\n\t\t\t\tscheduler.schedule();\n\t\t\t}\n\t\t}));\n\n\t\t// mouse gestures\n\t\tthis._sessionDisposables.add(this._installDblClickGesture(() => scheduler.schedule(0)));\n\t\tthis._sessionDisposables.add(this._installLinkGesture());\n\t\tthis._sessionDisposables.add(this._installContextMenu());\n\t}\n\n\tprivate _installLinkGesture(): IDisposable {\n\n\t\tconst store = new DisposableStore();\n\t\tconst gesture = store.add(new ClickLinkGesture(this._editor));\n\n\t\t// let removeHighlight = () => { };\n\n\t\tconst sessionStore = new DisposableStore();\n\t\tstore.add(sessionStore);\n\n\t\tstore.add(gesture.onMouseMoveOrRelevantKeyDown(e => {\n\t\t\tconst [mouseEvent] = e;\n\t\t\tconst labelPart = this._getInlayHintLabelPart(mouseEvent);\n\t\t\tconst model = this._editor.getModel();\n\n\t\t\tif (!labelPart || !model) {\n\t\t\t\tsessionStore.clear();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// resolve the item\n\t\t\tconst cts = new CancellationTokenSource();\n\t\t\tsessionStore.add(toDisposable(() => cts.dispose(true)));\n\t\t\tlabelPart.item.resolve(cts.token);\n\n\t\t\t// render link => when the modifier is pressed and when there is a command or location\n\t\t\tthis._activeInlayHintPart = labelPart.part.command || labelPart.part.location\n\t\t\t\t? new ActiveInlayHintInfo(labelPart, mouseEvent.hasTriggerModifier)\n\t\t\t\t: undefined;\n\n\t\t\tconst lineNumber = model.validatePosition(labelPart.item.hint.position).lineNumber;\n\t\t\tconst range = new Range(lineNumber, 1, lineNumber, model.getLineMaxColumn(lineNumber));\n\t\t\tconst lineHints = this._getInlineHintsForRange(range);\n\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\tsessionStore.add(toDisposable(() => {\n\t\t\t\tthis._activeInlayHintPart = undefined;\n\t\t\t\tthis._updateHintsDecorators([range], lineHints);\n\t\t\t}));\n\t\t}));\n\t\tstore.add(gesture.onCancel(() => sessionStore.clear()));\n\t\tstore.add(gesture.onExecute(async e => {\n\t\t\tconst label = this._getInlayHintLabelPart(e);\n\t\t\tif (label) {\n\t\t\t\tconst part = label.part;\n\t\t\t\tif (part.location) {\n\t\t\t\t\t// location -> execute go to def\n\t\t\t\t\tthis._instaService.invokeFunction(goToDefinitionWithLocation, e, this._editor as IActiveCodeEditor, part.location);\n\t\t\t\t} else if (languages.Command.is(part.command)) {\n\t\t\t\t\t// command -> execute it\n\t\t\t\t\tawait this._invokeCommand(part.command, label.item);\n\t\t\t\t}\n\t\t\t}\n\t\t}));\n\t\treturn store;\n\t}\n\n\tprivate _getInlineHintsForRange(range: Range) {\n\t\tconst lineHints = new Set<InlayHintItem>();\n\t\tfor (const data of this._decorationsMetadata.values()) {\n\t\t\tif (range.containsRange(data.item.anchor.range)) {\n\t\t\t\tlineHints.add(data.item);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(lineHints);\n\t}\n\n\tprivate _installDblClickGesture(updateInlayHints: Function): IDisposable {\n\t\treturn this._editor.onMouseUp(async e => {\n\t\t\tif (e.event.detail !== 2) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (!part) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.event.preventDefault();\n\t\t\tawait part.item.resolve(CancellationToken.None);\n\t\t\tif (isNonEmptyArray(part.item.hint.textEdits)) {\n\t\t\t\tconst edits = part.item.hint.textEdits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text));\n\t\t\t\tthis._editor.executeEdits('inlayHint.default', edits);\n\t\t\t\tupdateInlayHints();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _installContextMenu(): IDisposable {\n\t\treturn this._editor.onContextMenu(async e => {\n\t\t\tif (!(isHTMLElement(e.event.target))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst part = this._getInlayHintLabelPart(e);\n\t\t\tif (part) {\n\t\t\t\tawait this._instaService.invokeFunction(showGoToContextMenu, this._editor, e.event.target, part);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate _getInlayHintLabelPart(e: IEditorMouseEvent | ClickLinkMouseEvent): RenderedInlayHintLabelPart | undefined {\n\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = e.target.detail.injectedText?.options;\n\t\tif (options instanceof ModelDecorationInjectedTextOptions && options?.attachedData instanceof RenderedInlayHintLabelPart) {\n\t\t\treturn options.attachedData;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate async _invokeCommand(command: languages.Command, item: InlayHintItem) {\n\t\ttry {\n\t\t\tawait this._commandService.executeCommand(command.id, ...(command.arguments ?? []));\n\t\t} catch (err) {\n\t\t\tthis._notificationService.notify({\n\t\t\t\tseverity: Severity.Error,\n\t\t\t\tsource: item.provider.displayName,\n\t\t\t\tmessage: err\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate _cacheHintsForFastRestore(model: ITextModel): void {\n\t\tconst hints = this._copyInlayHintsWithCurrentAnchor(model);\n\t\tthis._inlayHintsCache.set(model, hints);\n\t}\n\n\t// return inlay hints but with an anchor that reflects \"updates\"\n\t// that happened after receiving them, e.g adding new lines before a hint\n\tprivate _copyInlayHintsWithCurrentAnchor(model: ITextModel): InlayHintItem[] {\n\t\tconst items = new Map<InlayHintItem, InlayHintItem>();\n\t\tfor (const [id, obj] of this._decorationsMetadata) {\n\t\t\tif (items.has(obj.item)) {\n\t\t\t\t// an inlay item can be rendered as multiple decorations\n\t\t\t\t// but they will all uses the same range\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst range = model.getDecorationRange(id);\n\t\t\tif (range) {\n\t\t\t\t// update range with whatever the editor has tweaked it to\n\t\t\t\tconst anchor = new InlayHintAnchor(range, obj.item.anchor.direction);\n\t\t\t\tconst copy = obj.item.with({ anchor });\n\t\t\t\titems.set(obj.item, copy);\n\t\t\t}\n\t\t}\n\t\treturn Array.from(items.values());\n\t}\n\n\tprivate _getHintsRanges(): Range[] {\n\t\tconst extra = 30;\n\t\tconst model = this._editor.getModel()!;\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\t\tconst result: Range[] = [];\n\t\tfor (const range of visibleRanges.sort(Range.compareRangesUsingStarts)) {\n\t\t\tconst extendedRange = model.validateRange(new Range(range.startLineNumber - extra, range.startColumn, range.endLineNumber + extra, range.endColumn));\n\t\t\tif (result.length === 0 || !Range.areIntersectingOrTouching(result[result.length - 1], extendedRange)) {\n\t\t\t\tresult.push(extendedRange);\n\t\t\t} else {\n\t\t\t\tresult[result.length - 1] = Range.plusRange(result[result.length - 1], extendedRange);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate _updateHintsDecorators(ranges: readonly Range[], items: readonly InlayHintItem[]): void {\n\n\t\tconst itemFixedLengths = new Map<InlayHintItem, number>();\n\n\t\tif (this._cursorInfo\n\t\t\t&& this._cursorInfo.notEarlierThan > Date.now()\n\t\t\t&& ranges.some(range => range.containsPosition(this._cursorInfo!.position))\n\t\t) {\n\t\t\t// collect inlay hints that are on the same line and before the cursor. Those \"old\" hints\n\t\t\t// define fixed lengths so that the cursor does not jump back and worth while typing.\n\t\t\tconst { position } = this._cursorInfo;\n\t\t\tthis._cursorInfo = undefined;\n\n\t\t\tconst lengths = new Map<InlayHintItem, number>();\n\n\t\t\tfor (const deco of this._editor.getLineDecorations(position.lineNumber) ?? []) {\n\n\t\t\t\tconst data = this._decorationsMetadata.get(deco.id);\n\t\t\t\tif (deco.range.startColumn > position.column) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst opts = data?.decoration.options[data.item.anchor.direction];\n\t\t\t\tif (opts && opts.attachedData !== InlayHintsController._whitespaceData) {\n\t\t\t\t\tconst len = lengths.get(data.item) ?? 0;\n\t\t\t\t\tlengths.set(data.item, len + opts.content.length);\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// on the cursor line and before the cursor-column\n\t\t\tconst newItemsWithFixedLength = items.filter(item => item.anchor.range.startLineNumber === position.lineNumber && item.anchor.range.endColumn <= position.column);\n\t\t\tconst fixedLengths = Array.from(lengths.values());\n\n\t\t\t// match up fixed lengths with items and distribute the remaining lengths to the last item\n\t\t\tlet lastItem: InlayHintItem | undefined;\n\t\t\twhile (true) {\n\t\t\t\tconst targetItem = newItemsWithFixedLength.shift();\n\t\t\t\tconst fixedLength = fixedLengths.shift();\n\n\t\t\t\tif (!fixedLength && !targetItem) {\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\n\t\t\t\tif (targetItem) {\n\t\t\t\t\titemFixedLengths.set(targetItem, fixedLength ?? 0);\n\t\t\t\t\tlastItem = targetItem;\n\n\t\t\t\t} else if (lastItem && fixedLength) {\n\t\t\t\t\t// still lengths but no more item. give it all to the last\n\t\t\t\t\tlet len = itemFixedLengths.get(lastItem)!;\n\t\t\t\t\tlen += fixedLength;\n\t\t\t\t\tlen += fixedLengths.reduce((p, c) => p + c, 0);\n\t\t\t\t\tfixedLengths.length = 0;\n\t\t\t\t\tbreak; // DONE\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// utils to collect/create injected text decorations\n\t\tconst newDecorationsData: InlayHintDecorationRenderInfo[] = [];\n\t\tconst addInjectedText = (item: InlayHintItem, ref: ClassNameReference, content: string, cursorStops: InjectedTextCursorStops, attachedData?: RenderedInlayHintLabelPart | object): void => {\n\t\t\tconst opts: InjectedTextOptions = {\n\t\t\t\tcontent,\n\t\t\t\tinlineClassNameAffectsLetterSpacing: true,\n\t\t\t\tinlineClassName: ref.className,\n\t\t\t\tcursorStops,\n\t\t\t\tattachedData\n\t\t\t};\n\t\t\tnewDecorationsData.push({\n\t\t\t\titem,\n\t\t\t\tclassNameRef: ref,\n\t\t\t\tdecoration: {\n\t\t\t\t\trange: item.anchor.range,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\t// className: \"rangeHighlight\", // DEBUG highlight to see to what range a hint is attached\n\t\t\t\t\t\tdescription: 'InlayHint',\n\t\t\t\t\t\tshowIfCollapsed: item.anchor.range.isEmpty(), // \"original\" range is empty\n\t\t\t\t\t\tcollapseOnReplaceEdit: !item.anchor.range.isEmpty(),\n\t\t\t\t\t\tstickiness: TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges,\n\t\t\t\t\t\t[item.anchor.direction]: this._activeRenderMode === RenderMode.Normal ? opts : undefined\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst addInjectedWhitespace = (item: InlayHintItem, isLast: boolean): void => {\n\t\t\tconst marginRule = this._ruleFactory.createClassNameRef({\n\t\t\t\twidth: `${(fontSize / 3) | 0}px`,\n\t\t\t\tdisplay: 'inline-block'\n\t\t\t});\n\t\t\taddInjectedText(item, marginRule, '\\u200a', isLast ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None, InlayHintsController._whitespaceData);\n\t\t};\n\n\n\t\t//\n\t\tconst { fontSize, fontFamily, padding, isUniform } = this._getLayoutInfo();\n\t\tconst maxLength = this._editor.getOption(EditorOption.inlayHints).maximumLength;\n\t\tconst fontFamilyVar = '--code-editorInlayHintsFontFamily';\n\t\tthis._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily);\n\n\n\t\ttype ILineInfo = { line: number; totalLen: number };\n\t\tlet currentLineInfo: ILineInfo = { line: 0, totalLen: 0 };\n\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\tconst item = items[i];\n\n\t\t\tif (currentLineInfo.line !== item.anchor.range.startLineNumber) {\n\t\t\t\tcurrentLineInfo = { line: item.anchor.range.startLineNumber, totalLen: 0 };\n\t\t\t}\n\n\t\t\tif (maxLength && currentLineInfo.totalLen > maxLength) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// whitespace leading the actual label\n\t\t\tif (item.hint.paddingLeft) {\n\t\t\t\taddInjectedWhitespace(item, false);\n\t\t\t}\n\n\t\t\t// the label with its parts\n\t\t\tconst parts: languages.InlayHintLabelPart[] = typeof item.hint.label === 'string'\n\t\t\t\t? [{ label: item.hint.label }]\n\t\t\t\t: item.hint.label;\n\n\t\t\tconst itemFixedLength = itemFixedLengths.get(item);\n\t\t\tlet itemActualLength = 0;\n\n\t\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\t\tconst part = parts[i];\n\n\t\t\t\tconst isFirst = i === 0;\n\t\t\t\tconst isLast = i === parts.length - 1;\n\n\t\t\t\tconst cssProperties: CssProperties = {\n\t\t\t\t\tfontSize: `${fontSize}px`,\n\t\t\t\t\tfontFamily: `var(${fontFamilyVar}), ${EDITOR_FONT_DEFAULTS.fontFamily}`,\n\t\t\t\t\tverticalAlign: isUniform ? 'baseline' : 'middle',\n\t\t\t\t\tunicodeBidi: 'isolate'\n\t\t\t\t};\n\n\t\t\t\tif (isNonEmptyArray(item.hint.textEdits)) {\n\t\t\t\t\tcssProperties.cursor = 'default';\n\t\t\t\t}\n\n\t\t\t\tthis._fillInColors(cssProperties, item.hint);\n\n\t\t\t\tif ((part.command || part.location) && this._activeInlayHintPart?.part.item === item && this._activeInlayHintPart.part.index === i) {\n\t\t\t\t\t// active link!\n\t\t\t\t\tcssProperties.textDecoration = 'underline';\n\t\t\t\t\tif (this._activeInlayHintPart.hasTriggerModifier) {\n\t\t\t\t\t\tcssProperties.color = themeColorFromId(colors.editorActiveLinkForeground);\n\t\t\t\t\t\tcssProperties.cursor = 'pointer';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet textlabel = part.label;\n\t\t\t\tcurrentLineInfo.totalLen += textlabel.length;\n\t\t\t\tlet tooLong = false;\n\t\t\t\tconst over = maxLength !== 0 ? (currentLineInfo.totalLen - maxLength) : 0;\n\t\t\t\tif (over > 0) {\n\t\t\t\t\ttextlabel = textlabel.slice(0, -over) + '…';\n\t\t\t\t\ttooLong = true;\n\t\t\t\t}\n\n\t\t\t\titemActualLength += textlabel.length;\n\n\t\t\t\tif (itemFixedLength !== undefined) {\n\t\t\t\t\tconst overFixedLength = itemActualLength - itemFixedLength;\n\t\t\t\t\tif (overFixedLength >= 0) {\n\t\t\t\t\t\t// longer than fixed length, trim\n\t\t\t\t\t\titemActualLength -= overFixedLength;\n\t\t\t\t\t\ttextlabel = textlabel.slice(0, -(1 + overFixedLength)) + '…';\n\t\t\t\t\t\ttooLong = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (padding) {\n\t\t\t\t\tif (isFirst && (isLast || tooLong)) {\n\t\t\t\t\t\t// only element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if (isFirst) {\n\t\t\t\t\t\t// first element\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px ${Math.max(1, fontSize / 4) | 0}px`;\n\t\t\t\t\t\tcssProperties.borderRadius = `${(fontSize / 4) | 0}px 0 0 ${(fontSize / 4) | 0}px`;\n\t\t\t\t\t} else if ((isLast || tooLong)) {\n\t\t\t\t\t\t// last element\n\t\t\t\t\t\tcssProperties.padding = `1px ${Math.max(1, fontSize / 4) | 0}px 1px 0`;\n\t\t\t\t\t\tcssProperties.borderRadius = `0 ${(fontSize / 4) | 0}px ${(fontSize / 4) | 0}px 0`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcssProperties.padding = `1px 0 1px 0`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef(cssProperties),\n\t\t\t\t\tfixSpace(textlabel),\n\t\t\t\t\tisLast && !item.hint.paddingRight ? InjectedTextCursorStops.Right : InjectedTextCursorStops.None,\n\t\t\t\t\tnew RenderedInlayHintLabelPart(item, i)\n\t\t\t\t);\n\n\t\t\t\tif (tooLong) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (itemFixedLength !== undefined && itemActualLength < itemFixedLength) {\n\t\t\t\t// shorter than fixed length, pad\n\t\t\t\tconst pad = (itemFixedLength - itemActualLength);\n\t\t\t\taddInjectedText(\n\t\t\t\t\titem,\n\t\t\t\t\tthis._ruleFactory.createClassNameRef({}),\n\t\t\t\t\t'\\u200a'.repeat(pad),\n\t\t\t\t\tInjectedTextCursorStops.None\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// whitespace trailing the actual label\n\t\t\tif (item.hint.paddingRight) {\n\t\t\t\taddInjectedWhitespace(item, true);\n\t\t\t}\n\n\t\t\tif (newDecorationsData.length > InlayHintsController._MAX_DECORATORS) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// collect all decoration ids that are affected by the ranges\n\t\t// and only update those decorations\n\t\tconst decorationIdsToReplace: string[] = [];\n\t\tfor (const [id, metadata] of this._decorationsMetadata) {\n\t\t\tconst range = this._editor.getModel()?.getDecorationRange(id);\n\t\t\tif (range && ranges.some(r => r.containsRange(range))) {\n\t\t\t\tdecorationIdsToReplace.push(id);\n\t\t\t\tmetadata.classNameRef.dispose();\n\t\t\t\tthis._decorationsMetadata.delete(id);\n\t\t\t}\n\t\t}\n\n\t\tconst scrollState = StableEditorScrollState.capture(this._editor);\n\n\t\tthis._editor.changeDecorations(accessor => {\n\t\t\tconst newDecorationIds = accessor.deltaDecorations(decorationIdsToReplace, newDecorationsData.map(d => d.decoration));\n\t\t\tfor (let i = 0; i < newDecorationIds.length; i++) {\n\t\t\t\tconst data = newDecorationsData[i];\n\t\t\t\tthis._decorationsMetadata.set(newDecorationIds[i], data);\n\t\t\t}\n\t\t});\n\n\t\tscrollState.restore(this._editor);\n\t}\n\n\tprivate _fillInColors(props: CssProperties, hint: languages.InlayHint): void {\n\t\tif (hint.kind === languages.InlayHintKind.Parameter) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintParameterBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintParameterForeground);\n\t\t} else if (hint.kind === languages.InlayHintKind.Type) {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintTypeBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintTypeForeground);\n\t\t} else {\n\t\t\tprops.backgroundColor = themeColorFromId(colors.editorInlayHintBackground);\n\t\t\tprops.color = themeColorFromId(colors.editorInlayHintForeground);\n\t\t}\n\t}\n\n\tprivate _getLayoutInfo() {\n\t\tconst options = this._editor.getOption(EditorOption.inlayHints);\n\t\tconst padding = options.padding;\n\n\t\tconst editorFontSize = this._editor.getOption(EditorOption.fontSize);\n\t\tconst editorFontFamily = this._editor.getOption(EditorOption.fontFamily);\n\n\t\tlet fontSize = options.fontSize;\n\t\tif (!fontSize || fontSize < 5 || fontSize > editorFontSize) {\n\t\t\tfontSize = editorFontSize;\n\t\t}\n\n\t\tconst fontFamily = options.fontFamily || editorFontFamily;\n\n\t\tconst isUniform = !padding\n\t\t\t&& fontFamily === editorFontFamily\n\t\t\t&& fontSize === editorFontSize;\n\n\t\treturn { fontSize, fontFamily, padding, isUniform };\n\t}\n\n\tprivate _removeAllDecorations(): void {\n\t\tthis._editor.removeDecorations(Array.from(this._decorationsMetadata.keys()));\n\t\tfor (const obj of this._decorationsMetadata.values()) {\n\t\t\tobj.classNameRef.dispose();\n\t\t}\n\t\tthis._decorationsMetadata.clear();\n\t}\n}\n\n\n// Prevents the view from potentially visible whitespace\nfunction fixSpace(str: string): string {\n\tconst noBreakWhitespace = '\\xa0';\n\treturn str.replace(/[ \\t]/g, noBreakWhitespace);\n}\n\nCommandsRegistry.registerCommand('_executeInlayHintProvider', async (accessor, ...args: [URI, IRange]): Promise<languages.InlayHint[]> => {\n\n\tconst [uri, range] = args;\n\tassertType(URI.isUri(uri));\n\tassertType(Range.isIRange(range));\n\n\tconst { inlayHintsProvider } = accessor.get(ILanguageFeaturesService);\n\tconst ref = await accessor.get(ITextModelService).createModelReference(uri);\n\ttry {\n\t\tconst model = await InlayHintsFragments.create(inlayHintsProvider, ref.object.textEditorModel, [Range.lift(range)], CancellationToken.None);\n\t\tconst result = model.items.map(i => i.hint);\n\t\tsetTimeout(() => model.dispose(), 0); // dispose after sending to ext host\n\t\treturn result;\n\t} finally {\n\t\tref.dispose();\n\t}\n});\n"]}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
export const inlineSuggestCommitId = 'editor.action.inlineSuggest.commit';
|
|
6
|
+
export const inlineSuggestCommitAlternativeActionId = 'editor.action.inlineSuggest.commitAlternativeAction';
|
|
6
7
|
export const showPreviousInlineSuggestionActionId = 'editor.action.inlineSuggest.showPrevious';
|
|
7
8
|
export const showNextInlineSuggestionActionId = 'editor.action.inlineSuggest.showNext';
|
|
8
9
|
export const jumpToNextInlineEditId = 'editor.action.inlineSuggest.jump';
|
|
9
10
|
export const hideInlineCompletionId = 'editor.action.inlineSuggest.hide';
|
|
10
11
|
export const toggleShowCollapsedId = 'editor.action.inlineSuggest.toggleShowCollapsed';
|
|
12
|
+
export const renameSymbolCommandId = 'editor.action.inlineSuggest.renameSymbol';
|
|
11
13
|
//# sourceMappingURL=commandIds.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.ts","vs/editor/contrib/inlineCompletions/browser/controller/commandIds.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,MAAM,CAAC,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AAE1E,MAAM,CAAC,MAAM,oCAAoC,GAAG,0CAA0C,CAAC;AAE/F,MAAM,CAAC,MAAM,gCAAgC,GAAG,sCAAsC,CAAC;AAEvF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AAEzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AAEzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,iDAAiD,CAAC","file":"commandIds.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\nexport const inlineSuggestCommitId = 'editor.action.inlineSuggest.commit';\n\nexport const showPreviousInlineSuggestionActionId = 'editor.action.inlineSuggest.showPrevious';\n\nexport const showNextInlineSuggestionActionId = 'editor.action.inlineSuggest.showNext';\n\nexport const jumpToNextInlineEditId = 'editor.action.inlineSuggest.jump';\n\nexport const hideInlineCompletionId = 'editor.action.inlineSuggest.hide';\n\nexport const toggleShowCollapsedId = 'editor.action.inlineSuggest.toggleShowCollapsed';\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\nexport const inlineSuggestCommitId = 'editor.action.inlineSuggest.commit';\n\nexport const showPreviousInlineSuggestionActionId = 'editor.action.inlineSuggest.showPrevious';\n\nexport const showNextInlineSuggestionActionId = 'editor.action.inlineSuggest.showNext';\n\nexport const jumpToNextInlineEditId = 'editor.action.inlineSuggest.jump';\n\nexport const hideInlineCompletionId = 'editor.action.inlineSuggest.hide';\n\nexport const toggleShowCollapsedId = 'editor.action.inlineSuggest.toggleShowCollapsed';\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/controller/commandIds.ts","vs/editor/contrib/inlineCompletions/browser/controller/commandIds.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,MAAM,CAAC,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AAE1E,MAAM,CAAC,MAAM,sCAAsC,GAAG,qDAAqD,CAAC;AAE5G,MAAM,CAAC,MAAM,oCAAoC,GAAG,0CAA0C,CAAC;AAE/F,MAAM,CAAC,MAAM,gCAAgC,GAAG,sCAAsC,CAAC;AAEvF,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AAEzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AAEzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,iDAAiD,CAAC;AAEvF,MAAM,CAAC,MAAM,qBAAqB,GAAG,0CAA0C,CAAC","file":"commandIds.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\nexport const inlineSuggestCommitId = 'editor.action.inlineSuggest.commit';\n\nexport const inlineSuggestCommitAlternativeActionId = 'editor.action.inlineSuggest.commitAlternativeAction';\n\nexport const showPreviousInlineSuggestionActionId = 'editor.action.inlineSuggest.showPrevious';\n\nexport const showNextInlineSuggestionActionId = 'editor.action.inlineSuggest.showNext';\n\nexport const jumpToNextInlineEditId = 'editor.action.inlineSuggest.jump';\n\nexport const hideInlineCompletionId = 'editor.action.inlineSuggest.hide';\n\nexport const toggleShowCollapsedId = 'editor.action.inlineSuggest.toggleShowCollapsed';\n\nexport const renameSymbolCommandId = 'editor.action.inlineSuggest.renameSymbol';\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\nexport const inlineSuggestCommitId = 'editor.action.inlineSuggest.commit';\n\nexport const inlineSuggestCommitAlternativeActionId = 'editor.action.inlineSuggest.commitAlternativeAction';\n\nexport const showPreviousInlineSuggestionActionId = 'editor.action.inlineSuggest.showPrevious';\n\nexport const showNextInlineSuggestionActionId = 'editor.action.inlineSuggest.showNext';\n\nexport const jumpToNextInlineEditId = 'editor.action.inlineSuggest.jump';\n\nexport const hideInlineCompletionId = 'editor.action.inlineSuggest.hide';\n\nexport const toggleShowCollapsedId = 'editor.action.inlineSuggest.toggleShowCollapsed';\n\nexport const renameSymbolCommandId = 'editor.action.inlineSuggest.renameSymbol';\n"]}
|
|
@@ -17,7 +17,7 @@ import { EditorAction } from '../../../../browser/editorExtensions.js';
|
|
|
17
17
|
import { EditorContextKeys } from '../../../../common/editorContextKeys.js';
|
|
18
18
|
import { ILanguageFeaturesService } from '../../../../common/services/languageFeatures.js';
|
|
19
19
|
import { Context as SuggestContext } from '../../../suggest/browser/suggest.js';
|
|
20
|
-
import { hideInlineCompletionId, inlineSuggestCommitId, jumpToNextInlineEditId, showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId, toggleShowCollapsedId } from './commandIds.js';
|
|
20
|
+
import { hideInlineCompletionId, inlineSuggestCommitAlternativeActionId, inlineSuggestCommitId, jumpToNextInlineEditId, showNextInlineSuggestionActionId, showPreviousInlineSuggestionActionId, toggleShowCollapsedId } from './commandIds.js';
|
|
21
21
|
import { InlineCompletionContextKeys } from './inlineCompletionContextKeys.js';
|
|
22
22
|
import { InlineCompletionsController } from './inlineCompletionsController.js';
|
|
23
23
|
export class ShowNextInlineSuggestionAction extends EditorAction {
|
|
@@ -200,11 +200,40 @@ KeybindingsRegistry.registerKeybindingRule({
|
|
|
200
200
|
primary: 2 /* KeyCode.Tab */,
|
|
201
201
|
when: ContextKeyExpr.and(InlineCompletionContextKeys.inInlineEditsPreviewEditor)
|
|
202
202
|
});
|
|
203
|
+
export class AcceptInlineCompletionAlternativeAction extends EditorAction {
|
|
204
|
+
constructor() {
|
|
205
|
+
super({
|
|
206
|
+
id: inlineSuggestCommitAlternativeActionId,
|
|
207
|
+
label: nls.localize2(1195, "Accept Inline Suggestion Alternative Action"),
|
|
208
|
+
precondition: ContextKeyExpr.and(InlineCompletionContextKeys.inlineSuggestionAlternativeActionVisible, InlineCompletionContextKeys.inlineEditVisible),
|
|
209
|
+
menuOpts: [],
|
|
210
|
+
kbOpts: [
|
|
211
|
+
{
|
|
212
|
+
primary: 1024 /* KeyMod.Shift */ | 2 /* KeyCode.Tab */,
|
|
213
|
+
weight: 203,
|
|
214
|
+
}
|
|
215
|
+
],
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
async run(accessor, editor) {
|
|
219
|
+
const controller = InlineCompletionsController.getInFocusedEditorOrParent(accessor);
|
|
220
|
+
if (controller) {
|
|
221
|
+
controller.model.get()?.accept(controller.editor, true);
|
|
222
|
+
controller.editor.focus();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
KeybindingsRegistry.registerKeybindingRule({
|
|
227
|
+
id: inlineSuggestCommitAlternativeActionId,
|
|
228
|
+
weight: 203,
|
|
229
|
+
primary: 1024 /* KeyMod.Shift */ | 2 /* KeyCode.Tab */,
|
|
230
|
+
when: ContextKeyExpr.and(InlineCompletionContextKeys.inInlineEditsPreviewEditor)
|
|
231
|
+
});
|
|
203
232
|
export class JumpToNextInlineEdit extends EditorAction {
|
|
204
233
|
constructor() {
|
|
205
234
|
super({
|
|
206
235
|
id: jumpToNextInlineEditId,
|
|
207
|
-
label: nls.localize2(
|
|
236
|
+
label: nls.localize2(1196, "Jump to next inline edit"),
|
|
208
237
|
precondition: InlineCompletionContextKeys.inlineEditVisible,
|
|
209
238
|
menuOpts: [{
|
|
210
239
|
menuId: MenuId.InlineEditsActions,
|
|
@@ -232,7 +261,7 @@ export class HideInlineCompletion extends EditorAction {
|
|
|
232
261
|
constructor() {
|
|
233
262
|
super({
|
|
234
263
|
id: HideInlineCompletion.ID,
|
|
235
|
-
label: nls.localize2(
|
|
264
|
+
label: nls.localize2(1197, "Hide Inline Suggestion"),
|
|
236
265
|
precondition: ContextKeyExpr.or(InlineCompletionContextKeys.inlineSuggestionVisible, InlineCompletionContextKeys.inlineEditVisible),
|
|
237
266
|
kbOpts: {
|
|
238
267
|
weight: 100 /* KeybindingWeight.EditorContrib */ + 90, // same as hiding the suggest widget
|
|
@@ -259,7 +288,7 @@ export class ToggleInlineCompletionShowCollapsed extends EditorAction {
|
|
|
259
288
|
constructor() {
|
|
260
289
|
super({
|
|
261
290
|
id: ToggleInlineCompletionShowCollapsed.ID,
|
|
262
|
-
label: nls.localize2(
|
|
291
|
+
label: nls.localize2(1198, "Toggle Inline Suggestions Show Collapsed"),
|
|
263
292
|
precondition: ContextKeyExpr.true(),
|
|
264
293
|
});
|
|
265
294
|
}
|