monaco-editor-core 0.56.0-dev-20251125 → 0.56.0-dev-20251218
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/nls.keys.json +1 -1
- package/esm/nls.messages.cs.js +2 -2
- package/esm/nls.messages.de.js +2 -2
- package/esm/nls.messages.es.js +2 -2
- package/esm/nls.messages.fr.js +2 -2
- package/esm/nls.messages.it.js +2 -2
- package/esm/nls.messages.ja.js +2 -2
- package/esm/nls.messages.js +1 -1
- package/esm/nls.messages.json +1 -1
- package/esm/nls.messages.ko.js +2 -2
- package/esm/nls.messages.pl.js +2 -2
- package/esm/nls.messages.pt-br.js +2 -2
- package/esm/nls.messages.ru.js +2 -2
- package/esm/nls.messages.tr.js +2 -2
- package/esm/nls.messages.zh-cn.js +2 -2
- package/esm/nls.messages.zh-tw.js +2 -2
- package/esm/nls.metadata.json +34 -6
- 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/actionbar/actionViewItems.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/findinput/findInput.js +6 -1
- package/esm/vs/base/browser/ui/findinput/findInput.js.map +1 -1
- package/esm/vs/base/browser/ui/inputbox/inputBox.js +17 -1
- package/esm/vs/base/browser/ui/inputbox/inputBox.js.map +1 -1
- package/esm/vs/base/browser/ui/list/list.css +1 -0
- package/esm/vs/base/browser/ui/toggle/toggle.js +78 -6
- package/esm/vs/base/browser/ui/toggle/toggle.js.map +1 -1
- 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/services/editorWorkerService.js +6 -2
- package/esm/vs/editor/browser/services/editorWorkerService.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/editorConfigurationSchema.js +49 -47
- package/esm/vs/editor/common/config/editorConfigurationSchema.js.map +1 -1
- package/esm/vs/editor/common/config/editorOptions.js +410 -410
- 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/editorColorRegistry.js +69 -69
- 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/editorContextKeys.js +47 -47
- 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/modesRegistry.js +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 +58 -57
- 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/editStack.js +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/standaloneStrings.js +11 -11
- 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 +3 -3
- package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
- package/esm/vs/editor/contrib/anchorSelect/browser/anchorSelect.js +6 -6
- package/esm/vs/editor/contrib/bracketMatching/browser/bracketMatching.js +6 -6
- package/esm/vs/editor/contrib/caretOperations/browser/caretOperations.js +2 -2
- package/esm/vs/editor/contrib/caretOperations/browser/transpose.js +1 -1
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js +71 -53
- package/esm/vs/editor/contrib/clipboard/browser/clipboard.js.map +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeAction.js +1 -1
- package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js +29 -29
- package/esm/vs/editor/contrib/codeAction/browser/codeActionContributions.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +3 -3
- package/esm/vs/editor/contrib/codeAction/browser/codeActionMenu.js +8 -8
- package/esm/vs/editor/contrib/codeAction/browser/lightBulbWidget.js +9 -9
- package/esm/vs/editor/contrib/codelens/browser/codelensController.js +2 -2
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerCloseButton.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerHeader.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.js +1 -1
- package/esm/vs/editor/contrib/colorPicker/browser/standaloneColorPicker/standaloneColorPickerActions.js +7 -7
- package/esm/vs/editor/contrib/comment/browser/comment.js +6 -6
- package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +10 -10
- package/esm/vs/editor/contrib/cursorUndo/browser/cursorUndo.js +2 -2
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +4 -4
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +23 -10
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js.map +1 -1
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +8 -8
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +3 -3
- package/esm/vs/editor/contrib/dropOrPasteInto/browser/postEditWidget.js +2 -2
- package/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js +1 -1
- package/esm/vs/editor/contrib/find/browser/findController.js +16 -16
- package/esm/vs/editor/contrib/find/browser/findWidget.js +26 -26
- package/esm/vs/editor/contrib/floatingMenu/browser/floatingMenu.css +1 -1
- package/esm/vs/editor/contrib/folding/browser/folding.js +20 -20
- package/esm/vs/editor/contrib/folding/browser/folding.js.map +1 -1
- package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +9 -9
- package/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +3 -3
- package/esm/vs/editor/contrib/format/browser/formatActions.js +2 -2
- package/esm/vs/editor/contrib/gotoError/browser/gotoError.js +8 -8
- package/esm/vs/editor/contrib/gotoError/browser/gotoErrorWidget.js +14 -14
- package/esm/vs/editor/contrib/gotoSymbol/browser/goToCommands.js +39 -39
- package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesController.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesTree.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget.js +3 -3
- package/esm/vs/editor/contrib/gotoSymbol/browser/referencesModel.js +8 -8
- package/esm/vs/editor/contrib/gotoSymbol/browser/symbolNavigation.js +3 -3
- package/esm/vs/editor/contrib/gpu/browser/gpuActions.js +4 -4
- package/esm/vs/editor/contrib/hover/browser/hover.css +1 -1
- package/esm/vs/editor/contrib/hover/browser/hoverActionIds.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/hoverActions.js +24 -24
- package/esm/vs/editor/contrib/hover/browser/hoverCopyButton.js +2 -2
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js +10 -10
- package/esm/vs/editor/contrib/hover/browser/markdownHoverParticipant.js.map +1 -1
- package/esm/vs/editor/contrib/hover/browser/markerHoverParticipant.js +5 -5
- package/esm/vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace.js +2 -2
- package/esm/vs/editor/contrib/indentation/browser/indentation.js +20 -20
- 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/inlayHints/browser/inlayHintsHover.js +8 -8
- 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 +50 -21
- 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 +25 -27
- package/esm/vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess.js.map +1 -1
- 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 +45 -7
- package/esm/vs/platform/quickinput/browser/quickInput.js +51 -15
- 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/quickInputBox.js +13 -1
- package/esm/vs/platform/quickinput/browser/quickInputBox.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputController.js +22 -12
- package/esm/vs/platform/quickinput/browser/quickInputController.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputList.js +17 -12
- package/esm/vs/platform/quickinput/browser/quickInputList.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js +36 -8
- package/esm/vs/platform/quickinput/browser/quickInputUtils.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.js +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js +3 -3
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeController.js.map +1 -1
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js +8 -4
- package/esm/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.js.map +1 -1
- package/esm/vs/platform/quickinput/common/quickInput.js.map +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(1490, 'Background color of the suggest widget.'));
|
|
46
|
+
registerColor('editorSuggestWidget.border', editorWidgetBorder, nls.localize(1491, 'Border color of the suggest widget.'));
|
|
47
|
+
export const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', editorForeground, nls.localize(1492, 'Foreground color of the suggest widget.'));
|
|
48
|
+
registerColor('editorSuggestWidget.selectedForeground', quickInputListFocusForeground, nls.localize(1493, 'Foreground color of the selected entry in the suggest widget.'));
|
|
49
|
+
registerColor('editorSuggestWidget.selectedIconForeground', quickInputListFocusIconForeground, nls.localize(1494, 'Icon foreground color of the selected entry in the suggest widget.'));
|
|
50
|
+
export const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', quickInputListFocusBackground, nls.localize(1495, 'Background color of the selected entry in the suggest widget.'));
|
|
51
|
+
registerColor('editorSuggestWidget.highlightForeground', listHighlightForeground, nls.localize(1496, 'Color of the match highlights in the suggest widget.'));
|
|
52
|
+
registerColor('editorSuggestWidget.focusHighlightForeground', listFocusHighlightForeground, nls.localize(1497, 'Color of the match highlights in the suggest widget when an item is focused.'));
|
|
53
|
+
registerColor('editorSuggestWidgetStatus.foreground', transparent(editorSuggestWidgetForeground, .5), nls.localize(1498, '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(1499, "Loading..."); }
|
|
82
|
+
static { this.NO_SUGGESTIONS_MESSAGE = nls.localize(1500, "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(1501, "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(1502, '{0} {1}, {2}, {3}', label, detail, description, kindLabel);
|
|
178
177
|
}
|
|
179
178
|
else if (detail) {
|
|
180
|
-
label = nls.localize(
|
|
179
|
+
label = nls.localize(1503, '{0} {1}, {2}', label, detail, kindLabel);
|
|
181
180
|
}
|
|
182
181
|
else if (description) {
|
|
183
|
-
label = nls.localize(
|
|
182
|
+
label = nls.localize(1504, '{0}, {1}, {2}', label, description, kindLabel);
|
|
184
183
|
}
|
|
185
184
|
}
|
|
186
185
|
else {
|
|
187
|
-
label = nls.localize(
|
|
186
|
+
label = nls.localize(1505, '{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(1506, "{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"]}
|