monaco-editor-core 0.55.0-dev-20251026 → 0.55.0-dev-20251028

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/esm/nls.keys.json +1 -1
  2. package/esm/nls.messages.cs.js +2 -2
  3. package/esm/nls.messages.de.js +2 -2
  4. package/esm/nls.messages.es.js +2 -2
  5. package/esm/nls.messages.fr.js +2 -2
  6. package/esm/nls.messages.it.js +2 -2
  7. package/esm/nls.messages.ja.js +2 -2
  8. package/esm/nls.messages.js +1 -1
  9. package/esm/nls.messages.json +1 -1
  10. package/esm/nls.messages.ko.js +2 -2
  11. package/esm/nls.messages.pl.js +2 -2
  12. package/esm/nls.messages.pt-br.js +2 -2
  13. package/esm/nls.messages.ru.js +2 -2
  14. package/esm/nls.messages.tr.js +2 -2
  15. package/esm/nls.messages.zh-cn.js +2 -2
  16. package/esm/nls.messages.zh-tw.js +2 -2
  17. package/esm/nls.metadata.json +2 -0
  18. package/esm/vs/base/browser/ui/actionbar/actionbar.js +17 -0
  19. package/esm/vs/base/browser/ui/actionbar/actionbar.js.map +1 -1
  20. package/esm/vs/base/browser/ui/iconLabel/iconLabel.js +2 -1
  21. package/esm/vs/base/browser/ui/iconLabel/iconLabel.js.map +1 -1
  22. package/esm/vs/base/browser/ui/scrollbar/media/scrollbars.css +4 -0
  23. package/esm/vs/base/browser/ui/toolbar/toolbar.css +11 -0
  24. package/esm/vs/base/browser/ui/toolbar/toolbar.js +115 -2
  25. package/esm/vs/base/browser/ui/toolbar/toolbar.js.map +1 -1
  26. package/esm/vs/base/common/jsonSchema.js.map +1 -1
  27. package/esm/vs/editor/common/cursor/cursorWordOperations.js +14 -4
  28. package/esm/vs/editor/common/cursor/cursorWordOperations.js.map +1 -1
  29. package/esm/vs/editor/common/languages/textToHtmlTokenizer.js +21 -10
  30. package/esm/vs/editor/common/languages/textToHtmlTokenizer.js.map +1 -1
  31. package/esm/vs/editor/common/languages.js +5 -5
  32. package/esm/vs/editor/common/languages.js.map +1 -1
  33. package/esm/vs/editor/common/standalone/standaloneEnums.js +5 -5
  34. package/esm/vs/editor/common/standalone/standaloneEnums.js.map +1 -1
  35. package/esm/vs/editor/contrib/codeAction/browser/codeActionCommands.js.map +1 -1
  36. package/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js.map +1 -1
  37. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +5 -5
  38. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  39. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +2 -2
  40. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
  41. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +22 -24
  42. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
  43. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +16 -22
  44. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
  45. package/esm/vs/editor/contrib/inlineCompletions/browser/telemetry.js.map +1 -1
  46. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
  47. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +1 -6
  48. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
  49. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +6 -2
  50. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  51. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewInterface.js.map +1 -1
  52. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js +6 -6
  53. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.js.map +1 -1
  54. package/esm/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.js +6 -0
  55. package/esm/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.js.map +1 -1
  56. package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js +2 -2
  57. package/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js.map +1 -1
  58. package/esm/vs/editor/editor.api.d.ts +20 -18
  59. package/esm/vs/editor/standalone/browser/standaloneLanguages.js +1 -1
  60. package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
  61. package/esm/vs/platform/theme/common/colorUtils.js +2 -2
  62. package/esm/vs/platform/theme/common/colors/miscColors.js +5 -4
  63. package/esm/vs/platform/theme/common/colors/miscColors.js.map +1 -1
  64. package/esm/vs/platform/theme/common/colors/quickpickColors.js +9 -9
  65. package/esm/vs/platform/theme/common/colors/searchColors.js +3 -3
  66. package/esm/vs/platform/theme/common/iconRegistry.js +6 -6
  67. package/esm/vs/platform/undoRedo/common/undoRedoService.js +20 -20
  68. package/esm/vs/platform/workspace/common/workspace.js +1 -1
  69. package/monaco.d.ts +20 -18
  70. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.ts"],"names":[],"mappings":"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","file":"inlineEditsCustomView.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 *--------------------------------------------------------------------------------------------*/\nimport { getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorun, constObservable, derived, derivedObservableWithCache, IObservable, IReader, observableValue } from '../../../../../../../base/common/observable.js';\nimport { editorBackground } from '../../../../../../../platform/theme/common/colorRegistry.js';\nimport { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { LineSource, renderLines, RenderOptions } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { InlineCompletionDisplayLocation, InlineCompletionDisplayLocationKind } from '../../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../../common/languages/language.js';\nimport { LineTokens, TokenArray } from '../../../../../../common/tokens/lineTokens.js';\nimport { IInlineEditsView, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorsuccessfulBackground } from '../theme.js';\nimport { getContentRenderWidth, maxContentWidthInRange, rectToProps } from '../utils/utils.js';\n\nconst MIN_END_OF_LINE_PADDING = 14;\nconst PADDING_VERTICALLY = 0;\nconst PADDING_HORIZONTALLY = 4;\nconst HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW = 4;\nconst VERTICAL_OFFSET_WHEN_ABOVE_BELOW = 2;\n// !! minEndOfLinePadding should always be larger than paddingHorizontally + horizontalOffsetWhenAboveBelow\n\nexport class InlineEditsCustomView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick = this._register(new Emitter<IMouseEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tprivate readonly _isHovered = observableValue(this, false);\n\treadonly isHovered: IObservable<boolean> = this._isHovered;\n\tprivate readonly _viewRef = n.ref<HTMLDivElement>();\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\treadonly minEditorScrollHeight: IObservable<number>;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tdisplayLocation: IObservable<InlineCompletionDisplayLocation | undefined>,\n\t\ttabAction: IObservable<InlineEditTabAction>,\n\t\t@IThemeService themeService: IThemeService,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tconst styles = tabAction.map((v, reader) => {\n\t\t\tlet border;\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: border = inlineEditIndicatorSecondaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Jump: border = inlineEditIndicatorPrimaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Accept: border = inlineEditIndicatorsuccessfulBackground; break;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tborder: getEditorBlendedColor(border, themeService).read(reader).toString(),\n\t\t\t\tbackground: asCssVariable(editorBackground)\n\t\t\t};\n\t\t});\n\n\t\tconst state = displayLocation.map(dl => dl ? this.getState(dl) : undefined);\n\n\t\tconst view = state.map(s => s ? this.getRendering(s, styles) : undefined);\n\n\t\tthis.minEditorScrollHeight = derived(this, reader => {\n\t\t\tconst s = state.read(reader);\n\t\t\tif (!s) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn s.rect.read(reader).bottom + this._editor.getScrollTop();\n\t\t});\n\n\t\tconst overlay = n.div({\n\t\t\tclass: 'inline-edits-custom-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: 'block',\n\t\t\t},\n\t\t}, [view]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: overlay.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derivedObservableWithCache<number>(this, (reader, prev) => {\n\t\t\t\tconst s = state.read(reader);\n\t\t\t\tif (!s) { return prev ?? 0; }\n\n\t\t\t\tconst current = s.rect.map(rect => rect.right).read(reader)\n\t\t\t\t\t+ this._editorObs.layoutInfoVerticalScrollbarWidth.read(reader)\n\t\t\t\t\t+ PADDING_HORIZONTALLY\n\t\t\t\t\t- this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\t\treturn Math.max(prev ?? 0, current); // will run into infinite loop otherwise TODO: fix this\n\t\t\t}).recomputeInitiallyAndOnChange(this._store),\n\t\t}));\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst v = view.read(reader);\n\t\t\tif (!v) { this._isHovered.set(false, undefined); return; }\n\t\t\tthis._isHovered.set(overlay.isHovered.read(reader), undefined);\n\t\t}));\n\t}\n\n\t// TODO: this is very similar to side by side `fitsInsideViewport`, try to use the same function\n\tprivate fitsInsideViewport(range: LineRange, displayLabel: string, reader: IReader | undefined): boolean {\n\t\tconst editorWidth = this._editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = this._editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = this._editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? this._editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(this._editorObs, range, undefined);\n\t\tconst maxModifiedContent = getContentRenderWidth(displayLabel, this._editor, this._editor.getModel()!);\n\t\tconst padding = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\n\t\treturn maxOriginalContent + maxModifiedContent + padding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate getState(displayLocation: InlineCompletionDisplayLocation): { rect: IObservable<Rect>; label: string; kind: InlineCompletionDisplayLocationKind } {\n\n\t\tconst contentState = derived(this, (reader) => {\n\t\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t\tconst startColumn = displayLocation.range.startColumn;\n\t\t\tconst endColumn = displayLocation.range.endColumn;\n\t\t\tconst lineCount = this._editor.getModel()?.getLineCount() ?? 0;\n\n\t\t\tconst lineWidth = maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber, startLineNumber + 1), reader);\n\t\t\tconst lineWidthBelow = startLineNumber + 1 <= lineCount ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber + 1, startLineNumber + 2), reader) : undefined;\n\t\t\tconst lineWidthAbove = startLineNumber - 1 >= 1 ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber - 1, startLineNumber), reader) : undefined;\n\t\t\tconst startContentLeftOffset = this._editor.getOffsetForColumn(startLineNumber, startColumn);\n\t\t\tconst endContentLeftOffset = this._editor.getOffsetForColumn(endLineNumber, endColumn);\n\n\t\t\treturn {\n\t\t\t\tlineWidth,\n\t\t\t\tlineWidthBelow,\n\t\t\t\tlineWidthAbove,\n\t\t\t\tstartContentLeftOffset,\n\t\t\t\tendContentLeftOffset\n\t\t\t};\n\t\t});\n\n\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t// only check viewport once in the beginning when rendering the view\n\t\tconst fitsInsideViewport = this.fitsInsideViewport(new LineRange(startLineNumber, endLineNumber + 1), displayLocation.label, undefined);\n\n\t\tconst rect = derived(this, reader => {\n\t\t\tconst w = this._editorObs.getOption(EditorOption.fontInfo).read(reader).typicalHalfwidthCharacterWidth;\n\n\t\t\tconst { lineWidth, lineWidthBelow, lineWidthAbove, startContentLeftOffset, endContentLeftOffset } = contentState.read(reader);\n\n\t\t\tconst contentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(startLineNumber).recomputeInitiallyAndOnChange(reader.store).read(reader);\n\t\t\tconst scrollTop = this._editorObs.scrollTop.read(reader);\n\t\t\tconst scrollLeft = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tlet position: 'end' | 'below' | 'above';\n\t\t\tif (startLineNumber === endLineNumber && endContentLeftOffset + 5 * w >= lineWidth && fitsInsideViewport) {\n\t\t\t\tposition = 'end'; // Render at the end of the line if the range ends almost at the end of the line\n\t\t\t} else if (lineWidthBelow !== undefined && lineWidthBelow + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'below'; // Render Below if possible\n\t\t\t} else if (lineWidthAbove !== undefined && lineWidthAbove + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'above'; // Render Above if possible\n\t\t\t} else {\n\t\t\t\tposition = 'end'; // Render at the end of the line otherwise\n\t\t\t}\n\n\t\t\tlet topOfLine;\n\t\t\tlet contentStartOffset;\n\t\t\tlet deltaX = 0;\n\t\t\tlet deltaY = 0;\n\n\t\t\tswitch (position) {\n\t\t\t\tcase 'end': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber);\n\t\t\t\t\tcontentStartOffset = lineWidth;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'below': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber + 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'above': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber - 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = -PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst textRect = Rect.fromLeftTopWidthHeight(\n\t\t\t\tcontentLeft + contentStartOffset - scrollLeft,\n\t\t\t\ttopOfLine - scrollTop,\n\t\t\t\tw * displayLocation.label.length,\n\t\t\t\tlineHeight\n\t\t\t);\n\n\t\t\treturn textRect.withMargin(PADDING_VERTICALLY, PADDING_HORIZONTALLY).translateX(deltaX).translateY(deltaY);\n\t\t});\n\n\t\treturn {\n\t\t\trect,\n\t\t\tlabel: displayLocation.label,\n\t\t\tkind: displayLocation.kind\n\t\t};\n\t}\n\n\tprivate getRendering(state: { rect: IObservable<Rect>; label: string; kind: InlineCompletionDisplayLocationKind }, styles: IObservable<{ background: string; border: string }>) {\n\n\t\tconst line = document.createElement('div');\n\t\tconst t = this._editor.getModel()!.tokenization.tokenizeLinesAt(1, [state.label])?.[0];\n\t\tlet tokens: LineTokens;\n\t\tif (t && state.kind === InlineCompletionDisplayLocationKind.Code) {\n\t\t\ttokens = TokenArray.fromLineTokens(t).toLineTokens(state.label, this._languageService.languageIdCodec);\n\t\t} else {\n\t\t\ttokens = LineTokens.createEmpty(state.label, this._languageService.languageIdCodec);\n\t\t}\n\n\t\tconst result = renderLines(new LineSource([tokens]), RenderOptions.fromEditor(this._editor).withSetWidth(false).withScrollBeyondLastColumn(0), [], line, true);\n\t\tline.style.width = `${result.minWidthInPx}px`;\n\n\t\tconst rect = state.rect.map(r => r.withMargin(0, PADDING_HORIZONTALLY));\n\n\t\treturn n.div({\n\t\t\tclass: 'collapsedView',\n\t\t\tref: this._viewRef,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\t...rectToProps(reader => rect.read(reader)),\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tboxSizing: 'border-box',\n\t\t\t\tcursor: 'pointer',\n\t\t\t\tborder: styles.map(s => `1px solid ${s.border}`),\n\t\t\t\tborderRadius: '4px',\n\t\t\t\tbackgroundColor: styles.map(s => s.background),\n\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t},\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => { this._onDidClick.fire(new StandardMouseEvent(getWindow(e), e)); }\n\t\t}, [\n\t\t\tline\n\t\t]);\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorun, constObservable, derived, derivedObservableWithCache, IObservable, IReader, observableValue } from '../../../../../../../base/common/observable.js';\nimport { editorBackground } from '../../../../../../../platform/theme/common/colorRegistry.js';\nimport { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { LineSource, renderLines, RenderOptions } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { InlineCompletionDisplayLocation, InlineCompletionDisplayLocationKind } from '../../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../../common/languages/language.js';\nimport { LineTokens, TokenArray } from '../../../../../../common/tokens/lineTokens.js';\nimport { IInlineEditsView, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorsuccessfulBackground } from '../theme.js';\nimport { getContentRenderWidth, maxContentWidthInRange, rectToProps } from '../utils/utils.js';\n\nconst MIN_END_OF_LINE_PADDING = 14;\nconst PADDING_VERTICALLY = 0;\nconst PADDING_HORIZONTALLY = 4;\nconst HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW = 4;\nconst VERTICAL_OFFSET_WHEN_ABOVE_BELOW = 2;\n// !! minEndOfLinePadding should always be larger than paddingHorizontally + horizontalOffsetWhenAboveBelow\n\nexport class InlineEditsCustomView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick = this._register(new Emitter<IMouseEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tprivate readonly _isHovered = observableValue(this, false);\n\treadonly isHovered: IObservable<boolean> = this._isHovered;\n\tprivate readonly _viewRef = n.ref<HTMLDivElement>();\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\treadonly minEditorScrollHeight: IObservable<number>;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tdisplayLocation: IObservable<InlineCompletionDisplayLocation | undefined>,\n\t\ttabAction: IObservable<InlineEditTabAction>,\n\t\t@IThemeService themeService: IThemeService,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tconst styles = tabAction.map((v, reader) => {\n\t\t\tlet border;\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: border = inlineEditIndicatorSecondaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Jump: border = inlineEditIndicatorPrimaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Accept: border = inlineEditIndicatorsuccessfulBackground; break;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tborder: getEditorBlendedColor(border, themeService).read(reader).toString(),\n\t\t\t\tbackground: asCssVariable(editorBackground)\n\t\t\t};\n\t\t});\n\n\t\tconst state = displayLocation.map(dl => dl ? this.getState(dl) : undefined);\n\n\t\tconst view = state.map(s => s ? this.getRendering(s, styles) : undefined);\n\n\t\tthis.minEditorScrollHeight = derived(this, reader => {\n\t\t\tconst s = state.read(reader);\n\t\t\tif (!s) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn s.rect.read(reader).bottom + this._editor.getScrollTop();\n\t\t});\n\n\t\tconst overlay = n.div({\n\t\t\tclass: 'inline-edits-custom-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: 'block',\n\t\t\t},\n\t\t}, [view]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: overlay.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derivedObservableWithCache<number>(this, (reader, prev) => {\n\t\t\t\tconst s = state.read(reader);\n\t\t\t\tif (!s) { return prev ?? 0; }\n\n\t\t\t\tconst current = s.rect.map(rect => rect.right).read(reader)\n\t\t\t\t\t+ this._editorObs.layoutInfoVerticalScrollbarWidth.read(reader)\n\t\t\t\t\t+ PADDING_HORIZONTALLY\n\t\t\t\t\t- this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\t\treturn Math.max(prev ?? 0, current); // will run into infinite loop otherwise TODO: fix this\n\t\t\t}).recomputeInitiallyAndOnChange(this._store),\n\t\t}));\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst v = view.read(reader);\n\t\t\tif (!v) { this._isHovered.set(false, undefined); return; }\n\t\t\tthis._isHovered.set(overlay.isHovered.read(reader), undefined);\n\t\t}));\n\t}\n\n\t// TODO: this is very similar to side by side `fitsInsideViewport`, try to use the same function\n\tprivate fitsInsideViewport(range: LineRange, displayLabel: string, reader: IReader | undefined): boolean {\n\t\tconst editorWidth = this._editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = this._editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = this._editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? this._editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(this._editorObs, range, undefined);\n\t\tconst maxModifiedContent = getContentRenderWidth(displayLabel, this._editor, this._editor.getModel()!);\n\t\tconst padding = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\n\t\treturn maxOriginalContent + maxModifiedContent + padding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate getState(displayLocation: InlineCompletionDisplayLocation): { rect: IObservable<Rect>; label: string; kind: InlineCompletionDisplayLocationKind } {\n\n\t\tconst contentState = derived(this, (reader) => {\n\t\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t\tconst startColumn = displayLocation.range.startColumn;\n\t\t\tconst endColumn = displayLocation.range.endColumn;\n\t\t\tconst lineCount = this._editor.getModel()?.getLineCount() ?? 0;\n\n\t\t\tconst lineWidth = maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber, startLineNumber + 1), reader);\n\t\t\tconst lineWidthBelow = startLineNumber + 1 <= lineCount ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber + 1, startLineNumber + 2), reader) : undefined;\n\t\t\tconst lineWidthAbove = startLineNumber - 1 >= 1 ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber - 1, startLineNumber), reader) : undefined;\n\t\t\tconst startContentLeftOffset = this._editor.getOffsetForColumn(startLineNumber, startColumn);\n\t\t\tconst endContentLeftOffset = this._editor.getOffsetForColumn(endLineNumber, endColumn);\n\n\t\t\treturn {\n\t\t\t\tlineWidth,\n\t\t\t\tlineWidthBelow,\n\t\t\t\tlineWidthAbove,\n\t\t\t\tstartContentLeftOffset,\n\t\t\t\tendContentLeftOffset\n\t\t\t};\n\t\t});\n\n\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t// only check viewport once in the beginning when rendering the view\n\t\tconst fitsInsideViewport = this.fitsInsideViewport(new LineRange(startLineNumber, endLineNumber + 1), displayLocation.label, undefined);\n\n\t\tconst rect = derived(this, reader => {\n\t\t\tconst w = this._editorObs.getOption(EditorOption.fontInfo).read(reader).typicalHalfwidthCharacterWidth;\n\n\t\t\tconst { lineWidth, lineWidthBelow, lineWidthAbove, startContentLeftOffset, endContentLeftOffset } = contentState.read(reader);\n\n\t\t\tconst contentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(startLineNumber).recomputeInitiallyAndOnChange(reader.store).read(reader);\n\t\t\tconst scrollTop = this._editorObs.scrollTop.read(reader);\n\t\t\tconst scrollLeft = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tlet position: 'end' | 'below' | 'above';\n\t\t\tif (startLineNumber === endLineNumber && endContentLeftOffset + 5 * w >= lineWidth && fitsInsideViewport) {\n\t\t\t\tposition = 'end'; // Render at the end of the line if the range ends almost at the end of the line\n\t\t\t} else if (lineWidthBelow !== undefined && lineWidthBelow + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'below'; // Render Below if possible\n\t\t\t} else if (lineWidthAbove !== undefined && lineWidthAbove + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'above'; // Render Above if possible\n\t\t\t} else {\n\t\t\t\tposition = 'end'; // Render at the end of the line otherwise\n\t\t\t}\n\n\t\t\tlet topOfLine;\n\t\t\tlet contentStartOffset;\n\t\t\tlet deltaX = 0;\n\t\t\tlet deltaY = 0;\n\n\t\t\tswitch (position) {\n\t\t\t\tcase 'end': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber);\n\t\t\t\t\tcontentStartOffset = lineWidth;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'below': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber + 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'above': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber - 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = -PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst textRect = Rect.fromLeftTopWidthHeight(\n\t\t\t\tcontentLeft + contentStartOffset - scrollLeft,\n\t\t\t\ttopOfLine - scrollTop,\n\t\t\t\tw * displayLocation.label.length,\n\t\t\t\tlineHeight\n\t\t\t);\n\n\t\t\treturn textRect.withMargin(PADDING_VERTICALLY, PADDING_HORIZONTALLY).translateX(deltaX).translateY(deltaY);\n\t\t});\n\n\t\treturn {\n\t\t\trect,\n\t\t\tlabel: displayLocation.label,\n\t\t\tkind: displayLocation.kind\n\t\t};\n\t}\n\n\tprivate getRendering(state: { rect: IObservable<Rect>; label: string; kind: InlineCompletionDisplayLocationKind }, styles: IObservable<{ background: string; border: string }>) {\n\n\t\tconst line = document.createElement('div');\n\t\tconst t = this._editor.getModel()!.tokenization.tokenizeLinesAt(1, [state.label])?.[0];\n\t\tlet tokens: LineTokens;\n\t\tif (t && state.kind === InlineCompletionDisplayLocationKind.Code) {\n\t\t\ttokens = TokenArray.fromLineTokens(t).toLineTokens(state.label, this._languageService.languageIdCodec);\n\t\t} else {\n\t\t\ttokens = LineTokens.createEmpty(state.label, this._languageService.languageIdCodec);\n\t\t}\n\n\t\tconst result = renderLines(new LineSource([tokens]), RenderOptions.fromEditor(this._editor).withSetWidth(false).withScrollBeyondLastColumn(0), [], line, true);\n\t\tline.style.width = `${result.minWidthInPx}px`;\n\n\t\tconst rect = state.rect.map(r => r.withMargin(0, PADDING_HORIZONTALLY));\n\n\t\treturn n.div({\n\t\t\tclass: 'collapsedView',\n\t\t\tref: this._viewRef,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\t...rectToProps(reader => rect.read(reader)),\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tboxSizing: 'border-box',\n\t\t\t\tcursor: 'pointer',\n\t\t\t\tborder: styles.map(s => `1px solid ${s.border}`),\n\t\t\t\tborderRadius: '4px',\n\t\t\t\tbackgroundColor: styles.map(s => s.background),\n\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t},\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => { this._onDidClick.fire(new StandardMouseEvent(getWindow(e), e)); }\n\t\t}, [\n\t\t\tline\n\t\t]);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.ts","vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViews/inlineEditsCustomView.ts"],"names":[],"mappings":"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","file":"inlineEditsCustomView.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 *--------------------------------------------------------------------------------------------*/\nimport { getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorun, constObservable, derived, derivedObservableWithCache, IObservable, IReader, observableValue } from '../../../../../../../base/common/observable.js';\nimport { editorBackground } from '../../../../../../../platform/theme/common/colorRegistry.js';\nimport { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { LineSource, renderLines, RenderOptions } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { InlineCompletionHintStyle } from '../../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../../common/languages/language.js';\nimport { LineTokens, TokenArray } from '../../../../../../common/tokens/lineTokens.js';\nimport { InlineSuggestHint } from '../../../model/inlineSuggestionItem.js';\nimport { IInlineEditsView, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorsuccessfulBackground } from '../theme.js';\nimport { getContentRenderWidth, maxContentWidthInRange, rectToProps } from '../utils/utils.js';\n\nconst MIN_END_OF_LINE_PADDING = 14;\nconst PADDING_VERTICALLY = 0;\nconst PADDING_HORIZONTALLY = 4;\nconst HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW = 4;\nconst VERTICAL_OFFSET_WHEN_ABOVE_BELOW = 2;\n// !! minEndOfLinePadding should always be larger than paddingHorizontally + horizontalOffsetWhenAboveBelow\n\nexport class InlineEditsCustomView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick = this._register(new Emitter<IMouseEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tprivate readonly _isHovered = observableValue(this, false);\n\treadonly isHovered: IObservable<boolean> = this._isHovered;\n\tprivate readonly _viewRef = n.ref<HTMLDivElement>();\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\treadonly minEditorScrollHeight: IObservable<number>;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tdisplayLocation: IObservable<InlineSuggestHint | undefined>,\n\t\ttabAction: IObservable<InlineEditTabAction>,\n\t\t@IThemeService themeService: IThemeService,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tconst styles = tabAction.map((v, reader) => {\n\t\t\tlet border;\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: border = inlineEditIndicatorSecondaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Jump: border = inlineEditIndicatorPrimaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Accept: border = inlineEditIndicatorsuccessfulBackground; break;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tborder: getEditorBlendedColor(border, themeService).read(reader).toString(),\n\t\t\t\tbackground: asCssVariable(editorBackground)\n\t\t\t};\n\t\t});\n\n\t\tconst state = displayLocation.map(dl => dl ? this.getState(dl) : undefined);\n\n\t\tconst view = state.map(s => s ? this.getRendering(s, styles) : undefined);\n\n\t\tthis.minEditorScrollHeight = derived(this, reader => {\n\t\t\tconst s = state.read(reader);\n\t\t\tif (!s) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn s.rect.read(reader).bottom + this._editor.getScrollTop();\n\t\t});\n\n\t\tconst overlay = n.div({\n\t\t\tclass: 'inline-edits-custom-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: 'block',\n\t\t\t},\n\t\t}, [view]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: overlay.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derivedObservableWithCache<number>(this, (reader, prev) => {\n\t\t\t\tconst s = state.read(reader);\n\t\t\t\tif (!s) { return prev ?? 0; }\n\n\t\t\t\tconst current = s.rect.map(rect => rect.right).read(reader)\n\t\t\t\t\t+ this._editorObs.layoutInfoVerticalScrollbarWidth.read(reader)\n\t\t\t\t\t+ PADDING_HORIZONTALLY\n\t\t\t\t\t- this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\t\treturn Math.max(prev ?? 0, current); // will run into infinite loop otherwise TODO: fix this\n\t\t\t}).recomputeInitiallyAndOnChange(this._store),\n\t\t}));\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst v = view.read(reader);\n\t\t\tif (!v) { this._isHovered.set(false, undefined); return; }\n\t\t\tthis._isHovered.set(overlay.isHovered.read(reader), undefined);\n\t\t}));\n\t}\n\n\t// TODO: this is very similar to side by side `fitsInsideViewport`, try to use the same function\n\tprivate fitsInsideViewport(range: LineRange, displayLabel: string, reader: IReader | undefined): boolean {\n\t\tconst editorWidth = this._editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = this._editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = this._editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? this._editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(this._editorObs, range, undefined);\n\t\tconst maxModifiedContent = getContentRenderWidth(displayLabel, this._editor, this._editor.getModel()!);\n\t\tconst padding = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\n\t\treturn maxOriginalContent + maxModifiedContent + padding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate getState(displayLocation: InlineSuggestHint): { rect: IObservable<Rect>; label: string; kind: InlineCompletionHintStyle } {\n\n\t\tconst contentState = derived(this, (reader) => {\n\t\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t\tconst startColumn = displayLocation.range.startColumn;\n\t\t\tconst endColumn = displayLocation.range.endColumn;\n\t\t\tconst lineCount = this._editor.getModel()?.getLineCount() ?? 0;\n\n\t\t\tconst lineWidth = maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber, startLineNumber + 1), reader);\n\t\t\tconst lineWidthBelow = startLineNumber + 1 <= lineCount ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber + 1, startLineNumber + 2), reader) : undefined;\n\t\t\tconst lineWidthAbove = startLineNumber - 1 >= 1 ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber - 1, startLineNumber), reader) : undefined;\n\t\t\tconst startContentLeftOffset = this._editor.getOffsetForColumn(startLineNumber, startColumn);\n\t\t\tconst endContentLeftOffset = this._editor.getOffsetForColumn(endLineNumber, endColumn);\n\n\t\t\treturn {\n\t\t\t\tlineWidth,\n\t\t\t\tlineWidthBelow,\n\t\t\t\tlineWidthAbove,\n\t\t\t\tstartContentLeftOffset,\n\t\t\t\tendContentLeftOffset\n\t\t\t};\n\t\t});\n\n\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t// only check viewport once in the beginning when rendering the view\n\t\tconst fitsInsideViewport = this.fitsInsideViewport(new LineRange(startLineNumber, endLineNumber + 1), displayLocation.content, undefined);\n\n\t\tconst rect = derived(this, reader => {\n\t\t\tconst w = this._editorObs.getOption(EditorOption.fontInfo).read(reader).typicalHalfwidthCharacterWidth;\n\n\t\t\tconst { lineWidth, lineWidthBelow, lineWidthAbove, startContentLeftOffset, endContentLeftOffset } = contentState.read(reader);\n\n\t\t\tconst contentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(startLineNumber).recomputeInitiallyAndOnChange(reader.store).read(reader);\n\t\t\tconst scrollTop = this._editorObs.scrollTop.read(reader);\n\t\t\tconst scrollLeft = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tlet position: 'end' | 'below' | 'above';\n\t\t\tif (startLineNumber === endLineNumber && endContentLeftOffset + 5 * w >= lineWidth && fitsInsideViewport) {\n\t\t\t\tposition = 'end'; // Render at the end of the line if the range ends almost at the end of the line\n\t\t\t} else if (lineWidthBelow !== undefined && lineWidthBelow + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'below'; // Render Below if possible\n\t\t\t} else if (lineWidthAbove !== undefined && lineWidthAbove + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'above'; // Render Above if possible\n\t\t\t} else {\n\t\t\t\tposition = 'end'; // Render at the end of the line otherwise\n\t\t\t}\n\n\t\t\tlet topOfLine;\n\t\t\tlet contentStartOffset;\n\t\t\tlet deltaX = 0;\n\t\t\tlet deltaY = 0;\n\n\t\t\tswitch (position) {\n\t\t\t\tcase 'end': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber);\n\t\t\t\t\tcontentStartOffset = lineWidth;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'below': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber + 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'above': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber - 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = -PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst textRect = Rect.fromLeftTopWidthHeight(\n\t\t\t\tcontentLeft + contentStartOffset - scrollLeft,\n\t\t\t\ttopOfLine - scrollTop,\n\t\t\t\tw * displayLocation.content.length,\n\t\t\t\tlineHeight\n\t\t\t);\n\n\t\t\treturn textRect.withMargin(PADDING_VERTICALLY, PADDING_HORIZONTALLY).translateX(deltaX).translateY(deltaY);\n\t\t});\n\n\t\treturn {\n\t\t\trect,\n\t\t\tlabel: displayLocation.content,\n\t\t\tkind: displayLocation.style\n\t\t};\n\t}\n\n\tprivate getRendering(state: { rect: IObservable<Rect>; label: string; kind: InlineCompletionHintStyle }, styles: IObservable<{ background: string; border: string }>) {\n\n\t\tconst line = document.createElement('div');\n\t\tconst t = this._editor.getModel()!.tokenization.tokenizeLinesAt(1, [state.label])?.[0];\n\t\tlet tokens: LineTokens;\n\t\tif (t && state.kind === InlineCompletionHintStyle.Code) {\n\t\t\ttokens = TokenArray.fromLineTokens(t).toLineTokens(state.label, this._languageService.languageIdCodec);\n\t\t} else {\n\t\t\ttokens = LineTokens.createEmpty(state.label, this._languageService.languageIdCodec);\n\t\t}\n\n\t\tconst result = renderLines(new LineSource([tokens]), RenderOptions.fromEditor(this._editor).withSetWidth(false).withScrollBeyondLastColumn(0), [], line, true);\n\t\tline.style.width = `${result.minWidthInPx}px`;\n\n\t\tconst rect = state.rect.map(r => r.withMargin(0, PADDING_HORIZONTALLY));\n\n\t\treturn n.div({\n\t\t\tclass: 'collapsedView',\n\t\t\tref: this._viewRef,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\t...rectToProps(reader => rect.read(reader)),\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tboxSizing: 'border-box',\n\t\t\t\tcursor: 'pointer',\n\t\t\t\tborder: styles.map(s => `1px solid ${s.border}`),\n\t\t\t\tborderRadius: '4px',\n\t\t\t\tbackgroundColor: styles.map(s => s.background),\n\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t},\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => { this._onDidClick.fire(new StandardMouseEvent(getWindow(e), e)); }\n\t\t}, [\n\t\t\tline\n\t\t]);\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getWindow, n } from '../../../../../../../base/browser/dom.js';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../../base/browser/mouseEvent.js';\nimport { Emitter } from '../../../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../../../base/common/lifecycle.js';\nimport { autorun, constObservable, derived, derivedObservableWithCache, IObservable, IReader, observableValue } from '../../../../../../../base/common/observable.js';\nimport { editorBackground } from '../../../../../../../platform/theme/common/colorRegistry.js';\nimport { asCssVariable } from '../../../../../../../platform/theme/common/colorUtils.js';\nimport { IThemeService } from '../../../../../../../platform/theme/common/themeService.js';\nimport { ICodeEditor } from '../../../../../../browser/editorBrowser.js';\nimport { ObservableCodeEditor, observableCodeEditor } from '../../../../../../browser/observableCodeEditor.js';\nimport { LineSource, renderLines, RenderOptions } from '../../../../../../browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js';\nimport { EditorOption } from '../../../../../../common/config/editorOptions.js';\nimport { Rect } from '../../../../../../common/core/2d/rect.js';\nimport { LineRange } from '../../../../../../common/core/ranges/lineRange.js';\nimport { InlineCompletionHintStyle } from '../../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../../common/languages/language.js';\nimport { LineTokens, TokenArray } from '../../../../../../common/tokens/lineTokens.js';\nimport { InlineSuggestHint } from '../../../model/inlineSuggestionItem.js';\nimport { IInlineEditsView, InlineEditTabAction } from '../inlineEditsViewInterface.js';\nimport { getEditorBlendedColor, inlineEditIndicatorPrimaryBackground, inlineEditIndicatorSecondaryBackground, inlineEditIndicatorsuccessfulBackground } from '../theme.js';\nimport { getContentRenderWidth, maxContentWidthInRange, rectToProps } from '../utils/utils.js';\n\nconst MIN_END_OF_LINE_PADDING = 14;\nconst PADDING_VERTICALLY = 0;\nconst PADDING_HORIZONTALLY = 4;\nconst HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW = 4;\nconst VERTICAL_OFFSET_WHEN_ABOVE_BELOW = 2;\n// !! minEndOfLinePadding should always be larger than paddingHorizontally + horizontalOffsetWhenAboveBelow\n\nexport class InlineEditsCustomView extends Disposable implements IInlineEditsView {\n\n\tprivate readonly _onDidClick = this._register(new Emitter<IMouseEvent>());\n\treadonly onDidClick = this._onDidClick.event;\n\n\tprivate readonly _isHovered = observableValue(this, false);\n\treadonly isHovered: IObservable<boolean> = this._isHovered;\n\tprivate readonly _viewRef = n.ref<HTMLDivElement>();\n\n\tprivate readonly _editorObs: ObservableCodeEditor;\n\n\treadonly minEditorScrollHeight: IObservable<number>;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tdisplayLocation: IObservable<InlineSuggestHint | undefined>,\n\t\ttabAction: IObservable<InlineEditTabAction>,\n\t\t@IThemeService themeService: IThemeService,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\n\t\tconst styles = tabAction.map((v, reader) => {\n\t\t\tlet border;\n\t\t\tswitch (v) {\n\t\t\t\tcase InlineEditTabAction.Inactive: border = inlineEditIndicatorSecondaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Jump: border = inlineEditIndicatorPrimaryBackground; break;\n\t\t\t\tcase InlineEditTabAction.Accept: border = inlineEditIndicatorsuccessfulBackground; break;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tborder: getEditorBlendedColor(border, themeService).read(reader).toString(),\n\t\t\t\tbackground: asCssVariable(editorBackground)\n\t\t\t};\n\t\t});\n\n\t\tconst state = displayLocation.map(dl => dl ? this.getState(dl) : undefined);\n\n\t\tconst view = state.map(s => s ? this.getRendering(s, styles) : undefined);\n\n\t\tthis.minEditorScrollHeight = derived(this, reader => {\n\t\t\tconst s = state.read(reader);\n\t\t\tif (!s) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn s.rect.read(reader).bottom + this._editor.getScrollTop();\n\t\t});\n\n\t\tconst overlay = n.div({\n\t\t\tclass: 'inline-edits-custom-view',\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\toverflow: 'visible',\n\t\t\t\ttop: '0px',\n\t\t\t\tleft: '0px',\n\t\t\t\tdisplay: 'block',\n\t\t\t},\n\t\t}, [view]).keepUpdated(this._store);\n\n\t\tthis._register(this._editorObs.createOverlayWidget({\n\t\t\tdomNode: overlay.element,\n\t\t\tposition: constObservable(null),\n\t\t\tallowEditorOverflow: false,\n\t\t\tminContentWidthInPx: derivedObservableWithCache<number>(this, (reader, prev) => {\n\t\t\t\tconst s = state.read(reader);\n\t\t\t\tif (!s) { return prev ?? 0; }\n\n\t\t\t\tconst current = s.rect.map(rect => rect.right).read(reader)\n\t\t\t\t\t+ this._editorObs.layoutInfoVerticalScrollbarWidth.read(reader)\n\t\t\t\t\t+ PADDING_HORIZONTALLY\n\t\t\t\t\t- this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\t\treturn Math.max(prev ?? 0, current); // will run into infinite loop otherwise TODO: fix this\n\t\t\t}).recomputeInitiallyAndOnChange(this._store),\n\t\t}));\n\n\t\tthis._register(autorun((reader) => {\n\t\t\tconst v = view.read(reader);\n\t\t\tif (!v) { this._isHovered.set(false, undefined); return; }\n\t\t\tthis._isHovered.set(overlay.isHovered.read(reader), undefined);\n\t\t}));\n\t}\n\n\t// TODO: this is very similar to side by side `fitsInsideViewport`, try to use the same function\n\tprivate fitsInsideViewport(range: LineRange, displayLabel: string, reader: IReader | undefined): boolean {\n\t\tconst editorWidth = this._editorObs.layoutInfoWidth.read(reader);\n\t\tconst editorContentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\tconst editorVerticalScrollbar = this._editor.getLayoutInfo().verticalScrollbarWidth;\n\t\tconst minimapWidth = this._editorObs.layoutInfoMinimap.read(reader).minimapLeft !== 0 ? this._editorObs.layoutInfoMinimap.read(reader).minimapWidth : 0;\n\n\t\tconst maxOriginalContent = maxContentWidthInRange(this._editorObs, range, undefined);\n\t\tconst maxModifiedContent = getContentRenderWidth(displayLabel, this._editor, this._editor.getModel()!);\n\t\tconst padding = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\n\t\treturn maxOriginalContent + maxModifiedContent + padding < editorWidth - editorContentLeft - editorVerticalScrollbar - minimapWidth;\n\t}\n\n\tprivate getState(displayLocation: InlineSuggestHint): { rect: IObservable<Rect>; label: string; kind: InlineCompletionHintStyle } {\n\n\t\tconst contentState = derived(this, (reader) => {\n\t\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t\tconst startColumn = displayLocation.range.startColumn;\n\t\t\tconst endColumn = displayLocation.range.endColumn;\n\t\t\tconst lineCount = this._editor.getModel()?.getLineCount() ?? 0;\n\n\t\t\tconst lineWidth = maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber, startLineNumber + 1), reader);\n\t\t\tconst lineWidthBelow = startLineNumber + 1 <= lineCount ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber + 1, startLineNumber + 2), reader) : undefined;\n\t\t\tconst lineWidthAbove = startLineNumber - 1 >= 1 ? maxContentWidthInRange(this._editorObs, new LineRange(startLineNumber - 1, startLineNumber), reader) : undefined;\n\t\t\tconst startContentLeftOffset = this._editor.getOffsetForColumn(startLineNumber, startColumn);\n\t\t\tconst endContentLeftOffset = this._editor.getOffsetForColumn(endLineNumber, endColumn);\n\n\t\t\treturn {\n\t\t\t\tlineWidth,\n\t\t\t\tlineWidthBelow,\n\t\t\t\tlineWidthAbove,\n\t\t\t\tstartContentLeftOffset,\n\t\t\t\tendContentLeftOffset\n\t\t\t};\n\t\t});\n\n\t\tconst startLineNumber = displayLocation.range.startLineNumber;\n\t\tconst endLineNumber = displayLocation.range.endLineNumber;\n\t\t// only check viewport once in the beginning when rendering the view\n\t\tconst fitsInsideViewport = this.fitsInsideViewport(new LineRange(startLineNumber, endLineNumber + 1), displayLocation.content, undefined);\n\n\t\tconst rect = derived(this, reader => {\n\t\t\tconst w = this._editorObs.getOption(EditorOption.fontInfo).read(reader).typicalHalfwidthCharacterWidth;\n\n\t\t\tconst { lineWidth, lineWidthBelow, lineWidthAbove, startContentLeftOffset, endContentLeftOffset } = contentState.read(reader);\n\n\t\t\tconst contentLeft = this._editorObs.layoutInfoContentLeft.read(reader);\n\t\t\tconst lineHeight = this._editorObs.observeLineHeightForLine(startLineNumber).recomputeInitiallyAndOnChange(reader.store).read(reader);\n\t\t\tconst scrollTop = this._editorObs.scrollTop.read(reader);\n\t\t\tconst scrollLeft = this._editorObs.scrollLeft.read(reader);\n\n\t\t\tlet position: 'end' | 'below' | 'above';\n\t\t\tif (startLineNumber === endLineNumber && endContentLeftOffset + 5 * w >= lineWidth && fitsInsideViewport) {\n\t\t\t\tposition = 'end'; // Render at the end of the line if the range ends almost at the end of the line\n\t\t\t} else if (lineWidthBelow !== undefined && lineWidthBelow + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'below'; // Render Below if possible\n\t\t\t} else if (lineWidthAbove !== undefined && lineWidthAbove + MIN_END_OF_LINE_PADDING - HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW - PADDING_HORIZONTALLY < startContentLeftOffset) {\n\t\t\t\tposition = 'above'; // Render Above if possible\n\t\t\t} else {\n\t\t\t\tposition = 'end'; // Render at the end of the line otherwise\n\t\t\t}\n\n\t\t\tlet topOfLine;\n\t\t\tlet contentStartOffset;\n\t\t\tlet deltaX = 0;\n\t\t\tlet deltaY = 0;\n\n\t\t\tswitch (position) {\n\t\t\t\tcase 'end': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber);\n\t\t\t\t\tcontentStartOffset = lineWidth;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + MIN_END_OF_LINE_PADDING;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'below': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber + 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'above': {\n\t\t\t\t\ttopOfLine = this._editorObs.editor.getTopForLineNumber(startLineNumber - 1);\n\t\t\t\t\tcontentStartOffset = startContentLeftOffset;\n\t\t\t\t\tdeltaX = PADDING_HORIZONTALLY + HORIZONTAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tdeltaY = -PADDING_VERTICALLY + VERTICAL_OFFSET_WHEN_ABOVE_BELOW;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst textRect = Rect.fromLeftTopWidthHeight(\n\t\t\t\tcontentLeft + contentStartOffset - scrollLeft,\n\t\t\t\ttopOfLine - scrollTop,\n\t\t\t\tw * displayLocation.content.length,\n\t\t\t\tlineHeight\n\t\t\t);\n\n\t\t\treturn textRect.withMargin(PADDING_VERTICALLY, PADDING_HORIZONTALLY).translateX(deltaX).translateY(deltaY);\n\t\t});\n\n\t\treturn {\n\t\t\trect,\n\t\t\tlabel: displayLocation.content,\n\t\t\tkind: displayLocation.style\n\t\t};\n\t}\n\n\tprivate getRendering(state: { rect: IObservable<Rect>; label: string; kind: InlineCompletionHintStyle }, styles: IObservable<{ background: string; border: string }>) {\n\n\t\tconst line = document.createElement('div');\n\t\tconst t = this._editor.getModel()!.tokenization.tokenizeLinesAt(1, [state.label])?.[0];\n\t\tlet tokens: LineTokens;\n\t\tif (t && state.kind === InlineCompletionHintStyle.Code) {\n\t\t\ttokens = TokenArray.fromLineTokens(t).toLineTokens(state.label, this._languageService.languageIdCodec);\n\t\t} else {\n\t\t\ttokens = LineTokens.createEmpty(state.label, this._languageService.languageIdCodec);\n\t\t}\n\n\t\tconst result = renderLines(new LineSource([tokens]), RenderOptions.fromEditor(this._editor).withSetWidth(false).withScrollBeyondLastColumn(0), [], line, true);\n\t\tline.style.width = `${result.minWidthInPx}px`;\n\n\t\tconst rect = state.rect.map(r => r.withMargin(0, PADDING_HORIZONTALLY));\n\n\t\treturn n.div({\n\t\t\tclass: 'collapsedView',\n\t\t\tref: this._viewRef,\n\t\t\tstyle: {\n\t\t\t\tposition: 'absolute',\n\t\t\t\t...rectToProps(reader => rect.read(reader)),\n\t\t\t\toverflow: 'hidden',\n\t\t\t\tboxSizing: 'border-box',\n\t\t\t\tcursor: 'pointer',\n\t\t\t\tborder: styles.map(s => `1px solid ${s.border}`),\n\t\t\t\tborderRadius: '4px',\n\t\t\t\tbackgroundColor: styles.map(s => s.background),\n\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t},\n\t\t\tonmousedown: e => {\n\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t},\n\t\t\tonclick: (e) => { this._onDidClick.fire(new StandardMouseEvent(getWindow(e), e)); }\n\t\t}, [\n\t\t\tline\n\t\t]);\n\t}\n}\n"]}
@@ -64,6 +64,12 @@ let ViewportSemanticTokensContribution = class ViewportSemanticTokensContributio
64
64
  this._cancelAll();
65
65
  scheduleTokenizeViewport();
66
66
  }));
