monaco-editor-core 0.56.0-dev-20251125 → 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 +30 -4
- 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/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 +0 -3
- 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 +1 -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 -70
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +59 -11
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +152 -95
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +113 -54
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js +317 -75
- package/esm/vs/editor/contrib/inlineCompletions/browser/model/renameSymbolProcessor.js.map +1 -1
- 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 -15
- 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 +34 -3
- 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 -5
- 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 +34 -3
- 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
|
@@ -10,18 +10,19 @@ import { Disposable } from '../../../../../base/common/lifecycle.js';
|
|
|
10
10
|
import { prefixedUuid } from '../../../../../base/common/uuid.js';
|
|
11
11
|
import { StringReplacement } from '../../../../common/core/edits/stringEdit.js';
|
|
12
12
|
import { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';
|
|
13
|
+
import { Position } from '../../../../common/core/position.js';
|
|
13
14
|
import { Range } from '../../../../common/core/range.js';
|
|
14
15
|
import { TextReplacement } from '../../../../common/core/edits/textEdit.js';
|
|
15
16
|
import { InlineCompletionEndOfLifeReasonKind } from '../../../../common/languages.js';
|
|
16
17
|
import { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';
|
|
17
18
|
import { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';
|
|
18
|
-
import { getReadonlyEmptyArray } from '../utils.js';
|
|
19
|
+
import { ErrorResult, getReadonlyEmptyArray } from '../utils.js';
|
|
19
20
|
import { groupByMap } from '../../../../../base/common/collections.js';
|
|
20
21
|
import { DirectedGraph } from './graph.js';
|
|
21
22
|
import { CachedFunction } from '../../../../../base/common/cache.js';
|
|
22
23
|
import { InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';
|
|
23
24
|
import { isDefined } from '../../../../../base/common/types.js';
|
|
24
|
-
import { inlineCompletionIsVisible } from './
|
|
25
|
+
import { inlineCompletionIsVisible } from './inlineCompletionIsVisible.js';
|
|
25
26
|
import { EditDeltaInfo } from '../../../../common/textModelEditSource.js';
|
|
26
27
|
import { URI } from '../../../../../base/common/uri.js';
|
|
27
28
|
export function provideInlineCompletions(providers, position, model, context, requestInfo, languageConfigurationService) {
|
|
@@ -88,7 +89,12 @@ export function provideInlineCompletions(providers, position, model, context, re
|
|
|
88
89
|
return undefined; // The list is disposed now, so we cannot return the items!
|
|
89
90
|
}
|
|
90
91
|
for (const item of result.items) {
|
|
91
|
-
|
|
92
|
+
const r = toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime });
|
|
93
|
+
if (ErrorResult.is(r)) {
|
|
94
|
+
r.logError();
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
data.push(r);
|
|
92
98
|
}
|
|
93
99
|
return list;
|
|
94
100
|
}
|
|
@@ -125,60 +131,80 @@ export function runWhenCancelled(token, callback) {
|
|
|
125
131
|
}
|
|
126
132
|
}
|
|
127
133
|
function toInlineSuggestData(inlineCompletion, source, defaultReplaceRange, textModel, languageConfigurationService, context, requestInfo, providerRequestInfo) {
|
|
128
|
-
let
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const diff = insertText.length - inlineCompletion.insertText.length;
|
|
137
|
-
if (diff !== 0) {
|
|
138
|
-
range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
snippetInfo = undefined;
|
|
134
|
+
let action;
|
|
135
|
+
const uri = inlineCompletion.uri ? URI.revive(inlineCompletion.uri) : undefined;
|
|
136
|
+
if (inlineCompletion.jumpToPosition !== undefined) {
|
|
137
|
+
action = {
|
|
138
|
+
kind: 'jumpTo',
|
|
139
|
+
position: Position.lift(inlineCompletion.jumpToPosition),
|
|
140
|
+
uri,
|
|
141
|
+
};
|
|
142
142
|
}
|
|
143
|
-
else if (inlineCompletion.insertText
|
|
144
|
-
insertText
|
|
145
|
-
snippetInfo
|
|
146
|
-
range =
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
143
|
+
else if (inlineCompletion.insertText !== undefined) {
|
|
144
|
+
let insertText;
|
|
145
|
+
let snippetInfo;
|
|
146
|
+
let range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;
|
|
147
|
+
if (typeof inlineCompletion.insertText === 'string') {
|
|
148
|
+
insertText = inlineCompletion.insertText;
|
|
149
|
+
if (languageConfigurationService && inlineCompletion.completeBracketPairs) {
|
|
150
|
+
insertText = closeBrackets(insertText, range.getStartPosition(), textModel, languageConfigurationService);
|
|
151
|
+
// Modify range depending on if brackets are added or removed
|
|
152
|
+
const diff = insertText.length - inlineCompletion.insertText.length;
|
|
153
|
+
if (diff !== 0) {
|
|
154
|
+
range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);
|
|
155
|
+
}
|
|
156
156
|
}
|
|
157
|
-
}
|
|
158
|
-
const snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);
|
|
159
|
-
if (snippet.children.length === 1 && snippet.children[0] instanceof Text) {
|
|
160
|
-
insertText = snippet.children[0].value;
|
|
161
157
|
snippetInfo = undefined;
|
|
162
158
|
}
|
|
159
|
+
else if ('snippet' in inlineCompletion.insertText) {
|
|
160
|
+
const preBracketCompletionLength = inlineCompletion.insertText.snippet.length;
|
|
161
|
+
if (languageConfigurationService && inlineCompletion.completeBracketPairs) {
|
|
162
|
+
inlineCompletion.insertText.snippet = closeBrackets(inlineCompletion.insertText.snippet, range.getStartPosition(), textModel, languageConfigurationService);
|
|
163
|
+
// Modify range depending on if brackets are added or removed
|
|
164
|
+
const diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;
|
|
165
|
+
if (diff !== 0) {
|
|
166
|
+
range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);
|
|
170
|
+
if (snippet.children.length === 1 && snippet.children[0] instanceof Text) {
|
|
171
|
+
insertText = snippet.children[0].value;
|
|
172
|
+
snippetInfo = undefined;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
insertText = snippet.toString();
|
|
176
|
+
snippetInfo = {
|
|
177
|
+
snippet: inlineCompletion.insertText.snippet,
|
|
178
|
+
range: range
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
163
182
|
else {
|
|
164
|
-
insertText
|
|
165
|
-
snippetInfo = {
|
|
166
|
-
snippet: inlineCompletion.insertText.snippet,
|
|
167
|
-
range: range
|
|
168
|
-
};
|
|
183
|
+
assertNever(inlineCompletion.insertText);
|
|
169
184
|
}
|
|
185
|
+
action = {
|
|
186
|
+
kind: 'edit',
|
|
187
|
+
range,
|
|
188
|
+
insertText,
|
|
189
|
+
snippetInfo,
|
|
190
|
+
uri,
|
|
191
|
+
alternativeAction: undefined,
|
|
192
|
+
};
|
|
170
193
|
}
|
|
171
194
|
else {
|
|
172
|
-
|
|
195
|
+
action = undefined;
|
|
196
|
+
if (!inlineCompletion.hint) {
|
|
197
|
+
return ErrorResult.message('Inline completion has no insertText, jumpToPosition nor hint.');
|
|
198
|
+
}
|
|
173
199
|
}
|
|
174
|
-
return new InlineSuggestData(
|
|
200
|
+
return new InlineSuggestData(action, inlineCompletion.hint, inlineCompletion.additionalTextEdits || getReadonlyEmptyArray(), inlineCompletion, source, context, inlineCompletion.isInlineEdit ?? false, inlineCompletion.supportsRename ?? false, requestInfo, providerRequestInfo, inlineCompletion.correlationId);
|
|
175
201
|
}
|
|
176
202
|
export class InlineSuggestData {
|
|
177
|
-
|
|
178
|
-
this.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
this.
|
|
203
|
+
get action() {
|
|
204
|
+
return this._action;
|
|
205
|
+
}
|
|
206
|
+
constructor(_action, hint, additionalTextEdits, sourceInlineCompletion, source, context, isInlineEdit, supportsRename, _requestInfo, _providerRequestInfo, _correlationId) {
|
|
207
|
+
this._action = _action;
|
|
182
208
|
this.hint = hint;
|
|
183
209
|
this.additionalTextEdits = additionalTextEdits;
|
|
184
210
|
this.sourceInlineCompletion = sourceInlineCompletion;
|
|
@@ -186,12 +212,12 @@ export class InlineSuggestData {
|
|
|
186
212
|
this.context = context;
|
|
187
213
|
this.isInlineEdit = isInlineEdit;
|
|
188
214
|
this.supportsRename = supportsRename;
|
|
189
|
-
this.renameCommand = renameCommand;
|
|
190
215
|
this._requestInfo = _requestInfo;
|
|
191
216
|
this._providerRequestInfo = _providerRequestInfo;
|
|
192
217
|
this._correlationId = _correlationId;
|
|
193
218
|
this._didShow = false;
|
|
194
219
|
this._timeUntilShown = undefined;
|
|
220
|
+
this._timeUntilActuallyShown = undefined;
|
|
195
221
|
this._showStartTime = undefined;
|
|
196
222
|
this._shownDuration = 0;
|
|
197
223
|
this._showUncollapsedStartTime = undefined;
|
|
@@ -203,19 +229,24 @@ export class InlineSuggestData {
|
|
|
203
229
|
this._partiallyAcceptedCount = 0;
|
|
204
230
|
this._partiallyAcceptedSinceOriginal = { characters: 0, ratio: 0, count: 0 };
|
|
205
231
|
this._renameInfo = undefined;
|
|
232
|
+
this._editKind = undefined;
|
|
233
|
+
this.performance = new InlineSuggestionsPerformance();
|
|
206
234
|
this._viewData = { editorType: _requestInfo.editorType };
|
|
207
235
|
}
|
|
208
236
|
get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }
|
|
209
237
|
get partialAccepts() { return this._partiallyAcceptedSinceOriginal; }
|
|
210
|
-
async reportInlineEditShown(commandService, updatedInsertText, viewKind, viewData) {
|
|
238
|
+
async reportInlineEditShown(commandService, updatedInsertText, viewKind, viewData, editKind, timeWhenShown) {
|
|
211
239
|
this.updateShownDuration(viewKind);
|
|
212
240
|
if (this._didShow) {
|
|
213
241
|
return;
|
|
214
242
|
}
|
|
243
|
+
this.addPerformanceMarker('shown');
|
|
215
244
|
this._didShow = true;
|
|
245
|
+
this._editKind = editKind;
|
|
216
246
|
this._viewData.viewKind = viewKind;
|
|
217
247
|
this._viewData.renderData = viewData;
|
|
218
|
-
this._timeUntilShown =
|
|
248
|
+
this._timeUntilShown = timeWhenShown - this._requestInfo.startTime;
|
|
249
|
+
this._timeUntilActuallyShown = Date.now() - this._requestInfo.startTime;
|
|
219
250
|
const editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);
|
|
220
251
|
this.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);
|
|
221
252
|
if (this.sourceInlineCompletion.shownCommand) {
|
|
@@ -258,8 +289,10 @@ export class InlineSuggestData {
|
|
|
258
289
|
shown: this._didShow,
|
|
259
290
|
shownDuration: this._shownDuration,
|
|
260
291
|
shownDurationUncollapsed: this._showUncollapsedDuration,
|
|
292
|
+
editKind: this._editKind?.toString(),
|
|
261
293
|
preceeded: this._isPreceeded,
|
|
262
294
|
timeUntilShown: this._timeUntilShown,
|
|
295
|
+
timeUntilActuallyShown: this._timeUntilActuallyShown,
|
|
263
296
|
timeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,
|
|
264
297
|
timeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,
|
|
265
298
|
editorType: this._viewData.editorType,
|
|
@@ -267,13 +300,18 @@ export class InlineSuggestData {
|
|
|
267
300
|
requestReason: this._requestInfo.reason,
|
|
268
301
|
viewKind: this._viewData.viewKind,
|
|
269
302
|
notShownReason: this._notShownReason,
|
|
270
|
-
|
|
303
|
+
performanceMarkers: this.performance.toString(),
|
|
304
|
+
renameCreated: this._renameInfo?.createdRename,
|
|
271
305
|
renameDuration: this._renameInfo?.duration,
|
|
272
|
-
renameTimedOut: this._renameInfo?.timedOut
|
|
306
|
+
renameTimedOut: this._renameInfo?.timedOut,
|
|
307
|
+
renameDroppedOtherEdits: this._renameInfo?.droppedOtherEdits,
|
|
308
|
+
renameDroppedRenameEdits: this._renameInfo?.droppedRenameEdits,
|
|
273
309
|
typingInterval: this._requestInfo.typingInterval,
|
|
274
310
|
typingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,
|
|
311
|
+
skuPlan: this._requestInfo.sku?.plan,
|
|
312
|
+
skuType: this._requestInfo.sku?.type,
|
|
275
313
|
availableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),
|
|
276
|
-
...this._viewData.renderData,
|
|
314
|
+
...this._viewData.renderData?.getData(),
|
|
277
315
|
};
|
|
278
316
|
this.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);
|
|
279
317
|
}
|
|
@@ -327,8 +365,29 @@ export class InlineSuggestData {
|
|
|
327
365
|
}
|
|
328
366
|
this._renameInfo = info;
|
|
329
367
|
}
|
|
330
|
-
|
|
331
|
-
|
|
368
|
+
withAction(action) {
|
|
369
|
+
this._action = action;
|
|
370
|
+
return this;
|
|
371
|
+
}
|
|
372
|
+
addPerformanceMarker(marker) {
|
|
373
|
+
this.performance.mark(marker);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
class InlineSuggestionsPerformance {
|
|
377
|
+
constructor() {
|
|
378
|
+
this.markers = [];
|
|
379
|
+
this.markers.push({ name: 'start', timeStamp: Date.now() });
|
|
380
|
+
}
|
|
381
|
+
mark(marker) {
|
|
382
|
+
this.markers.push({ name: marker, timeStamp: Date.now() });
|
|
383
|
+
}
|
|
384
|
+
toString() {
|
|
385
|
+
const deltas = [];
|
|
386
|
+
for (let i = 1; i < this.markers.length; i++) {
|
|
387
|
+
const delta = this.markers[i].timeStamp - this.markers[i - 1].timeStamp;
|
|
388
|
+
deltas.push({ [this.markers[i].name]: delta });
|
|
389
|
+
}
|
|
390
|
+
return JSON.stringify(deltas);
|
|
332
391
|
}
|
|
333
392
|
}
|
|
334
393
|
export var InlineCompletionEditorType;
|
package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts","vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts"],"names":[],"mappings":"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","file":"provideInlineCompletions.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 { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { BugIndicatingError, onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId, IInlineCompletionHint, Command } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineSuggestionItem.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\nimport { URI } from '../../../../../base/common/uri.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string' && item.insertText !== undefined) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (item.insertText !== undefined) {\n\t\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tdata.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime }));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData {\n\tlet insertText: string;\n\tlet snippetInfo: SnippetInfo | undefined;\n\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\tif (typeof inlineCompletion.insertText === 'string') {\n\t\tinsertText = inlineCompletion.insertText;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinsertText = closeBrackets(\n\t\t\t\tinsertText,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tsnippetInfo = undefined;\n\t} else if (inlineCompletion.insertText === undefined) {\n\t\tinsertText = ''; // TODO use undefined\n\t\tsnippetInfo = undefined;\n\t\trange = new Range(1, 1, 1, 1);\n\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\tinsertText = snippet.children[0].value;\n\t\t\tsnippetInfo = undefined;\n\t\t} else {\n\t\t\tinsertText = snippet.toString();\n\t\t\tsnippetInfo = {\n\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\trange: range\n\t\t\t};\n\t\t}\n\t} else {\n\t\tassertNever(inlineCompletion.insertText);\n\t}\n\n\treturn new InlineSuggestData(\n\t\trange,\n\t\tinsertText,\n\t\tsnippetInfo,\n\t\tURI.revive(inlineCompletion.uri),\n\t\tinlineCompletion.hint,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\tinlineCompletion.supportsRename ?? false,\n\t\tundefined,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type RenameInfo = {\n\tcreatedRename: boolean;\n\tduration: number;\n\ttimedOut?: boolean;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n};\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\tprivate _renameInfo: RenameInfo | undefined = undefined;\n\n\tconstructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly snippetInfo: SnippetInfo | undefined,\n\t\tpublic readonly uri: URI | undefined,\n\t\tpublic readonly hint: IInlineCompletionHint | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\t\tpublic readonly supportsRename: boolean,\n\t\tpublic readonly renameCommand: Command | undefined,\n\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didShow = true;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\trenameCreated: this._renameInfo?.createdRename ?? false,\n\t\t\t\trenameDuration: this._renameInfo?.duration,\n\t\t\t\trenameTimedOut: this._renameInfo?.timedOut ?? false,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData,\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n\n\tpublic setRenameProcessingInfo(info: RenameInfo): void {\n\t\tif (this._renameInfo) {\n\t\t\tthrow new BugIndicatingError('Rename info has already been set.');\n\t\t}\n\t\tthis._renameInfo = info;\n\t}\n\n\tpublic withRename(command: Command, hint: IInlineCompletionHint): InlineSuggestData {\n\t\treturn new InlineSuggestData(\n\t\t\tnew Range(1, 1, 1, 1),\n\t\t\t'',\n\t\t\tthis.snippetInfo,\n\t\t\tthis.uri,\n\t\t\thint,\n\t\t\tthis.additionalTextEdits,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tthis.source,\n\t\t\tthis.context,\n\t\t\tthis.isInlineEdit,\n\t\t\tthis.supportsRename,\n\t\t\tcommand,\n\t\t\tthis._requestInfo,\n\t\t\tthis._providerRequestInfo,\n\t\t\tthis._correlationId,\n\t\t);\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\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 { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { BugIndicatingError, onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId, IInlineCompletionHint, Command } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineSuggestionItem.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\nimport { URI } from '../../../../../base/common/uri.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string' && item.insertText !== undefined) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (item.insertText !== undefined) {\n\t\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tdata.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime }));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData {\n\tlet insertText: string;\n\tlet snippetInfo: SnippetInfo | undefined;\n\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\tif (typeof inlineCompletion.insertText === 'string') {\n\t\tinsertText = inlineCompletion.insertText;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinsertText = closeBrackets(\n\t\t\t\tinsertText,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tsnippetInfo = undefined;\n\t} else if (inlineCompletion.insertText === undefined) {\n\t\tinsertText = ''; // TODO use undefined\n\t\tsnippetInfo = undefined;\n\t\trange = new Range(1, 1, 1, 1);\n\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\tinsertText = snippet.children[0].value;\n\t\t\tsnippetInfo = undefined;\n\t\t} else {\n\t\t\tinsertText = snippet.toString();\n\t\t\tsnippetInfo = {\n\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\trange: range\n\t\t\t};\n\t\t}\n\t} else {\n\t\tassertNever(inlineCompletion.insertText);\n\t}\n\n\treturn new InlineSuggestData(\n\t\trange,\n\t\tinsertText,\n\t\tsnippetInfo,\n\t\tURI.revive(inlineCompletion.uri),\n\t\tinlineCompletion.hint,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\tinlineCompletion.supportsRename ?? false,\n\t\tundefined,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type RenameInfo = {\n\tcreatedRename: boolean;\n\tduration: number;\n\ttimedOut?: boolean;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n};\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\tprivate _renameInfo: RenameInfo | undefined = undefined;\n\n\tconstructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly snippetInfo: SnippetInfo | undefined,\n\t\tpublic readonly uri: URI | undefined,\n\t\tpublic readonly hint: IInlineCompletionHint | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\t\tpublic readonly supportsRename: boolean,\n\t\tpublic readonly renameCommand: Command | undefined,\n\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didShow = true;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\trenameCreated: this._renameInfo?.createdRename ?? false,\n\t\t\t\trenameDuration: this._renameInfo?.duration,\n\t\t\t\trenameTimedOut: this._renameInfo?.timedOut ?? false,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData,\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n\n\tpublic setRenameProcessingInfo(info: RenameInfo): void {\n\t\tif (this._renameInfo) {\n\t\t\tthrow new BugIndicatingError('Rename info has already been set.');\n\t\t}\n\t\tthis._renameInfo = info;\n\t}\n\n\tpublic withRename(command: Command, hint: IInlineCompletionHint): InlineSuggestData {\n\t\treturn new InlineSuggestData(\n\t\t\tnew Range(1, 1, 1, 1),\n\t\t\t'',\n\t\t\tthis.snippetInfo,\n\t\t\tthis.uri,\n\t\t\thint,\n\t\t\tthis.additionalTextEdits,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tthis.source,\n\t\t\tthis.context,\n\t\t\tthis.isInlineEdit,\n\t\t\tthis.supportsRename,\n\t\t\tcommand,\n\t\t\tthis._requestInfo,\n\t\t\tthis._providerRequestInfo,\n\t\t\tthis._correlationId,\n\t\t);\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts","vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts"],"names":[],"mappings":"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","file":"provideInlineCompletions.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 { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { BugIndicatingError, onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId, IInlineCompletionHint } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { ErrorResult, getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineCompletionIsVisible.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\nimport { URI } from '../../../../../base/common/uri.js';\nimport { InlineSuggestionEditKind } from './editKind.js';\nimport { InlineSuggestAlternativeAction } from './InlineSuggestAlternativeAction.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string' && item.insertText !== undefined) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (item.insertText !== undefined) {\n\t\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tconst r = toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime });\n\t\t\t\tif (ErrorResult.is(r)) {\n\t\t\t\t\tr.logError();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdata.push(r);\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData | ErrorResult {\n\n\tlet action: IInlineSuggestDataAction | undefined;\n\tconst uri = inlineCompletion.uri ? URI.revive(inlineCompletion.uri) : undefined;\n\n\tif (inlineCompletion.jumpToPosition !== undefined) {\n\t\taction = {\n\t\t\tkind: 'jumpTo',\n\t\t\tposition: Position.lift(inlineCompletion.jumpToPosition),\n\t\t\turi,\n\t\t};\n\t} else if (inlineCompletion.insertText !== undefined) {\n\t\tlet insertText: string;\n\t\tlet snippetInfo: SnippetInfo | undefined;\n\t\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\t\tif (typeof inlineCompletion.insertText === 'string') {\n\t\t\tinsertText = inlineCompletion.insertText;\n\n\t\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\t\tinsertText = closeBrackets(\n\t\t\t\t\tinsertText,\n\t\t\t\t\trange.getStartPosition(),\n\t\t\t\t\ttextModel,\n\t\t\t\t\tlanguageConfigurationService\n\t\t\t\t);\n\n\t\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\t\tif (diff !== 0) {\n\t\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsnippetInfo = undefined;\n\t\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\t\trange.getStartPosition(),\n\t\t\t\t\ttextModel,\n\t\t\t\t\tlanguageConfigurationService\n\t\t\t\t);\n\n\t\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\t\tif (diff !== 0) {\n\t\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\t\tinsertText = snippet.children[0].value;\n\t\t\t\tsnippetInfo = undefined;\n\t\t\t} else {\n\t\t\t\tinsertText = snippet.toString();\n\t\t\t\tsnippetInfo = {\n\t\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\t\trange: range\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tassertNever(inlineCompletion.insertText);\n\t\t}\n\t\taction = {\n\t\t\tkind: 'edit',\n\t\t\trange,\n\t\t\tinsertText,\n\t\t\tsnippetInfo,\n\t\t\turi,\n\t\t\talternativeAction: undefined,\n\t\t};\n\t} else {\n\t\taction = undefined;\n\t\tif (!inlineCompletion.hint) {\n\t\t\treturn ErrorResult.message('Inline completion has no insertText, jumpToPosition nor hint.');\n\t\t}\n\t}\n\n\treturn new InlineSuggestData(\n\t\taction,\n\t\tinlineCompletion.hint,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\tinlineCompletion.supportsRename ?? false,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestSku = { type: string; plan: string };\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n\tsku: InlineSuggestSku | undefined;\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type RenameInfo = {\n\tcreatedRename: boolean;\n\tduration: number;\n\ttimedOut?: boolean;\n\tdroppedOtherEdits?: number;\n\tdroppedRenameEdits?: number;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n};\n\nexport type IInlineSuggestDataAction = IInlineSuggestDataActionEdit | IInlineSuggestDataActionJumpTo;\n\nexport interface IInlineSuggestDataActionEdit {\n\tkind: 'edit';\n\trange: Range;\n\tinsertText: string;\n\tsnippetInfo: SnippetInfo | undefined;\n\turi: URI | undefined;\n\talternativeAction: InlineSuggestAlternativeAction | undefined;\n}\n\nexport interface IInlineSuggestDataActionJumpTo {\n\tkind: 'jumpTo';\n\tposition: Position;\n\turi: URI | undefined;\n}\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _timeUntilActuallyShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\tprivate _renameInfo: RenameInfo | undefined = undefined;\n\tprivate _editKind: InlineSuggestionEditKind | undefined = undefined;\n\n\tget action(): IInlineSuggestDataAction | undefined {\n\t\treturn this._action;\n\t}\n\n\tconstructor(\n\t\tprivate _action: IInlineSuggestDataAction | undefined,\n\t\tpublic readonly hint: IInlineCompletionHint | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\t\tpublic readonly supportsRename: boolean,\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData, editKind: InlineSuggestionEditKind | undefined, timeWhenShown: number): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis.addPerformanceMarker('shown');\n\t\tthis._didShow = true;\n\t\tthis._editKind = editKind;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = timeWhenShown - this._requestInfo.startTime;\n\t\tthis._timeUntilActuallyShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\teditKind: this._editKind?.toString(),\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilActuallyShown: this._timeUntilActuallyShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\tperformanceMarkers: this.performance.toString(),\n\t\t\t\trenameCreated: this._renameInfo?.createdRename,\n\t\t\t\trenameDuration: this._renameInfo?.duration,\n\t\t\t\trenameTimedOut: this._renameInfo?.timedOut,\n\t\t\t\trenameDroppedOtherEdits: this._renameInfo?.droppedOtherEdits,\n\t\t\t\trenameDroppedRenameEdits: this._renameInfo?.droppedRenameEdits,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tskuPlan: this._requestInfo.sku?.plan,\n\t\t\t\tskuType: this._requestInfo.sku?.type,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData?.getData(),\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n\n\tpublic setRenameProcessingInfo(info: RenameInfo): void {\n\t\tif (this._renameInfo) {\n\t\t\tthrow new BugIndicatingError('Rename info has already been set.');\n\t\t}\n\t\tthis._renameInfo = info;\n\t}\n\n\tpublic withAction(action: IInlineSuggestDataAction): InlineSuggestData {\n\t\tthis._action = action;\n\t\treturn this;\n\t}\n\n\tprivate performance = new InlineSuggestionsPerformance();\n\tpublic addPerformanceMarker(marker: string): void {\n\t\tthis.performance.mark(marker);\n\t}\n}\n\nclass InlineSuggestionsPerformance {\n\tprivate markers: { name: string; timeStamp: number }[] = [];\n\tconstructor() {\n\t\tthis.markers.push({ name: 'start', timeStamp: Date.now() });\n\t}\n\n\tmark(marker: string): void {\n\t\tthis.markers.push({ name: marker, timeStamp: Date.now() });\n\t}\n\n\ttoString(): string {\n\t\tconst deltas = [];\n\t\tfor (let i = 1; i < this.markers.length; i++) {\n\t\t\tconst delta = this.markers[i].timeStamp - this.markers[i - 1].timeStamp;\n\t\t\tdeltas.push({ [this.markers[i].name]: delta });\n\t\t}\n\t\treturn JSON.stringify(deltas);\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\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 { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { BugIndicatingError, onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId, IInlineCompletionHint } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { ErrorResult, getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineCompletionIsVisible.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\nimport { URI } from '../../../../../base/common/uri.js';\nimport { InlineSuggestionEditKind } from './editKind.js';\nimport { InlineSuggestAlternativeAction } from './InlineSuggestAlternativeAction.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string' && item.insertText !== undefined) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (item.insertText !== undefined) {\n\t\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tconst r = toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime });\n\t\t\t\tif (ErrorResult.is(r)) {\n\t\t\t\t\tr.logError();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdata.push(r);\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData | ErrorResult {\n\n\tlet action: IInlineSuggestDataAction | undefined;\n\tconst uri = inlineCompletion.uri ? URI.revive(inlineCompletion.uri) : undefined;\n\n\tif (inlineCompletion.jumpToPosition !== undefined) {\n\t\taction = {\n\t\t\tkind: 'jumpTo',\n\t\t\tposition: Position.lift(inlineCompletion.jumpToPosition),\n\t\t\turi,\n\t\t};\n\t} else if (inlineCompletion.insertText !== undefined) {\n\t\tlet insertText: string;\n\t\tlet snippetInfo: SnippetInfo | undefined;\n\t\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\t\tif (typeof inlineCompletion.insertText === 'string') {\n\t\t\tinsertText = inlineCompletion.insertText;\n\n\t\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\t\tinsertText = closeBrackets(\n\t\t\t\t\tinsertText,\n\t\t\t\t\trange.getStartPosition(),\n\t\t\t\t\ttextModel,\n\t\t\t\t\tlanguageConfigurationService\n\t\t\t\t);\n\n\t\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\t\tif (diff !== 0) {\n\t\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsnippetInfo = undefined;\n\t\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\t\trange.getStartPosition(),\n\t\t\t\t\ttextModel,\n\t\t\t\t\tlanguageConfigurationService\n\t\t\t\t);\n\n\t\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\t\tif (diff !== 0) {\n\t\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\t\tinsertText = snippet.children[0].value;\n\t\t\t\tsnippetInfo = undefined;\n\t\t\t} else {\n\t\t\t\tinsertText = snippet.toString();\n\t\t\t\tsnippetInfo = {\n\t\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\t\trange: range\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tassertNever(inlineCompletion.insertText);\n\t\t}\n\t\taction = {\n\t\t\tkind: 'edit',\n\t\t\trange,\n\t\t\tinsertText,\n\t\t\tsnippetInfo,\n\t\t\turi,\n\t\t\talternativeAction: undefined,\n\t\t};\n\t} else {\n\t\taction = undefined;\n\t\tif (!inlineCompletion.hint) {\n\t\t\treturn ErrorResult.message('Inline completion has no insertText, jumpToPosition nor hint.');\n\t\t}\n\t}\n\n\treturn new InlineSuggestData(\n\t\taction,\n\t\tinlineCompletion.hint,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\tinlineCompletion.supportsRename ?? false,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestSku = { type: string; plan: string };\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n\tsku: InlineSuggestSku | undefined;\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type RenameInfo = {\n\tcreatedRename: boolean;\n\tduration: number;\n\ttimedOut?: boolean;\n\tdroppedOtherEdits?: number;\n\tdroppedRenameEdits?: number;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n};\n\nexport type IInlineSuggestDataAction = IInlineSuggestDataActionEdit | IInlineSuggestDataActionJumpTo;\n\nexport interface IInlineSuggestDataActionEdit {\n\tkind: 'edit';\n\trange: Range;\n\tinsertText: string;\n\tsnippetInfo: SnippetInfo | undefined;\n\turi: URI | undefined;\n\talternativeAction: InlineSuggestAlternativeAction | undefined;\n}\n\nexport interface IInlineSuggestDataActionJumpTo {\n\tkind: 'jumpTo';\n\tposition: Position;\n\turi: URI | undefined;\n}\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _timeUntilActuallyShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\tprivate _renameInfo: RenameInfo | undefined = undefined;\n\tprivate _editKind: InlineSuggestionEditKind | undefined = undefined;\n\n\tget action(): IInlineSuggestDataAction | undefined {\n\t\treturn this._action;\n\t}\n\n\tconstructor(\n\t\tprivate _action: IInlineSuggestDataAction | undefined,\n\t\tpublic readonly hint: IInlineCompletionHint | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\t\tpublic readonly supportsRename: boolean,\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData, editKind: InlineSuggestionEditKind | undefined, timeWhenShown: number): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis.addPerformanceMarker('shown');\n\t\tthis._didShow = true;\n\t\tthis._editKind = editKind;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = timeWhenShown - this._requestInfo.startTime;\n\t\tthis._timeUntilActuallyShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\teditKind: this._editKind?.toString(),\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilActuallyShown: this._timeUntilActuallyShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\tperformanceMarkers: this.performance.toString(),\n\t\t\t\trenameCreated: this._renameInfo?.createdRename,\n\t\t\t\trenameDuration: this._renameInfo?.duration,\n\t\t\t\trenameTimedOut: this._renameInfo?.timedOut,\n\t\t\t\trenameDroppedOtherEdits: this._renameInfo?.droppedOtherEdits,\n\t\t\t\trenameDroppedRenameEdits: this._renameInfo?.droppedRenameEdits,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tskuPlan: this._requestInfo.sku?.plan,\n\t\t\t\tskuType: this._requestInfo.sku?.type,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData?.getData(),\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n\n\tpublic setRenameProcessingInfo(info: RenameInfo): void {\n\t\tif (this._renameInfo) {\n\t\t\tthrow new BugIndicatingError('Rename info has already been set.');\n\t\t}\n\t\tthis._renameInfo = info;\n\t}\n\n\tpublic withAction(action: IInlineSuggestDataAction): InlineSuggestData {\n\t\tthis._action = action;\n\t\treturn this;\n\t}\n\n\tprivate performance = new InlineSuggestionsPerformance();\n\tpublic addPerformanceMarker(marker: string): void {\n\t\tthis.performance.mark(marker);\n\t}\n}\n\nclass InlineSuggestionsPerformance {\n\tprivate markers: { name: string; timeStamp: number }[] = [];\n\tconstructor() {\n\t\tthis.markers.push({ name: 'start', timeStamp: Date.now() });\n\t}\n\n\tmark(marker: string): void {\n\t\tthis.markers.push({ name: marker, timeStamp: Date.now() });\n\t}\n\n\ttoString(): string {\n\t\tconst deltas = [];\n\t\tfor (let i = 1; i < this.markers.length; i++) {\n\t\t\tconst delta = this.markers[i].timeStamp - this.markers[i - 1].timeStamp;\n\t\t\tdeltas.push({ [this.markers[i].name]: delta });\n\t\t}\n\t\treturn JSON.stringify(deltas);\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\n}\n"]}
|