monaco-editor-core 0.55.0-dev-20251024 → 0.55.0-dev-20251025

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 (37) hide show
  1. package/esm/nls.messages.cs.js +1 -1
  2. package/esm/nls.messages.de.js +1 -1
  3. package/esm/nls.messages.es.js +1 -1
  4. package/esm/nls.messages.fr.js +1 -1
  5. package/esm/nls.messages.it.js +1 -1
  6. package/esm/nls.messages.ja.js +1 -1
  7. package/esm/nls.messages.ko.js +1 -1
  8. package/esm/nls.messages.pl.js +1 -1
  9. package/esm/nls.messages.pt-br.js +1 -1
  10. package/esm/nls.messages.ru.js +1 -1
  11. package/esm/nls.messages.tr.js +1 -1
  12. package/esm/nls.messages.zh-cn.js +1 -1
  13. package/esm/nls.messages.zh-tw.js +1 -1
  14. package/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf +0 -0
  15. package/esm/vs/base/browser/ui/highlightedlabel/highlightedLabel.js +6 -7
  16. package/esm/vs/base/browser/ui/highlightedlabel/highlightedLabel.js.map +1 -1
  17. package/esm/vs/base/browser/ui/iconLabel/iconLabel.js +11 -6
  18. package/esm/vs/base/browser/ui/iconLabel/iconLabel.js.map +1 -1
  19. package/esm/vs/base/browser/ui/iconLabel/iconlabel.css +5 -2
  20. package/esm/vs/base/common/codiconsLibrary.js +3 -0
  21. package/esm/vs/base/common/codiconsLibrary.js.map +1 -1
  22. package/esm/vs/editor/common/languages.js.map +1 -1
  23. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +13 -9
  24. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  25. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +4 -2
  26. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
  27. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js +13 -5
  28. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineSuggestionItem.js.map +1 -1
  29. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js +2 -1
  30. package/esm/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.js.map +1 -1
  31. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +2 -2
  32. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  33. package/esm/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.js +28 -1
  34. package/esm/vs/editor/contrib/semanticTokens/browser/viewportSemanticTokens.js.map +1 -1
  35. package/esm/vs/editor/editor.api.d.ts +1 -0
  36. package/monaco.d.ts +1 -0
  37. 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/model/provideInlineCompletions.ts","vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts"],"names":[],"mappings":"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","file":"provideInlineCompletions.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletionDisplayLocationKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineSuggestionItem.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string') {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tdata.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime }));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData {\n\tlet insertText: string;\n\tlet snippetInfo: SnippetInfo | undefined;\n\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\tif (typeof inlineCompletion.insertText === 'string') {\n\t\tinsertText = inlineCompletion.insertText;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinsertText = closeBrackets(\n\t\t\t\tinsertText,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tsnippetInfo = undefined;\n\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\tinsertText = snippet.children[0].value;\n\t\t\tsnippetInfo = undefined;\n\t\t} else {\n\t\t\tinsertText = snippet.toString();\n\t\t\tsnippetInfo = {\n\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\trange: range\n\t\t\t};\n\t\t}\n\t} else {\n\t\tassertNever(inlineCompletion.insertText);\n\t}\n\n\tconst displayLocation = inlineCompletion.displayLocation ? {\n\t\trange: Range.lift(inlineCompletion.displayLocation.range),\n\t\tlabel: inlineCompletion.displayLocation.label,\n\t\tkind: inlineCompletion.displayLocation.kind\n\t} : undefined;\n\n\treturn new InlineSuggestData(\n\t\trange,\n\t\tinsertText,\n\t\tsnippetInfo,\n\t\tdisplayLocation,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n\terror?: string;\n};\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\n\tconstructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly snippetInfo: SnippetInfo | undefined,\n\t\tpublic readonly displayLocation: IDisplayLocation | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didShow = true;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\terror: this._viewData.error,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData,\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic reportInlineEditError(message: string): void {\n\t\tif (this._viewData.error) {\n\t\t\tthis._viewData.error += `; ${message}`;\n\t\t} else {\n\t\t\tthis._viewData.error = message;\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport interface IDisplayLocation {\n\trange: Range;\n\tlabel: string;\n\tkind: InlineCompletionDisplayLocationKind;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletionDisplayLocationKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineSuggestionItem.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string') {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tdata.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime }));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData {\n\tlet insertText: string;\n\tlet snippetInfo: SnippetInfo | undefined;\n\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\tif (typeof inlineCompletion.insertText === 'string') {\n\t\tinsertText = inlineCompletion.insertText;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinsertText = closeBrackets(\n\t\t\t\tinsertText,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tsnippetInfo = undefined;\n\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\tinsertText = snippet.children[0].value;\n\t\t\tsnippetInfo = undefined;\n\t\t} else {\n\t\t\tinsertText = snippet.toString();\n\t\t\tsnippetInfo = {\n\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\trange: range\n\t\t\t};\n\t\t}\n\t} else {\n\t\tassertNever(inlineCompletion.insertText);\n\t}\n\n\tconst displayLocation = inlineCompletion.displayLocation ? {\n\t\trange: Range.lift(inlineCompletion.displayLocation.range),\n\t\tlabel: inlineCompletion.displayLocation.label,\n\t\tkind: inlineCompletion.displayLocation.kind\n\t} : undefined;\n\n\treturn new InlineSuggestData(\n\t\trange,\n\t\tinsertText,\n\t\tsnippetInfo,\n\t\tdisplayLocation,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n\terror?: string;\n};\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\n\tconstructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly snippetInfo: SnippetInfo | undefined,\n\t\tpublic readonly displayLocation: IDisplayLocation | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didShow = true;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\terror: this._viewData.error,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData,\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic reportInlineEditError(message: string): void {\n\t\tif (this._viewData.error) {\n\t\t\tthis._viewData.error += `; ${message}`;\n\t\t} else {\n\t\t\tthis._viewData.error = message;\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport interface IDisplayLocation {\n\trange: Range;\n\tlabel: string;\n\tkind: InlineCompletionDisplayLocationKind;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts","vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts"],"names":[],"mappings":"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","file":"provideInlineCompletions.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletionDisplayLocationKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineSuggestionItem.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string') {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tdata.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime }));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData {\n\tlet insertText: string;\n\tlet snippetInfo: SnippetInfo | undefined;\n\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\tif (typeof inlineCompletion.insertText === 'string') {\n\t\tinsertText = inlineCompletion.insertText;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinsertText = closeBrackets(\n\t\t\t\tinsertText,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tsnippetInfo = undefined;\n\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\tinsertText = snippet.children[0].value;\n\t\t\tsnippetInfo = undefined;\n\t\t} else {\n\t\t\tinsertText = snippet.toString();\n\t\t\tsnippetInfo = {\n\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\trange: range\n\t\t\t};\n\t\t}\n\t} else {\n\t\tassertNever(inlineCompletion.insertText);\n\t}\n\n\tconst displayLocation = inlineCompletion.displayLocation ? {\n\t\trange: Range.lift(inlineCompletion.displayLocation.range),\n\t\tlabel: inlineCompletion.displayLocation.label,\n\t\tkind: inlineCompletion.displayLocation.kind,\n\t\tjumpToEdit: inlineCompletion.displayLocation.jumpToEdit,\n\t} : undefined;\n\n\treturn new InlineSuggestData(\n\t\trange,\n\t\tinsertText,\n\t\tsnippetInfo,\n\t\tdisplayLocation,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n\terror?: string;\n};\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\n\tconstructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly snippetInfo: SnippetInfo | undefined,\n\t\tpublic readonly displayLocation: IDisplayLocation | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didShow = true;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\terror: this._viewData.error,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData,\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic reportInlineEditError(message: string): void {\n\t\tif (this._viewData.error) {\n\t\t\tthis._viewData.error += `; ${message}`;\n\t\t} else {\n\t\t\tthis._viewData.error = message;\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport interface IDisplayLocation {\n\trange: Range;\n\tlabel: string;\n\tkind: InlineCompletionDisplayLocationKind;\n\tjumpToEdit: boolean;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { assertNever } from '../../../../../base/common/assert.js';\nimport { AsyncIterableProducer } from '../../../../../base/common/async.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../../../base/common/errors.js';\nimport { Disposable, IDisposable } from '../../../../../base/common/lifecycle.js';\nimport { prefixedUuid } from '../../../../../base/common/uuid.js';\nimport { ICommandService } from '../../../../../platform/commands/common/commands.js';\nimport { ISingleEditOperation } from '../../../../common/core/editOperation.js';\nimport { StringReplacement } from '../../../../common/core/edits/stringEdit.js';\nimport { OffsetRange } from '../../../../common/core/ranges/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextReplacement } from '../../../../common/core/edits/textEdit.js';\nimport { InlineCompletionEndOfLifeReason, InlineCompletionEndOfLifeReasonKind, InlineCompletionDisplayLocationKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider, PartialAcceptInfo, InlineCompletionsDisposeReason, LifetimeSummary, ProviderId } from '../../../../common/languages.js';\nimport { ILanguageConfigurationService } from '../../../../common/languages/languageConfigurationRegistry.js';\nimport { ITextModel } from '../../../../common/model.js';\nimport { fixBracketsInLine } from '../../../../common/model/bracketPairsTextModelPart/fixBrackets.js';\nimport { SnippetParser, Text } from '../../../snippet/browser/snippetParser.js';\nimport { getReadonlyEmptyArray } from '../utils.js';\nimport { groupByMap } from '../../../../../base/common/collections.js';\nimport { DirectedGraph } from './graph.js';\nimport { CachedFunction } from '../../../../../base/common/cache.js';\nimport { InlineCompletionViewData, InlineCompletionViewKind } from '../view/inlineEdits/inlineEditsViewInterface.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { inlineCompletionIsVisible } from './inlineSuggestionItem.js';\nimport { EditDeltaInfo } from '../../../../common/textModelEditSource.js';\n\nexport type InlineCompletionContextWithoutUuid = Omit<InlineCompletionContext, 'requestUuid'>;\n\nexport function provideInlineCompletions(\n\tproviders: InlineCompletionsProvider[],\n\tposition: Position,\n\tmodel: ITextModel,\n\tcontext: InlineCompletionContextWithoutUuid,\n\trequestInfo: InlineSuggestRequestInfo,\n\tlanguageConfigurationService?: ILanguageConfigurationService,\n): IInlineCompletionProviderResult {\n\tconst requestUuid = prefixedUuid('icr');\n\n\tconst cancellationTokenSource = new CancellationTokenSource();\n\tlet cancelReason: InlineCompletionsDisposeReason | undefined = undefined;\n\n\tconst contextWithUuid: InlineCompletionContext = { ...context, requestUuid: requestUuid };\n\n\tconst defaultReplaceRange = getDefaultRange(position, model);\n\n\tconst providersByGroupId = groupByMap(providers, p => p.groupId);\n\tconst yieldsToGraph = DirectedGraph.from(providers, p => {\n\t\treturn p.yieldsToGroupIds?.flatMap(groupId => providersByGroupId.get(groupId) ?? []) ?? [];\n\t});\n\tconst { foundCycles } = yieldsToGraph.removeCycles();\n\tif (foundCycles.length > 0) {\n\t\tonUnexpectedExternalError(new Error(`Inline completions: cyclic yield-to dependency detected.`\n\t\t\t+ ` Path: ${foundCycles.map(s => s.toString ? s.toString() : ('' + s)).join(' -> ')}`));\n\t}\n\n\tlet runningCount = 0;\n\n\tconst queryProvider = new CachedFunction(async (provider: InlineCompletionsProvider<InlineCompletions>): Promise<InlineSuggestionList | undefined> => {\n\t\ttry {\n\t\t\trunningCount++;\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst yieldsTo = yieldsToGraph.getOutgoing(provider);\n\t\t\tfor (const p of yieldsTo) {\n\t\t\t\t// We know there is no cycle, so no recursion here\n\t\t\t\tconst result = await queryProvider.get(p);\n\t\t\t\tif (result) {\n\t\t\t\t\tfor (const item of result.inlineSuggestions.items) {\n\t\t\t\t\t\tif (item.isInlineEdit || typeof item.insertText !== 'string') {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst t = new TextReplacement(Range.lift(item.range) ?? defaultReplaceRange, item.insertText);\n\t\t\t\t\t\tif (inlineCompletionIsVisible(t, undefined, model, position)) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// else: inline completion is not visible, so lets not block\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet result: InlineCompletions | null | undefined;\n\t\t\tconst providerStartTime = Date.now();\n\t\t\ttry {\n\t\t\t\tresult = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token);\n\t\t\t} catch (e) {\n\t\t\t\tonUnexpectedExternalError(e);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providerEndTime = Date.now();\n\n\t\t\tif (!result) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst data: InlineSuggestData[] = [];\n\t\t\tconst list = new InlineSuggestionList(result, data, provider);\n\t\t\tlist.addRef();\n\t\t\trunWhenCancelled(cancellationTokenSource.token, () => {\n\t\t\t\treturn list.removeRef(cancelReason);\n\t\t\t});\n\t\t\tif (cancellationTokenSource.token.isCancellationRequested) {\n\t\t\t\treturn undefined; // The list is disposed now, so we cannot return the items!\n\t\t\t}\n\n\t\t\tfor (const item of result.items) {\n\t\t\t\tdata.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime }));\n\t\t\t}\n\n\t\t\treturn list;\n\t\t} finally {\n\t\t\trunningCount--;\n\t\t}\n\t});\n\n\tconst inlineCompletionLists = AsyncIterableProducer.fromPromisesResolveOrder(providers.map(p => queryProvider.get(p))).filter(isDefined);\n\n\treturn {\n\t\tcontextWithUuid,\n\t\tget didAllProvidersReturn() { return runningCount === 0; },\n\t\tlists: inlineCompletionLists,\n\t\tcancelAndDispose: reason => {\n\t\t\tif (cancelReason !== undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcancelReason = reason;\n\t\t\tcancellationTokenSource.dispose(true);\n\t\t}\n\t};\n}\n\n/** If the token is eventually cancelled, this will not leak either. */\nexport function runWhenCancelled(token: CancellationToken, callback: () => void): IDisposable {\n\tif (token.isCancellationRequested) {\n\t\tcallback();\n\t\treturn Disposable.None;\n\t} else {\n\t\tconst listener = token.onCancellationRequested(() => {\n\t\t\tlistener.dispose();\n\t\t\tcallback();\n\t\t});\n\t\treturn { dispose: () => listener.dispose() };\n\t}\n}\n\nexport interface IInlineCompletionProviderResult {\n\tget didAllProvidersReturn(): boolean;\n\n\tcontextWithUuid: InlineCompletionContext;\n\n\tcancelAndDispose(reason: InlineCompletionsDisposeReason): void;\n\n\tlists: AsyncIterableProducer<InlineSuggestionList>;\n}\n\nfunction toInlineSuggestData(\n\tinlineCompletion: InlineCompletion,\n\tsource: InlineSuggestionList,\n\tdefaultReplaceRange: Range,\n\ttextModel: ITextModel,\n\tlanguageConfigurationService: ILanguageConfigurationService | undefined,\n\tcontext: InlineCompletionContext,\n\trequestInfo: InlineSuggestRequestInfo,\n\tproviderRequestInfo: InlineSuggestProviderRequestInfo,\n): InlineSuggestData {\n\tlet insertText: string;\n\tlet snippetInfo: SnippetInfo | undefined;\n\tlet range = inlineCompletion.range ? Range.lift(inlineCompletion.range) : defaultReplaceRange;\n\n\tif (typeof inlineCompletion.insertText === 'string') {\n\t\tinsertText = inlineCompletion.insertText;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinsertText = closeBrackets(\n\t\t\t\tinsertText,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = insertText.length - inlineCompletion.insertText.length;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tsnippetInfo = undefined;\n\t} else if ('snippet' in inlineCompletion.insertText) {\n\t\tconst preBracketCompletionLength = inlineCompletion.insertText.snippet.length;\n\n\t\tif (languageConfigurationService && inlineCompletion.completeBracketPairs) {\n\t\t\tinlineCompletion.insertText.snippet = closeBrackets(\n\t\t\t\tinlineCompletion.insertText.snippet,\n\t\t\t\trange.getStartPosition(),\n\t\t\t\ttextModel,\n\t\t\t\tlanguageConfigurationService\n\t\t\t);\n\n\t\t\t// Modify range depending on if brackets are added or removed\n\t\t\tconst diff = inlineCompletion.insertText.snippet.length - preBracketCompletionLength;\n\t\t\tif (diff !== 0) {\n\t\t\t\trange = new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn + diff);\n\t\t\t}\n\t\t}\n\n\t\tconst snippet = new SnippetParser().parse(inlineCompletion.insertText.snippet);\n\n\t\tif (snippet.children.length === 1 && snippet.children[0] instanceof Text) {\n\t\t\tinsertText = snippet.children[0].value;\n\t\t\tsnippetInfo = undefined;\n\t\t} else {\n\t\t\tinsertText = snippet.toString();\n\t\t\tsnippetInfo = {\n\t\t\t\tsnippet: inlineCompletion.insertText.snippet,\n\t\t\t\trange: range\n\t\t\t};\n\t\t}\n\t} else {\n\t\tassertNever(inlineCompletion.insertText);\n\t}\n\n\tconst displayLocation = inlineCompletion.displayLocation ? {\n\t\trange: Range.lift(inlineCompletion.displayLocation.range),\n\t\tlabel: inlineCompletion.displayLocation.label,\n\t\tkind: inlineCompletion.displayLocation.kind,\n\t\tjumpToEdit: inlineCompletion.displayLocation.jumpToEdit,\n\t} : undefined;\n\n\treturn new InlineSuggestData(\n\t\trange,\n\t\tinsertText,\n\t\tsnippetInfo,\n\t\tdisplayLocation,\n\t\tinlineCompletion.additionalTextEdits || getReadonlyEmptyArray(),\n\t\tinlineCompletion,\n\t\tsource,\n\t\tcontext,\n\t\tinlineCompletion.isInlineEdit ?? false,\n\t\trequestInfo,\n\t\tproviderRequestInfo,\n\t\tinlineCompletion.correlationId,\n\t);\n}\n\nexport type InlineSuggestRequestInfo = {\n\tstartTime: number;\n\teditorType: InlineCompletionEditorType;\n\tlanguageId: string;\n\treason: string;\n\ttypingInterval: number;\n\ttypingIntervalCharacterCount: number;\n\tavailableProviders: ProviderId[];\n};\n\nexport type InlineSuggestProviderRequestInfo = {\n\tstartTime: number;\n\tendTime: number;\n};\n\nexport type PartialAcceptance = {\n\tcharacters: number;\n\tcount: number;\n\tratio: number;\n};\n\nexport type InlineSuggestViewData = {\n\teditorType: InlineCompletionEditorType;\n\trenderData?: InlineCompletionViewData;\n\tviewKind?: InlineCompletionViewKind;\n\terror?: string;\n};\n\nexport class InlineSuggestData {\n\tprivate _didShow = false;\n\tprivate _timeUntilShown: number | undefined = undefined;\n\tprivate _showStartTime: number | undefined = undefined;\n\tprivate _shownDuration: number = 0;\n\tprivate _showUncollapsedStartTime: number | undefined = undefined;\n\tprivate _showUncollapsedDuration: number = 0;\n\tprivate _notShownReason: string | undefined = undefined;\n\n\tprivate _viewData: InlineSuggestViewData;\n\tprivate _didReportEndOfLife = false;\n\tprivate _lastSetEndOfLifeReason: InlineCompletionEndOfLifeReason | undefined = undefined;\n\tprivate _isPreceeded = false;\n\tprivate _partiallyAcceptedCount = 0;\n\tprivate _partiallyAcceptedSinceOriginal: PartialAcceptance = { characters: 0, ratio: 0, count: 0 };\n\n\tconstructor(\n\t\tpublic readonly range: Range,\n\t\tpublic readonly insertText: string,\n\t\tpublic readonly snippetInfo: SnippetInfo | undefined,\n\t\tpublic readonly displayLocation: IDisplayLocation | undefined,\n\t\tpublic readonly additionalTextEdits: readonly ISingleEditOperation[],\n\n\t\tpublic readonly sourceInlineCompletion: InlineCompletion,\n\t\tpublic readonly source: InlineSuggestionList,\n\t\tpublic readonly context: InlineCompletionContext,\n\t\tpublic readonly isInlineEdit: boolean,\n\n\t\tprivate readonly _requestInfo: InlineSuggestRequestInfo,\n\t\tprivate readonly _providerRequestInfo: InlineSuggestProviderRequestInfo,\n\t\tprivate readonly _correlationId: string | undefined,\n\t) {\n\t\tthis._viewData = { editorType: _requestInfo.editorType };\n\t}\n\n\tpublic get showInlineEditMenu() { return this.sourceInlineCompletion.showInlineEditMenu ?? false; }\n\n\tpublic get partialAccepts(): PartialAcceptance { return this._partiallyAcceptedSinceOriginal; }\n\n\tpublic async reportInlineEditShown(commandService: ICommandService, updatedInsertText: string, viewKind: InlineCompletionViewKind, viewData: InlineCompletionViewData): Promise<void> {\n\t\tthis.updateShownDuration(viewKind);\n\n\t\tif (this._didShow) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didShow = true;\n\t\tthis._viewData.viewKind = viewKind;\n\t\tthis._viewData.renderData = viewData;\n\t\tthis._timeUntilShown = Date.now() - this._requestInfo.startTime;\n\n\t\tconst editDeltaInfo = new EditDeltaInfo(viewData.lineCountModified, viewData.lineCountOriginal, viewData.characterCountModified, viewData.characterCountOriginal);\n\t\tthis.source.provider.handleItemDidShow?.(this.source.inlineSuggestions, this.sourceInlineCompletion, updatedInsertText, editDeltaInfo);\n\n\t\tif (this.sourceInlineCompletion.shownCommand) {\n\t\t\tawait commandService.executeCommand(this.sourceInlineCompletion.shownCommand.id, ...(this.sourceInlineCompletion.shownCommand.arguments || []));\n\t\t}\n\t}\n\n\tpublic reportPartialAccept(acceptedCharacters: number, info: PartialAcceptInfo, partialAcceptance: PartialAcceptance) {\n\t\tthis._partiallyAcceptedCount++;\n\t\tthis._partiallyAcceptedSinceOriginal.characters += partialAcceptance.characters;\n\t\tthis._partiallyAcceptedSinceOriginal.ratio = Math.min(this._partiallyAcceptedSinceOriginal.ratio + (1 - this._partiallyAcceptedSinceOriginal.ratio) * partialAcceptance.ratio, 1);\n\t\tthis._partiallyAcceptedSinceOriginal.count += partialAcceptance.count;\n\n\t\tthis.source.provider.handlePartialAccept?.(\n\t\t\tthis.source.inlineSuggestions,\n\t\t\tthis.sourceInlineCompletion,\n\t\t\tacceptedCharacters,\n\t\t\tinfo\n\t\t);\n\t}\n\n\t/**\n\t * Sends the end of life event to the provider.\n\t * If no reason is provided, the last set reason is used.\n\t * If no reason was set, the default reason is used.\n\t*/\n\tpublic reportEndOfLife(reason?: InlineCompletionEndOfLifeReason): void {\n\t\tif (this._didReportEndOfLife) {\n\t\t\treturn;\n\t\t}\n\t\tthis._didReportEndOfLife = true;\n\t\tthis.reportInlineEditHidden();\n\n\t\tif (!reason) {\n\t\t\treason = this._lastSetEndOfLifeReason ?? { kind: InlineCompletionEndOfLifeReasonKind.Ignored, userTypingDisagreed: false, supersededBy: undefined };\n\t\t}\n\n\t\tif (reason.kind === InlineCompletionEndOfLifeReasonKind.Rejected && this.source.provider.handleRejection) {\n\t\t\tthis.source.provider.handleRejection(this.source.inlineSuggestions, this.sourceInlineCompletion);\n\t\t}\n\n\t\tif (this.source.provider.handleEndOfLifetime) {\n\t\t\tconst summary: LifetimeSummary = {\n\t\t\t\trequestUuid: this.context.requestUuid,\n\t\t\t\tcorrelationId: this._correlationId,\n\t\t\t\tselectedSuggestionInfo: !!this.context.selectedSuggestionInfo,\n\t\t\t\tpartiallyAccepted: this._partiallyAcceptedCount,\n\t\t\t\tpartiallyAcceptedCountSinceOriginal: this._partiallyAcceptedSinceOriginal.count,\n\t\t\t\tpartiallyAcceptedRatioSinceOriginal: this._partiallyAcceptedSinceOriginal.ratio,\n\t\t\t\tpartiallyAcceptedCharactersSinceOriginal: this._partiallyAcceptedSinceOriginal.characters,\n\t\t\t\tshown: this._didShow,\n\t\t\t\tshownDuration: this._shownDuration,\n\t\t\t\tshownDurationUncollapsed: this._showUncollapsedDuration,\n\t\t\t\tpreceeded: this._isPreceeded,\n\t\t\t\ttimeUntilShown: this._timeUntilShown,\n\t\t\t\ttimeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime,\n\t\t\t\ttimeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime,\n\t\t\t\teditorType: this._viewData.editorType,\n\t\t\t\tlanguageId: this._requestInfo.languageId,\n\t\t\t\trequestReason: this._requestInfo.reason,\n\t\t\t\tviewKind: this._viewData.viewKind,\n\t\t\t\tnotShownReason: this._notShownReason,\n\t\t\t\terror: this._viewData.error,\n\t\t\t\ttypingInterval: this._requestInfo.typingInterval,\n\t\t\t\ttypingIntervalCharacterCount: this._requestInfo.typingIntervalCharacterCount,\n\t\t\t\tavailableProviders: this._requestInfo.availableProviders.map(p => p.toString()).join(','),\n\t\t\t\t...this._viewData.renderData,\n\t\t\t};\n\t\t\tthis.source.provider.handleEndOfLifetime(this.source.inlineSuggestions, this.sourceInlineCompletion, reason, summary);\n\t\t}\n\t}\n\n\tpublic reportInlineEditError(message: string): void {\n\t\tif (this._viewData.error) {\n\t\t\tthis._viewData.error += `; ${message}`;\n\t\t} else {\n\t\t\tthis._viewData.error = message;\n\t\t}\n\t}\n\n\tpublic setIsPreceeded(partialAccepts: PartialAcceptance): void {\n\t\tthis._isPreceeded = true;\n\n\t\tif (this._partiallyAcceptedSinceOriginal.characters !== 0 || this._partiallyAcceptedSinceOriginal.ratio !== 0 || this._partiallyAcceptedSinceOriginal.count !== 0) {\n\t\t\tconsole.warn('Expected partiallyAcceptedCountSinceOriginal to be { characters: 0, rate: 0, partialAcceptances: 0 } before setIsPreceeded.');\n\t\t}\n\t\tthis._partiallyAcceptedSinceOriginal = partialAccepts;\n\t}\n\n\tpublic setNotShownReason(reason: string): void {\n\t\tthis._notShownReason ??= reason;\n\t}\n\n\t/**\n\t * Sets the end of life reason, but does not send the event to the provider yet.\n\t*/\n\tpublic setEndOfLifeReason(reason: InlineCompletionEndOfLifeReason): void {\n\t\tthis.reportInlineEditHidden();\n\t\tthis._lastSetEndOfLifeReason = reason;\n\t}\n\n\tprivate updateShownDuration(viewKind: InlineCompletionViewKind) {\n\t\tconst timeNow = Date.now();\n\t\tif (!this._showStartTime) {\n\t\t\tthis._showStartTime = timeNow;\n\t\t}\n\n\t\tconst isCollapsed = viewKind === InlineCompletionViewKind.Collapsed;\n\t\tif (!isCollapsed && this._showUncollapsedStartTime === undefined) {\n\t\t\tthis._showUncollapsedStartTime = timeNow;\n\t\t}\n\n\t\tif (isCollapsed && this._showUncollapsedStartTime !== undefined) {\n\t\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\t}\n\t}\n\n\tprivate reportInlineEditHidden() {\n\t\tif (this._showStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst timeNow = Date.now();\n\t\tthis._shownDuration += timeNow - this._showStartTime;\n\t\tthis._showStartTime = undefined;\n\n\t\tif (this._showUncollapsedStartTime === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tthis._showUncollapsedDuration += timeNow - this._showUncollapsedStartTime;\n\t\tthis._showUncollapsedStartTime = undefined;\n\t}\n}\n\nexport interface SnippetInfo {\n\tsnippet: string;\n\t/* Could be different than the main range */\n\trange: Range;\n}\n\nexport interface IDisplayLocation {\n\trange: Range;\n\tlabel: string;\n\tkind: InlineCompletionDisplayLocationKind;\n\tjumpToEdit: boolean;\n}\n\nexport enum InlineCompletionEditorType {\n\tTextEditor = 'textEditor',\n\tDiffEditor = 'diffEditor',\n\tNotebook = 'notebook',\n}\n\n/**\n * A ref counted pointer to the computed `InlineCompletions` and the `InlineCompletionsProvider` that\n * computed them.\n */\nexport class InlineSuggestionList {\n\tprivate refCount = 0;\n\tconstructor(\n\t\tpublic readonly inlineSuggestions: InlineCompletions,\n\t\tpublic readonly inlineSuggestionsData: readonly InlineSuggestData[],\n\t\tpublic readonly provider: InlineCompletionsProvider,\n\t) { }\n\n\taddRef(): void {\n\t\tthis.refCount++;\n\t}\n\n\tremoveRef(reason: InlineCompletionsDisposeReason = { kind: 'other' }): void {\n\t\tthis.refCount--;\n\t\tif (this.refCount === 0) {\n\t\t\tfor (const item of this.inlineSuggestionsData) {\n\t\t\t\t// Fallback if it has not been called before\n\t\t\t\titem.reportEndOfLife();\n\t\t\t}\n\t\t\tthis.provider.disposeInlineCompletions(this.inlineSuggestions, reason);\n\t\t}\n\t}\n}\n\nfunction getDefaultRange(position: Position, model: ITextModel): Range {\n\tconst word = model.getWordAtPosition(position);\n\tconst maxColumn = model.getLineMaxColumn(position.lineNumber);\n\t// By default, always replace up until the end of the current line.\n\t// This default might be subject to change!\n\treturn word\n\t\t? new Range(position.lineNumber, word.startColumn, position.lineNumber, maxColumn)\n\t\t: Range.fromPositions(position, position.with(undefined, maxColumn));\n}\n\nfunction closeBrackets(text: string, position: Position, model: ITextModel, languageConfigurationService: ILanguageConfigurationService): string {\n\tconst currentLine = model.getLineContent(position.lineNumber);\n\tconst edit = StringReplacement.replace(new OffsetRange(position.column - 1, currentLine.length), text);\n\n\tconst proposedLineTokens = model.tokenization.tokenizeLinesAt(position.lineNumber, [edit.replace(currentLine)]);\n\tconst textTokens = proposedLineTokens?.[0].sliceZeroCopy(edit.getRangeAfterReplace());\n\tif (!textTokens) {\n\t\treturn text;\n\t}\n\n\tconst fixedText = fixBracketsInLine(textTokens, languageConfigurationService);\n\treturn fixedText;\n}\n"]}
@@ -246,14 +246,14 @@ let InlineEditsView = InlineEditsView_1 = class InlineEditsView extends Disposab
246
246
  determineView(model, reader, diff, newText) {
247
247
  // Check if we can use the previous view if it is the same InlineCompletion as previously shown
248
248
  const inlineEdit = model.inlineEdit;
249
- const canUseCache = this._previousView?.id === this.getCacheId(model);
249
+ const canUseCache = this._previousView?.id === this.getCacheId(model) && !model.displayLocation?.jumpToEdit;
250
250
  const reconsiderViewEditorWidthChange = this._previousView?.editorWidth !== this._editorObs.layoutInfoWidth.read(reader) &&
251
251
  (this._previousView?.view === InlineCompletionViewKind.SideBySide ||
252
252
  this._previousView?.view === InlineCompletionViewKind.LineReplacement);
253
253
  if (canUseCache && !reconsiderViewEditorWidthChange) {
254
254
  return this._previousView.view;
255
255
  }
256
- if (model.displayLocation) {
256
+ if (model.displayLocation && !model.inlineEdit.inlineCompletion.identity.jumpedTo.read(reader)) {
257
257
  return InlineCompletionViewKind.Custom;
258
258
  }
259
259
  // Determine the view based on the edit / diff