67
+ this._register(this._editor.onDidChangeModelLanguage(() => {
68
+ // The cleanup of the model's semantic tokens happens in the DocumentSemanticTokensFeature
69
+ bindRangeProvidersChangeListeners();
70
+ this._cancelAll();
71
+ scheduleTokenizeViewport();
72
+ }));
67
73
  this._register(this._editor.onDidChangeModelContent((e) => {
68
74
  this._cancelAll();
69
75
  scheduleTokenizeViewport();
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts","vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts"],"names":[],"mappings":"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","file":"viewportSemanticTokens.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 { CancelablePromise, createCancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { Disposable, dispose, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { getDocumentRangeSemanticTokens, hasDocumentRangeSemanticTokensProvider } from '../common/getSemanticTokens.js';\nimport { isSemanticColoringEnabled, SEMANTIC_HIGHLIGHTING_SETTING_ID } from '../common/semanticTokensConfig.js';\nimport { toMultilineTokens2 } from '../../../common/services/semanticTokensProviderStyling.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { DocumentRangeSemanticTokensProvider } from '../../../common/languages.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ISemanticTokensStylingService } from '../../../common/services/semanticTokensStyling.js';\n\nexport class ViewportSemanticTokensContribution extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.viewportSemanticTokens';\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate readonly _provider: LanguageFeatureRegistry<DocumentRangeSemanticTokensProvider>;\n\tprivate readonly _debounceInformation: IFeatureDebounceInformation;\n\tprivate readonly _tokenizeViewport: RunOnceScheduler;\n\tprivate _outstandingRequests: CancelablePromise<unknown>[];\n\tprivate _rangeProvidersChangeListeners: IDisposable[];\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@ISemanticTokensStylingService private readonly _semanticTokensStylingService: ISemanticTokensStylingService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t\t@ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService,\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._provider = languageFeaturesService.documentRangeSemanticTokensProvider;\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(this._provider, 'DocumentRangeSemanticTokens', { min: 100, max: 500 });\n\t\tthis._tokenizeViewport = this._register(new RunOnceScheduler(() => this._tokenizeViewportNow(), 100));\n\t\tthis._outstandingRequests = [];\n\t\tthis._rangeProvidersChangeListeners = [];\n\t\tconst scheduleTokenizeViewport = () => {\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tthis._tokenizeViewport.schedule(this._debounceInformation.get(this._editor.getModel()));\n\t\t\t}\n\t\t};\n\t\tconst bindRangeProvidersChangeListeners = () => {\n\t\t\tthis._cleanupProviderListeners();\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\tfor (const provider of this._provider.all(model)) {\n\t\t\t\t\tconst disposable = provider.onDidChange?.(() => {\n\t\t\t\t\t\tthis._cancelAll();\n\t\t\t\t\t\tscheduleTokenizeViewport();\n\t\t\t\t\t});\n\t\t\t\t\tif (disposable) {\n\t\t\t\t\t\tthis._rangeProvidersChangeListeners.push(disposable);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._register(this._editor.onDidScrollChange(() => {\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModelContent((e) => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\n\t\tbindRangeProvidersChangeListeners();\n\t\tthis._register(this._provider.onDidChange(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration(SEMANTIC_HIGHLIGHTING_SETTING_ID)) {\n\t\t\t\tthis._cancelAll();\n\t\t\t\tscheduleTokenizeViewport();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._themeService.onDidColorThemeChange(() => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tscheduleTokenizeViewport();\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._cleanupProviderListeners();\n\t\tsuper.dispose();\n\t}\n\n\tprivate _cleanupProviderListeners(): void {\n\t\tdispose(this._rangeProvidersChangeListeners);\n\t\tthis._rangeProvidersChangeListeners = [];\n\t}\n\n\tprivate _cancelAll(): void {\n\t\tfor (const request of this._outstandingRequests) {\n\t\t\trequest.cancel();\n\t\t}\n\t\tthis._outstandingRequests = [];\n\t}\n\n\tprivate _removeOutstandingRequest(req: CancelablePromise<unknown>): void {\n\t\tfor (let i = 0, len = this._outstandingRequests.length; i < len; i++) {\n\t\t\tif (this._outstandingRequests[i] === req) {\n\t\t\t\tthis._outstandingRequests.splice(i, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _tokenizeViewportNow(): void {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\t\tif (model.tokenization.hasCompleteSemanticTokens()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!isSemanticColoringEnabled(model, this._themeService, this._configurationService)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!hasDocumentRangeSemanticTokensProvider(this._provider, model)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\n\t\tthis._outstandingRequests = this._outstandingRequests.concat(visibleRanges.map(range => this._requestRange(model, range)));\n\t}\n\n\tprivate _requestRange(model: ITextModel, range: Range): CancelablePromise<unknown> {\n\t\tconst requestVersionId = model.getVersionId();\n\t\tconst request = createCancelablePromise(token => Promise.resolve(getDocumentRangeSemanticTokens(this._provider, model, range, token)));\n\t\tconst sw = new StopWatch(false);\n\t\trequest.then((r) => {\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\tif (!r || !r.tokens || model.isDisposed() || model.getVersionId() !== requestVersionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { provider, tokens: result } = r;\n\t\t\tconst styling = this._semanticTokensStylingService.getStyling(provider);\n\t\t\tmodel.tokenization.setPartialSemanticTokens(range, toMultilineTokens2(result, styling, model.getLanguageId()));\n\t\t}).then(() => this._removeOutstandingRequest(request), () => this._removeOutstandingRequest(request));\n\t\treturn request;\n\t}\n}\n\nregisterEditorContribution(ViewportSemanticTokensContribution.ID, ViewportSemanticTokensContribution, EditorContributionInstantiation.AfterFirstRender);\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 { CancelablePromise, createCancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { Disposable, dispose, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { getDocumentRangeSemanticTokens, hasDocumentRangeSemanticTokensProvider } from '../common/getSemanticTokens.js';\nimport { isSemanticColoringEnabled, SEMANTIC_HIGHLIGHTING_SETTING_ID } from '../common/semanticTokensConfig.js';\nimport { toMultilineTokens2 } from '../../../common/services/semanticTokensProviderStyling.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { DocumentRangeSemanticTokensProvider } from '../../../common/languages.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ISemanticTokensStylingService } from '../../../common/services/semanticTokensStyling.js';\n\nexport class ViewportSemanticTokensContribution extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.viewportSemanticTokens';\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate readonly _provider: LanguageFeatureRegistry<DocumentRangeSemanticTokensProvider>;\n\tprivate readonly _debounceInformation: IFeatureDebounceInformation;\n\tprivate readonly _tokenizeViewport: RunOnceScheduler;\n\tprivate _outstandingRequests: CancelablePromise<unknown>[];\n\tprivate _rangeProvidersChangeListeners: IDisposable[];\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@ISemanticTokensStylingService private readonly _semanticTokensStylingService: ISemanticTokensStylingService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t\t@ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService,\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._provider = languageFeaturesService.documentRangeSemanticTokensProvider;\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(this._provider, 'DocumentRangeSemanticTokens', { min: 100, max: 500 });\n\t\tthis._tokenizeViewport = this._register(new RunOnceScheduler(() => this._tokenizeViewportNow(), 100));\n\t\tthis._outstandingRequests = [];\n\t\tthis._rangeProvidersChangeListeners = [];\n\t\tconst scheduleTokenizeViewport = () => {\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tthis._tokenizeViewport.schedule(this._debounceInformation.get(this._editor.getModel()));\n\t\t\t}\n\t\t};\n\t\tconst bindRangeProvidersChangeListeners = () => {\n\t\t\tthis._cleanupProviderListeners();\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\tfor (const provider of this._provider.all(model)) {\n\t\t\t\t\tconst disposable = provider.onDidChange?.(() => {\n\t\t\t\t\t\tthis._cancelAll();\n\t\t\t\t\t\tscheduleTokenizeViewport();\n\t\t\t\t\t});\n\t\t\t\t\tif (disposable) {\n\t\t\t\t\t\tthis._rangeProvidersChangeListeners.push(disposable);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._register(this._editor.onDidScrollChange(() => {\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModelContent((e) => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\n\t\tbindRangeProvidersChangeListeners();\n\t\tthis._register(this._provider.onDidChange(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration(SEMANTIC_HIGHLIGHTING_SETTING_ID)) {\n\t\t\t\tthis._cancelAll();\n\t\t\t\tscheduleTokenizeViewport();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._themeService.onDidColorThemeChange(() => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tscheduleTokenizeViewport();\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._cleanupProviderListeners();\n\t\tsuper.dispose();\n\t}\n\n\tprivate _cleanupProviderListeners(): void {\n\t\tdispose(this._rangeProvidersChangeListeners);\n\t\tthis._rangeProvidersChangeListeners = [];\n\t}\n\n\tprivate _cancelAll(): void {\n\t\tfor (const request of this._outstandingRequests) {\n\t\t\trequest.cancel();\n\t\t}\n\t\tthis._outstandingRequests = [];\n\t}\n\n\tprivate _removeOutstandingRequest(req: CancelablePromise<unknown>): void {\n\t\tfor (let i = 0, len = this._outstandingRequests.length; i < len; i++) {\n\t\t\tif (this._outstandingRequests[i] === req) {\n\t\t\t\tthis._outstandingRequests.splice(i, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _tokenizeViewportNow(): void {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\t\tif (model.tokenization.hasCompleteSemanticTokens()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!isSemanticColoringEnabled(model, this._themeService, this._configurationService)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!hasDocumentRangeSemanticTokensProvider(this._provider, model)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\n\t\tthis._outstandingRequests = this._outstandingRequests.concat(visibleRanges.map(range => this._requestRange(model, range)));\n\t}\n\n\tprivate _requestRange(model: ITextModel, range: Range): CancelablePromise<unknown> {\n\t\tconst requestVersionId = model.getVersionId();\n\t\tconst request = createCancelablePromise(token => Promise.resolve(getDocumentRangeSemanticTokens(this._provider, model, range, token)));\n\t\tconst sw = new StopWatch(false);\n\t\trequest.then((r) => {\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\tif (!r || !r.tokens || model.isDisposed() || model.getVersionId() !== requestVersionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { provider, tokens: result } = r;\n\t\t\tconst styling = this._semanticTokensStylingService.getStyling(provider);\n\t\t\tmodel.tokenization.setPartialSemanticTokens(range, toMultilineTokens2(result, styling, model.getLanguageId()));\n\t\t}).then(() => this._removeOutstandingRequest(request), () => this._removeOutstandingRequest(request));\n\t\treturn request;\n\t}\n}\n\nregisterEditorContribution(ViewportSemanticTokensContribution.ID, ViewportSemanticTokensContribution, EditorContributionInstantiation.AfterFirstRender);\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts","vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.ts"],"names":[],"mappings":"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","file":"viewportSemanticTokens.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 { CancelablePromise, createCancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { Disposable, dispose, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { getDocumentRangeSemanticTokens, hasDocumentRangeSemanticTokensProvider } from '../common/getSemanticTokens.js';\nimport { isSemanticColoringEnabled, SEMANTIC_HIGHLIGHTING_SETTING_ID } from '../common/semanticTokensConfig.js';\nimport { toMultilineTokens2 } from '../../../common/services/semanticTokensProviderStyling.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { DocumentRangeSemanticTokensProvider } from '../../../common/languages.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ISemanticTokensStylingService } from '../../../common/services/semanticTokensStyling.js';\n\nexport class ViewportSemanticTokensContribution extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.viewportSemanticTokens';\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate readonly _provider: LanguageFeatureRegistry<DocumentRangeSemanticTokensProvider>;\n\tprivate readonly _debounceInformation: IFeatureDebounceInformation;\n\tprivate readonly _tokenizeViewport: RunOnceScheduler;\n\tprivate _outstandingRequests: CancelablePromise<unknown>[];\n\tprivate _rangeProvidersChangeListeners: IDisposable[];\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@ISemanticTokensStylingService private readonly _semanticTokensStylingService: ISemanticTokensStylingService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t\t@ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService,\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._provider = languageFeaturesService.documentRangeSemanticTokensProvider;\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(this._provider, 'DocumentRangeSemanticTokens', { min: 100, max: 500 });\n\t\tthis._tokenizeViewport = this._register(new RunOnceScheduler(() => this._tokenizeViewportNow(), 100));\n\t\tthis._outstandingRequests = [];\n\t\tthis._rangeProvidersChangeListeners = [];\n\t\tconst scheduleTokenizeViewport = () => {\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tthis._tokenizeViewport.schedule(this._debounceInformation.get(this._editor.getModel()));\n\t\t\t}\n\t\t};\n\t\tconst bindRangeProvidersChangeListeners = () => {\n\t\t\tthis._cleanupProviderListeners();\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\tfor (const provider of this._provider.all(model)) {\n\t\t\t\t\tconst disposable = provider.onDidChange?.(() => {\n\t\t\t\t\t\tthis._cancelAll();\n\t\t\t\t\t\tscheduleTokenizeViewport();\n\t\t\t\t\t});\n\t\t\t\t\tif (disposable) {\n\t\t\t\t\t\tthis._rangeProvidersChangeListeners.push(disposable);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._register(this._editor.onDidScrollChange(() => {\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModelLanguage(() => {\n\t\t\t// The cleanup of the model's semantic tokens happens in the DocumentSemanticTokensFeature\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModelContent((e) => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\n\t\tbindRangeProvidersChangeListeners();\n\t\tthis._register(this._provider.onDidChange(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration(SEMANTIC_HIGHLIGHTING_SETTING_ID)) {\n\t\t\t\tthis._cancelAll();\n\t\t\t\tscheduleTokenizeViewport();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._themeService.onDidColorThemeChange(() => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tscheduleTokenizeViewport();\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._cleanupProviderListeners();\n\t\tsuper.dispose();\n\t}\n\n\tprivate _cleanupProviderListeners(): void {\n\t\tdispose(this._rangeProvidersChangeListeners);\n\t\tthis._rangeProvidersChangeListeners = [];\n\t}\n\n\tprivate _cancelAll(): void {\n\t\tfor (const request of this._outstandingRequests) {\n\t\t\trequest.cancel();\n\t\t}\n\t\tthis._outstandingRequests = [];\n\t}\n\n\tprivate _removeOutstandingRequest(req: CancelablePromise<unknown>): void {\n\t\tfor (let i = 0, len = this._outstandingRequests.length; i < len; i++) {\n\t\t\tif (this._outstandingRequests[i] === req) {\n\t\t\t\tthis._outstandingRequests.splice(i, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _tokenizeViewportNow(): void {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\t\tif (model.tokenization.hasCompleteSemanticTokens()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!isSemanticColoringEnabled(model, this._themeService, this._configurationService)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!hasDocumentRangeSemanticTokensProvider(this._provider, model)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\n\t\tthis._outstandingRequests = this._outstandingRequests.concat(visibleRanges.map(range => this._requestRange(model, range)));\n\t}\n\n\tprivate _requestRange(model: ITextModel, range: Range): CancelablePromise<unknown> {\n\t\tconst requestVersionId = model.getVersionId();\n\t\tconst request = createCancelablePromise(token => Promise.resolve(getDocumentRangeSemanticTokens(this._provider, model, range, token)));\n\t\tconst sw = new StopWatch(false);\n\t\trequest.then((r) => {\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\tif (!r || !r.tokens || model.isDisposed() || model.getVersionId() !== requestVersionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { provider, tokens: result } = r;\n\t\t\tconst styling = this._semanticTokensStylingService.getStyling(provider);\n\t\t\tmodel.tokenization.setPartialSemanticTokens(range, toMultilineTokens2(result, styling, model.getLanguageId()));\n\t\t}).then(() => this._removeOutstandingRequest(request), () => this._removeOutstandingRequest(request));\n\t\treturn request;\n\t}\n}\n\nregisterEditorContribution(ViewportSemanticTokensContribution.ID, ViewportSemanticTokensContribution, EditorContributionInstantiation.AfterFirstRender);\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 { CancelablePromise, createCancelablePromise, RunOnceScheduler } from '../../../../base/common/async.js';\nimport { Disposable, dispose, IDisposable } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditor } from '../../../browser/editorBrowser.js';\nimport { EditorContributionInstantiation, registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { Range } from '../../../common/core/range.js';\nimport { IEditorContribution } from '../../../common/editorCommon.js';\nimport { ITextModel } from '../../../common/model.js';\nimport { getDocumentRangeSemanticTokens, hasDocumentRangeSemanticTokensProvider } from '../common/getSemanticTokens.js';\nimport { isSemanticColoringEnabled, SEMANTIC_HIGHLIGHTING_SETTING_ID } from '../common/semanticTokensConfig.js';\nimport { toMultilineTokens2 } from '../../../common/services/semanticTokensProviderStyling.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { IFeatureDebounceInformation, ILanguageFeatureDebounceService } from '../../../common/services/languageFeatureDebounce.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';\nimport { DocumentRangeSemanticTokensProvider } from '../../../common/languages.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ISemanticTokensStylingService } from '../../../common/services/semanticTokensStyling.js';\n\nexport class ViewportSemanticTokensContribution extends Disposable implements IEditorContribution {\n\n\tpublic static readonly ID = 'editor.contrib.viewportSemanticTokens';\n\n\tprivate readonly _editor: ICodeEditor;\n\tprivate readonly _provider: LanguageFeatureRegistry<DocumentRangeSemanticTokensProvider>;\n\tprivate readonly _debounceInformation: IFeatureDebounceInformation;\n\tprivate readonly _tokenizeViewport: RunOnceScheduler;\n\tprivate _outstandingRequests: CancelablePromise<unknown>[];\n\tprivate _rangeProvidersChangeListeners: IDisposable[];\n\n\tconstructor(\n\t\teditor: ICodeEditor,\n\t\t@ISemanticTokensStylingService private readonly _semanticTokensStylingService: ISemanticTokensStylingService,\n\t\t@IThemeService private readonly _themeService: IThemeService,\n\t\t@IConfigurationService private readonly _configurationService: IConfigurationService,\n\t\t@ILanguageFeatureDebounceService languageFeatureDebounceService: ILanguageFeatureDebounceService,\n\t\t@ILanguageFeaturesService languageFeaturesService: ILanguageFeaturesService,\n\t) {\n\t\tsuper();\n\t\tthis._editor = editor;\n\t\tthis._provider = languageFeaturesService.documentRangeSemanticTokensProvider;\n\t\tthis._debounceInformation = languageFeatureDebounceService.for(this._provider, 'DocumentRangeSemanticTokens', { min: 100, max: 500 });\n\t\tthis._tokenizeViewport = this._register(new RunOnceScheduler(() => this._tokenizeViewportNow(), 100));\n\t\tthis._outstandingRequests = [];\n\t\tthis._rangeProvidersChangeListeners = [];\n\t\tconst scheduleTokenizeViewport = () => {\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tthis._tokenizeViewport.schedule(this._debounceInformation.get(this._editor.getModel()));\n\t\t\t}\n\t\t};\n\t\tconst bindRangeProvidersChangeListeners = () => {\n\t\t\tthis._cleanupProviderListeners();\n\t\t\tif (this._editor.hasModel()) {\n\t\t\t\tconst model = this._editor.getModel();\n\t\t\t\tfor (const provider of this._provider.all(model)) {\n\t\t\t\t\tconst disposable = provider.onDidChange?.(() => {\n\t\t\t\t\t\tthis._cancelAll();\n\t\t\t\t\t\tscheduleTokenizeViewport();\n\t\t\t\t\t});\n\t\t\t\t\tif (disposable) {\n\t\t\t\t\t\tthis._rangeProvidersChangeListeners.push(disposable);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._register(this._editor.onDidScrollChange(() => {\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModel(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModelLanguage(() => {\n\t\t\t// The cleanup of the model's semantic tokens happens in the DocumentSemanticTokensFeature\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._editor.onDidChangeModelContent((e) => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\n\t\tbindRangeProvidersChangeListeners();\n\t\tthis._register(this._provider.onDidChange(() => {\n\t\t\tbindRangeProvidersChangeListeners();\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tthis._register(this._configurationService.onDidChangeConfiguration(e => {\n\t\t\tif (e.affectsConfiguration(SEMANTIC_HIGHLIGHTING_SETTING_ID)) {\n\t\t\t\tthis._cancelAll();\n\t\t\t\tscheduleTokenizeViewport();\n\t\t\t}\n\t\t}));\n\t\tthis._register(this._themeService.onDidColorThemeChange(() => {\n\t\t\tthis._cancelAll();\n\t\t\tscheduleTokenizeViewport();\n\t\t}));\n\t\tscheduleTokenizeViewport();\n\t}\n\n\tpublic override dispose(): void {\n\t\tthis._cleanupProviderListeners();\n\t\tsuper.dispose();\n\t}\n\n\tprivate _cleanupProviderListeners(): void {\n\t\tdispose(this._rangeProvidersChangeListeners);\n\t\tthis._rangeProvidersChangeListeners = [];\n\t}\n\n\tprivate _cancelAll(): void {\n\t\tfor (const request of this._outstandingRequests) {\n\t\t\trequest.cancel();\n\t\t}\n\t\tthis._outstandingRequests = [];\n\t}\n\n\tprivate _removeOutstandingRequest(req: CancelablePromise<unknown>): void {\n\t\tfor (let i = 0, len = this._outstandingRequests.length; i < len; i++) {\n\t\t\tif (this._outstandingRequests[i] === req) {\n\t\t\t\tthis._outstandingRequests.splice(i, 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _tokenizeViewportNow(): void {\n\t\tif (!this._editor.hasModel()) {\n\t\t\treturn;\n\t\t}\n\t\tconst model = this._editor.getModel();\n\t\tif (model.tokenization.hasCompleteSemanticTokens()) {\n\t\t\treturn;\n\t\t}\n\t\tif (!isSemanticColoringEnabled(model, this._themeService, this._configurationService)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!hasDocumentRangeSemanticTokensProvider(this._provider, model)) {\n\t\t\tif (model.tokenization.hasSomeSemanticTokens()) {\n\t\t\t\tmodel.tokenization.setSemanticTokens(null, false);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n\n\t\tthis._outstandingRequests = this._outstandingRequests.concat(visibleRanges.map(range => this._requestRange(model, range)));\n\t}\n\n\tprivate _requestRange(model: ITextModel, range: Range): CancelablePromise<unknown> {\n\t\tconst requestVersionId = model.getVersionId();\n\t\tconst request = createCancelablePromise(token => Promise.resolve(getDocumentRangeSemanticTokens(this._provider, model, range, token)));\n\t\tconst sw = new StopWatch(false);\n\t\trequest.then((r) => {\n\t\t\tthis._debounceInformation.update(model, sw.elapsed());\n\t\t\tif (!r || !r.tokens || model.isDisposed() || model.getVersionId() !== requestVersionId) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { provider, tokens: result } = r;\n\t\t\tconst styling = this._semanticTokensStylingService.getStyling(provider);\n\t\t\tmodel.tokenization.setPartialSemanticTokens(range, toMultilineTokens2(result, styling, model.getLanguageId()));\n\t\t}).then(() => this._removeOutstandingRequest(request), () => this._removeOutstandingRequest(request));\n\t\treturn request;\n\t}\n}\n\nregisterEditorContribution(ViewportSemanticTokensContribution.ID, ViewportSemanticTokensContribution, EditorContributionInstantiation.AfterFirstRender);\n"]}
@@ -26,13 +26,13 @@ import { SuggestModel } from './suggestModel.js';
26
26
  import { WordDistance } from './wordDistance.js';
27
27
  import { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';
28
28
  class SuggestInlineCompletion {
29
- constructor(range, insertText, filterText, additionalTextEdits, command, action, completion) {
29
+ constructor(range, insertText, filterText, additionalTextEdits, command, gutterMenuLinkAction, completion) {
30
30
  this.range = range;
31
31
  this.insertText = insertText;
32
32
  this.filterText = filterText;
33
33
  this.additionalTextEdits = additionalTextEdits;
34
34
  this.command = command;
35
- this.action = action;
35
+ this.gutterMenuLinkAction = gutterMenuLinkAction;
36
36
  this.completion = completion;
37
37
  }
38
38
  }
@@ -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 action: 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 action: 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\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"]}
@@ -7509,25 +7509,29 @@ export namespace languages {
7509
7509
  */
7510
7510
  readonly insertText: string | {
7511
7511
  snippet: string;
7512
- };
7512
+ } | undefined;
7513
7513
  /**
7514
- * A text that is used to decide if this inline completion should be shown.
7515
- * An inline completion is shown if the text to replace is a subword of the filter text.
7516
- */
7517
- readonly filterText?: string;
7514
+ * The range to replace.
7515
+ * Must begin and end on the same line.
7516
+ * Refers to the current document or `uri` if provided.
7517
+ */
7518
+ readonly range?: IRange;
7518
7519
  /**
7519
7520
  * An optional array of additional text edits that are applied when
7520
7521
  * selecting this completion. Edits must not overlap with the main edit
7521
7522
  * nor with themselves.
7523
+ * Refers to the current document or `uri` if provided.
7522
7524
  */
7523
7525
  readonly additionalTextEdits?: editor.ISingleEditOperation[];
7524
7526
  /**
7525
- * The range to replace.
7526
- * Must begin and end on the same line.
7527
+ * The file for which the edit applies to.
7528
+ */
7529
+ readonly uri?: UriComponents;
7530
+ /**
7531
+ * A command that is run upon acceptance of this item.
7527
7532
  */
7528
- readonly range?: IRange;
7529
7533
  readonly command?: Command;
7530
- readonly action?: Command;
7534
+ readonly gutterMenuLinkAction?: Command;
7531
7535
  /**
7532
7536
  * Is called the first time an inline completion is shown.
7533
7537
  * @deprecated. Use `onDidShow` of the provider instead.
@@ -7540,9 +7544,10 @@ export namespace languages {
7540
7544
  readonly completeBracketPairs?: boolean;
7541
7545
  readonly isInlineEdit?: boolean;
7542
7546
  readonly showInlineEditMenu?: boolean;
7547
+ /** Only show the inline suggestion when the cursor is in the showRange. */
7543
7548
  readonly showRange?: IRange;
7544
7549
  readonly warning?: InlineCompletionWarning;
7545
- readonly displayLocation?: InlineCompletionDisplayLocation;
7550
+ readonly hint?: InlineCompletionHint;
7546
7551
  /**
7547
7552
  * Used for telemetry.
7548
7553
  */
@@ -7554,21 +7559,19 @@ export namespace languages {
7554
7559
  icon?: IconPath;
7555
7560
  }
7556
7561
 
7557
- export enum InlineCompletionDisplayLocationKind {
7562
+ export enum InlineCompletionHintStyle {
7558
7563
  Code = 1,
7559
7564
  Label = 2
7560
7565
  }
7561
7566
 
7562
- export interface InlineCompletionDisplayLocation {
7567
+ export interface InlineCompletionHint {
7568
+ /** Refers to the current document. */
7563
7569
  range: IRange;
7564
- kind: InlineCompletionDisplayLocationKind;
7565
- label: string;
7570
+ style: InlineCompletionHintStyle;
7571
+ content: string;
7566
7572
  jumpToEdit: boolean;
7567
7573
  }
7568
7574
 
7569
- /**
7570
- * TODO: add `| Uri | { light: Uri; dark: Uri }`.
7571
- */
7572
7575
  export type IconPath = editor.ThemeIcon;
7573
7576
 
7574
7577
  export interface InlineCompletions<TItem extends InlineCompletion = InlineCompletion> {
@@ -7669,7 +7672,6 @@ export namespace languages {
7669
7672
  notShownReason: string | undefined;
7670
7673
  editorType: string;
7671
7674
  viewKind: string | undefined;
7672
- error: string | undefined;
7673
7675
  preceeded: boolean;
7674
7676
  languageId: string;
7675
7677
  requestReason: string;
@@ -607,7 +607,7 @@ export function createMonacoLanguagesAPI() {
607
607
  PartialAcceptTriggerKind: standaloneEnums.PartialAcceptTriggerKind,
608
608
  HoverVerbosityAction: standaloneEnums.HoverVerbosityAction,
609
609
  InlineCompletionEndOfLifeReasonKind: standaloneEnums.InlineCompletionEndOfLifeReasonKind,
610
- InlineCompletionDisplayLocationKind: standaloneEnums.InlineCompletionDisplayLocationKind,
610
+ InlineCompletionHintStyle: standaloneEnums.InlineCompletionHintStyle,
611
611
  // classes
612
612
  FoldingRangeKind: languages.FoldingRangeKind,
613
613
  // eslint-disable-next-line local/code-no-any-casts