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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts","vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts"],"names":[],"mappings":"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","file":"suggestInlineCompletions.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 { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { FuzzyScore } from '../../../../base/common/filters.js';\nimport { Iterable } from '../../../../base/common/iterator.js';\nimport { Disposable, RefCountedDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { ISingleEditOperation } from '../../../common/core/editOperation.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { IRange, Range } from '../../../common/core/range.js';\nimport { IWordAtPosition } from '../../../common/core/wordHelper.js';\nimport { registerEditorFeature } from '../../../common/editorFeatures.js';\nimport { Command, CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from '../../../common/languages.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { CompletionModel, LineContext } from './completionModel.js';\nimport { CompletionItem, CompletionItemModel, CompletionOptions, provideSuggestionItems, QuickSuggestionsOptions } from './suggest.js';\nimport { ISuggestMemoryService } from './suggestMemory.js';\nimport { SuggestModel } from './suggestModel.js';\nimport { WordDistance } from './wordDistance.js';\nimport { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';\n\nclass SuggestInlineCompletion implements InlineCompletion {\n\n\tconstructor(\n\t\treadonly range: IRange,\n\t\treadonly insertText: string | { snippet: string },\n\t\treadonly filterText: string,\n\t\treadonly additionalTextEdits: ISingleEditOperation[] | undefined,\n\t\treadonly command: Command | undefined,\n\t\treadonly gutterMenuLinkAction: Command | undefined,\n\t\treadonly completion: CompletionItem,\n\t) { }\n}\n\nclass InlineCompletionResults extends RefCountedDisposable implements InlineCompletions<SuggestInlineCompletion> {\n\n\tconstructor(\n\t\treadonly model: ITextModel,\n\t\treadonly line: number,\n\t\treadonly word: IWordAtPosition,\n\t\treadonly completionModel: CompletionModel,\n\t\tcompletions: CompletionItemModel,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t) {\n\t\tsuper(completions.disposable);\n\t}\n\n\tcanBeReused(model: ITextModel, line: number, word: IWordAtPosition) {\n\t\treturn this.model === model // same model\n\t\t\t&& this.line === line\n\t\t\t&& this.word.word.length > 0\n\t\t\t&& this.word.startColumn === word.startColumn && this.word.endColumn < word.endColumn // same word\n\t\t\t&& this.completionModel.getIncompleteProvider().size === 0; // no incomplete results\n\t}\n\n\tget items(): SuggestInlineCompletion[] {\n\t\tconst result: SuggestInlineCompletion[] = [];\n\n\t\t// Split items by preselected index. This ensures the memory-selected item shows first and that better/worst\n\t\t// ranked items are before/after\n\t\tconst { items } = this.completionModel;\n\t\tconst selectedIndex = this._suggestMemoryService.select(this.model, { lineNumber: this.line, column: this.word.endColumn + this.completionModel.lineContext.characterCountDelta }, items);\n\t\tconst first = Iterable.slice(items, selectedIndex);\n\t\tconst second = Iterable.slice(items, 0, selectedIndex);\n\n\t\tlet resolveCount = 5;\n\n\t\tfor (const item of Iterable.concat(first, second)) {\n\n\t\t\tif (item.score === FuzzyScore.Default) {\n\t\t\t\t// skip items that have no overlap\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst range = new Range(\n\t\t\t\titem.editStart.lineNumber, item.editStart.column,\n\t\t\t\titem.editInsertEnd.lineNumber, item.editInsertEnd.column + this.completionModel.lineContext.characterCountDelta // end PLUS character delta\n\t\t\t);\n\t\t\tconst insertText = item.completion.insertTextRules && (item.completion.insertTextRules & CompletionItemInsertTextRule.InsertAsSnippet)\n\t\t\t\t? { snippet: item.completion.insertText }\n\t\t\t\t: item.completion.insertText;\n\n\t\t\tresult.push(new SuggestInlineCompletion(\n\t\t\t\trange,\n\t\t\t\tinsertText,\n\t\t\t\titem.filterTextLow ?? item.labelLow,\n\t\t\t\titem.completion.additionalTextEdits,\n\t\t\t\titem.completion.command,\n\t\t\t\titem.completion.action,\n\t\t\t\titem\n\t\t\t));\n\n\t\t\t// resolve the first N suggestions eagerly\n\t\t\tif (resolveCount-- >= 0) {\n\t\t\t\titem.resolve(CancellationToken.None);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\n\nexport class SuggestInlineCompletions extends Disposable implements InlineCompletionsProvider<InlineCompletionResults> {\n\n\tprivate _lastResult?: InlineCompletionResults;\n\n\tconstructor(\n\t\t@ILanguageFeaturesService private readonly _languageFeatureService: ILanguageFeaturesService,\n\t\t@IClipboardService private readonly _clipboardService: IClipboardService,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t\t@ICodeEditorService private readonly _editorService: ICodeEditorService,\n\t) {\n\t\tsuper();\n\t\tthis._store.add(_languageFeatureService.inlineCompletionsProvider.register('*', this));\n\t}\n\n\tasync provideInlineCompletions(model: ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): Promise<InlineCompletionResults | undefined> {\n\n\t\tif (context.selectedSuggestionInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet editor: ICodeEditor | undefined;\n\t\tfor (const candidate of this._editorService.listCodeEditors()) {\n\t\t\tif (candidate.getModel() === model) {\n\t\t\t\teditor = candidate;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = editor.getOption(EditorOption.quickSuggestions);\n\t\tif (QuickSuggestionsOptions.isAllOff(config)) {\n\t\t\t// quick suggest is off (for this model/language)\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.tokenization.tokenizeIfCheap(position.lineNumber);\n\t\tconst lineTokens = model.tokenization.getLineTokens(position.lineNumber);\n\t\tconst tokenType = lineTokens.getStandardTokenType(lineTokens.findTokenIndexAtOffset(Math.max(position.column - 1 - 1, 0)));\n\t\tif (QuickSuggestionsOptions.valueFor(config, tokenType) !== 'inline') {\n\t\t\t// quick suggest is off (for this token)\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// We consider non-empty leading words and trigger characters. The latter only\n\t\t// when no word is being typed (word characters superseed trigger characters)\n\t\tlet wordInfo = model.getWordAtPosition(position);\n\t\tlet triggerCharacterInfo: { ch: string; providers: Set<CompletionItemProvider> } | undefined;\n\n\t\tif (!wordInfo?.word) {\n\t\t\ttriggerCharacterInfo = this._getTriggerCharacterInfo(model, position);\n\t\t}\n\n\t\tif (!wordInfo?.word && !triggerCharacterInfo) {\n\t\t\t// not at word, not a trigger character\n\t\t\treturn;\n\t\t}\n\n\t\t// ensure that we have word information and that we are at the end of a word\n\t\t// otherwise we stop because we don't want to do quick suggestions inside words\n\t\tif (!wordInfo) {\n\t\t\twordInfo = model.getWordUntilPosition(position);\n\t\t}\n\t\tif (wordInfo.endColumn !== position.column) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet result: InlineCompletionResults;\n\t\tconst leadingLineContents = model.getValueInRange(new Range(position.lineNumber, 1, position.lineNumber, position.column));\n\t\tif (!triggerCharacterInfo && this._lastResult?.canBeReused(model, position.lineNumber, wordInfo)) {\n\t\t\t// reuse a previous result iff possible, only a refilter is needed\n\t\t\t// TODO@jrieken this can be improved further and only incomplete results can be updated\n\t\t\t// console.log(`REUSE with ${wordInfo.word}`);\n\t\t\tconst newLineContext = new LineContext(leadingLineContents, position.column - this._lastResult.word.endColumn);\n\t\t\tthis._lastResult.completionModel.lineContext = newLineContext;\n\t\t\tthis._lastResult.acquire();\n\t\t\tresult = this._lastResult;\n\n\t\t} else {\n\t\t\t// refesh model is required\n\t\t\tconst completions = await provideSuggestionItems(\n\t\t\t\tthis._languageFeatureService.completionProvider,\n\t\t\t\tmodel, position,\n\t\t\t\tnew CompletionOptions(undefined, SuggestModel.createSuggestFilter(editor).itemKind, triggerCharacterInfo?.providers),\n\t\t\t\ttriggerCharacterInfo && { triggerKind: CompletionTriggerKind.TriggerCharacter, triggerCharacter: triggerCharacterInfo.ch },\n\t\t\t\ttoken\n\t\t\t);\n\n\t\t\tlet clipboardText: string | undefined;\n\t\t\tif (completions.needsClipboard) {\n\t\t\t\tclipboardText = await this._clipboardService.readText();\n\t\t\t}\n\n\t\t\tconst completionModel = new CompletionModel(\n\t\t\t\tcompletions.items,\n\t\t\t\tposition.column,\n\t\t\t\tnew LineContext(leadingLineContents, 0),\n\t\t\t\tWordDistance.None,\n\t\t\t\teditor.getOption(EditorOption.suggest),\n\t\t\t\teditor.getOption(EditorOption.snippetSuggestions),\n\t\t\t\t{ boostFullMatch: false, firstMatchCanBeWeak: false },\n\t\t\t\tclipboardText\n\t\t\t);\n\t\t\tresult = new InlineCompletionResults(model, position.lineNumber, wordInfo, completionModel, completions, this._suggestMemoryService);\n\t\t}\n\n\t\tthis._lastResult = result;\n\t\treturn result;\n\t}\n\n\thandleItemDidShow(_completions: InlineCompletionResults, item: SuggestInlineCompletion): void {\n\t\titem.completion.resolve(CancellationToken.None);\n\t}\n\n\tdisposeInlineCompletions(result: InlineCompletionResults): void {\n\t\tresult.release();\n\t}\n\n\tprivate _getTriggerCharacterInfo(model: ITextModel, position: IPosition) {\n\t\tconst ch = model.getValueInRange(Range.fromPositions({ lineNumber: position.lineNumber, column: position.column - 1 }, position));\n\t\tconst providers = new Set<CompletionItemProvider>();\n\t\tfor (const provider of this._languageFeatureService.completionProvider.all(model)) {\n\t\t\tif (provider.triggerCharacters?.includes(ch)) {\n\t\t\t\tproviders.add(provider);\n\t\t\t}\n\t\t}\n\t\tif (providers.size === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { providers, ch };\n\t}\n}\n\n\nregisterEditorFeature(SuggestInlineCompletions);\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 { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { FuzzyScore } from '../../../../base/common/filters.js';\nimport { Iterable } from '../../../../base/common/iterator.js';\nimport { Disposable, RefCountedDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { ISingleEditOperation } from '../../../common/core/editOperation.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { IRange, Range } from '../../../common/core/range.js';\nimport { IWordAtPosition } from '../../../common/core/wordHelper.js';\nimport { registerEditorFeature } from '../../../common/editorFeatures.js';\nimport { Command, CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from '../../../common/languages.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { CompletionModel, LineContext } from './completionModel.js';\nimport { CompletionItem, CompletionItemModel, CompletionOptions, provideSuggestionItems, QuickSuggestionsOptions } from './suggest.js';\nimport { ISuggestMemoryService } from './suggestMemory.js';\nimport { SuggestModel } from './suggestModel.js';\nimport { WordDistance } from './wordDistance.js';\nimport { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';\n\nclass SuggestInlineCompletion implements InlineCompletion {\n\n\tconstructor(\n\t\treadonly range: IRange,\n\t\treadonly insertText: string | { snippet: string },\n\t\treadonly filterText: string,\n\t\treadonly additionalTextEdits: ISingleEditOperation[] | undefined,\n\t\treadonly command: Command | undefined,\n\t\treadonly gutterMenuLinkAction: Command | undefined,\n\t\treadonly completion: CompletionItem,\n\t) { }\n}\n\nclass InlineCompletionResults extends RefCountedDisposable implements InlineCompletions<SuggestInlineCompletion> {\n\n\tconstructor(\n\t\treadonly model: ITextModel,\n\t\treadonly line: number,\n\t\treadonly word: IWordAtPosition,\n\t\treadonly completionModel: CompletionModel,\n\t\tcompletions: CompletionItemModel,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t) {\n\t\tsuper(completions.disposable);\n\t}\n\n\tcanBeReused(model: ITextModel, line: number, word: IWordAtPosition) {\n\t\treturn this.model === model // same model\n\t\t\t&& this.line === line\n\t\t\t&& this.word.word.length > 0\n\t\t\t&& this.word.startColumn === word.startColumn && this.word.endColumn < word.endColumn // same word\n\t\t\t&& this.completionModel.getIncompleteProvider().size === 0; // no incomplete results\n\t}\n\n\tget items(): SuggestInlineCompletion[] {\n\t\tconst result: SuggestInlineCompletion[] = [];\n\n\t\t// Split items by preselected index. This ensures the memory-selected item shows first and that better/worst\n\t\t// ranked items are before/after\n\t\tconst { items } = this.completionModel;\n\t\tconst selectedIndex = this._suggestMemoryService.select(this.model, { lineNumber: this.line, column: this.word.endColumn + this.completionModel.lineContext.characterCountDelta }, items);\n\t\tconst first = Iterable.slice(items, selectedIndex);\n\t\tconst second = Iterable.slice(items, 0, selectedIndex);\n\n\t\tlet resolveCount = 5;\n\n\t\tfor (const item of Iterable.concat(first, second)) {\n\n\t\t\tif (item.score === FuzzyScore.Default) {\n\t\t\t\t// skip items that have no overlap\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst range = new Range(\n\t\t\t\titem.editStart.lineNumber, item.editStart.column,\n\t\t\t\titem.editInsertEnd.lineNumber, item.editInsertEnd.column + this.completionModel.lineContext.characterCountDelta // end PLUS character delta\n\t\t\t);\n\t\t\tconst insertText = item.completion.insertTextRules && (item.completion.insertTextRules & CompletionItemInsertTextRule.InsertAsSnippet)\n\t\t\t\t? { snippet: item.completion.insertText }\n\t\t\t\t: item.completion.insertText;\n\n\t\t\tresult.push(new SuggestInlineCompletion(\n\t\t\t\trange,\n\t\t\t\tinsertText,\n\t\t\t\titem.filterTextLow ?? item.labelLow,\n\t\t\t\titem.completion.additionalTextEdits,\n\t\t\t\titem.completion.command,\n\t\t\t\titem.completion.action,\n\t\t\t\titem\n\t\t\t));\n\n\t\t\t// resolve the first N suggestions eagerly\n\t\t\tif (resolveCount-- >= 0) {\n\t\t\t\titem.resolve(CancellationToken.None);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\n\nexport class SuggestInlineCompletions extends Disposable implements InlineCompletionsProvider<InlineCompletionResults> {\n\n\tprivate _lastResult?: InlineCompletionResults;\n\n\tconstructor(\n\t\t@ILanguageFeaturesService private readonly _languageFeatureService: ILanguageFeaturesService,\n\t\t@IClipboardService private readonly _clipboardService: IClipboardService,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t\t@ICodeEditorService private readonly _editorService: ICodeEditorService,\n\t) {\n\t\tsuper();\n\t\tthis._store.add(_languageFeatureService.inlineCompletionsProvider.register('*', this));\n\t}\n\n\tasync provideInlineCompletions(model: ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): Promise<InlineCompletionResults | undefined> {\n\n\t\tif (context.selectedSuggestionInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet editor: ICodeEditor | undefined;\n\t\tfor (const candidate of this._editorService.listCodeEditors()) {\n\t\t\tif (candidate.getModel() === model) {\n\t\t\t\teditor = candidate;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = editor.getOption(EditorOption.quickSuggestions);\n\t\tif (QuickSuggestionsOptions.isAllOff(config)) {\n\t\t\t// quick suggest is off (for this model/language)\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.tokenization.tokenizeIfCheap(position.lineNumber);\n\t\tconst lineTokens = model.tokenization.getLineTokens(position.lineNumber);\n\t\tconst tokenType = lineTokens.getStandardTokenType(lineTokens.findTokenIndexAtOffset(Math.max(position.column - 1 - 1, 0)));\n\t\tif (QuickSuggestionsOptions.valueFor(config, tokenType) !== 'inline') {\n\t\t\t// quick suggest is off (for this token)\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// We consider non-empty leading words and trigger characters. The latter only\n\t\t// when no word is being typed (word characters superseed trigger characters)\n\t\tlet wordInfo = model.getWordAtPosition(position);\n\t\tlet triggerCharacterInfo: { ch: string; providers: Set<CompletionItemProvider> } | undefined;\n\n\t\tif (!wordInfo?.word) {\n\t\t\ttriggerCharacterInfo = this._getTriggerCharacterInfo(model, position);\n\t\t}\n\n\t\tif (!wordInfo?.word && !triggerCharacterInfo) {\n\t\t\t// not at word, not a trigger character\n\t\t\treturn;\n\t\t}\n\n\t\t// ensure that we have word information and that we are at the end of a word\n\t\t// otherwise we stop because we don't want to do quick suggestions inside words\n\t\tif (!wordInfo) {\n\t\t\twordInfo = model.getWordUntilPosition(position);\n\t\t}\n\t\tif (wordInfo.endColumn !== position.column) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet result: InlineCompletionResults;\n\t\tconst leadingLineContents = model.getValueInRange(new Range(position.lineNumber, 1, position.lineNumber, position.column));\n\t\tif (!triggerCharacterInfo && this._lastResult?.canBeReused(model, position.lineNumber, wordInfo)) {\n\t\t\t// reuse a previous result iff possible, only a refilter is needed\n\t\t\t// TODO@jrieken this can be improved further and only incomplete results can be updated\n\t\t\t// console.log(`REUSE with ${wordInfo.word}`);\n\t\t\tconst newLineContext = new LineContext(leadingLineContents, position.column - this._lastResult.word.endColumn);\n\t\t\tthis._lastResult.completionModel.lineContext = newLineContext;\n\t\t\tthis._lastResult.acquire();\n\t\t\tresult = this._lastResult;\n\n\t\t} else {\n\t\t\t// refesh model is required\n\t\t\tconst completions = await provideSuggestionItems(\n\t\t\t\tthis._languageFeatureService.completionProvider,\n\t\t\t\tmodel, position,\n\t\t\t\tnew CompletionOptions(undefined, SuggestModel.createSuggestFilter(editor).itemKind, triggerCharacterInfo?.providers),\n\t\t\t\ttriggerCharacterInfo && { triggerKind: CompletionTriggerKind.TriggerCharacter, triggerCharacter: triggerCharacterInfo.ch },\n\t\t\t\ttoken\n\t\t\t);\n\n\t\t\tlet clipboardText: string | undefined;\n\t\t\tif (completions.needsClipboard) {\n\t\t\t\tclipboardText = await this._clipboardService.readText();\n\t\t\t}\n\n\t\t\tconst completionModel = new CompletionModel(\n\t\t\t\tcompletions.items,\n\t\t\t\tposition.column,\n\t\t\t\tnew LineContext(leadingLineContents, 0),\n\t\t\t\tWordDistance.None,\n\t\t\t\teditor.getOption(EditorOption.suggest),\n\t\t\t\teditor.getOption(EditorOption.snippetSuggestions),\n\t\t\t\t{ boostFullMatch: false, firstMatchCanBeWeak: false },\n\t\t\t\tclipboardText\n\t\t\t);\n\t\t\tresult = new InlineCompletionResults(model, position.lineNumber, wordInfo, completionModel, completions, this._suggestMemoryService);\n\t\t}\n\n\t\tthis._lastResult = result;\n\t\treturn result;\n\t}\n\n\thandleItemDidShow(_completions: InlineCompletionResults, item: SuggestInlineCompletion): void {\n\t\titem.completion.resolve(CancellationToken.None);\n\t}\n\n\tdisposeInlineCompletions(result: InlineCompletionResults): void {\n\t\tresult.release();\n\t}\n\n\tprivate _getTriggerCharacterInfo(model: ITextModel, position: IPosition) {\n\t\tconst ch = model.getValueInRange(Range.fromPositions({ lineNumber: position.lineNumber, column: position.column - 1 }, position));\n\t\tconst providers = new Set<CompletionItemProvider>();\n\t\tfor (const provider of this._languageFeatureService.completionProvider.all(model)) {\n\t\t\tif (provider.triggerCharacters?.includes(ch)) {\n\t\t\t\tproviders.add(provider);\n\t\t\t}\n\t\t}\n\t\tif (providers.size === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { providers, ch };\n\t}\n}\n\n\nregisterEditorFeature(SuggestInlineCompletions);\n"]}
|
|
1
|
+
{"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts","vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts"],"names":[],"mappings":"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","file":"suggestInlineCompletions.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 { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { FuzzyScore } from '../../../../base/common/filters.js';\nimport { Iterable } from '../../../../base/common/iterator.js';\nimport { Disposable, RefCountedDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { ISingleEditOperation } from '../../../common/core/editOperation.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { IRange, Range } from '../../../common/core/range.js';\nimport { IWordAtPosition } from '../../../common/core/wordHelper.js';\nimport { registerEditorFeature } from '../../../common/editorFeatures.js';\nimport { Command, CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from '../../../common/languages.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { CompletionModel, LineContext } from './completionModel.js';\nimport { CompletionItem, CompletionItemModel, CompletionOptions, provideSuggestionItems, QuickSuggestionsOptions } from './suggest.js';\nimport { ISuggestMemoryService } from './suggestMemory.js';\nimport { SuggestModel } from './suggestModel.js';\nimport { WordDistance } from './wordDistance.js';\nimport { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';\n\nclass SuggestInlineCompletion implements InlineCompletion {\n\treadonly doNotLog = true;\n\n\tconstructor(\n\t\treadonly range: IRange,\n\t\treadonly insertText: string | { snippet: string },\n\t\treadonly filterText: string,\n\t\treadonly additionalTextEdits: ISingleEditOperation[] | undefined,\n\t\treadonly command: Command | undefined,\n\t\treadonly gutterMenuLinkAction: Command | undefined,\n\t\treadonly completion: CompletionItem,\n\t) { }\n}\n\nclass InlineCompletionResults extends RefCountedDisposable implements InlineCompletions<SuggestInlineCompletion> {\n\n\tconstructor(\n\t\treadonly model: ITextModel,\n\t\treadonly line: number,\n\t\treadonly word: IWordAtPosition,\n\t\treadonly completionModel: CompletionModel,\n\t\tcompletions: CompletionItemModel,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t) {\n\t\tsuper(completions.disposable);\n\t}\n\n\tcanBeReused(model: ITextModel, line: number, word: IWordAtPosition) {\n\t\treturn this.model === model // same model\n\t\t\t&& this.line === line\n\t\t\t&& this.word.word.length > 0\n\t\t\t&& this.word.startColumn === word.startColumn && this.word.endColumn < word.endColumn // same word\n\t\t\t&& this.completionModel.getIncompleteProvider().size === 0; // no incomplete results\n\t}\n\n\tget items(): SuggestInlineCompletion[] {\n\t\tconst result: SuggestInlineCompletion[] = [];\n\n\t\t// Split items by preselected index. This ensures the memory-selected item shows first and that better/worst\n\t\t// ranked items are before/after\n\t\tconst { items } = this.completionModel;\n\t\tconst selectedIndex = this._suggestMemoryService.select(this.model, { lineNumber: this.line, column: this.word.endColumn + this.completionModel.lineContext.characterCountDelta }, items);\n\t\tconst first = Iterable.slice(items, selectedIndex);\n\t\tconst second = Iterable.slice(items, 0, selectedIndex);\n\n\t\tlet resolveCount = 5;\n\n\t\tfor (const item of Iterable.concat(first, second)) {\n\n\t\t\tif (item.score === FuzzyScore.Default) {\n\t\t\t\t// skip items that have no overlap\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst range = new Range(\n\t\t\t\titem.editStart.lineNumber, item.editStart.column,\n\t\t\t\titem.editInsertEnd.lineNumber, item.editInsertEnd.column + this.completionModel.lineContext.characterCountDelta // end PLUS character delta\n\t\t\t);\n\t\t\tconst insertText = item.completion.insertTextRules && (item.completion.insertTextRules & CompletionItemInsertTextRule.InsertAsSnippet)\n\t\t\t\t? { snippet: item.completion.insertText }\n\t\t\t\t: item.completion.insertText;\n\n\t\t\tresult.push(new SuggestInlineCompletion(\n\t\t\t\trange,\n\t\t\t\tinsertText,\n\t\t\t\titem.filterTextLow ?? item.labelLow,\n\t\t\t\titem.completion.additionalTextEdits,\n\t\t\t\titem.completion.command,\n\t\t\t\titem.completion.action,\n\t\t\t\titem\n\t\t\t));\n\n\t\t\t// resolve the first N suggestions eagerly\n\t\t\tif (resolveCount-- >= 0) {\n\t\t\t\titem.resolve(CancellationToken.None);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\n\nexport class SuggestInlineCompletions extends Disposable implements InlineCompletionsProvider<InlineCompletionResults> {\n\n\tprivate _lastResult?: InlineCompletionResults;\n\n\tconstructor(\n\t\t@ILanguageFeaturesService private readonly _languageFeatureService: ILanguageFeaturesService,\n\t\t@IClipboardService private readonly _clipboardService: IClipboardService,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t\t@ICodeEditorService private readonly _editorService: ICodeEditorService,\n\t) {\n\t\tsuper();\n\t\tthis._store.add(_languageFeatureService.inlineCompletionsProvider.register('*', this));\n\t}\n\n\tasync provideInlineCompletions(model: ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): Promise<InlineCompletionResults | undefined> {\n\n\t\tif (context.selectedSuggestionInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet editor: ICodeEditor | undefined;\n\t\tfor (const candidate of this._editorService.listCodeEditors()) {\n\t\t\tif (candidate.getModel() === model) {\n\t\t\t\teditor = candidate;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = editor.getOption(EditorOption.quickSuggestions);\n\t\tif (QuickSuggestionsOptions.isAllOff(config)) {\n\t\t\t// quick suggest is off (for this model/language)\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.tokenization.tokenizeIfCheap(position.lineNumber);\n\t\tconst lineTokens = model.tokenization.getLineTokens(position.lineNumber);\n\t\tconst tokenType = lineTokens.getStandardTokenType(lineTokens.findTokenIndexAtOffset(Math.max(position.column - 1 - 1, 0)));\n\t\tif (QuickSuggestionsOptions.valueFor(config, tokenType) !== 'inline') {\n\t\t\t// quick suggest is off (for this token)\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// We consider non-empty leading words and trigger characters. The latter only\n\t\t// when no word is being typed (word characters superseed trigger characters)\n\t\tlet wordInfo = model.getWordAtPosition(position);\n\t\tlet triggerCharacterInfo: { ch: string; providers: Set<CompletionItemProvider> } | undefined;\n\n\t\tif (!wordInfo?.word) {\n\t\t\ttriggerCharacterInfo = this._getTriggerCharacterInfo(model, position);\n\t\t}\n\n\t\tif (!wordInfo?.word && !triggerCharacterInfo) {\n\t\t\t// not at word, not a trigger character\n\t\t\treturn;\n\t\t}\n\n\t\t// ensure that we have word information and that we are at the end of a word\n\t\t// otherwise we stop because we don't want to do quick suggestions inside words\n\t\tif (!wordInfo) {\n\t\t\twordInfo = model.getWordUntilPosition(position);\n\t\t}\n\t\tif (wordInfo.endColumn !== position.column) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet result: InlineCompletionResults;\n\t\tconst leadingLineContents = model.getValueInRange(new Range(position.lineNumber, 1, position.lineNumber, position.column));\n\t\tif (!triggerCharacterInfo && this._lastResult?.canBeReused(model, position.lineNumber, wordInfo)) {\n\t\t\t// reuse a previous result iff possible, only a refilter is needed\n\t\t\t// TODO@jrieken this can be improved further and only incomplete results can be updated\n\t\t\t// console.log(`REUSE with ${wordInfo.word}`);\n\t\t\tconst newLineContext = new LineContext(leadingLineContents, position.column - this._lastResult.word.endColumn);\n\t\t\tthis._lastResult.completionModel.lineContext = newLineContext;\n\t\t\tthis._lastResult.acquire();\n\t\t\tresult = this._lastResult;\n\n\t\t} else {\n\t\t\t// refesh model is required\n\t\t\tconst completions = await provideSuggestionItems(\n\t\t\t\tthis._languageFeatureService.completionProvider,\n\t\t\t\tmodel, position,\n\t\t\t\tnew CompletionOptions(undefined, SuggestModel.createSuggestFilter(editor).itemKind, triggerCharacterInfo?.providers),\n\t\t\t\ttriggerCharacterInfo && { triggerKind: CompletionTriggerKind.TriggerCharacter, triggerCharacter: triggerCharacterInfo.ch },\n\t\t\t\ttoken\n\t\t\t);\n\n\t\t\tlet clipboardText: string | undefined;\n\t\t\tif (completions.needsClipboard) {\n\t\t\t\tclipboardText = await this._clipboardService.readText();\n\t\t\t}\n\n\t\t\tconst completionModel = new CompletionModel(\n\t\t\t\tcompletions.items,\n\t\t\t\tposition.column,\n\t\t\t\tnew LineContext(leadingLineContents, 0),\n\t\t\t\tWordDistance.None,\n\t\t\t\teditor.getOption(EditorOption.suggest),\n\t\t\t\teditor.getOption(EditorOption.snippetSuggestions),\n\t\t\t\t{ boostFullMatch: false, firstMatchCanBeWeak: false },\n\t\t\t\tclipboardText\n\t\t\t);\n\t\t\tresult = new InlineCompletionResults(model, position.lineNumber, wordInfo, completionModel, completions, this._suggestMemoryService);\n\t\t}\n\n\t\tthis._lastResult = result;\n\t\treturn result;\n\t}\n\n\thandleItemDidShow(_completions: InlineCompletionResults, item: SuggestInlineCompletion): void {\n\t\titem.completion.resolve(CancellationToken.None);\n\t}\n\n\tdisposeInlineCompletions(result: InlineCompletionResults): void {\n\t\tresult.release();\n\t}\n\n\tprivate _getTriggerCharacterInfo(model: ITextModel, position: IPosition) {\n\t\tconst ch = model.getValueInRange(Range.fromPositions({ lineNumber: position.lineNumber, column: position.column - 1 }, position));\n\t\tconst providers = new Set<CompletionItemProvider>();\n\t\tfor (const provider of this._languageFeatureService.completionProvider.all(model)) {\n\t\t\tif (provider.triggerCharacters?.includes(ch)) {\n\t\t\t\tproviders.add(provider);\n\t\t\t}\n\t\t}\n\t\tif (providers.size === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { providers, ch };\n\t}\n}\n\n\nregisterEditorFeature(SuggestInlineCompletions);\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 { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { FuzzyScore } from '../../../../base/common/filters.js';\nimport { Iterable } from '../../../../base/common/iterator.js';\nimport { Disposable, RefCountedDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { ISingleEditOperation } from '../../../common/core/editOperation.js';\nimport { IPosition, Position } from '../../../common/core/position.js';\nimport { IRange, Range } from '../../../common/core/range.js';\nimport { IWordAtPosition } from '../../../common/core/wordHelper.js';\nimport { registerEditorFeature } from '../../../common/editorFeatures.js';\nimport { Command, CompletionItemInsertTextRule, CompletionItemProvider, CompletionTriggerKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from '../../../common/languages.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { CompletionModel, LineContext } from './completionModel.js';\nimport { CompletionItem, CompletionItemModel, CompletionOptions, provideSuggestionItems, QuickSuggestionsOptions } from './suggest.js';\nimport { ISuggestMemoryService } from './suggestMemory.js';\nimport { SuggestModel } from './suggestModel.js';\nimport { WordDistance } from './wordDistance.js';\nimport { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';\n\nclass SuggestInlineCompletion implements InlineCompletion {\n\treadonly doNotLog = true;\n\n\tconstructor(\n\t\treadonly range: IRange,\n\t\treadonly insertText: string | { snippet: string },\n\t\treadonly filterText: string,\n\t\treadonly additionalTextEdits: ISingleEditOperation[] | undefined,\n\t\treadonly command: Command | undefined,\n\t\treadonly gutterMenuLinkAction: Command | undefined,\n\t\treadonly completion: CompletionItem,\n\t) { }\n}\n\nclass InlineCompletionResults extends RefCountedDisposable implements InlineCompletions<SuggestInlineCompletion> {\n\n\tconstructor(\n\t\treadonly model: ITextModel,\n\t\treadonly line: number,\n\t\treadonly word: IWordAtPosition,\n\t\treadonly completionModel: CompletionModel,\n\t\tcompletions: CompletionItemModel,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t) {\n\t\tsuper(completions.disposable);\n\t}\n\n\tcanBeReused(model: ITextModel, line: number, word: IWordAtPosition) {\n\t\treturn this.model === model // same model\n\t\t\t&& this.line === line\n\t\t\t&& this.word.word.length > 0\n\t\t\t&& this.word.startColumn === word.startColumn && this.word.endColumn < word.endColumn // same word\n\t\t\t&& this.completionModel.getIncompleteProvider().size === 0; // no incomplete results\n\t}\n\n\tget items(): SuggestInlineCompletion[] {\n\t\tconst result: SuggestInlineCompletion[] = [];\n\n\t\t// Split items by preselected index. This ensures the memory-selected item shows first and that better/worst\n\t\t// ranked items are before/after\n\t\tconst { items } = this.completionModel;\n\t\tconst selectedIndex = this._suggestMemoryService.select(this.model, { lineNumber: this.line, column: this.word.endColumn + this.completionModel.lineContext.characterCountDelta }, items);\n\t\tconst first = Iterable.slice(items, selectedIndex);\n\t\tconst second = Iterable.slice(items, 0, selectedIndex);\n\n\t\tlet resolveCount = 5;\n\n\t\tfor (const item of Iterable.concat(first, second)) {\n\n\t\t\tif (item.score === FuzzyScore.Default) {\n\t\t\t\t// skip items that have no overlap\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst range = new Range(\n\t\t\t\titem.editStart.lineNumber, item.editStart.column,\n\t\t\t\titem.editInsertEnd.lineNumber, item.editInsertEnd.column + this.completionModel.lineContext.characterCountDelta // end PLUS character delta\n\t\t\t);\n\t\t\tconst insertText = item.completion.insertTextRules && (item.completion.insertTextRules & CompletionItemInsertTextRule.InsertAsSnippet)\n\t\t\t\t? { snippet: item.completion.insertText }\n\t\t\t\t: item.completion.insertText;\n\n\t\t\tresult.push(new SuggestInlineCompletion(\n\t\t\t\trange,\n\t\t\t\tinsertText,\n\t\t\t\titem.filterTextLow ?? item.labelLow,\n\t\t\t\titem.completion.additionalTextEdits,\n\t\t\t\titem.completion.command,\n\t\t\t\titem.completion.action,\n\t\t\t\titem\n\t\t\t));\n\n\t\t\t// resolve the first N suggestions eagerly\n\t\t\tif (resolveCount-- >= 0) {\n\t\t\t\titem.resolve(CancellationToken.None);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n}\n\n\nexport class SuggestInlineCompletions extends Disposable implements InlineCompletionsProvider<InlineCompletionResults> {\n\n\tprivate _lastResult?: InlineCompletionResults;\n\n\tconstructor(\n\t\t@ILanguageFeaturesService private readonly _languageFeatureService: ILanguageFeaturesService,\n\t\t@IClipboardService private readonly _clipboardService: IClipboardService,\n\t\t@ISuggestMemoryService private readonly _suggestMemoryService: ISuggestMemoryService,\n\t\t@ICodeEditorService private readonly _editorService: ICodeEditorService,\n\t) {\n\t\tsuper();\n\t\tthis._store.add(_languageFeatureService.inlineCompletionsProvider.register('*', this));\n\t}\n\n\tasync provideInlineCompletions(model: ITextModel, position: Position, context: InlineCompletionContext, token: CancellationToken): Promise<InlineCompletionResults | undefined> {\n\n\t\tif (context.selectedSuggestionInfo) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet editor: ICodeEditor | undefined;\n\t\tfor (const candidate of this._editorService.listCodeEditors()) {\n\t\t\tif (candidate.getModel() === model) {\n\t\t\t\teditor = candidate;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!editor) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst config = editor.getOption(EditorOption.quickSuggestions);\n\t\tif (QuickSuggestionsOptions.isAllOff(config)) {\n\t\t\t// quick suggest is off (for this model/language)\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.tokenization.tokenizeIfCheap(position.lineNumber);\n\t\tconst lineTokens = model.tokenization.getLineTokens(position.lineNumber);\n\t\tconst tokenType = lineTokens.getStandardTokenType(lineTokens.findTokenIndexAtOffset(Math.max(position.column - 1 - 1, 0)));\n\t\tif (QuickSuggestionsOptions.valueFor(config, tokenType) !== 'inline') {\n\t\t\t// quick suggest is off (for this token)\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// We consider non-empty leading words and trigger characters. The latter only\n\t\t// when no word is being typed (word characters superseed trigger characters)\n\t\tlet wordInfo = model.getWordAtPosition(position);\n\t\tlet triggerCharacterInfo: { ch: string; providers: Set<CompletionItemProvider> } | undefined;\n\n\t\tif (!wordInfo?.word) {\n\t\t\ttriggerCharacterInfo = this._getTriggerCharacterInfo(model, position);\n\t\t}\n\n\t\tif (!wordInfo?.word && !triggerCharacterInfo) {\n\t\t\t// not at word, not a trigger character\n\t\t\treturn;\n\t\t}\n\n\t\t// ensure that we have word information and that we are at the end of a word\n\t\t// otherwise we stop because we don't want to do quick suggestions inside words\n\t\tif (!wordInfo) {\n\t\t\twordInfo = model.getWordUntilPosition(position);\n\t\t}\n\t\tif (wordInfo.endColumn !== position.column) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet result: InlineCompletionResults;\n\t\tconst leadingLineContents = model.getValueInRange(new Range(position.lineNumber, 1, position.lineNumber, position.column));\n\t\tif (!triggerCharacterInfo && this._lastResult?.canBeReused(model, position.lineNumber, wordInfo)) {\n\t\t\t// reuse a previous result iff possible, only a refilter is needed\n\t\t\t// TODO@jrieken this can be improved further and only incomplete results can be updated\n\t\t\t// console.log(`REUSE with ${wordInfo.word}`);\n\t\t\tconst newLineContext = new LineContext(leadingLineContents, position.column - this._lastResult.word.endColumn);\n\t\t\tthis._lastResult.completionModel.lineContext = newLineContext;\n\t\t\tthis._lastResult.acquire();\n\t\t\tresult = this._lastResult;\n\n\t\t} else {\n\t\t\t// refesh model is required\n\t\t\tconst completions = await provideSuggestionItems(\n\t\t\t\tthis._languageFeatureService.completionProvider,\n\t\t\t\tmodel, position,\n\t\t\t\tnew CompletionOptions(undefined, SuggestModel.createSuggestFilter(editor).itemKind, triggerCharacterInfo?.providers),\n\t\t\t\ttriggerCharacterInfo && { triggerKind: CompletionTriggerKind.TriggerCharacter, triggerCharacter: triggerCharacterInfo.ch },\n\t\t\t\ttoken\n\t\t\t);\n\n\t\t\tlet clipboardText: string | undefined;\n\t\t\tif (completions.needsClipboard) {\n\t\t\t\tclipboardText = await this._clipboardService.readText();\n\t\t\t}\n\n\t\t\tconst completionModel = new CompletionModel(\n\t\t\t\tcompletions.items,\n\t\t\t\tposition.column,\n\t\t\t\tnew LineContext(leadingLineContents, 0),\n\t\t\t\tWordDistance.None,\n\t\t\t\teditor.getOption(EditorOption.suggest),\n\t\t\t\teditor.getOption(EditorOption.snippetSuggestions),\n\t\t\t\t{ boostFullMatch: false, firstMatchCanBeWeak: false },\n\t\t\t\tclipboardText\n\t\t\t);\n\t\t\tresult = new InlineCompletionResults(model, position.lineNumber, wordInfo, completionModel, completions, this._suggestMemoryService);\n\t\t}\n\n\t\tthis._lastResult = result;\n\t\treturn result;\n\t}\n\n\thandleItemDidShow(_completions: InlineCompletionResults, item: SuggestInlineCompletion): void {\n\t\titem.completion.resolve(CancellationToken.None);\n\t}\n\n\tdisposeInlineCompletions(result: InlineCompletionResults): void {\n\t\tresult.release();\n\t}\n\n\tprivate _getTriggerCharacterInfo(model: ITextModel, position: IPosition) {\n\t\tconst ch = model.getValueInRange(Range.fromPositions({ lineNumber: position.lineNumber, column: position.column - 1 }, position));\n\t\tconst providers = new Set<CompletionItemProvider>();\n\t\tfor (const provider of this._languageFeatureService.completionProvider.all(model)) {\n\t\t\tif (provider.triggerCharacters?.includes(ch)) {\n\t\t\t\tproviders.add(provider);\n\t\t\t}\n\t\t}\n\t\tif (providers.size === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn { providers, ch };\n\t}\n}\n\n\nregisterEditorFeature(SuggestInlineCompletions);\n"]}
|
|
@@ -42,15 +42,15 @@ import { isWindows } from '../../../../base/common/platform.js';
|
|
|
42
42
|
/**
|
|
43
43
|
* Suggest widget colors
|
|
44
44
|
*/
|
|
45
|
-
registerColor('editorSuggestWidget.background', editorWidgetBackground, nls.localize(
|
|
46
|
-
registerColor('editorSuggestWidget.border', editorWidgetBorder, nls.localize(
|
|
47
|
-
export const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', editorForeground, nls.localize(
|
|
48
|
-
registerColor('editorSuggestWidget.selectedForeground', quickInputListFocusForeground, nls.localize(
|
|
49
|
-
registerColor('editorSuggestWidget.selectedIconForeground', quickInputListFocusIconForeground, nls.localize(
|
|
50
|
-
export const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', quickInputListFocusBackground, nls.localize(
|
|
51
|
-
registerColor('editorSuggestWidget.highlightForeground', listHighlightForeground, nls.localize(
|
|
52
|
-
registerColor('editorSuggestWidget.focusHighlightForeground', listFocusHighlightForeground, nls.localize(
|
|
53
|
-
registerColor('editorSuggestWidgetStatus.foreground', transparent(editorSuggestWidgetForeground, .5), nls.localize(
|
|
45
|
+
registerColor('editorSuggestWidget.background', editorWidgetBackground, nls.localize(1489, 'Background color of the suggest widget.'));
|
|
46
|
+
registerColor('editorSuggestWidget.border', editorWidgetBorder, nls.localize(1490, 'Border color of the suggest widget.'));
|
|
47
|
+
export const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', editorForeground, nls.localize(1491, 'Foreground color of the suggest widget.'));
|
|
48
|
+
registerColor('editorSuggestWidget.selectedForeground', quickInputListFocusForeground, nls.localize(1492, 'Foreground color of the selected entry in the suggest widget.'));
|
|
49
|
+
registerColor('editorSuggestWidget.selectedIconForeground', quickInputListFocusIconForeground, nls.localize(1493, 'Icon foreground color of the selected entry in the suggest widget.'));
|
|
50
|
+
export const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', quickInputListFocusBackground, nls.localize(1494, 'Background color of the selected entry in the suggest widget.'));
|
|
51
|
+
registerColor('editorSuggestWidget.highlightForeground', listHighlightForeground, nls.localize(1495, 'Color of the match highlights in the suggest widget.'));
|
|
52
|
+
registerColor('editorSuggestWidget.focusHighlightForeground', listFocusHighlightForeground, nls.localize(1496, 'Color of the match highlights in the suggest widget when an item is focused.'));
|
|
53
|
+
registerColor('editorSuggestWidgetStatus.foreground', transparent(editorSuggestWidgetForeground, .5), nls.localize(1497, 'Foreground color of the suggest widget status.'));
|
|
54
54
|
class PersistedWidgetSize {
|
|
55
55
|
constructor(_service, editor) {
|
|
56
56
|
this._service = _service;
|
|
@@ -78,8 +78,8 @@ class PersistedWidgetSize {
|
|
|
78
78
|
}
|
|
79
79
|
let SuggestWidget = class SuggestWidget {
|
|
80
80
|
static { SuggestWidget_1 = this; }
|
|
81
|
-
static { this.LOADING_MESSAGE = nls.localize(
|
|
82
|
-
static { this.NO_SUGGESTIONS_MESSAGE = nls.localize(
|
|
81
|
+
static { this.LOADING_MESSAGE = nls.localize(1498, "Loading..."); }
|
|
82
|
+
static { this.NO_SUGGESTIONS_MESSAGE = nls.localize(1499, "No suggestions."); }
|
|
83
83
|
constructor(editor, _storageService, _contextKeyService, _themeService, instantiationService) {
|
|
84
84
|
this.editor = editor;
|
|
85
85
|
this._storageService = _storageService;
|
|
@@ -101,7 +101,6 @@ let SuggestWidget = class SuggestWidget {
|
|
|
101
101
|
this.onDidHide = this._onDidHide.event;
|
|
102
102
|
this.onDidShow = this._onDidShow.event;
|
|
103
103
|
this._onDetailsKeydown = new Emitter();
|
|
104
|
-
this.onDetailsKeyDown = this._onDetailsKeydown.event;
|
|
105
104
|
this.element = new ResizableHTMLElement();
|
|
106
105
|
this.element.domNode.classList.add('editor-widget', 'suggest-widget');
|
|
107
106
|
this._contentWidget = new SuggestContentWidget(this, editor);
|
|
@@ -166,7 +165,7 @@ let SuggestWidget = class SuggestWidget {
|
|
|
166
165
|
multipleSelectionSupport: false,
|
|
167
166
|
accessibilityProvider: {
|
|
168
167
|
getRole: () => isWindows ? 'listitem' : 'option',
|
|
169
|
-
getWidgetAriaLabel: () => nls.localize(
|
|
168
|
+
getWidgetAriaLabel: () => nls.localize(1500, "Suggest"),
|
|
170
169
|
getWidgetRole: () => 'listbox',
|
|
171
170
|
getAriaLabel: (item) => {
|
|
172
171
|
let label = item.textLabel;
|
|
@@ -174,24 +173,24 @@ let SuggestWidget = class SuggestWidget {
|
|
|
174
173
|
if (typeof item.completion.label !== 'string') {
|
|
175
174
|
const { detail, description } = item.completion.label;
|
|
176
175
|
if (detail && description) {
|
|
177
|
-
label = nls.localize(
|
|
176
|
+
label = nls.localize(1501, '{0} {1}, {2}, {3}', label, detail, description, kindLabel);
|
|
178
177
|
}
|
|
179
178
|
else if (detail) {
|
|
180
|
-
label = nls.localize(
|
|
179
|
+
label = nls.localize(1502, '{0} {1}, {2}', label, detail, kindLabel);
|
|
181
180
|
}
|
|
182
181
|
else if (description) {
|
|
183
|
-
label = nls.localize(
|
|
182
|
+
label = nls.localize(1503, '{0}, {1}, {2}', label, description, kindLabel);
|
|
184
183
|
}
|
|
185
184
|
}
|
|
186
185
|
else {
|
|
187
|
-
label = nls.localize(
|
|
186
|
+
label = nls.localize(1504, '{0}, {1}', label, kindLabel);
|
|
188
187
|
}
|
|
189
188
|
if (!item.isResolved || !this._isDetailsVisible()) {
|
|
190
189
|
return label;
|
|
191
190
|
}
|
|
192
191
|
const { documentation, detail } = item.completion;
|
|
193
192
|
const docs = strings.format('{0}{1}', detail || '', documentation ? (typeof documentation === 'string' ? documentation : documentation.value) : '');
|
|
194
|
-
return nls.localize(
|
|
193
|
+
return nls.localize(1505, "{0}, docs: {1}", label, docs);
|
|
195
194
|
},
|
|
196
195
|
}
|
|
197
196
|
});
|
|
@@ -220,6 +219,11 @@ let SuggestWidget = class SuggestWidget {
|
|
|
220
219
|
this._ctxSuggestWidgetDetailsVisible = SuggestContext.DetailsVisible.bindTo(_contextKeyService);
|
|
221
220
|
this._ctxSuggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(_contextKeyService);
|
|
222
221
|
this._ctxSuggestWidgetHasFocusedSuggestion = SuggestContext.HasFocusedSuggestion.bindTo(_contextKeyService);
|
|
222
|
+
this._ctxSuggestWidgetDetailsFocused = SuggestContext.DetailsFocused.bindTo(_contextKeyService);
|
|
223
|
+
const detailsFocusTracker = dom.trackFocus(this._details.widget.domNode);
|
|
224
|
+
this._disposables.add(detailsFocusTracker);
|
|
225
|
+
this._disposables.add(detailsFocusTracker.onDidFocus(() => this._ctxSuggestWidgetDetailsFocused.set(true)));
|
|
226
|
+
this._disposables.add(detailsFocusTracker.onDidBlur(() => this._ctxSuggestWidgetDetailsFocused.set(false)));
|
|
223
227
|
this._disposables.add(dom.addStandardDisposableListener(this._details.widget.domNode, 'keydown', e => {
|
|
224
228
|
this._onDetailsKeydown.fire(e);
|
|
225
229
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["vs/editor/contrib/suggest/browser/suggestWidget.ts"],"names":[],"mappings":"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","file":"suggestWidget.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 * as dom from '../../../../base/browser/dom.js';\nimport { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js';\nimport '../../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded\nimport { IListEvent, IListGestureEvent, IListMouseEvent } from '../../../../base/browser/ui/list/list.js';\nimport { List } from '../../../../base/browser/ui/list/listWidget.js';\nimport { CancelablePromise, createCancelablePromise, disposableTimeout, TimeoutTimer } from '../../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter, Event, PauseableEmitter } from '../../../../base/common/event.js';\nimport { DisposableStore, IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js';\nimport { clamp } from '../../../../base/common/numbers.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport './media/suggest.css';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from '../../../browser/editorBrowser.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { IPosition } from '../../../common/core/position.js';\nimport { SuggestWidgetStatus } from './suggestWidgetStatus.js';\nimport '../../symbolIcons/browser/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors\nimport * as nls from '../../../../nls.js';\nimport { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';\nimport { activeContrastBorder, editorForeground, editorWidgetBackground, editorWidgetBorder, listFocusHighlightForeground, listHighlightForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { CompletionModel } from './completionModel.js';\nimport { ResizableHTMLElement } from '../../../../base/browser/ui/resizable/resizable.js';\nimport { CompletionItem, Context as SuggestContext, suggestWidgetStatusbarMenu } from './suggest.js';\nimport { canExpandCompletionItem, SuggestDetailsOverlay, SuggestDetailsWidget } from './suggestWidgetDetails.js';\nimport { ItemRenderer } from './suggestWidgetRenderer.js';\nimport { getListStyles } from '../../../../platform/theme/browser/defaultStyles.js';\nimport { status } from '../../../../base/browser/ui/aria/aria.js';\nimport { CompletionItemKinds } from '../../../common/languages.js';\nimport { isWindows } from '../../../../base/common/platform.js';\n\n/**\n * Suggest widget colors\n */\nregisterColor('editorSuggestWidget.background', editorWidgetBackground, nls.localize('editorSuggestWidgetBackground', 'Background color of the suggest widget.'));\nregisterColor('editorSuggestWidget.border', editorWidgetBorder, nls.localize('editorSuggestWidgetBorder', 'Border color of the suggest widget.'));\nexport const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', editorForeground, nls.localize('editorSuggestWidgetForeground', 'Foreground color of the suggest widget.'));\nregisterColor('editorSuggestWidget.selectedForeground', quickInputListFocusForeground, nls.localize('editorSuggestWidgetSelectedForeground', 'Foreground color of the selected entry in the suggest widget.'));\nregisterColor('editorSuggestWidget.selectedIconForeground', quickInputListFocusIconForeground, nls.localize('editorSuggestWidgetSelectedIconForeground', 'Icon foreground color of the selected entry in the suggest widget.'));\nexport const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', quickInputListFocusBackground, nls.localize('editorSuggestWidgetSelectedBackground', 'Background color of the selected entry in the suggest widget.'));\nregisterColor('editorSuggestWidget.highlightForeground', listHighlightForeground, nls.localize('editorSuggestWidgetHighlightForeground', 'Color of the match highlights in the suggest widget.'));\nregisterColor('editorSuggestWidget.focusHighlightForeground', listFocusHighlightForeground, nls.localize('editorSuggestWidgetFocusHighlightForeground', 'Color of the match highlights in the suggest widget when an item is focused.'));\nregisterColor('editorSuggestWidgetStatus.foreground', transparent(editorSuggestWidgetForeground, .5), nls.localize('editorSuggestWidgetStatusForeground', 'Foreground color of the suggest widget status.'));\n\nconst enum State {\n\tHidden,\n\tLoading,\n\tEmpty,\n\tOpen,\n\tFrozen,\n\tDetails,\n\tonDetailsKeyDown\n}\n\nexport interface ISelectedSuggestion {\n\titem: CompletionItem;\n\tindex: number;\n\tmodel: CompletionModel;\n}\n\nclass PersistedWidgetSize {\n\n\tprivate readonly _key: string;\n\n\tconstructor(\n\t\tprivate readonly _service: IStorageService,\n\t\teditor: ICodeEditor\n\t) {\n\t\tthis._key = `suggestWidget.size/${editor.getEditorType()}/${editor instanceof EmbeddedCodeEditorWidget}`;\n\t}\n\n\trestore(): dom.Dimension | undefined {\n\t\tconst raw = this._service.get(this._key, StorageScope.PROFILE) ?? '';\n\t\ttry {\n\t\t\tconst obj = JSON.parse(raw);\n\t\t\tif (dom.Dimension.is(obj)) {\n\t\t\t\treturn dom.Dimension.lift(obj);\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tstore(size: dom.Dimension) {\n\t\tthis._service.store(this._key, JSON.stringify(size), StorageScope.PROFILE, StorageTarget.MACHINE);\n\t}\n\n\treset(): void {\n\t\tthis._service.remove(this._key, StorageScope.PROFILE);\n\t}\n}\n\nexport class SuggestWidget implements IDisposable {\n\n\tprivate static LOADING_MESSAGE: string = nls.localize('suggestWidget.loading', \"Loading...\");\n\tprivate static NO_SUGGESTIONS_MESSAGE: string = nls.localize('suggestWidget.noSuggestions', \"No suggestions.\");\n\n\tprivate _state: State = State.Hidden;\n\tprivate _isAuto: boolean = false;\n\tprivate _loadingTimeout?: IDisposable;\n\tprivate readonly _pendingLayout = new MutableDisposable();\n\tprivate readonly _pendingShowDetails = new MutableDisposable();\n\tprivate _currentSuggestionDetails?: CancelablePromise<void>;\n\tprivate _focusedItem?: CompletionItem;\n\tprivate _ignoreFocusEvents: boolean = false;\n\tprivate _completionModel?: CompletionModel;\n\tprivate _cappedHeight?: { wanted: number; capped: number };\n\tprivate _forceRenderingAbove: boolean = false;\n\tprivate _explainMode: boolean = false;\n\n\treadonly element: ResizableHTMLElement;\n\tprivate readonly _messageElement: HTMLElement;\n\tprivate readonly _listElement: HTMLElement;\n\tprivate readonly _list: List<CompletionItem>;\n\tprivate readonly _status: SuggestWidgetStatus;\n\tprivate readonly _details: SuggestDetailsOverlay;\n\tprivate readonly _contentWidget: SuggestContentWidget;\n\tprivate readonly _persistedSize: PersistedWidgetSize;\n\n\tprivate readonly _ctxSuggestWidgetVisible: IContextKey<boolean>;\n\tprivate readonly _ctxSuggestWidgetDetailsVisible: IContextKey<boolean>;\n\tprivate readonly _ctxSuggestWidgetMultipleSuggestions: IContextKey<boolean>;\n\tprivate readonly _ctxSuggestWidgetHasFocusedSuggestion: IContextKey<boolean>;\n\n\tprivate readonly _showTimeout = new TimeoutTimer();\n\tprivate readonly _disposables = new DisposableStore();\n\n\n\tprivate readonly _onDidSelect = new PauseableEmitter<ISelectedSuggestion>();\n\tprivate readonly _onDidFocus = new PauseableEmitter<ISelectedSuggestion>();\n\tprivate readonly _onDidHide = new Emitter<this>();\n\tprivate readonly _onDidShow = new Emitter<this>();\n\n\treadonly onDidSelect: Event<ISelectedSuggestion> = this._onDidSelect.event;\n\treadonly onDidFocus: Event<ISelectedSuggestion> = this._onDidFocus.event;\n\treadonly onDidHide: Event<this> = this._onDidHide.event;\n\treadonly onDidShow: Event<this> = this._onDidShow.event;\n\n\tprivate readonly _onDetailsKeydown = new Emitter<IKeyboardEvent>();\n\treadonly onDetailsKeyDown: Event<IKeyboardEvent> = this._onDetailsKeydown.event;\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\t@IStorageService private readonly _storageService: IStorageService,\n\t\t@IContextKeyService _contextKeyService: IContextKeyService,\n\t\t@IThemeService _themeService: IThemeService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tthis.element = new ResizableHTMLElement();\n\t\tthis.element.domNode.classList.add('editor-widget', 'suggest-widget');\n\n\t\tthis._contentWidget = new SuggestContentWidget(this, editor);\n\t\tthis._persistedSize = new PersistedWidgetSize(_storageService, editor);\n\n\t\tclass ResizeState {\n\t\t\tconstructor(\n\t\t\t\treadonly persistedSize: dom.Dimension | undefined,\n\t\t\t\treadonly currentSize: dom.Dimension,\n\t\t\t\tpublic persistHeight = false,\n\t\t\t\tpublic persistWidth = false,\n\t\t\t) { }\n\t\t}\n\n\t\tlet state: ResizeState | undefined;\n\t\tthis._disposables.add(this.element.onDidWillResize(() => {\n\t\t\tthis._contentWidget.lockPreference();\n\t\t\tstate = new ResizeState(this._persistedSize.restore(), this.element.size);\n\t\t}));\n\t\tthis._disposables.add(this.element.onDidResize(e => {\n\n\t\t\tthis._resize(e.dimension.width, e.dimension.height);\n\n\t\t\tif (state) {\n\t\t\t\tstate.persistHeight = state.persistHeight || !!e.north || !!e.south;\n\t\t\t\tstate.persistWidth = state.persistWidth || !!e.east || !!e.west;\n\t\t\t}\n\n\t\t\tif (!e.done) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (state) {\n\t\t\t\t// only store width or height value that have changed and also\n\t\t\t\t// only store changes that are above a certain threshold\n\t\t\t\tconst { itemHeight, defaultSize } = this.getLayoutInfo();\n\t\t\t\tconst threshold = Math.round(itemHeight / 2);\n\t\t\t\tlet { width, height } = this.element.size;\n\t\t\t\tif (!state.persistHeight || Math.abs(state.currentSize.height - height) <= threshold) {\n\t\t\t\t\theight = state.persistedSize?.height ?? defaultSize.height;\n\t\t\t\t}\n\t\t\t\tif (!state.persistWidth || Math.abs(state.currentSize.width - width) <= threshold) {\n\t\t\t\t\twidth = state.persistedSize?.width ?? defaultSize.width;\n\t\t\t\t}\n\t\t\t\tthis._persistedSize.store(new dom.Dimension(width, height));\n\t\t\t}\n\n\t\t\t// reset working state\n\t\t\tthis._contentWidget.unlockPreference();\n\t\t\tstate = undefined;\n\t\t}));\n\n\t\tthis._messageElement = dom.append(this.element.domNode, dom.$('.message'));\n\t\tthis._listElement = dom.append(this.element.domNode, dom.$('.tree'));\n\n\t\tconst details = this._disposables.add(instantiationService.createInstance(SuggestDetailsWidget, this.editor));\n\t\tdetails.onDidClose(() => this.toggleDetails(), this, this._disposables);\n\t\tthis._details = new SuggestDetailsOverlay(details, this.editor);\n\n\t\tconst applyIconStyle = () => this.element.domNode.classList.toggle('no-icons', !this.editor.getOption(EditorOption.suggest).showIcons);\n\t\tapplyIconStyle();\n\n\t\tconst renderer = instantiationService.createInstance(ItemRenderer, this.editor);\n\t\tthis._disposables.add(renderer);\n\t\tthis._disposables.add(renderer.onDidToggleDetails(() => this.toggleDetails()));\n\n\t\tthis._list = new List('SuggestWidget', this._listElement, {\n\t\t\tgetHeight: (_element: CompletionItem): number => this.getLayoutInfo().itemHeight,\n\t\t\tgetTemplateId: (_element: CompletionItem): string => 'suggestion'\n\t\t}, [renderer], {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\tuseShadows: false,\n\t\t\tmouseSupport: false,\n\t\t\tmultipleSelectionSupport: false,\n\t\t\taccessibilityProvider: {\n\t\t\t\tgetRole: () => isWindows ? 'listitem' : 'option',\n\t\t\t\tgetWidgetAriaLabel: () => nls.localize('suggest', \"Suggest\"),\n\t\t\t\tgetWidgetRole: () => 'listbox',\n\t\t\t\tgetAriaLabel: (item: CompletionItem) => {\n\n\t\t\t\t\tlet label = item.textLabel;\n\t\t\t\t\tconst kindLabel = CompletionItemKinds.toLabel(item.completion.kind);\n\t\t\t\t\tif (typeof item.completion.label !== 'string') {\n\t\t\t\t\t\tconst { detail, description } = item.completion.label;\n\t\t\t\t\t\tif (detail && description) {\n\t\t\t\t\t\t\tlabel = nls.localize('label.full', '{0} {1}, {2}, {3}', label, detail, description, kindLabel);\n\t\t\t\t\t\t} else if (detail) {\n\t\t\t\t\t\t\tlabel = nls.localize('label.detail', '{0} {1}, {2}', label, detail, kindLabel);\n\t\t\t\t\t\t} else if (description) {\n\t\t\t\t\t\t\tlabel = nls.localize('label.desc', '{0}, {1}, {2}', label, description, kindLabel);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = nls.localize('label', '{0}, {1}', label, kindLabel);\n\t\t\t\t\t}\n\t\t\t\t\tif (!item.isResolved || !this._isDetailsVisible()) {\n\t\t\t\t\t\treturn label;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { documentation, detail } = item.completion;\n\t\t\t\t\tconst docs = strings.format(\n\t\t\t\t\t\t'{0}{1}',\n\t\t\t\t\t\tdetail || '',\n\t\t\t\t\t\tdocumentation ? (typeof documentation === 'string' ? documentation : documentation.value) : '');\n\n\t\t\t\t\treturn nls.localize('ariaCurrenttSuggestionReadDetails', \"{0}, docs: {1}\", label, docs);\n\t\t\t\t},\n\t\t\t}\n\t\t});\n\t\tthis._list.style(getListStyles({\n\t\t\tlistInactiveFocusBackground: editorSuggestWidgetSelectedBackground,\n\t\t\tlistInactiveFocusOutline: activeContrastBorder\n\t\t}));\n\n\t\tthis._status = instantiationService.createInstance(SuggestWidgetStatus, this.element.domNode, suggestWidgetStatusbarMenu);\n\t\tconst applyStatusBarStyle = () => this.element.domNode.classList.toggle('with-status-bar', this.editor.getOption(EditorOption.suggest).showStatusBar);\n\t\tapplyStatusBarStyle();\n\n\t\tthis._disposables.add(this._list.onMouseDown(e => this._onListMouseDownOrTap(e)));\n\t\tthis._disposables.add(this._list.onTap(e => this._onListMouseDownOrTap(e)));\n\t\tthis._disposables.add(this._list.onDidChangeSelection(e => this._onListSelection(e)));\n\t\tthis._disposables.add(this._list.onDidChangeFocus(e => this._onListFocus(e)));\n\t\tthis._disposables.add(this.editor.onDidChangeCursorSelection(() => this._onCursorSelectionChanged()));\n\t\tthis._disposables.add(this.editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.suggest)) {\n\t\t\t\tapplyStatusBarStyle();\n\t\t\t\tapplyIconStyle();\n\t\t\t}\n\t\t\tif (this._completionModel && (e.hasChanged(EditorOption.fontInfo) || e.hasChanged(EditorOption.suggestFontSize) || e.hasChanged(EditorOption.suggestLineHeight))) {\n\t\t\t\tthis._list.splice(0, this._list.length, this._completionModel.items);\n\t\t\t}\n\t\t}));\n\n\t\tthis._ctxSuggestWidgetVisible = SuggestContext.Visible.bindTo(_contextKeyService);\n\t\tthis._ctxSuggestWidgetDetailsVisible = SuggestContext.DetailsVisible.bindTo(_contextKeyService);\n\t\tthis._ctxSuggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(_contextKeyService);\n\t\tthis._ctxSuggestWidgetHasFocusedSuggestion = SuggestContext.HasFocusedSuggestion.bindTo(_contextKeyService);\n\n\t\tthis._disposables.add(dom.addStandardDisposableListener(this._details.widget.domNode, 'keydown', e => {\n\t\t\tthis._onDetailsKeydown.fire(e);\n\t\t}));\n\n\t\tthis._disposables.add(this.editor.onMouseDown((e: IEditorMouseEvent) => this._onEditorMouseDown(e)));\n\t}\n\n\tdispose(): void {\n\t\tthis._details.widget.dispose();\n\t\tthis._details.dispose();\n\t\tthis._list.dispose();\n\t\tthis._status.dispose();\n\t\tthis._disposables.dispose();\n\t\tthis._loadingTimeout?.dispose();\n\t\tthis._pendingLayout.dispose();\n\t\tthis._pendingShowDetails.dispose();\n\t\tthis._showTimeout.dispose();\n\t\tthis._contentWidget.dispose();\n\t\tthis.element.dispose();\n\t}\n\n\tprivate _onEditorMouseDown(mouseEvent: IEditorMouseEvent): void {\n\t\tif (this._details.widget.domNode.contains(mouseEvent.target.element)) {\n\t\t\t// Clicking inside details\n\t\t\tthis._details.widget.domNode.focus();\n\t\t} else {\n\t\t\t// Clicking outside details and inside suggest\n\t\t\tif (this.element.domNode.contains(mouseEvent.target.element)) {\n\t\t\t\tthis.editor.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _onCursorSelectionChanged(): void {\n\t\tif (this._state !== State.Hidden) {\n\t\t\tthis._contentWidget.layout();\n\t\t}\n\t}\n\n\tprivate _onListMouseDownOrTap(e: IListMouseEvent<CompletionItem> | IListGestureEvent<CompletionItem>): void {\n\t\tif (typeof e.element === 'undefined' || typeof e.index === 'undefined') {\n\t\t\treturn;\n\t\t}\n\n\t\t// prevent stealing browser focus from the editor\n\t\te.browserEvent.preventDefault();\n\t\te.browserEvent.stopPropagation();\n\n\t\tthis._select(e.element, e.index);\n\t}\n\n\tprivate _onListSelection(e: IListEvent<CompletionItem>): void {\n\t\tif (e.elements.length) {\n\t\t\tthis._select(e.elements[0], e.indexes[0]);\n\t\t}\n\t}\n\n\tprivate _select(item: CompletionItem, index: number): void {\n\t\tconst completionModel = this._completionModel;\n\t\tif (completionModel) {\n\t\t\tthis._onDidSelect.fire({ item, index, model: completionModel });\n\t\t\tthis.editor.focus();\n\t\t}\n\t}\n\n\tprivate _onListFocus(e: IListEvent<CompletionItem>): void {\n\t\tif (this._ignoreFocusEvents) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._state === State.Details) {\n\t\t\t// This can happen when focus is in the details-panel and when\n\t\t\t// arrow keys are pressed to select next/prev items\n\t\t\tthis._setState(State.Open);\n\t\t}\n\n\t\tif (!e.elements.length) {\n\t\t\tif (this._currentSuggestionDetails) {\n\t\t\t\tthis._currentSuggestionDetails.cancel();\n\t\t\t\tthis._currentSuggestionDetails = undefined;\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t}\n\n\t\t\tthis.editor.setAriaOptions({ activeDescendant: undefined });\n\t\t\tthis._ctxSuggestWidgetHasFocusedSuggestion.set(false);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._completionModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._ctxSuggestWidgetHasFocusedSuggestion.set(true);\n\t\tconst item = e.elements[0];\n\t\tconst index = e.indexes[0];\n\n\t\tif (item !== this._focusedItem) {\n\n\t\t\tthis._currentSuggestionDetails?.cancel();\n\t\t\tthis._currentSuggestionDetails = undefined;\n\n\t\t\tthis._focusedItem = item;\n\n\t\t\tthis._list.reveal(index);\n\n\t\t\tthis._currentSuggestionDetails = createCancelablePromise(async token => {\n\t\t\t\tconst loading = disposableTimeout(() => {\n\t\t\t\t\tif (this._isDetailsVisible()) {\n\t\t\t\t\t\tthis._showDetails(true, false);\n\t\t\t\t\t}\n\t\t\t\t}, 250);\n\t\t\t\tconst sub = token.onCancellationRequested(() => loading.dispose());\n\t\t\t\ttry {\n\t\t\t\t\treturn await item.resolve(token);\n\t\t\t\t} finally {\n\t\t\t\t\tloading.dispose();\n\t\t\t\t\tsub.dispose();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._currentSuggestionDetails.then(() => {\n\t\t\t\tif (index >= this._list.length || item !== this._list.element(index)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// item can have extra information, so re-render\n\t\t\t\tthis._ignoreFocusEvents = true;\n\t\t\t\tthis._list.splice(index, 1, [item]);\n\t\t\t\tthis._list.setFocus([index]);\n\t\t\t\tthis._ignoreFocusEvents = false;\n\n\t\t\t\tif (this._isDetailsVisible()) {\n\t\t\t\t\tthis._showDetails(false, false);\n\t\t\t\t} else {\n\t\t\t\t\tthis.element.domNode.classList.remove('docs-side');\n\t\t\t\t}\n\n\t\t\t\tthis.editor.setAriaOptions({ activeDescendant: this._list.getElementID(index) });\n\t\t\t}).catch(onUnexpectedError);\n\t\t}\n\n\t\t// emit an event\n\t\tthis._onDidFocus.fire({ item, index, model: this._completionModel });\n\t}\n\n\tprivate _setState(state: State): void {\n\n\t\tif (this._state === state) {\n\t\t\treturn;\n\t\t}\n\t\tthis._state = state;\n\n\t\tthis.element.domNode.classList.toggle('frozen', state === State.Frozen);\n\t\tthis.element.domNode.classList.remove('message');\n\n\t\tswitch (state) {\n\t\t\tcase State.Hidden:\n\t\t\t\tdom.hide(this._messageElement, this._listElement, this._status.element);\n\t\t\t\tthis._details.hide(true);\n\t\t\t\tthis._status.hide();\n\t\t\t\tthis._contentWidget.hide();\n\t\t\t\tthis._ctxSuggestWidgetVisible.reset();\n\t\t\t\tthis._ctxSuggestWidgetMultipleSuggestions.reset();\n\t\t\t\tthis._ctxSuggestWidgetHasFocusedSuggestion.reset();\n\t\t\t\tthis._showTimeout.cancel();\n\t\t\t\tthis.element.domNode.classList.remove('visible');\n\t\t\t\tthis._list.splice(0, this._list.length);\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t\tthis._cappedHeight = undefined;\n\t\t\t\tthis._explainMode = false;\n\t\t\t\tbreak;\n\t\t\tcase State.Loading:\n\t\t\t\tthis.element.domNode.classList.add('message');\n\t\t\t\tthis._messageElement.textContent = SuggestWidget.LOADING_MESSAGE;\n\t\t\t\tdom.hide(this._listElement, this._status.element);\n\t\t\t\tdom.show(this._messageElement);\n\t\t\t\tthis._details.hide();\n\t\t\t\tthis._show();\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t\tstatus(SuggestWidget.LOADING_MESSAGE);\n\t\t\t\tbreak;\n\t\t\tcase State.Empty:\n\t\t\t\tthis.element.domNode.classList.add('message');\n\t\t\t\tthis._messageElement.textContent = SuggestWidget.NO_SUGGESTIONS_MESSAGE;\n\t\t\t\tdom.hide(this._listElement, this._status.element);\n\t\t\t\tdom.show(this._messageElement);\n\t\t\t\tthis._details.hide();\n\t\t\t\tthis._show();\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t\tstatus(SuggestWidget.NO_SUGGESTIONS_MESSAGE);\n\t\t\t\tbreak;\n\t\t\tcase State.Open:\n\t\t\t\tdom.hide(this._messageElement);\n\t\t\t\tdom.show(this._listElement, this._status.element);\n\t\t\t\tthis._show();\n\t\t\t\tbreak;\n\t\t\tcase State.Frozen:\n\t\t\t\tdom.hide(this._messageElement);\n\t\t\t\tdom.show(this._listElement, this._status.element);\n\t\t\t\tthis._show();\n\t\t\t\tbreak;\n\t\t\tcase State.Details:\n\t\t\t\tdom.hide(this._messageElement);\n\t\t\t\tdom.show(this._listElement, this._status.element);\n\t\t\t\tthis._details.show();\n\t\t\t\tthis._show();\n\t\t\t\tthis._details.widget.focus();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate _show(): void {\n\t\tthis._status.show();\n\t\tthis._contentWidget.show();\n\t\tthis._layout(this._persistedSize.restore());\n\t\tthis._ctxSuggestWidgetVisible.set(true);\n\n\t\tthis._showTimeout.cancelAndSet(() => {\n\t\t\tthis.element.domNode.classList.add('visible');\n\t\t\tthis._onDidShow.fire(this);\n\t\t}, 100);\n\t}\n\n\tshowTriggered(auto: boolean, delay: number) {\n\t\tif (this._state !== State.Hidden) {\n\t\t\treturn;\n\t\t}\n\t\tthis._contentWidget.setPosition(this.editor.getPosition());\n\t\tthis._isAuto = !!auto;\n\n\t\tif (!this._isAuto) {\n\t\t\tthis._loadingTimeout = disposableTimeout(() => this._setState(State.Loading), delay);\n\t\t}\n\t}\n\n\tshowSuggestions(completionModel: CompletionModel, selectionIndex: number, isFrozen: boolean, isAuto: boolean, noFocus: boolean): void {\n\n\t\tthis._contentWidget.setPosition(this.editor.getPosition());\n\t\tthis._loadingTimeout?.dispose();\n\n\t\tthis._currentSuggestionDetails?.cancel();\n\t\tthis._currentSuggestionDetails = undefined;\n\n\t\tif (this._completionModel !== completionModel) {\n\t\t\tthis._completionModel = completionModel;\n\t\t}\n\n\t\tif (isFrozen && this._state !== State.Empty && this._state !== State.Hidden) {\n\t\t\tthis._setState(State.Frozen);\n\t\t\treturn;\n\t\t}\n\n\t\tconst visibleCount = this._completionModel.items.length;\n\t\tconst isEmpty = visibleCount === 0;\n\t\tthis._ctxSuggestWidgetMultipleSuggestions.set(visibleCount > 1);\n\n\t\tif (isEmpty) {\n\t\t\tthis._setState(isAuto ? State.Hidden : State.Empty);\n\t\t\tthis._completionModel = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._focusedItem = undefined;\n\n\t\t// calling list.splice triggers focus event which this widget forwards. That can lead to\n\t\t// suggestions being cancelled and the widget being cleared (and hidden). All this happens\n\t\t// before revealing and focusing is done which means revealing and focusing will fail when\n\t\t// they get run.\n\t\tthis._onDidFocus.pause();\n\t\tthis._onDidSelect.pause();\n\t\ttry {\n\t\t\tthis._list.splice(0, this._list.length, this._completionModel.items);\n\t\t\tthis._setState(isFrozen ? State.Frozen : State.Open);\n\t\t\tthis._list.reveal(selectionIndex, 0, selectionIndex === 0 ? 0 : this.getLayoutInfo().itemHeight * 0.33);\n\t\t\tthis._list.setFocus(noFocus ? [] : [selectionIndex]);\n\t\t} finally {\n\t\t\tthis._onDidFocus.resume();\n\t\t\tthis._onDidSelect.resume();\n\t\t}\n\n\t\tthis._pendingLayout.value = dom.runAtThisOrScheduleAtNextAnimationFrame(dom.getWindow(this.element.domNode), () => {\n\t\t\tthis._pendingLayout.clear();\n\t\t\tthis._layout(this.element.size);\n\t\t\t// Reset focus border\n\t\t\tthis._details.widget.domNode.classList.remove('focused');\n\t\t});\n\t}\n\n\tfocusSelected(): void {\n\t\tif (this._list.length > 0) {\n\t\t\tthis._list.setFocus([0]);\n\t\t}\n\t}\n\n\tselectNextPage(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.pageDown();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusNextPage();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectNext(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusNext(1, true);\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectLast(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.scrollBottom();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusLast();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectPreviousPage(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.pageUp();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusPreviousPage();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectPrevious(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusPrevious(1, true);\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tselectFirst(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.scrollTop();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusFirst();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tgetFocusedItem(): ISelectedSuggestion | undefined {\n\t\tif (this._state !== State.Hidden\n\t\t\t&& this._state !== State.Empty\n\t\t\t&& this._state !== State.Loading\n\t\t\t&& this._completionModel\n\t\t\t&& this._list.getFocus().length > 0\n\t\t) {\n\n\t\t\treturn {\n\t\t\t\titem: this._list.getFocusedElements()[0],\n\t\t\t\tindex: this._list.getFocus()[0],\n\t\t\t\tmodel: this._completionModel\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\ttoggleDetailsFocus(): void {\n\t\tif (this._state === State.Details) {\n\t\t\t// Should return the focus to the list item.\n\t\t\tthis._list.setFocus(this._list.getFocus());\n\t\t\tthis._setState(State.Open);\n\t\t} else if (this._state === State.Open) {\n\t\t\tthis._setState(State.Details);\n\t\t\tif (!this._isDetailsVisible()) {\n\t\t\t\tthis.toggleDetails(true);\n\t\t\t} else {\n\t\t\t\tthis._details.widget.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleDetails(focused: boolean = false): void {\n\t\tif (this._isDetailsVisible()) {\n\t\t\t// hide details widget\n\t\t\tthis._pendingShowDetails.clear();\n\t\t\tthis._ctxSuggestWidgetDetailsVisible.set(false);\n\t\t\tthis._setDetailsVisible(false);\n\t\t\tthis._details.hide();\n\t\t\tthis.element.domNode.classList.remove('shows-details');\n\n\t\t} else if ((canExpandCompletionItem(this._list.getFocusedElements()[0]) || this._explainMode) && (this._state === State.Open || this._state === State.Details || this._state === State.Frozen)) {\n\t\t\t// show details widget (iff possible)\n\t\t\tthis._ctxSuggestWidgetDetailsVisible.set(true);\n\t\t\tthis._setDetailsVisible(true);\n\t\t\tthis._showDetails(false, focused);\n\t\t}\n\t}\n\n\tprivate _showDetails(loading: boolean, focused: boolean): void {\n\t\tthis._pendingShowDetails.value = dom.runAtThisOrScheduleAtNextAnimationFrame(dom.getWindow(this.element.domNode), () => {\n\t\t\tthis._pendingShowDetails.clear();\n\t\t\tthis._details.show();\n\t\t\tlet didFocusDetails = false;\n\t\t\tif (loading) {\n\t\t\t\tthis._details.widget.renderLoading();\n\t\t\t} else {\n\t\t\t\tthis._details.widget.renderItem(this._list.getFocusedElements()[0], this._explainMode);\n\t\t\t}\n\t\t\tif (!this._details.widget.isEmpty) {\n\t\t\t\tthis._positionDetails();\n\t\t\t\tthis.element.domNode.classList.add('shows-details');\n\t\t\t\tif (focused) {\n\t\t\t\t\tthis._details.widget.focus();\n\t\t\t\t\tdidFocusDetails = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._details.hide();\n\t\t\t}\n\t\t\tif (!didFocusDetails) {\n\t\t\t\tthis.editor.focus();\n\t\t\t}\n\t\t});\n\t}\n\n\ttoggleExplainMode(): void {\n\t\tif (this._list.getFocusedElements()[0]) {\n\t\t\tthis._explainMode = !this._explainMode;\n\t\t\tif (!this._isDetailsVisible()) {\n\t\t\t\tthis.toggleDetails();\n\t\t\t} else {\n\t\t\t\tthis._showDetails(false, false);\n\t\t\t}\n\t\t}\n\t}\n\n\tresetPersistedSize(): void {\n\t\tthis._persistedSize.reset();\n\t}\n\n\thideWidget(): void {\n\t\tthis._pendingLayout.clear();\n\t\tthis._pendingShowDetails.clear();\n\t\tthis._loadingTimeout?.dispose();\n\n\t\tthis._setState(State.Hidden);\n\t\tthis._onDidHide.fire(this);\n\t\tthis.element.clearSashHoverState();\n\n\t\t// ensure that a reasonable widget height is persisted so that\n\t\t// accidential \"resize-to-single-items\" cases aren't happening\n\t\tconst dim = this._persistedSize.restore();\n\t\tconst minPersistedHeight = Math.ceil(this.getLayoutInfo().itemHeight * 4.3);\n\t\tif (dim && dim.height < minPersistedHeight) {\n\t\t\tthis._persistedSize.store(dim.with(undefined, minPersistedHeight));\n\t\t}\n\t}\n\n\tisFrozen(): boolean {\n\t\treturn this._state === State.Frozen;\n\t}\n\n\t_afterRender(position: ContentWidgetPositionPreference | null) {\n\t\tif (position === null) {\n\t\t\tif (this._isDetailsVisible()) {\n\t\t\t\tthis._details.hide(); //todo@jrieken soft-hide\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (this._state === State.Empty || this._state === State.Loading) {\n\t\t\t// no special positioning when widget isn't showing list\n\t\t\treturn;\n\t\t}\n\t\tif (this._isDetailsVisible() && !this._details.widget.isEmpty) {\n\t\t\tthis._details.show();\n\t\t}\n\t\tthis._positionDetails();\n\t}\n\n\tprivate _layout(size: dom.Dimension | undefined): void {\n\t\tif (!this.editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.editor.getDomNode()) {\n\t\t\t// happens when running tests\n\t\t\treturn;\n\t\t}\n\n\t\tconst bodyBox = dom.getClientArea(this.element.domNode.ownerDocument.body);\n\t\tconst info = this.getLayoutInfo();\n\n\t\tif (!size) {\n\t\t\tsize = info.defaultSize;\n\t\t}\n\n\t\tlet height = size.height;\n\t\tlet width = size.width;\n\n\t\t// status bar\n\t\tthis._status.element.style.height = `${info.itemHeight}px`;\n\n\t\tif (this._state === State.Empty || this._state === State.Loading) {\n\t\t\t// showing a message only\n\t\t\theight = info.itemHeight + info.borderHeight;\n\t\t\twidth = info.defaultSize.width / 2;\n\t\t\tthis.element.enableSashes(false, false, false, false);\n\t\t\tthis.element.minSize = this.element.maxSize = new dom.Dimension(width, height);\n\t\t\tthis._contentWidget.setPreference(ContentWidgetPositionPreference.BELOW);\n\n\t\t} else {\n\t\t\t// showing items\n\n\t\t\t// width math\n\t\t\tconst maxWidth = bodyBox.width - info.borderHeight - 2 * info.horizontalPadding;\n\t\t\tif (width > maxWidth) {\n\t\t\t\twidth = maxWidth;\n\t\t\t}\n\t\t\tconst preferredWidth = this._completionModel ? this._completionModel.stats.pLabelLen * info.typicalHalfwidthCharacterWidth : width;\n\n\t\t\t// height math\n\t\t\tconst fullHeight = info.statusBarHeight + this._list.contentHeight + info.borderHeight;\n\t\t\tconst minHeight = info.itemHeight + info.statusBarHeight;\n\t\t\tconst editorBox = dom.getDomNodePagePosition(this.editor.getDomNode());\n\t\t\tconst cursorBox = this.editor.getScrolledVisiblePosition(this.editor.getPosition());\n\t\t\tconst cursorBottom = editorBox.top + cursorBox.top + cursorBox.height;\n\t\t\tconst maxHeightBelow = Math.min(bodyBox.height - cursorBottom - info.verticalPadding, fullHeight);\n\t\t\tconst availableSpaceAbove = editorBox.top + cursorBox.top - info.verticalPadding;\n\t\t\tconst maxHeightAbove = Math.min(availableSpaceAbove, fullHeight);\n\t\t\tlet maxHeight = Math.min(Math.max(maxHeightAbove, maxHeightBelow) + info.borderHeight, fullHeight);\n\n\t\t\tif (height === this._cappedHeight?.capped) {\n\t\t\t\t// Restore the old (wanted) height when the current\n\t\t\t\t// height is capped to fit\n\t\t\t\theight = this._cappedHeight.wanted;\n\t\t\t}\n\n\t\t\tif (height < minHeight) {\n\t\t\t\theight = minHeight;\n\t\t\t}\n\t\t\tif (height > maxHeight) {\n\t\t\t\theight = maxHeight;\n\t\t\t}\n\n\t\t\tconst forceRenderingAboveRequiredSpace = 150;\n\t\t\tif ((height > maxHeightBelow && maxHeightAbove > maxHeightBelow) || (this._forceRenderingAbove && availableSpaceAbove > forceRenderingAboveRequiredSpace)) {\n\t\t\t\tthis._contentWidget.setPreference(ContentWidgetPositionPreference.ABOVE);\n\t\t\t\tthis.element.enableSashes(true, true, false, false);\n\t\t\t\tmaxHeight = maxHeightAbove;\n\t\t\t} else {\n\t\t\t\tthis._contentWidget.setPreference(ContentWidgetPositionPreference.BELOW);\n\t\t\t\tthis.element.enableSashes(false, true, true, false);\n\t\t\t\tmaxHeight = maxHeightBelow;\n\t\t\t}\n\t\t\tthis.element.preferredSize = new dom.Dimension(preferredWidth, info.defaultSize.height);\n\t\t\tthis.element.maxSize = new dom.Dimension(maxWidth, maxHeight);\n\t\t\tthis.element.minSize = new dom.Dimension(220, minHeight);\n\n\t\t\t// Know when the height was capped to fit and remember\n\t\t\t// the wanted height for later. This is required when going\n\t\t\t// left to widen suggestions.\n\t\t\tthis._cappedHeight = height === fullHeight\n\t\t\t\t? { wanted: this._cappedHeight?.wanted ?? size.height, capped: height }\n\t\t\t\t: undefined;\n\t\t}\n\t\tthis._resize(width, height);\n\t}\n\n\tprivate _resize(width: number, height: number): void {\n\n\t\tconst { width: maxWidth, height: maxHeight } = this.element.maxSize;\n\t\twidth = Math.min(maxWidth, width);\n\t\theight = Math.min(maxHeight, height);\n\n\t\tconst { statusBarHeight } = this.getLayoutInfo();\n\t\tthis._list.layout(height - statusBarHeight, width);\n\t\tthis._listElement.style.height = `${height - statusBarHeight}px`;\n\t\tthis.element.layout(height, width);\n\t\tthis._contentWidget.layout();\n\n\t\tthis._positionDetails();\n\t}\n\n\tprivate _positionDetails(): void {\n\t\tif (this._isDetailsVisible()) {\n\t\t\tthis._details.placeAtAnchor(this.element.domNode, this._contentWidget.getPosition()?.preference[0] === ContentWidgetPositionPreference.BELOW);\n\t\t}\n\t}\n\n\tgetLayoutInfo() {\n\t\tconst fontInfo = this.editor.getOption(EditorOption.fontInfo);\n\t\tconst itemHeight = clamp(this.editor.getOption(EditorOption.suggestLineHeight) || fontInfo.lineHeight, 8, 1000);\n\t\tconst statusBarHeight = !this.editor.getOption(EditorOption.suggest).showStatusBar || this._state === State.Empty || this._state === State.Loading ? 0 : itemHeight;\n\t\tconst borderWidth = this._details.widget.getLayoutInfo().borderWidth;\n\t\tconst borderHeight = 2 * borderWidth;\n\n\t\treturn {\n\t\t\titemHeight,\n\t\t\tstatusBarHeight,\n\t\t\tborderWidth,\n\t\t\tborderHeight,\n\t\t\ttypicalHalfwidthCharacterWidth: fontInfo.typicalHalfwidthCharacterWidth,\n\t\t\tverticalPadding: 22,\n\t\t\thorizontalPadding: 14,\n\t\t\tdefaultSize: new dom.Dimension(430, statusBarHeight + 12 * itemHeight)\n\t\t};\n\t}\n\n\tprivate _isDetailsVisible(): boolean {\n\t\treturn this._storageService.getBoolean('expandSuggestionDocs', StorageScope.PROFILE, false);\n\t}\n\n\tprivate _setDetailsVisible(value: boolean) {\n\t\tthis._storageService.store('expandSuggestionDocs', value, StorageScope.PROFILE, StorageTarget.USER);\n\t}\n\n\tforceRenderingAbove() {\n\t\tif (!this._forceRenderingAbove) {\n\t\t\tthis._forceRenderingAbove = true;\n\t\t\tthis._layout(this._persistedSize.restore());\n\t\t}\n\t}\n\n\tstopForceRenderingAbove() {\n\t\tthis._forceRenderingAbove = false;\n\t}\n}\n\nexport class SuggestContentWidget implements IContentWidget {\n\n\treadonly allowEditorOverflow = true;\n\treadonly suppressMouseDown = false;\n\n\tprivate _position?: IPosition | null;\n\tprivate _preference?: ContentWidgetPositionPreference;\n\tprivate _preferenceLocked = false;\n\n\tprivate _added: boolean = false;\n\tprivate _hidden: boolean = false;\n\n\tconstructor(\n\t\tprivate readonly _widget: SuggestWidget,\n\t\tprivate readonly _editor: ICodeEditor\n\t) { }\n\n\tdispose(): void {\n\t\tif (this._added) {\n\t\t\tthis._added = false;\n\t\t\tthis._editor.removeContentWidget(this);\n\t\t}\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.widget.suggestWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._widget.element.domNode;\n\t}\n\n\tshow(): void {\n\t\tthis._hidden = false;\n\t\tif (!this._added) {\n\t\t\tthis._added = true;\n\t\t\tthis._editor.addContentWidget(this);\n\t\t}\n\t}\n\n\thide(): void {\n\t\tif (!this._hidden) {\n\t\t\tthis._hidden = true;\n\t\t\tthis.layout();\n\t\t}\n\t}\n\n\tlayout(): void {\n\t\tthis._editor.layoutContentWidget(this);\n\t}\n\n\tgetPosition(): IContentWidgetPosition | null {\n\t\tif (this._hidden || !this._position || !this._preference) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tposition: this._position,\n\t\t\tpreference: [this._preference]\n\t\t};\n\t}\n\n\tbeforeRender() {\n\t\tconst { height, width } = this._widget.element.size;\n\t\tconst { borderWidth, horizontalPadding } = this._widget.getLayoutInfo();\n\t\treturn new dom.Dimension(width + 2 * borderWidth + horizontalPadding, height + 2 * borderWidth);\n\t}\n\n\tafterRender(position: ContentWidgetPositionPreference | null) {\n\t\tthis._widget._afterRender(position);\n\t}\n\n\tsetPreference(preference: ContentWidgetPositionPreference) {\n\t\tif (!this._preferenceLocked) {\n\t\t\tthis._preference = preference;\n\t\t}\n\t}\n\n\tlockPreference() {\n\t\tthis._preferenceLocked = true;\n\t}\n\n\tunlockPreference() {\n\t\tthis._preferenceLocked = false;\n\t}\n\n\tsetPosition(position: IPosition | null): void {\n\t\tthis._position = position;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["vs/editor/contrib/suggest/browser/suggestWidget.ts"],"names":[],"mappings":"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","file":"suggestWidget.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 * as dom from '../../../../base/browser/dom.js';\nimport { IKeyboardEvent } from '../../../../base/browser/keyboardEvent.js';\nimport '../../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded\nimport { IListEvent, IListGestureEvent, IListMouseEvent } from '../../../../base/browser/ui/list/list.js';\nimport { List } from '../../../../base/browser/ui/list/listWidget.js';\nimport { CancelablePromise, createCancelablePromise, disposableTimeout, TimeoutTimer } from '../../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter, Event, PauseableEmitter } from '../../../../base/common/event.js';\nimport { DisposableStore, IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js';\nimport { clamp } from '../../../../base/common/numbers.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport './media/suggest.css';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition, IEditorMouseEvent } from '../../../browser/editorBrowser.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { EditorOption } from '../../../common/config/editorOptions.js';\nimport { IPosition } from '../../../common/core/position.js';\nimport { SuggestWidgetStatus } from './suggestWidgetStatus.js';\nimport '../../symbolIcons/browser/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors\nimport * as nls from '../../../../nls.js';\nimport { IContextKey, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IStorageService, StorageScope, StorageTarget } from '../../../../platform/storage/common/storage.js';\nimport { activeContrastBorder, editorForeground, editorWidgetBackground, editorWidgetBorder, listFocusHighlightForeground, listHighlightForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { CompletionModel } from './completionModel.js';\nimport { ResizableHTMLElement } from '../../../../base/browser/ui/resizable/resizable.js';\nimport { CompletionItem, Context as SuggestContext, suggestWidgetStatusbarMenu } from './suggest.js';\nimport { canExpandCompletionItem, SuggestDetailsOverlay, SuggestDetailsWidget } from './suggestWidgetDetails.js';\nimport { ItemRenderer } from './suggestWidgetRenderer.js';\nimport { getListStyles } from '../../../../platform/theme/browser/defaultStyles.js';\nimport { status } from '../../../../base/browser/ui/aria/aria.js';\nimport { CompletionItemKinds } from '../../../common/languages.js';\nimport { isWindows } from '../../../../base/common/platform.js';\n\n/**\n * Suggest widget colors\n */\nregisterColor('editorSuggestWidget.background', editorWidgetBackground, nls.localize('editorSuggestWidgetBackground', 'Background color of the suggest widget.'));\nregisterColor('editorSuggestWidget.border', editorWidgetBorder, nls.localize('editorSuggestWidgetBorder', 'Border color of the suggest widget.'));\nexport const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', editorForeground, nls.localize('editorSuggestWidgetForeground', 'Foreground color of the suggest widget.'));\nregisterColor('editorSuggestWidget.selectedForeground', quickInputListFocusForeground, nls.localize('editorSuggestWidgetSelectedForeground', 'Foreground color of the selected entry in the suggest widget.'));\nregisterColor('editorSuggestWidget.selectedIconForeground', quickInputListFocusIconForeground, nls.localize('editorSuggestWidgetSelectedIconForeground', 'Icon foreground color of the selected entry in the suggest widget.'));\nexport const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', quickInputListFocusBackground, nls.localize('editorSuggestWidgetSelectedBackground', 'Background color of the selected entry in the suggest widget.'));\nregisterColor('editorSuggestWidget.highlightForeground', listHighlightForeground, nls.localize('editorSuggestWidgetHighlightForeground', 'Color of the match highlights in the suggest widget.'));\nregisterColor('editorSuggestWidget.focusHighlightForeground', listFocusHighlightForeground, nls.localize('editorSuggestWidgetFocusHighlightForeground', 'Color of the match highlights in the suggest widget when an item is focused.'));\nregisterColor('editorSuggestWidgetStatus.foreground', transparent(editorSuggestWidgetForeground, .5), nls.localize('editorSuggestWidgetStatusForeground', 'Foreground color of the suggest widget status.'));\n\nconst enum State {\n\tHidden,\n\tLoading,\n\tEmpty,\n\tOpen,\n\tFrozen,\n\tDetails,\n\tonDetailsKeyDown\n}\n\nexport interface ISelectedSuggestion {\n\titem: CompletionItem;\n\tindex: number;\n\tmodel: CompletionModel;\n}\n\nclass PersistedWidgetSize {\n\n\tprivate readonly _key: string;\n\n\tconstructor(\n\t\tprivate readonly _service: IStorageService,\n\t\teditor: ICodeEditor\n\t) {\n\t\tthis._key = `suggestWidget.size/${editor.getEditorType()}/${editor instanceof EmbeddedCodeEditorWidget}`;\n\t}\n\n\trestore(): dom.Dimension | undefined {\n\t\tconst raw = this._service.get(this._key, StorageScope.PROFILE) ?? '';\n\t\ttry {\n\t\t\tconst obj = JSON.parse(raw);\n\t\t\tif (dom.Dimension.is(obj)) {\n\t\t\t\treturn dom.Dimension.lift(obj);\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tstore(size: dom.Dimension) {\n\t\tthis._service.store(this._key, JSON.stringify(size), StorageScope.PROFILE, StorageTarget.MACHINE);\n\t}\n\n\treset(): void {\n\t\tthis._service.remove(this._key, StorageScope.PROFILE);\n\t}\n}\n\nexport class SuggestWidget implements IDisposable {\n\n\tprivate static LOADING_MESSAGE: string = nls.localize('suggestWidget.loading', \"Loading...\");\n\tprivate static NO_SUGGESTIONS_MESSAGE: string = nls.localize('suggestWidget.noSuggestions', \"No suggestions.\");\n\n\tprivate _state: State = State.Hidden;\n\tprivate _isAuto: boolean = false;\n\tprivate _loadingTimeout?: IDisposable;\n\tprivate readonly _pendingLayout = new MutableDisposable();\n\tprivate readonly _pendingShowDetails = new MutableDisposable();\n\tprivate _currentSuggestionDetails?: CancelablePromise<void>;\n\tprivate _focusedItem?: CompletionItem;\n\tprivate _ignoreFocusEvents: boolean = false;\n\tprivate _completionModel?: CompletionModel;\n\tprivate _cappedHeight?: { wanted: number; capped: number };\n\tprivate _forceRenderingAbove: boolean = false;\n\tprivate _explainMode: boolean = false;\n\n\treadonly element: ResizableHTMLElement;\n\tprivate readonly _messageElement: HTMLElement;\n\tprivate readonly _listElement: HTMLElement;\n\tprivate readonly _list: List<CompletionItem>;\n\tprivate readonly _status: SuggestWidgetStatus;\n\tprivate readonly _details: SuggestDetailsOverlay;\n\tprivate readonly _contentWidget: SuggestContentWidget;\n\tprivate readonly _persistedSize: PersistedWidgetSize;\n\n\tprivate readonly _ctxSuggestWidgetVisible: IContextKey<boolean>;\n\tprivate readonly _ctxSuggestWidgetDetailsVisible: IContextKey<boolean>;\n\tprivate readonly _ctxSuggestWidgetMultipleSuggestions: IContextKey<boolean>;\n\tprivate readonly _ctxSuggestWidgetHasFocusedSuggestion: IContextKey<boolean>;\n\tprivate readonly _ctxSuggestWidgetDetailsFocused: IContextKey<boolean>;\n\n\tprivate readonly _showTimeout = new TimeoutTimer();\n\tprivate readonly _disposables = new DisposableStore();\n\n\n\tprivate readonly _onDidSelect = new PauseableEmitter<ISelectedSuggestion>();\n\tprivate readonly _onDidFocus = new PauseableEmitter<ISelectedSuggestion>();\n\tprivate readonly _onDidHide = new Emitter<this>();\n\tprivate readonly _onDidShow = new Emitter<this>();\n\n\treadonly onDidSelect: Event<ISelectedSuggestion> = this._onDidSelect.event;\n\treadonly onDidFocus: Event<ISelectedSuggestion> = this._onDidFocus.event;\n\treadonly onDidHide: Event<this> = this._onDidHide.event;\n\treadonly onDidShow: Event<this> = this._onDidShow.event;\n\n\tprivate readonly _onDetailsKeydown = new Emitter<IKeyboardEvent>();\n\n\tconstructor(\n\t\tprivate readonly editor: ICodeEditor,\n\t\t@IStorageService private readonly _storageService: IStorageService,\n\t\t@IContextKeyService _contextKeyService: IContextKeyService,\n\t\t@IThemeService _themeService: IThemeService,\n\t\t@IInstantiationService instantiationService: IInstantiationService,\n\t) {\n\t\tthis.element = new ResizableHTMLElement();\n\t\tthis.element.domNode.classList.add('editor-widget', 'suggest-widget');\n\n\t\tthis._contentWidget = new SuggestContentWidget(this, editor);\n\t\tthis._persistedSize = new PersistedWidgetSize(_storageService, editor);\n\n\t\tclass ResizeState {\n\t\t\tconstructor(\n\t\t\t\treadonly persistedSize: dom.Dimension | undefined,\n\t\t\t\treadonly currentSize: dom.Dimension,\n\t\t\t\tpublic persistHeight = false,\n\t\t\t\tpublic persistWidth = false,\n\t\t\t) { }\n\t\t}\n\n\t\tlet state: ResizeState | undefined;\n\t\tthis._disposables.add(this.element.onDidWillResize(() => {\n\t\t\tthis._contentWidget.lockPreference();\n\t\t\tstate = new ResizeState(this._persistedSize.restore(), this.element.size);\n\t\t}));\n\t\tthis._disposables.add(this.element.onDidResize(e => {\n\n\t\t\tthis._resize(e.dimension.width, e.dimension.height);\n\n\t\t\tif (state) {\n\t\t\t\tstate.persistHeight = state.persistHeight || !!e.north || !!e.south;\n\t\t\t\tstate.persistWidth = state.persistWidth || !!e.east || !!e.west;\n\t\t\t}\n\n\t\t\tif (!e.done) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (state) {\n\t\t\t\t// only store width or height value that have changed and also\n\t\t\t\t// only store changes that are above a certain threshold\n\t\t\t\tconst { itemHeight, defaultSize } = this.getLayoutInfo();\n\t\t\t\tconst threshold = Math.round(itemHeight / 2);\n\t\t\t\tlet { width, height } = this.element.size;\n\t\t\t\tif (!state.persistHeight || Math.abs(state.currentSize.height - height) <= threshold) {\n\t\t\t\t\theight = state.persistedSize?.height ?? defaultSize.height;\n\t\t\t\t}\n\t\t\t\tif (!state.persistWidth || Math.abs(state.currentSize.width - width) <= threshold) {\n\t\t\t\t\twidth = state.persistedSize?.width ?? defaultSize.width;\n\t\t\t\t}\n\t\t\t\tthis._persistedSize.store(new dom.Dimension(width, height));\n\t\t\t}\n\n\t\t\t// reset working state\n\t\t\tthis._contentWidget.unlockPreference();\n\t\t\tstate = undefined;\n\t\t}));\n\n\t\tthis._messageElement = dom.append(this.element.domNode, dom.$('.message'));\n\t\tthis._listElement = dom.append(this.element.domNode, dom.$('.tree'));\n\n\t\tconst details = this._disposables.add(instantiationService.createInstance(SuggestDetailsWidget, this.editor));\n\t\tdetails.onDidClose(() => this.toggleDetails(), this, this._disposables);\n\t\tthis._details = new SuggestDetailsOverlay(details, this.editor);\n\n\t\tconst applyIconStyle = () => this.element.domNode.classList.toggle('no-icons', !this.editor.getOption(EditorOption.suggest).showIcons);\n\t\tapplyIconStyle();\n\n\t\tconst renderer = instantiationService.createInstance(ItemRenderer, this.editor);\n\t\tthis._disposables.add(renderer);\n\t\tthis._disposables.add(renderer.onDidToggleDetails(() => this.toggleDetails()));\n\n\t\tthis._list = new List('SuggestWidget', this._listElement, {\n\t\t\tgetHeight: (_element: CompletionItem): number => this.getLayoutInfo().itemHeight,\n\t\t\tgetTemplateId: (_element: CompletionItem): string => 'suggestion'\n\t\t}, [renderer], {\n\t\t\talwaysConsumeMouseWheel: true,\n\t\t\tuseShadows: false,\n\t\t\tmouseSupport: false,\n\t\t\tmultipleSelectionSupport: false,\n\t\t\taccessibilityProvider: {\n\t\t\t\tgetRole: () => isWindows ? 'listitem' : 'option',\n\t\t\t\tgetWidgetAriaLabel: () => nls.localize('suggest', \"Suggest\"),\n\t\t\t\tgetWidgetRole: () => 'listbox',\n\t\t\t\tgetAriaLabel: (item: CompletionItem) => {\n\n\t\t\t\t\tlet label = item.textLabel;\n\t\t\t\t\tconst kindLabel = CompletionItemKinds.toLabel(item.completion.kind);\n\t\t\t\t\tif (typeof item.completion.label !== 'string') {\n\t\t\t\t\t\tconst { detail, description } = item.completion.label;\n\t\t\t\t\t\tif (detail && description) {\n\t\t\t\t\t\t\tlabel = nls.localize('label.full', '{0} {1}, {2}, {3}', label, detail, description, kindLabel);\n\t\t\t\t\t\t} else if (detail) {\n\t\t\t\t\t\t\tlabel = nls.localize('label.detail', '{0} {1}, {2}', label, detail, kindLabel);\n\t\t\t\t\t\t} else if (description) {\n\t\t\t\t\t\t\tlabel = nls.localize('label.desc', '{0}, {1}, {2}', label, description, kindLabel);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = nls.localize('label', '{0}, {1}', label, kindLabel);\n\t\t\t\t\t}\n\t\t\t\t\tif (!item.isResolved || !this._isDetailsVisible()) {\n\t\t\t\t\t\treturn label;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { documentation, detail } = item.completion;\n\t\t\t\t\tconst docs = strings.format(\n\t\t\t\t\t\t'{0}{1}',\n\t\t\t\t\t\tdetail || '',\n\t\t\t\t\t\tdocumentation ? (typeof documentation === 'string' ? documentation : documentation.value) : '');\n\n\t\t\t\t\treturn nls.localize('ariaCurrenttSuggestionReadDetails', \"{0}, docs: {1}\", label, docs);\n\t\t\t\t},\n\t\t\t}\n\t\t});\n\t\tthis._list.style(getListStyles({\n\t\t\tlistInactiveFocusBackground: editorSuggestWidgetSelectedBackground,\n\t\t\tlistInactiveFocusOutline: activeContrastBorder\n\t\t}));\n\n\t\tthis._status = instantiationService.createInstance(SuggestWidgetStatus, this.element.domNode, suggestWidgetStatusbarMenu);\n\t\tconst applyStatusBarStyle = () => this.element.domNode.classList.toggle('with-status-bar', this.editor.getOption(EditorOption.suggest).showStatusBar);\n\t\tapplyStatusBarStyle();\n\n\t\tthis._disposables.add(this._list.onMouseDown(e => this._onListMouseDownOrTap(e)));\n\t\tthis._disposables.add(this._list.onTap(e => this._onListMouseDownOrTap(e)));\n\t\tthis._disposables.add(this._list.onDidChangeSelection(e => this._onListSelection(e)));\n\t\tthis._disposables.add(this._list.onDidChangeFocus(e => this._onListFocus(e)));\n\t\tthis._disposables.add(this.editor.onDidChangeCursorSelection(() => this._onCursorSelectionChanged()));\n\t\tthis._disposables.add(this.editor.onDidChangeConfiguration(e => {\n\t\t\tif (e.hasChanged(EditorOption.suggest)) {\n\t\t\t\tapplyStatusBarStyle();\n\t\t\t\tapplyIconStyle();\n\t\t\t}\n\t\t\tif (this._completionModel && (e.hasChanged(EditorOption.fontInfo) || e.hasChanged(EditorOption.suggestFontSize) || e.hasChanged(EditorOption.suggestLineHeight))) {\n\t\t\t\tthis._list.splice(0, this._list.length, this._completionModel.items);\n\t\t\t}\n\t\t}));\n\n\t\tthis._ctxSuggestWidgetVisible = SuggestContext.Visible.bindTo(_contextKeyService);\n\t\tthis._ctxSuggestWidgetDetailsVisible = SuggestContext.DetailsVisible.bindTo(_contextKeyService);\n\t\tthis._ctxSuggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(_contextKeyService);\n\t\tthis._ctxSuggestWidgetHasFocusedSuggestion = SuggestContext.HasFocusedSuggestion.bindTo(_contextKeyService);\n\t\tthis._ctxSuggestWidgetDetailsFocused = SuggestContext.DetailsFocused.bindTo(_contextKeyService);\n\n\t\tconst detailsFocusTracker = dom.trackFocus(this._details.widget.domNode);\n\t\tthis._disposables.add(detailsFocusTracker);\n\t\tthis._disposables.add(detailsFocusTracker.onDidFocus(() => this._ctxSuggestWidgetDetailsFocused.set(true)));\n\t\tthis._disposables.add(detailsFocusTracker.onDidBlur(() => this._ctxSuggestWidgetDetailsFocused.set(false)));\n\n\t\tthis._disposables.add(dom.addStandardDisposableListener(this._details.widget.domNode, 'keydown', e => {\n\t\t\tthis._onDetailsKeydown.fire(e);\n\t\t}));\n\n\t\tthis._disposables.add(this.editor.onMouseDown((e: IEditorMouseEvent) => this._onEditorMouseDown(e)));\n\t}\n\n\tdispose(): void {\n\t\tthis._details.widget.dispose();\n\t\tthis._details.dispose();\n\t\tthis._list.dispose();\n\t\tthis._status.dispose();\n\t\tthis._disposables.dispose();\n\t\tthis._loadingTimeout?.dispose();\n\t\tthis._pendingLayout.dispose();\n\t\tthis._pendingShowDetails.dispose();\n\t\tthis._showTimeout.dispose();\n\t\tthis._contentWidget.dispose();\n\t\tthis.element.dispose();\n\t}\n\n\tprivate _onEditorMouseDown(mouseEvent: IEditorMouseEvent): void {\n\t\tif (this._details.widget.domNode.contains(mouseEvent.target.element)) {\n\t\t\t// Clicking inside details\n\t\t\tthis._details.widget.domNode.focus();\n\t\t} else {\n\t\t\t// Clicking outside details and inside suggest\n\t\t\tif (this.element.domNode.contains(mouseEvent.target.element)) {\n\t\t\t\tthis.editor.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _onCursorSelectionChanged(): void {\n\t\tif (this._state !== State.Hidden) {\n\t\t\tthis._contentWidget.layout();\n\t\t}\n\t}\n\n\tprivate _onListMouseDownOrTap(e: IListMouseEvent<CompletionItem> | IListGestureEvent<CompletionItem>): void {\n\t\tif (typeof e.element === 'undefined' || typeof e.index === 'undefined') {\n\t\t\treturn;\n\t\t}\n\n\t\t// prevent stealing browser focus from the editor\n\t\te.browserEvent.preventDefault();\n\t\te.browserEvent.stopPropagation();\n\n\t\tthis._select(e.element, e.index);\n\t}\n\n\tprivate _onListSelection(e: IListEvent<CompletionItem>): void {\n\t\tif (e.elements.length) {\n\t\t\tthis._select(e.elements[0], e.indexes[0]);\n\t\t}\n\t}\n\n\tprivate _select(item: CompletionItem, index: number): void {\n\t\tconst completionModel = this._completionModel;\n\t\tif (completionModel) {\n\t\t\tthis._onDidSelect.fire({ item, index, model: completionModel });\n\t\t\tthis.editor.focus();\n\t\t}\n\t}\n\n\tprivate _onListFocus(e: IListEvent<CompletionItem>): void {\n\t\tif (this._ignoreFocusEvents) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._state === State.Details) {\n\t\t\t// This can happen when focus is in the details-panel and when\n\t\t\t// arrow keys are pressed to select next/prev items\n\t\t\tthis._setState(State.Open);\n\t\t}\n\n\t\tif (!e.elements.length) {\n\t\t\tif (this._currentSuggestionDetails) {\n\t\t\t\tthis._currentSuggestionDetails.cancel();\n\t\t\t\tthis._currentSuggestionDetails = undefined;\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t}\n\n\t\t\tthis.editor.setAriaOptions({ activeDescendant: undefined });\n\t\t\tthis._ctxSuggestWidgetHasFocusedSuggestion.set(false);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._completionModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._ctxSuggestWidgetHasFocusedSuggestion.set(true);\n\t\tconst item = e.elements[0];\n\t\tconst index = e.indexes[0];\n\n\t\tif (item !== this._focusedItem) {\n\n\t\t\tthis._currentSuggestionDetails?.cancel();\n\t\t\tthis._currentSuggestionDetails = undefined;\n\n\t\t\tthis._focusedItem = item;\n\n\t\t\tthis._list.reveal(index);\n\n\t\t\tthis._currentSuggestionDetails = createCancelablePromise(async token => {\n\t\t\t\tconst loading = disposableTimeout(() => {\n\t\t\t\t\tif (this._isDetailsVisible()) {\n\t\t\t\t\t\tthis._showDetails(true, false);\n\t\t\t\t\t}\n\t\t\t\t}, 250);\n\t\t\t\tconst sub = token.onCancellationRequested(() => loading.dispose());\n\t\t\t\ttry {\n\t\t\t\t\treturn await item.resolve(token);\n\t\t\t\t} finally {\n\t\t\t\t\tloading.dispose();\n\t\t\t\t\tsub.dispose();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._currentSuggestionDetails.then(() => {\n\t\t\t\tif (index >= this._list.length || item !== this._list.element(index)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// item can have extra information, so re-render\n\t\t\t\tthis._ignoreFocusEvents = true;\n\t\t\t\tthis._list.splice(index, 1, [item]);\n\t\t\t\tthis._list.setFocus([index]);\n\t\t\t\tthis._ignoreFocusEvents = false;\n\n\t\t\t\tif (this._isDetailsVisible()) {\n\t\t\t\t\tthis._showDetails(false, false);\n\t\t\t\t} else {\n\t\t\t\t\tthis.element.domNode.classList.remove('docs-side');\n\t\t\t\t}\n\n\t\t\t\tthis.editor.setAriaOptions({ activeDescendant: this._list.getElementID(index) });\n\t\t\t}).catch(onUnexpectedError);\n\t\t}\n\n\t\t// emit an event\n\t\tthis._onDidFocus.fire({ item, index, model: this._completionModel });\n\t}\n\n\tprivate _setState(state: State): void {\n\n\t\tif (this._state === state) {\n\t\t\treturn;\n\t\t}\n\t\tthis._state = state;\n\n\t\tthis.element.domNode.classList.toggle('frozen', state === State.Frozen);\n\t\tthis.element.domNode.classList.remove('message');\n\n\t\tswitch (state) {\n\t\t\tcase State.Hidden:\n\t\t\t\tdom.hide(this._messageElement, this._listElement, this._status.element);\n\t\t\t\tthis._details.hide(true);\n\t\t\t\tthis._status.hide();\n\t\t\t\tthis._contentWidget.hide();\n\t\t\t\tthis._ctxSuggestWidgetVisible.reset();\n\t\t\t\tthis._ctxSuggestWidgetMultipleSuggestions.reset();\n\t\t\t\tthis._ctxSuggestWidgetHasFocusedSuggestion.reset();\n\t\t\t\tthis._showTimeout.cancel();\n\t\t\t\tthis.element.domNode.classList.remove('visible');\n\t\t\t\tthis._list.splice(0, this._list.length);\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t\tthis._cappedHeight = undefined;\n\t\t\t\tthis._explainMode = false;\n\t\t\t\tbreak;\n\t\t\tcase State.Loading:\n\t\t\t\tthis.element.domNode.classList.add('message');\n\t\t\t\tthis._messageElement.textContent = SuggestWidget.LOADING_MESSAGE;\n\t\t\t\tdom.hide(this._listElement, this._status.element);\n\t\t\t\tdom.show(this._messageElement);\n\t\t\t\tthis._details.hide();\n\t\t\t\tthis._show();\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t\tstatus(SuggestWidget.LOADING_MESSAGE);\n\t\t\t\tbreak;\n\t\t\tcase State.Empty:\n\t\t\t\tthis.element.domNode.classList.add('message');\n\t\t\t\tthis._messageElement.textContent = SuggestWidget.NO_SUGGESTIONS_MESSAGE;\n\t\t\t\tdom.hide(this._listElement, this._status.element);\n\t\t\t\tdom.show(this._messageElement);\n\t\t\t\tthis._details.hide();\n\t\t\t\tthis._show();\n\t\t\t\tthis._focusedItem = undefined;\n\t\t\t\tstatus(SuggestWidget.NO_SUGGESTIONS_MESSAGE);\n\t\t\t\tbreak;\n\t\t\tcase State.Open:\n\t\t\t\tdom.hide(this._messageElement);\n\t\t\t\tdom.show(this._listElement, this._status.element);\n\t\t\t\tthis._show();\n\t\t\t\tbreak;\n\t\t\tcase State.Frozen:\n\t\t\t\tdom.hide(this._messageElement);\n\t\t\t\tdom.show(this._listElement, this._status.element);\n\t\t\t\tthis._show();\n\t\t\t\tbreak;\n\t\t\tcase State.Details:\n\t\t\t\tdom.hide(this._messageElement);\n\t\t\t\tdom.show(this._listElement, this._status.element);\n\t\t\t\tthis._details.show();\n\t\t\t\tthis._show();\n\t\t\t\tthis._details.widget.focus();\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate _show(): void {\n\t\tthis._status.show();\n\t\tthis._contentWidget.show();\n\t\tthis._layout(this._persistedSize.restore());\n\t\tthis._ctxSuggestWidgetVisible.set(true);\n\n\t\tthis._showTimeout.cancelAndSet(() => {\n\t\t\tthis.element.domNode.classList.add('visible');\n\t\t\tthis._onDidShow.fire(this);\n\t\t}, 100);\n\t}\n\n\tshowTriggered(auto: boolean, delay: number) {\n\t\tif (this._state !== State.Hidden) {\n\t\t\treturn;\n\t\t}\n\t\tthis._contentWidget.setPosition(this.editor.getPosition());\n\t\tthis._isAuto = !!auto;\n\n\t\tif (!this._isAuto) {\n\t\t\tthis._loadingTimeout = disposableTimeout(() => this._setState(State.Loading), delay);\n\t\t}\n\t}\n\n\tshowSuggestions(completionModel: CompletionModel, selectionIndex: number, isFrozen: boolean, isAuto: boolean, noFocus: boolean): void {\n\n\t\tthis._contentWidget.setPosition(this.editor.getPosition());\n\t\tthis._loadingTimeout?.dispose();\n\n\t\tthis._currentSuggestionDetails?.cancel();\n\t\tthis._currentSuggestionDetails = undefined;\n\n\t\tif (this._completionModel !== completionModel) {\n\t\t\tthis._completionModel = completionModel;\n\t\t}\n\n\t\tif (isFrozen && this._state !== State.Empty && this._state !== State.Hidden) {\n\t\t\tthis._setState(State.Frozen);\n\t\t\treturn;\n\t\t}\n\n\t\tconst visibleCount = this._completionModel.items.length;\n\t\tconst isEmpty = visibleCount === 0;\n\t\tthis._ctxSuggestWidgetMultipleSuggestions.set(visibleCount > 1);\n\n\t\tif (isEmpty) {\n\t\t\tthis._setState(isAuto ? State.Hidden : State.Empty);\n\t\t\tthis._completionModel = undefined;\n\t\t\treturn;\n\t\t}\n\n\t\tthis._focusedItem = undefined;\n\n\t\t// calling list.splice triggers focus event which this widget forwards. That can lead to\n\t\t// suggestions being cancelled and the widget being cleared (and hidden). All this happens\n\t\t// before revealing and focusing is done which means revealing and focusing will fail when\n\t\t// they get run.\n\t\tthis._onDidFocus.pause();\n\t\tthis._onDidSelect.pause();\n\t\ttry {\n\t\t\tthis._list.splice(0, this._list.length, this._completionModel.items);\n\t\t\tthis._setState(isFrozen ? State.Frozen : State.Open);\n\t\t\tthis._list.reveal(selectionIndex, 0, selectionIndex === 0 ? 0 : this.getLayoutInfo().itemHeight * 0.33);\n\t\t\tthis._list.setFocus(noFocus ? [] : [selectionIndex]);\n\t\t} finally {\n\t\t\tthis._onDidFocus.resume();\n\t\t\tthis._onDidSelect.resume();\n\t\t}\n\n\t\tthis._pendingLayout.value = dom.runAtThisOrScheduleAtNextAnimationFrame(dom.getWindow(this.element.domNode), () => {\n\t\t\tthis._pendingLayout.clear();\n\t\t\tthis._layout(this.element.size);\n\t\t\t// Reset focus border\n\t\t\tthis._details.widget.domNode.classList.remove('focused');\n\t\t});\n\t}\n\n\tfocusSelected(): void {\n\t\tif (this._list.length > 0) {\n\t\t\tthis._list.setFocus([0]);\n\t\t}\n\t}\n\n\tselectNextPage(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.pageDown();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusNextPage();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectNext(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusNext(1, true);\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectLast(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.scrollBottom();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusLast();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectPreviousPage(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.pageUp();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusPreviousPage();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tselectPrevious(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusPrevious(1, true);\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tselectFirst(): boolean {\n\t\tswitch (this._state) {\n\t\t\tcase State.Hidden:\n\t\t\t\treturn false;\n\t\t\tcase State.Details:\n\t\t\t\tthis._details.widget.scrollTop();\n\t\t\t\treturn true;\n\t\t\tcase State.Loading:\n\t\t\t\treturn !this._isAuto;\n\t\t\tdefault:\n\t\t\t\tthis._list.focusFirst();\n\t\t\t\treturn true;\n\t\t}\n\t}\n\n\tgetFocusedItem(): ISelectedSuggestion | undefined {\n\t\tif (this._state !== State.Hidden\n\t\t\t&& this._state !== State.Empty\n\t\t\t&& this._state !== State.Loading\n\t\t\t&& this._completionModel\n\t\t\t&& this._list.getFocus().length > 0\n\t\t) {\n\n\t\t\treturn {\n\t\t\t\titem: this._list.getFocusedElements()[0],\n\t\t\t\tindex: this._list.getFocus()[0],\n\t\t\t\tmodel: this._completionModel\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\ttoggleDetailsFocus(): void {\n\t\tif (this._state === State.Details) {\n\t\t\t// Should return the focus to the list item.\n\t\t\tthis._list.setFocus(this._list.getFocus());\n\t\t\tthis._setState(State.Open);\n\t\t} else if (this._state === State.Open) {\n\t\t\tthis._setState(State.Details);\n\t\t\tif (!this._isDetailsVisible()) {\n\t\t\t\tthis.toggleDetails(true);\n\t\t\t} else {\n\t\t\t\tthis._details.widget.focus();\n\t\t\t}\n\t\t}\n\t}\n\n\ttoggleDetails(focused: boolean = false): void {\n\t\tif (this._isDetailsVisible()) {\n\t\t\t// hide details widget\n\t\t\tthis._pendingShowDetails.clear();\n\t\t\tthis._ctxSuggestWidgetDetailsVisible.set(false);\n\t\t\tthis._setDetailsVisible(false);\n\t\t\tthis._details.hide();\n\t\t\tthis.element.domNode.classList.remove('shows-details');\n\n\t\t} else if ((canExpandCompletionItem(this._list.getFocusedElements()[0]) || this._explainMode) && (this._state === State.Open || this._state === State.Details || this._state === State.Frozen)) {\n\t\t\t// show details widget (iff possible)\n\t\t\tthis._ctxSuggestWidgetDetailsVisible.set(true);\n\t\t\tthis._setDetailsVisible(true);\n\t\t\tthis._showDetails(false, focused);\n\t\t}\n\t}\n\n\tprivate _showDetails(loading: boolean, focused: boolean): void {\n\t\tthis._pendingShowDetails.value = dom.runAtThisOrScheduleAtNextAnimationFrame(dom.getWindow(this.element.domNode), () => {\n\t\t\tthis._pendingShowDetails.clear();\n\t\t\tthis._details.show();\n\t\t\tlet didFocusDetails = false;\n\t\t\tif (loading) {\n\t\t\t\tthis._details.widget.renderLoading();\n\t\t\t} else {\n\t\t\t\tthis._details.widget.renderItem(this._list.getFocusedElements()[0], this._explainMode);\n\t\t\t}\n\t\t\tif (!this._details.widget.isEmpty) {\n\t\t\t\tthis._positionDetails();\n\t\t\t\tthis.element.domNode.classList.add('shows-details');\n\t\t\t\tif (focused) {\n\t\t\t\t\tthis._details.widget.focus();\n\t\t\t\t\tdidFocusDetails = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._details.hide();\n\t\t\t}\n\t\t\tif (!didFocusDetails) {\n\t\t\t\tthis.editor.focus();\n\t\t\t}\n\t\t});\n\t}\n\n\ttoggleExplainMode(): void {\n\t\tif (this._list.getFocusedElements()[0]) {\n\t\t\tthis._explainMode = !this._explainMode;\n\t\t\tif (!this._isDetailsVisible()) {\n\t\t\t\tthis.toggleDetails();\n\t\t\t} else {\n\t\t\t\tthis._showDetails(false, false);\n\t\t\t}\n\t\t}\n\t}\n\n\tresetPersistedSize(): void {\n\t\tthis._persistedSize.reset();\n\t}\n\n\thideWidget(): void {\n\t\tthis._pendingLayout.clear();\n\t\tthis._pendingShowDetails.clear();\n\t\tthis._loadingTimeout?.dispose();\n\n\t\tthis._setState(State.Hidden);\n\t\tthis._onDidHide.fire(this);\n\t\tthis.element.clearSashHoverState();\n\n\t\t// ensure that a reasonable widget height is persisted so that\n\t\t// accidential \"resize-to-single-items\" cases aren't happening\n\t\tconst dim = this._persistedSize.restore();\n\t\tconst minPersistedHeight = Math.ceil(this.getLayoutInfo().itemHeight * 4.3);\n\t\tif (dim && dim.height < minPersistedHeight) {\n\t\t\tthis._persistedSize.store(dim.with(undefined, minPersistedHeight));\n\t\t}\n\t}\n\n\tisFrozen(): boolean {\n\t\treturn this._state === State.Frozen;\n\t}\n\n\t_afterRender(position: ContentWidgetPositionPreference | null) {\n\t\tif (position === null) {\n\t\t\tif (this._isDetailsVisible()) {\n\t\t\t\tthis._details.hide(); //todo@jrieken soft-hide\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (this._state === State.Empty || this._state === State.Loading) {\n\t\t\t// no special positioning when widget isn't showing list\n\t\t\treturn;\n\t\t}\n\t\tif (this._isDetailsVisible() && !this._details.widget.isEmpty) {\n\t\t\tthis._details.show();\n\t\t}\n\t\tthis._positionDetails();\n\t}\n\n\tprivate _layout(size: dom.Dimension | undefined): void {\n\t\tif (!this.editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this.editor.getDomNode()) {\n\t\t\t// happens when running tests\n\t\t\treturn;\n\t\t}\n\n\t\tconst bodyBox = dom.getClientArea(this.element.domNode.ownerDocument.body);\n\t\tconst info = this.getLayoutInfo();\n\n\t\tif (!size) {\n\t\t\tsize = info.defaultSize;\n\t\t}\n\n\t\tlet height = size.height;\n\t\tlet width = size.width;\n\n\t\t// status bar\n\t\tthis._status.element.style.height = `${info.itemHeight}px`;\n\n\t\tif (this._state === State.Empty || this._state === State.Loading) {\n\t\t\t// showing a message only\n\t\t\theight = info.itemHeight + info.borderHeight;\n\t\t\twidth = info.defaultSize.width / 2;\n\t\t\tthis.element.enableSashes(false, false, false, false);\n\t\t\tthis.element.minSize = this.element.maxSize = new dom.Dimension(width, height);\n\t\t\tthis._contentWidget.setPreference(ContentWidgetPositionPreference.BELOW);\n\n\t\t} else {\n\t\t\t// showing items\n\n\t\t\t// width math\n\t\t\tconst maxWidth = bodyBox.width - info.borderHeight - 2 * info.horizontalPadding;\n\t\t\tif (width > maxWidth) {\n\t\t\t\twidth = maxWidth;\n\t\t\t}\n\t\t\tconst preferredWidth = this._completionModel ? this._completionModel.stats.pLabelLen * info.typicalHalfwidthCharacterWidth : width;\n\n\t\t\t// height math\n\t\t\tconst fullHeight = info.statusBarHeight + this._list.contentHeight + info.borderHeight;\n\t\t\tconst minHeight = info.itemHeight + info.statusBarHeight;\n\t\t\tconst editorBox = dom.getDomNodePagePosition(this.editor.getDomNode());\n\t\t\tconst cursorBox = this.editor.getScrolledVisiblePosition(this.editor.getPosition());\n\t\t\tconst cursorBottom = editorBox.top + cursorBox.top + cursorBox.height;\n\t\t\tconst maxHeightBelow = Math.min(bodyBox.height - cursorBottom - info.verticalPadding, fullHeight);\n\t\t\tconst availableSpaceAbove = editorBox.top + cursorBox.top - info.verticalPadding;\n\t\t\tconst maxHeightAbove = Math.min(availableSpaceAbove, fullHeight);\n\t\t\tlet maxHeight = Math.min(Math.max(maxHeightAbove, maxHeightBelow) + info.borderHeight, fullHeight);\n\n\t\t\tif (height === this._cappedHeight?.capped) {\n\t\t\t\t// Restore the old (wanted) height when the current\n\t\t\t\t// height is capped to fit\n\t\t\t\theight = this._cappedHeight.wanted;\n\t\t\t}\n\n\t\t\tif (height < minHeight) {\n\t\t\t\theight = minHeight;\n\t\t\t}\n\t\t\tif (height > maxHeight) {\n\t\t\t\theight = maxHeight;\n\t\t\t}\n\n\t\t\tconst forceRenderingAboveRequiredSpace = 150;\n\t\t\tif ((height > maxHeightBelow && maxHeightAbove > maxHeightBelow) || (this._forceRenderingAbove && availableSpaceAbove > forceRenderingAboveRequiredSpace)) {\n\t\t\t\tthis._contentWidget.setPreference(ContentWidgetPositionPreference.ABOVE);\n\t\t\t\tthis.element.enableSashes(true, true, false, false);\n\t\t\t\tmaxHeight = maxHeightAbove;\n\t\t\t} else {\n\t\t\t\tthis._contentWidget.setPreference(ContentWidgetPositionPreference.BELOW);\n\t\t\t\tthis.element.enableSashes(false, true, true, false);\n\t\t\t\tmaxHeight = maxHeightBelow;\n\t\t\t}\n\t\t\tthis.element.preferredSize = new dom.Dimension(preferredWidth, info.defaultSize.height);\n\t\t\tthis.element.maxSize = new dom.Dimension(maxWidth, maxHeight);\n\t\t\tthis.element.minSize = new dom.Dimension(220, minHeight);\n\n\t\t\t// Know when the height was capped to fit and remember\n\t\t\t// the wanted height for later. This is required when going\n\t\t\t// left to widen suggestions.\n\t\t\tthis._cappedHeight = height === fullHeight\n\t\t\t\t? { wanted: this._cappedHeight?.wanted ?? size.height, capped: height }\n\t\t\t\t: undefined;\n\t\t}\n\t\tthis._resize(width, height);\n\t}\n\n\tprivate _resize(width: number, height: number): void {\n\n\t\tconst { width: maxWidth, height: maxHeight } = this.element.maxSize;\n\t\twidth = Math.min(maxWidth, width);\n\t\theight = Math.min(maxHeight, height);\n\n\t\tconst { statusBarHeight } = this.getLayoutInfo();\n\t\tthis._list.layout(height - statusBarHeight, width);\n\t\tthis._listElement.style.height = `${height - statusBarHeight}px`;\n\t\tthis.element.layout(height, width);\n\t\tthis._contentWidget.layout();\n\n\t\tthis._positionDetails();\n\t}\n\n\tprivate _positionDetails(): void {\n\t\tif (this._isDetailsVisible()) {\n\t\t\tthis._details.placeAtAnchor(this.element.domNode, this._contentWidget.getPosition()?.preference[0] === ContentWidgetPositionPreference.BELOW);\n\t\t}\n\t}\n\n\tgetLayoutInfo() {\n\t\tconst fontInfo = this.editor.getOption(EditorOption.fontInfo);\n\t\tconst itemHeight = clamp(this.editor.getOption(EditorOption.suggestLineHeight) || fontInfo.lineHeight, 8, 1000);\n\t\tconst statusBarHeight = !this.editor.getOption(EditorOption.suggest).showStatusBar || this._state === State.Empty || this._state === State.Loading ? 0 : itemHeight;\n\t\tconst borderWidth = this._details.widget.getLayoutInfo().borderWidth;\n\t\tconst borderHeight = 2 * borderWidth;\n\n\t\treturn {\n\t\t\titemHeight,\n\t\t\tstatusBarHeight,\n\t\t\tborderWidth,\n\t\t\tborderHeight,\n\t\t\ttypicalHalfwidthCharacterWidth: fontInfo.typicalHalfwidthCharacterWidth,\n\t\t\tverticalPadding: 22,\n\t\t\thorizontalPadding: 14,\n\t\t\tdefaultSize: new dom.Dimension(430, statusBarHeight + 12 * itemHeight)\n\t\t};\n\t}\n\n\tprivate _isDetailsVisible(): boolean {\n\t\treturn this._storageService.getBoolean('expandSuggestionDocs', StorageScope.PROFILE, false);\n\t}\n\n\tprivate _setDetailsVisible(value: boolean) {\n\t\tthis._storageService.store('expandSuggestionDocs', value, StorageScope.PROFILE, StorageTarget.USER);\n\t}\n\n\tforceRenderingAbove() {\n\t\tif (!this._forceRenderingAbove) {\n\t\t\tthis._forceRenderingAbove = true;\n\t\t\tthis._layout(this._persistedSize.restore());\n\t\t}\n\t}\n\n\tstopForceRenderingAbove() {\n\t\tthis._forceRenderingAbove = false;\n\t}\n}\n\nexport class SuggestContentWidget implements IContentWidget {\n\n\treadonly allowEditorOverflow = true;\n\treadonly suppressMouseDown = false;\n\n\tprivate _position?: IPosition | null;\n\tprivate _preference?: ContentWidgetPositionPreference;\n\tprivate _preferenceLocked = false;\n\n\tprivate _added: boolean = false;\n\tprivate _hidden: boolean = false;\n\n\tconstructor(\n\t\tprivate readonly _widget: SuggestWidget,\n\t\tprivate readonly _editor: ICodeEditor\n\t) { }\n\n\tdispose(): void {\n\t\tif (this._added) {\n\t\t\tthis._added = false;\n\t\t\tthis._editor.removeContentWidget(this);\n\t\t}\n\t}\n\n\tgetId(): string {\n\t\treturn 'editor.widget.suggestWidget';\n\t}\n\n\tgetDomNode(): HTMLElement {\n\t\treturn this._widget.element.domNode;\n\t}\n\n\tshow(): void {\n\t\tthis._hidden = false;\n\t\tif (!this._added) {\n\t\t\tthis._added = true;\n\t\t\tthis._editor.addContentWidget(this);\n\t\t}\n\t}\n\n\thide(): void {\n\t\tif (!this._hidden) {\n\t\t\tthis._hidden = true;\n\t\t\tthis.layout();\n\t\t}\n\t}\n\n\tlayout(): void {\n\t\tthis._editor.layoutContentWidget(this);\n\t}\n\n\tgetPosition(): IContentWidgetPosition | null {\n\t\tif (this._hidden || !this._position || !this._preference) {\n\t\t\treturn null;\n\t\t}\n\t\treturn {\n\t\t\tposition: this._position,\n\t\t\tpreference: [this._preference]\n\t\t};\n\t}\n\n\tbeforeRender() {\n\t\tconst { height, width } = this._widget.element.size;\n\t\tconst { borderWidth, horizontalPadding } = this._widget.getLayoutInfo();\n\t\treturn new dom.Dimension(width + 2 * borderWidth + horizontalPadding, height + 2 * borderWidth);\n\t}\n\n\tafterRender(position: ContentWidgetPositionPreference | null) {\n\t\tthis._widget._afterRender(position);\n\t}\n\n\tsetPreference(preference: ContentWidgetPositionPreference) {\n\t\tif (!this._preferenceLocked) {\n\t\t\tthis._preference = preference;\n\t\t}\n\t}\n\n\tlockPreference() {\n\t\tthis._preferenceLocked = true;\n\t}\n\n\tunlockPreference() {\n\t\tthis._preferenceLocked = false;\n\t}\n\n\tsetPosition(position: IPosition | null): void {\n\t\tthis._position = position;\n\t}\n}\n"]}
|