{"version":3,"file":"static/js/1979_fdd5ed8ad66156fd280c.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/completionModel.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggest.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/wordContextKey.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestAlternatives.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestCommitCharacters.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestOvertypingCapturer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestWidgetStatus.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestWidgetDetails.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestWidgetRenderer.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestWidget.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestController.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestInlineCompletions.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestMemory.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/suggestModel.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/browser/wordDistance.js","file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/monaco-editor@0.50.0/node_modules/monaco-editor/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.js"],"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 { quickSelect } from '../../../../base/common/arrays.js';\nimport { anyScore, fuzzyScore, FuzzyScore, fuzzyScoreGracefulAggressive, FuzzyScoreOptions } from '../../../../base/common/filters.js';\nimport { compareIgnoreCase } from '../../../../base/common/strings.js';\nexport class LineContext {\n constructor(leadingLineContent, characterCountDelta) {\n this.leadingLineContent = leadingLineContent;\n this.characterCountDelta = characterCountDelta;\n }\n}\n/**\n * Sorted, filtered completion view model\n * */\nexport class CompletionModel {\n constructor(items, column, lineContext, wordDistance, options, snippetSuggestions, fuzzyScoreOptions = FuzzyScoreOptions.default, clipboardText = undefined) {\n this.clipboardText = clipboardText;\n this._snippetCompareFn = CompletionModel._compareCompletionItems;\n this._items = items;\n this._column = column;\n this._wordDistance = wordDistance;\n this._options = options;\n this._refilterKind = 1 /* Refilter.All */;\n this._lineContext = lineContext;\n this._fuzzyScoreOptions = fuzzyScoreOptions;\n if (snippetSuggestions === 'top') {\n this._snippetCompareFn = CompletionModel._compareCompletionItemsSnippetsUp;\n }\n else if (snippetSuggestions === 'bottom') {\n this._snippetCompareFn = CompletionModel._compareCompletionItemsSnippetsDown;\n }\n }\n get lineContext() {\n return this._lineContext;\n }\n set lineContext(value) {\n if (this._lineContext.leadingLineContent !== value.leadingLineContent\n || this._lineContext.characterCountDelta !== value.characterCountDelta) {\n this._refilterKind = this._lineContext.characterCountDelta < value.characterCountDelta && this._filteredItems ? 2 /* Refilter.Incr */ : 1 /* Refilter.All */;\n this._lineContext = value;\n }\n }\n get items() {\n this._ensureCachedState();\n return this._filteredItems;\n }\n getItemsByProvider() {\n this._ensureCachedState();\n return this._itemsByProvider;\n }\n getIncompleteProvider() {\n this._ensureCachedState();\n const result = new Set();\n for (const [provider, items] of this.getItemsByProvider()) {\n if (items.length > 0 && items[0].container.incomplete) {\n result.add(provider);\n }\n }\n return result;\n }\n get stats() {\n this._ensureCachedState();\n return this._stats;\n }\n _ensureCachedState() {\n if (this._refilterKind !== 0 /* Refilter.Nothing */) {\n this._createCachedState();\n }\n }\n _createCachedState() {\n this._itemsByProvider = new Map();\n const labelLengths = [];\n const { leadingLineContent, characterCountDelta } = this._lineContext;\n let word = '';\n let wordLow = '';\n // incrementally filter less\n const source = this._refilterKind === 1 /* Refilter.All */ ? this._items : this._filteredItems;\n const target = [];\n // picks a score function based on the number of\n // items that we have to score/filter and based on the\n // user-configuration\n const scoreFn = (!this._options.filterGraceful || source.length > 2000) ? fuzzyScore : fuzzyScoreGracefulAggressive;\n for (let i = 0; i < source.length; i++) {\n const item = source[i];\n if (item.isInvalid) {\n continue; // SKIP invalid items\n }\n // keep all items by their provider\n const arr = this._itemsByProvider.get(item.provider);\n if (arr) {\n arr.push(item);\n }\n else {\n this._itemsByProvider.set(item.provider, [item]);\n }\n // 'word' is that remainder of the current line that we\n // filter and score against. In theory each suggestion uses a\n // different word, but in practice not - that's why we cache\n const overwriteBefore = item.position.column - item.editStart.column;\n const wordLen = overwriteBefore + characterCountDelta - (item.position.column - this._column);\n if (word.length !== wordLen) {\n word = wordLen === 0 ? '' : leadingLineContent.slice(-wordLen);\n wordLow = word.toLowerCase();\n }\n // remember the word against which this item was\n // scored\n item.word = word;\n if (wordLen === 0) {\n // when there is nothing to score against, don't\n // event try to do. Use a const rank and rely on\n // the fallback-sort using the initial sort order.\n // use a score of `-100` because that is out of the\n // bound of values `fuzzyScore` will return\n item.score = FuzzyScore.Default;\n }\n else {\n // skip word characters that are whitespace until\n // we have hit the replace range (overwriteBefore)\n let wordPos = 0;\n while (wordPos < overwriteBefore) {\n const ch = word.charCodeAt(wordPos);\n if (ch === 32 /* CharCode.Space */ || ch === 9 /* CharCode.Tab */) {\n wordPos += 1;\n }\n else {\n break;\n }\n }\n if (wordPos >= wordLen) {\n // the wordPos at which scoring starts is the whole word\n // and therefore the same rules as not having a word apply\n item.score = FuzzyScore.Default;\n }\n else if (typeof item.completion.filterText === 'string') {\n // when there is a `filterText` it must match the `word`.\n // if it matches we check with the label to compute highlights\n // and if that doesn't yield a result we have no highlights,\n // despite having the match\n const match = scoreFn(word, wordLow, wordPos, item.completion.filterText, item.filterTextLow, 0, this._fuzzyScoreOptions);\n if (!match) {\n continue; // NO match\n }\n if (compareIgnoreCase(item.completion.filterText, item.textLabel) === 0) {\n // filterText and label are actually the same -> use good highlights\n item.score = match;\n }\n else {\n // re-run the scorer on the label in the hope of a result BUT use the rank\n // of the filterText-match\n item.score = anyScore(word, wordLow, wordPos, item.textLabel, item.labelLow, 0);\n item.score[0] = match[0]; // use score from filterText\n }\n }\n else {\n // by default match `word` against the `label`\n const match = scoreFn(word, wordLow, wordPos, item.textLabel, item.labelLow, 0, this._fuzzyScoreOptions);\n if (!match) {\n continue; // NO match\n }\n item.score = match;\n }\n }\n item.idx = i;\n item.distance = this._wordDistance.distance(item.position, item.completion);\n target.push(item);\n // update stats\n labelLengths.push(item.textLabel.length);\n }\n this._filteredItems = target.sort(this._snippetCompareFn);\n this._refilterKind = 0 /* Refilter.Nothing */;\n this._stats = {\n pLabelLen: labelLengths.length ?\n quickSelect(labelLengths.length - .85, labelLengths, (a, b) => a - b)\n : 0\n };\n }\n static _compareCompletionItems(a, b) {\n if (a.score[0] > b.score[0]) {\n return -1;\n }\n else if (a.score[0] < b.score[0]) {\n return 1;\n }\n else if (a.distance < b.distance) {\n return -1;\n }\n else if (a.distance > b.distance) {\n return 1;\n }\n else if (a.idx < b.idx) {\n return -1;\n }\n else if (a.idx > b.idx) {\n return 1;\n }\n else {\n return 0;\n }\n }\n static _compareCompletionItemsSnippetsDown(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* CompletionItemKind.Snippet */) {\n return 1;\n }\n else if (b.completion.kind === 27 /* CompletionItemKind.Snippet */) {\n return -1;\n }\n }\n return CompletionModel._compareCompletionItems(a, b);\n }\n static _compareCompletionItemsSnippetsUp(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* CompletionItemKind.Snippet */) {\n return -1;\n }\n else if (b.completion.kind === 27 /* CompletionItemKind.Snippet */) {\n return 1;\n }\n }\n return CompletionModel._compareCompletionItems(a, b);\n }\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 { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { CancellationError, isCancellationError, onUnexpectedExternalError } from '../../../../base/common/errors.js';\nimport { FuzzyScore } from '../../../../base/common/filters.js';\nimport { DisposableStore, isDisposable } from '../../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { SnippetParser } from '../../snippet/browser/snippetParser.js';\nimport { localize } from '../../../../nls.js';\nimport { MenuId } from '../../../../platform/actions/common/actions.js';\nimport { CommandsRegistry } from '../../../../platform/commands/common/commands.js';\nimport { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { historyNavigationVisible } from '../../../../platform/history/browser/contextScopedHistoryWidget.js';\nexport const Context = {\n Visible: historyNavigationVisible,\n HasFocusedSuggestion: new RawContextKey('suggestWidgetHasFocusedSuggestion', false, localize('suggestWidgetHasSelection', \"Whether any suggestion is focused\")),\n DetailsVisible: new RawContextKey('suggestWidgetDetailsVisible', false, localize('suggestWidgetDetailsVisible', \"Whether suggestion details are visible\")),\n MultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false, localize('suggestWidgetMultipleSuggestions', \"Whether there are multiple suggestions to pick from\")),\n MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true, localize('suggestionMakesTextEdit', \"Whether inserting the current suggestion yields in a change or has everything already been typed\")),\n AcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true, localize('acceptSuggestionOnEnter', \"Whether suggestions are inserted when pressing Enter\")),\n HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false, localize('suggestionHasInsertAndReplaceRange', \"Whether the current suggestion has insert and replace behaviour\")),\n InsertMode: new RawContextKey('suggestionInsertMode', undefined, { type: 'string', description: localize('suggestionInsertMode', \"Whether the default behaviour is to insert or replace\") }),\n CanResolve: new RawContextKey('suggestionCanResolve', false, localize('suggestionCanResolve', \"Whether the current suggestion supports to resolve further details\")),\n};\nexport const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');\nexport class CompletionItem {\n constructor(position, completion, container, provider) {\n var _a;\n this.position = position;\n this.completion = completion;\n this.container = container;\n this.provider = provider;\n // validation\n this.isInvalid = false;\n // sorting, filtering\n this.score = FuzzyScore.Default;\n this.distance = 0;\n this.textLabel = typeof completion.label === 'string'\n ? completion.label\n : (_a = completion.label) === null || _a === void 0 ? void 0 : _a.label;\n // ensure lower-variants (perf)\n this.labelLow = this.textLabel.toLowerCase();\n // validate label\n this.isInvalid = !this.textLabel;\n this.sortTextLow = completion.sortText && completion.sortText.toLowerCase();\n this.filterTextLow = completion.filterText && completion.filterText.toLowerCase();\n this.extensionId = completion.extensionId;\n // normalize ranges\n if (Range.isIRange(completion.range)) {\n this.editStart = new Position(completion.range.startLineNumber, completion.range.startColumn);\n this.editInsertEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n this.editReplaceEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n // validate range\n this.isInvalid = this.isInvalid\n || Range.spansMultipleLines(completion.range) || completion.range.startLineNumber !== position.lineNumber;\n }\n else {\n this.editStart = new Position(completion.range.insert.startLineNumber, completion.range.insert.startColumn);\n this.editInsertEnd = new Position(completion.range.insert.endLineNumber, completion.range.insert.endColumn);\n this.editReplaceEnd = new Position(completion.range.replace.endLineNumber, completion.range.replace.endColumn);\n // validate ranges\n this.isInvalid = this.isInvalid\n || Range.spansMultipleLines(completion.range.insert) || Range.spansMultipleLines(completion.range.replace)\n || completion.range.insert.startLineNumber !== position.lineNumber || completion.range.replace.startLineNumber !== position.lineNumber\n || completion.range.insert.startColumn !== completion.range.replace.startColumn;\n }\n // create the suggestion resolver\n if (typeof provider.resolveCompletionItem !== 'function') {\n this._resolveCache = Promise.resolve();\n this._resolveDuration = 0;\n }\n }\n // ---- resolving\n get isResolved() {\n return this._resolveDuration !== undefined;\n }\n get resolveDuration() {\n return this._resolveDuration !== undefined ? this._resolveDuration : -1;\n }\n async resolve(token) {\n if (!this._resolveCache) {\n const sub = token.onCancellationRequested(() => {\n this._resolveCache = undefined;\n this._resolveDuration = undefined;\n });\n const sw = new StopWatch(true);\n this._resolveCache = Promise.resolve(this.provider.resolveCompletionItem(this.completion, token)).then(value => {\n Object.assign(this.completion, value);\n this._resolveDuration = sw.elapsed();\n }, err => {\n if (isCancellationError(err)) {\n // the IPC queue will reject the request with the\n // cancellation error -> reset cached\n this._resolveCache = undefined;\n this._resolveDuration = undefined;\n }\n }).finally(() => {\n sub.dispose();\n });\n }\n return this._resolveCache;\n }\n}\nexport class CompletionOptions {\n constructor(snippetSortOrder = 2 /* SnippetSortOrder.Bottom */, kindFilter = new Set(), providerFilter = new Set(), providerItemsToReuse = new Map(), showDeprecated = true) {\n this.snippetSortOrder = snippetSortOrder;\n this.kindFilter = kindFilter;\n this.providerFilter = providerFilter;\n this.providerItemsToReuse = providerItemsToReuse;\n this.showDeprecated = showDeprecated;\n }\n}\nCompletionOptions.default = new CompletionOptions();\nlet _snippetSuggestSupport;\nexport function getSnippetSuggestSupport() {\n return _snippetSuggestSupport;\n}\nexport class CompletionItemModel {\n constructor(items, needsClipboard, durations, disposable) {\n this.items = items;\n this.needsClipboard = needsClipboard;\n this.durations = durations;\n this.disposable = disposable;\n }\n}\nexport async function provideSuggestionItems(registry, model, position, options = CompletionOptions.default, context = { triggerKind: 0 /* languages.CompletionTriggerKind.Invoke */ }, token = CancellationToken.None) {\n const sw = new StopWatch();\n position = position.clone();\n const word = model.getWordAtPosition(position);\n const defaultReplaceRange = word ? new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn) : Range.fromPositions(position);\n const defaultRange = { replace: defaultReplaceRange, insert: defaultReplaceRange.setEndPosition(position.lineNumber, position.column) };\n const result = [];\n const disposables = new DisposableStore();\n const durations = [];\n let needsClipboard = false;\n const onCompletionList = (provider, container, sw) => {\n var _a, _b, _c;\n let didAddResult = false;\n if (!container) {\n return didAddResult;\n }\n for (const suggestion of container.suggestions) {\n if (!options.kindFilter.has(suggestion.kind)) {\n // skip if not showing deprecated suggestions\n if (!options.showDeprecated && ((_a = suggestion === null || suggestion === void 0 ? void 0 : suggestion.tags) === null || _a === void 0 ? void 0 : _a.includes(1 /* languages.CompletionItemTag.Deprecated */))) {\n continue;\n }\n // fill in default range when missing\n if (!suggestion.range) {\n suggestion.range = defaultRange;\n }\n // fill in default sortText when missing\n if (!suggestion.sortText) {\n suggestion.sortText = typeof suggestion.label === 'string' ? suggestion.label : suggestion.label.label;\n }\n if (!needsClipboard && suggestion.insertTextRules && suggestion.insertTextRules & 4 /* languages.CompletionItemInsertTextRule.InsertAsSnippet */) {\n needsClipboard = SnippetParser.guessNeedsClipboard(suggestion.insertText);\n }\n result.push(new CompletionItem(position, suggestion, container, provider));\n didAddResult = true;\n }\n }\n if (isDisposable(container)) {\n disposables.add(container);\n }\n durations.push({\n providerName: (_b = provider._debugDisplayName) !== null && _b !== void 0 ? _b : 'unknown_provider', elapsedProvider: (_c = container.duration) !== null && _c !== void 0 ? _c : -1, elapsedOverall: sw.elapsed()\n });\n return didAddResult;\n };\n // ask for snippets in parallel to asking \"real\" providers. Only do something if configured to\n // do so - no snippet filter, no special-providers-only request\n const snippetCompletions = (async () => {\n if (!_snippetSuggestSupport || options.kindFilter.has(27 /* languages.CompletionItemKind.Snippet */)) {\n return;\n }\n // we have items from a previous session that we can reuse\n const reuseItems = options.providerItemsToReuse.get(_snippetSuggestSupport);\n if (reuseItems) {\n reuseItems.forEach(item => result.push(item));\n return;\n }\n if (options.providerFilter.size > 0 && !options.providerFilter.has(_snippetSuggestSupport)) {\n return;\n }\n const sw = new StopWatch();\n const list = await _snippetSuggestSupport.provideCompletionItems(model, position, context, token);\n onCompletionList(_snippetSuggestSupport, list, sw);\n })();\n // add suggestions from contributed providers - providers are ordered in groups of\n // equal score and once a group produces a result the process stops\n // get provider groups, always add snippet suggestion provider\n for (const providerGroup of registry.orderedGroups(model)) {\n // for each support in the group ask for suggestions\n let didAddResult = false;\n await Promise.all(providerGroup.map(async (provider) => {\n // we have items from a previous session that we can reuse\n if (options.providerItemsToReuse.has(provider)) {\n const items = options.providerItemsToReuse.get(provider);\n items.forEach(item => result.push(item));\n didAddResult = didAddResult || items.length > 0;\n return;\n }\n // check if this provider is filtered out\n if (options.providerFilter.size > 0 && !options.providerFilter.has(provider)) {\n return;\n }\n try {\n const sw = new StopWatch();\n const list = await provider.provideCompletionItems(model, position, context, token);\n didAddResult = onCompletionList(provider, list, sw) || didAddResult;\n }\n catch (err) {\n onUnexpectedExternalError(err);\n }\n }));\n if (didAddResult || token.isCancellationRequested) {\n break;\n }\n }\n await snippetCompletions;\n if (token.isCancellationRequested) {\n disposables.dispose();\n return Promise.reject(new CancellationError());\n }\n return new CompletionItemModel(result.sort(getSuggestionComparator(options.snippetSortOrder)), needsClipboard, { entries: durations, elapsed: sw.elapsed() }, disposables);\n}\nfunction defaultComparator(a, b) {\n // check with 'sortText'\n if (a.sortTextLow && b.sortTextLow) {\n if (a.sortTextLow < b.sortTextLow) {\n return -1;\n }\n else if (a.sortTextLow > b.sortTextLow) {\n return 1;\n }\n }\n // check with 'label'\n if (a.textLabel < b.textLabel) {\n return -1;\n }\n else if (a.textLabel > b.textLabel) {\n return 1;\n }\n // check with 'type'\n return a.completion.kind - b.completion.kind;\n}\nfunction snippetUpComparator(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* languages.CompletionItemKind.Snippet */) {\n return -1;\n }\n else if (b.completion.kind === 27 /* languages.CompletionItemKind.Snippet */) {\n return 1;\n }\n }\n return defaultComparator(a, b);\n}\nfunction snippetDownComparator(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* languages.CompletionItemKind.Snippet */) {\n return 1;\n }\n else if (b.completion.kind === 27 /* languages.CompletionItemKind.Snippet */) {\n return -1;\n }\n }\n return defaultComparator(a, b);\n}\nconst _snippetComparators = new Map();\n_snippetComparators.set(0 /* SnippetSortOrder.Top */, snippetUpComparator);\n_snippetComparators.set(2 /* SnippetSortOrder.Bottom */, snippetDownComparator);\n_snippetComparators.set(1 /* SnippetSortOrder.Inline */, defaultComparator);\nexport function getSuggestionComparator(snippetConfig) {\n return _snippetComparators.get(snippetConfig);\n}\nCommandsRegistry.registerCommand('_executeCompletionItemProvider', async (accessor, ...args) => {\n const [uri, position, triggerCharacter, maxItemsToResolve] = args;\n assertType(URI.isUri(uri));\n assertType(Position.isIPosition(position));\n assertType(typeof triggerCharacter === 'string' || !triggerCharacter);\n assertType(typeof maxItemsToResolve === 'number' || !maxItemsToResolve);\n const { completionProvider } = accessor.get(ILanguageFeaturesService);\n const ref = await accessor.get(ITextModelService).createModelReference(uri);\n try {\n const result = {\n incomplete: false,\n suggestions: []\n };\n const resolving = [];\n const actualPosition = ref.object.textEditorModel.validatePosition(position);\n const completions = await provideSuggestionItems(completionProvider, ref.object.textEditorModel, actualPosition, undefined, { triggerCharacter: triggerCharacter !== null && triggerCharacter !== void 0 ? triggerCharacter : undefined, triggerKind: triggerCharacter ? 1 /* languages.CompletionTriggerKind.TriggerCharacter */ : 0 /* languages.CompletionTriggerKind.Invoke */ });\n for (const item of completions.items) {\n if (resolving.length < (maxItemsToResolve !== null && maxItemsToResolve !== void 0 ? maxItemsToResolve : 0)) {\n resolving.push(item.resolve(CancellationToken.None));\n }\n result.incomplete = result.incomplete || item.container.incomplete;\n result.suggestions.push(item.completion);\n }\n try {\n await Promise.all(resolving);\n return result;\n }\n finally {\n setTimeout(() => completions.disposable.dispose(), 100);\n }\n }\n finally {\n ref.dispose();\n }\n});\nexport function showSimpleSuggestions(editor, provider) {\n var _a;\n (_a = editor.getContribution('editor.contrib.suggestController')) === null || _a === void 0 ? void 0 : _a.triggerSuggest(new Set().add(provider), undefined, true);\n}\nexport class QuickSuggestionsOptions {\n static isAllOff(config) {\n return config.other === 'off' && config.comments === 'off' && config.strings === 'off';\n }\n static isAllOn(config) {\n return config.other === 'on' && config.comments === 'on' && config.strings === 'on';\n }\n static valueFor(config, tokenType) {\n switch (tokenType) {\n case 1 /* StandardTokenType.Comment */: return config.comments;\n case 2 /* StandardTokenType.String */: return config.strings;\n default: return config.other;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar WordContextKey_1;\nimport { IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nlet WordContextKey = WordContextKey_1 = class WordContextKey {\n constructor(_editor, contextKeyService) {\n this._editor = _editor;\n this._enabled = false;\n this._ckAtEnd = WordContextKey_1.AtEnd.bindTo(contextKeyService);\n this._configListener = this._editor.onDidChangeConfiguration(e => e.hasChanged(123 /* EditorOption.tabCompletion */) && this._update());\n this._update();\n }\n dispose() {\n var _a;\n this._configListener.dispose();\n (_a = this._selectionListener) === null || _a === void 0 ? void 0 : _a.dispose();\n this._ckAtEnd.reset();\n }\n _update() {\n // only update this when tab completions are enabled\n const enabled = this._editor.getOption(123 /* EditorOption.tabCompletion */) === 'on';\n if (this._enabled === enabled) {\n return;\n }\n this._enabled = enabled;\n if (this._enabled) {\n const checkForWordEnd = () => {\n if (!this._editor.hasModel()) {\n this._ckAtEnd.set(false);\n return;\n }\n const model = this._editor.getModel();\n const selection = this._editor.getSelection();\n const word = model.getWordAtPosition(selection.getStartPosition());\n if (!word) {\n this._ckAtEnd.set(false);\n return;\n }\n this._ckAtEnd.set(word.endColumn === selection.getStartPosition().column);\n };\n this._selectionListener = this._editor.onDidChangeCursorSelection(checkForWordEnd);\n checkForWordEnd();\n }\n else if (this._selectionListener) {\n this._ckAtEnd.reset();\n this._selectionListener.dispose();\n this._selectionListener = undefined;\n }\n }\n};\nWordContextKey.AtEnd = new RawContextKey('atEndOfWord', false);\nWordContextKey = WordContextKey_1 = __decorate([\n __param(1, IContextKeyService)\n], WordContextKey);\nexport { WordContextKey };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar SuggestAlternatives_1;\nimport { IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nlet SuggestAlternatives = SuggestAlternatives_1 = class SuggestAlternatives {\n constructor(_editor, contextKeyService) {\n this._editor = _editor;\n this._index = 0;\n this._ckOtherSuggestions = SuggestAlternatives_1.OtherSuggestions.bindTo(contextKeyService);\n }\n dispose() {\n this.reset();\n }\n reset() {\n var _a;\n this._ckOtherSuggestions.reset();\n (_a = this._listener) === null || _a === void 0 ? void 0 : _a.dispose();\n this._model = undefined;\n this._acceptNext = undefined;\n this._ignore = false;\n }\n set({ model, index }, acceptNext) {\n // no suggestions -> nothing to do\n if (model.items.length === 0) {\n this.reset();\n return;\n }\n // no alternative suggestions -> nothing to do\n const nextIndex = SuggestAlternatives_1._moveIndex(true, model, index);\n if (nextIndex === index) {\n this.reset();\n return;\n }\n this._acceptNext = acceptNext;\n this._model = model;\n this._index = index;\n this._listener = this._editor.onDidChangeCursorPosition(() => {\n if (!this._ignore) {\n this.reset();\n }\n });\n this._ckOtherSuggestions.set(true);\n }\n static _moveIndex(fwd, model, index) {\n let newIndex = index;\n for (let rounds = model.items.length; rounds > 0; rounds--) {\n newIndex = (newIndex + model.items.length + (fwd ? +1 : -1)) % model.items.length;\n if (newIndex === index) {\n break;\n }\n if (!model.items[newIndex].completion.additionalTextEdits) {\n break;\n }\n }\n return newIndex;\n }\n next() {\n this._move(true);\n }\n prev() {\n this._move(false);\n }\n _move(fwd) {\n if (!this._model) {\n // nothing to reason about\n return;\n }\n try {\n this._ignore = true;\n this._index = SuggestAlternatives_1._moveIndex(fwd, this._model, this._index);\n this._acceptNext({ index: this._index, item: this._model.items[this._index], model: this._model });\n }\n finally {\n this._ignore = false;\n }\n }\n};\nSuggestAlternatives.OtherSuggestions = new RawContextKey('hasOtherSuggestions', false);\nSuggestAlternatives = SuggestAlternatives_1 = __decorate([\n __param(1, IContextKeyService)\n], SuggestAlternatives);\nexport { SuggestAlternatives };\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 { isNonEmptyArray } from '../../../../base/common/arrays.js';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { CharacterSet } from '../../../common/core/characterClassifier.js';\nexport class CommitCharacterController {\n constructor(editor, widget, model, accept) {\n this._disposables = new DisposableStore();\n this._disposables.add(model.onDidSuggest(e => {\n if (e.completionModel.items.length === 0) {\n this.reset();\n }\n }));\n this._disposables.add(model.onDidCancel(e => {\n this.reset();\n }));\n this._disposables.add(widget.onDidShow(() => this._onItem(widget.getFocusedItem())));\n this._disposables.add(widget.onDidFocus(this._onItem, this));\n this._disposables.add(widget.onDidHide(this.reset, this));\n this._disposables.add(editor.onWillType(text => {\n if (this._active && !widget.isFrozen() && model.state !== 0 /* State.Idle */) {\n const ch = text.charCodeAt(text.length - 1);\n if (this._active.acceptCharacters.has(ch) && editor.getOption(0 /* EditorOption.acceptSuggestionOnCommitCharacter */)) {\n accept(this._active.item);\n }\n }\n }));\n }\n _onItem(selected) {\n if (!selected || !isNonEmptyArray(selected.item.completion.commitCharacters)) {\n // no item or no commit characters\n this.reset();\n return;\n }\n if (this._active && this._active.item.item === selected.item) {\n // still the same item\n return;\n }\n // keep item and its commit characters\n const acceptCharacters = new CharacterSet();\n for (const ch of selected.item.completion.commitCharacters) {\n if (ch.length > 0) {\n acceptCharacters.add(ch.charCodeAt(0));\n }\n }\n this._active = { acceptCharacters, item: selected };\n }\n reset() {\n this._active = undefined;\n }\n dispose() {\n this._disposables.dispose();\n }\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 { DisposableStore } from '../../../../base/common/lifecycle.js';\nexport class OvertypingCapturer {\n constructor(editor, suggestModel) {\n this._disposables = new DisposableStore();\n this._lastOvertyped = [];\n this._locked = false;\n this._disposables.add(editor.onWillType(() => {\n if (this._locked || !editor.hasModel()) {\n return;\n }\n const selections = editor.getSelections();\n const selectionsLength = selections.length;\n // Check if it will overtype any selections\n let willOvertype = false;\n for (let i = 0; i < selectionsLength; i++) {\n if (!selections[i].isEmpty()) {\n willOvertype = true;\n break;\n }\n }\n if (!willOvertype) {\n if (this._lastOvertyped.length !== 0) {\n this._lastOvertyped.length = 0;\n }\n return;\n }\n this._lastOvertyped = [];\n const model = editor.getModel();\n for (let i = 0; i < selectionsLength; i++) {\n const selection = selections[i];\n // Check for overtyping capturer restrictions\n if (model.getValueLengthInRange(selection) > OvertypingCapturer._maxSelectionLength) {\n return;\n }\n this._lastOvertyped[i] = { value: model.getValueInRange(selection), multiline: selection.startLineNumber !== selection.endLineNumber };\n }\n }));\n this._disposables.add(suggestModel.onDidTrigger(e => {\n this._locked = true;\n }));\n this._disposables.add(suggestModel.onDidCancel(e => {\n this._locked = false;\n }));\n }\n getLastOvertypedInfo(idx) {\n if (idx >= 0 && idx < this._lastOvertyped.length) {\n return this._lastOvertyped[idx];\n }\n return undefined;\n }\n dispose() {\n this._disposables.dispose();\n }\n}\nOvertypingCapturer._maxSelectionLength = 51200;\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as dom from '../../../../base/browser/dom.js';\nimport { ActionBar } from '../../../../base/browser/ui/actionbar/actionbar.js';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { localize } from '../../../../nls.js';\nimport { MenuEntryActionViewItem } from '../../../../platform/actions/browser/menuEntryActionViewItem.js';\nimport { IMenuService, MenuItemAction } from '../../../../platform/actions/common/actions.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nclass StatusBarViewItem extends MenuEntryActionViewItem {\n updateLabel() {\n const kb = this._keybindingService.lookupKeybinding(this._action.id, this._contextKeyService);\n if (!kb) {\n return super.updateLabel();\n }\n if (this.label) {\n this.label.textContent = localize({ key: 'content', comment: ['A label', 'A keybinding'] }, '{0} ({1})', this._action.label, StatusBarViewItem.symbolPrintEnter(kb));\n }\n }\n static symbolPrintEnter(kb) {\n var _a;\n return (_a = kb.getLabel()) === null || _a === void 0 ? void 0 : _a.replace(/\\benter\\b/gi, '\\u23CE');\n }\n}\nlet SuggestWidgetStatus = class SuggestWidgetStatus {\n constructor(container, _menuId, instantiationService, _menuService, _contextKeyService) {\n this._menuId = _menuId;\n this._menuService = _menuService;\n this._contextKeyService = _contextKeyService;\n this._menuDisposables = new DisposableStore();\n this.element = dom.append(container, dom.$('.suggest-status-bar'));\n const actionViewItemProvider = (action => {\n return action instanceof MenuItemAction ? instantiationService.createInstance(StatusBarViewItem, action, undefined) : undefined;\n });\n this._leftActions = new ActionBar(this.element, { actionViewItemProvider });\n this._rightActions = new ActionBar(this.element, { actionViewItemProvider });\n this._leftActions.domNode.classList.add('left');\n this._rightActions.domNode.classList.add('right');\n }\n dispose() {\n this._menuDisposables.dispose();\n this._leftActions.dispose();\n this._rightActions.dispose();\n this.element.remove();\n }\n show() {\n const menu = this._menuService.createMenu(this._menuId, this._contextKeyService);\n const renderMenu = () => {\n const left = [];\n const right = [];\n for (const [group, actions] of menu.getActions()) {\n if (group === 'left') {\n left.push(...actions);\n }\n else {\n right.push(...actions);\n }\n }\n this._leftActions.clear();\n this._leftActions.push(left);\n this._rightActions.clear();\n this._rightActions.push(right);\n };\n this._menuDisposables.add(menu.onDidChange(() => renderMenu()));\n this._menuDisposables.add(menu);\n }\n hide() {\n this._menuDisposables.clear();\n }\n};\nSuggestWidgetStatus = __decorate([\n __param(2, IInstantiationService),\n __param(3, IMenuService),\n __param(4, IContextKeyService)\n], SuggestWidgetStatus);\nexport { SuggestWidgetStatus };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as dom from '../../../../base/browser/dom.js';\nimport { DomScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { Codicon } from '../../../../base/common/codicons.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { MarkdownString } from '../../../../base/common/htmlContent.js';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { MarkdownRenderer } from '../../../browser/widget/markdownRenderer/browser/markdownRenderer.js';\nimport { ResizableHTMLElement } from '../../../../base/browser/ui/resizable/resizable.js';\nimport * as nls from '../../../../nls.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nexport function canExpandCompletionItem(item) {\n return !!item && Boolean(item.completion.documentation || item.completion.detail && item.completion.detail !== item.completion.label);\n}\nlet SuggestDetailsWidget = class SuggestDetailsWidget {\n constructor(_editor, instaService) {\n this._editor = _editor;\n this._onDidClose = new Emitter();\n this.onDidClose = this._onDidClose.event;\n this._onDidChangeContents = new Emitter();\n this.onDidChangeContents = this._onDidChangeContents.event;\n this._disposables = new DisposableStore();\n this._renderDisposeable = new DisposableStore();\n this._borderWidth = 1;\n this._size = new dom.Dimension(330, 0);\n this.domNode = dom.$('.suggest-details');\n this.domNode.classList.add('no-docs');\n this._markdownRenderer = instaService.createInstance(MarkdownRenderer, { editor: _editor });\n this._body = dom.$('.body');\n this._scrollbar = new DomScrollableElement(this._body, {\n alwaysConsumeMouseWheel: true,\n });\n dom.append(this.domNode, this._scrollbar.getDomNode());\n this._disposables.add(this._scrollbar);\n this._header = dom.append(this._body, dom.$('.header'));\n this._close = dom.append(this._header, dom.$('span' + ThemeIcon.asCSSSelector(Codicon.close)));\n this._close.title = nls.localize('details.close', \"Close\");\n this._type = dom.append(this._header, dom.$('p.type'));\n this._docs = dom.append(this._body, dom.$('p.docs'));\n this._configureFont();\n this._disposables.add(this._editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(50 /* EditorOption.fontInfo */)) {\n this._configureFont();\n }\n }));\n }\n dispose() {\n this._disposables.dispose();\n this._renderDisposeable.dispose();\n }\n _configureFont() {\n const options = this._editor.getOptions();\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n const fontFamily = fontInfo.getMassagedFontFamily();\n const fontSize = options.get(119 /* EditorOption.suggestFontSize */) || fontInfo.fontSize;\n const lineHeight = options.get(120 /* EditorOption.suggestLineHeight */) || fontInfo.lineHeight;\n const fontWeight = fontInfo.fontWeight;\n const fontSizePx = `${fontSize}px`;\n const lineHeightPx = `${lineHeight}px`;\n this.domNode.style.fontSize = fontSizePx;\n this.domNode.style.lineHeight = `${lineHeight / fontSize}`;\n this.domNode.style.fontWeight = fontWeight;\n this.domNode.style.fontFeatureSettings = fontInfo.fontFeatureSettings;\n this._type.style.fontFamily = fontFamily;\n this._close.style.height = lineHeightPx;\n this._close.style.width = lineHeightPx;\n }\n getLayoutInfo() {\n const lineHeight = this._editor.getOption(120 /* EditorOption.suggestLineHeight */) || this._editor.getOption(50 /* EditorOption.fontInfo */).lineHeight;\n const borderWidth = this._borderWidth;\n const borderHeight = borderWidth * 2;\n return {\n lineHeight,\n borderWidth,\n borderHeight,\n verticalPadding: 22,\n horizontalPadding: 14\n };\n }\n renderLoading() {\n this._type.textContent = nls.localize('loading', \"Loading...\");\n this._docs.textContent = '';\n this.domNode.classList.remove('no-docs', 'no-type');\n this.layout(this.size.width, this.getLayoutInfo().lineHeight * 2);\n this._onDidChangeContents.fire(this);\n }\n renderItem(item, explainMode) {\n var _a, _b;\n this._renderDisposeable.clear();\n let { detail, documentation } = item.completion;\n if (explainMode) {\n let md = '';\n md += `score: ${item.score[0]}\\n`;\n md += `prefix: ${(_a = item.word) !== null && _a !== void 0 ? _a : '(no prefix)'}\\n`;\n md += `word: ${item.completion.filterText ? item.completion.filterText + ' (filterText)' : item.textLabel}\\n`;\n md += `distance: ${item.distance} (localityBonus-setting)\\n`;\n md += `index: ${item.idx}, based on ${item.completion.sortText && `sortText: \"${item.completion.sortText}\"` || 'label'}\\n`;\n md += `commit_chars: ${(_b = item.completion.commitCharacters) === null || _b === void 0 ? void 0 : _b.join('')}\\n`;\n documentation = new MarkdownString().appendCodeblock('empty', md);\n detail = `Provider: ${item.provider._debugDisplayName}`;\n }\n if (!explainMode && !canExpandCompletionItem(item)) {\n this.clearContents();\n return;\n }\n this.domNode.classList.remove('no-docs', 'no-type');\n // --- details\n if (detail) {\n const cappedDetail = detail.length > 100000 ? `${detail.substr(0, 100000)}…` : detail;\n this._type.textContent = cappedDetail;\n this._type.title = cappedDetail;\n dom.show(this._type);\n this._type.classList.toggle('auto-wrap', !/\\r?\\n^\\s+/gmi.test(cappedDetail));\n }\n else {\n dom.clearNode(this._type);\n this._type.title = '';\n dom.hide(this._type);\n this.domNode.classList.add('no-type');\n }\n // --- documentation\n dom.clearNode(this._docs);\n if (typeof documentation === 'string') {\n this._docs.classList.remove('markdown-docs');\n this._docs.textContent = documentation;\n }\n else if (documentation) {\n this._docs.classList.add('markdown-docs');\n dom.clearNode(this._docs);\n const renderedContents = this._markdownRenderer.render(documentation);\n this._docs.appendChild(renderedContents.element);\n this._renderDisposeable.add(renderedContents);\n this._renderDisposeable.add(this._markdownRenderer.onDidRenderAsync(() => {\n this.layout(this._size.width, this._type.clientHeight + this._docs.clientHeight);\n this._onDidChangeContents.fire(this);\n }));\n }\n this.domNode.style.userSelect = 'text';\n this.domNode.tabIndex = -1;\n this._close.onmousedown = e => {\n e.preventDefault();\n e.stopPropagation();\n };\n this._close.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n this._onDidClose.fire();\n };\n this._body.scrollTop = 0;\n this.layout(this._size.width, this._type.clientHeight + this._docs.clientHeight);\n this._onDidChangeContents.fire(this);\n }\n clearContents() {\n this.domNode.classList.add('no-docs');\n this._type.textContent = '';\n this._docs.textContent = '';\n }\n get isEmpty() {\n return this.domNode.classList.contains('no-docs');\n }\n get size() {\n return this._size;\n }\n layout(width, height) {\n const newSize = new dom.Dimension(width, height);\n if (!dom.Dimension.equals(newSize, this._size)) {\n this._size = newSize;\n dom.size(this.domNode, width, height);\n }\n this._scrollbar.scanDomNode();\n }\n scrollDown(much = 8) {\n this._body.scrollTop += much;\n }\n scrollUp(much = 8) {\n this._body.scrollTop -= much;\n }\n scrollTop() {\n this._body.scrollTop = 0;\n }\n scrollBottom() {\n this._body.scrollTop = this._body.scrollHeight;\n }\n pageDown() {\n this.scrollDown(80);\n }\n pageUp() {\n this.scrollUp(80);\n }\n set borderWidth(width) {\n this._borderWidth = width;\n }\n get borderWidth() {\n return this._borderWidth;\n }\n};\nSuggestDetailsWidget = __decorate([\n __param(1, IInstantiationService)\n], SuggestDetailsWidget);\nexport { SuggestDetailsWidget };\nexport class SuggestDetailsOverlay {\n constructor(widget, _editor) {\n this.widget = widget;\n this._editor = _editor;\n this.allowEditorOverflow = true;\n this._disposables = new DisposableStore();\n this._added = false;\n this._preferAlignAtTop = true;\n this._resizable = new ResizableHTMLElement();\n this._resizable.domNode.classList.add('suggest-details-container');\n this._resizable.domNode.appendChild(widget.domNode);\n this._resizable.enableSashes(false, true, true, false);\n let topLeftNow;\n let sizeNow;\n let deltaTop = 0;\n let deltaLeft = 0;\n this._disposables.add(this._resizable.onDidWillResize(() => {\n topLeftNow = this._topLeft;\n sizeNow = this._resizable.size;\n }));\n this._disposables.add(this._resizable.onDidResize(e => {\n if (topLeftNow && sizeNow) {\n this.widget.layout(e.dimension.width, e.dimension.height);\n let updateTopLeft = false;\n if (e.west) {\n deltaLeft = sizeNow.width - e.dimension.width;\n updateTopLeft = true;\n }\n if (e.north) {\n deltaTop = sizeNow.height - e.dimension.height;\n updateTopLeft = true;\n }\n if (updateTopLeft) {\n this._applyTopLeft({\n top: topLeftNow.top + deltaTop,\n left: topLeftNow.left + deltaLeft,\n });\n }\n }\n if (e.done) {\n topLeftNow = undefined;\n sizeNow = undefined;\n deltaTop = 0;\n deltaLeft = 0;\n this._userSize = e.dimension;\n }\n }));\n this._disposables.add(this.widget.onDidChangeContents(() => {\n var _a;\n if (this._anchorBox) {\n this._placeAtAnchor(this._anchorBox, (_a = this._userSize) !== null && _a !== void 0 ? _a : this.widget.size, this._preferAlignAtTop);\n }\n }));\n }\n dispose() {\n this._resizable.dispose();\n this._disposables.dispose();\n this.hide();\n }\n getId() {\n return 'suggest.details';\n }\n getDomNode() {\n return this._resizable.domNode;\n }\n getPosition() {\n return this._topLeft ? { preference: this._topLeft } : null;\n }\n show() {\n if (!this._added) {\n this._editor.addOverlayWidget(this);\n this._added = true;\n }\n }\n hide(sessionEnded = false) {\n this._resizable.clearSashHoverState();\n if (this._added) {\n this._editor.removeOverlayWidget(this);\n this._added = false;\n this._anchorBox = undefined;\n this._topLeft = undefined;\n }\n if (sessionEnded) {\n this._userSize = undefined;\n this.widget.clearContents();\n }\n }\n placeAtAnchor(anchor, preferAlignAtTop) {\n var _a;\n const anchorBox = anchor.getBoundingClientRect();\n this._anchorBox = anchorBox;\n this._preferAlignAtTop = preferAlignAtTop;\n this._placeAtAnchor(this._anchorBox, (_a = this._userSize) !== null && _a !== void 0 ? _a : this.widget.size, preferAlignAtTop);\n }\n _placeAtAnchor(anchorBox, size, preferAlignAtTop) {\n var _a;\n const bodyBox = dom.getClientArea(this.getDomNode().ownerDocument.body);\n const info = this.widget.getLayoutInfo();\n const defaultMinSize = new dom.Dimension(220, 2 * info.lineHeight);\n const defaultTop = anchorBox.top;\n // EAST\n const eastPlacement = (function () {\n const width = bodyBox.width - (anchorBox.left + anchorBox.width + info.borderWidth + info.horizontalPadding);\n const left = -info.borderWidth + anchorBox.left + anchorBox.width;\n const maxSizeTop = new dom.Dimension(width, bodyBox.height - anchorBox.top - info.borderHeight - info.verticalPadding);\n const maxSizeBottom = maxSizeTop.with(undefined, anchorBox.top + anchorBox.height - info.borderHeight - info.verticalPadding);\n return { top: defaultTop, left, fit: width - size.width, maxSizeTop, maxSizeBottom, minSize: defaultMinSize.with(Math.min(width, defaultMinSize.width)) };\n })();\n // WEST\n const westPlacement = (function () {\n const width = anchorBox.left - info.borderWidth - info.horizontalPadding;\n const left = Math.max(info.horizontalPadding, anchorBox.left - size.width - info.borderWidth);\n const maxSizeTop = new dom.Dimension(width, bodyBox.height - anchorBox.top - info.borderHeight - info.verticalPadding);\n const maxSizeBottom = maxSizeTop.with(undefined, anchorBox.top + anchorBox.height - info.borderHeight - info.verticalPadding);\n return { top: defaultTop, left, fit: width - size.width, maxSizeTop, maxSizeBottom, minSize: defaultMinSize.with(Math.min(width, defaultMinSize.width)) };\n })();\n // SOUTH\n const southPacement = (function () {\n const left = anchorBox.left;\n const top = -info.borderWidth + anchorBox.top + anchorBox.height;\n const maxSizeBottom = new dom.Dimension(anchorBox.width - info.borderHeight, bodyBox.height - anchorBox.top - anchorBox.height - info.verticalPadding);\n return { top, left, fit: maxSizeBottom.height - size.height, maxSizeBottom, maxSizeTop: maxSizeBottom, minSize: defaultMinSize.with(maxSizeBottom.width) };\n })();\n // take first placement that fits or the first with \"least bad\" fit\n const placements = [eastPlacement, westPlacement, southPacement];\n const placement = (_a = placements.find(p => p.fit >= 0)) !== null && _a !== void 0 ? _a : placements.sort((a, b) => b.fit - a.fit)[0];\n // top/bottom placement\n const bottom = anchorBox.top + anchorBox.height - info.borderHeight;\n let alignAtTop;\n let height = size.height;\n const maxHeight = Math.max(placement.maxSizeTop.height, placement.maxSizeBottom.height);\n if (height > maxHeight) {\n height = maxHeight;\n }\n let maxSize;\n if (preferAlignAtTop) {\n if (height <= placement.maxSizeTop.height) {\n alignAtTop = true;\n maxSize = placement.maxSizeTop;\n }\n else {\n alignAtTop = false;\n maxSize = placement.maxSizeBottom;\n }\n }\n else {\n if (height <= placement.maxSizeBottom.height) {\n alignAtTop = false;\n maxSize = placement.maxSizeBottom;\n }\n else {\n alignAtTop = true;\n maxSize = placement.maxSizeTop;\n }\n }\n let { top, left } = placement;\n if (!alignAtTop && height > anchorBox.height) {\n top = bottom - height;\n }\n const editorDomNode = this._editor.getDomNode();\n if (editorDomNode) {\n // get bounding rectangle of the suggest widget relative to the editor\n const editorBoundingBox = editorDomNode.getBoundingClientRect();\n top -= editorBoundingBox.top;\n left -= editorBoundingBox.left;\n }\n this._applyTopLeft({ left, top });\n this._resizable.enableSashes(!alignAtTop, placement === eastPlacement, alignAtTop, placement !== eastPlacement);\n this._resizable.minSize = placement.minSize;\n this._resizable.maxSize = maxSize;\n this._resizable.layout(height, Math.min(maxSize.width, size.width));\n this.widget.layout(this._resizable.size.width, this._resizable.size.height);\n }\n _applyTopLeft(topLeft) {\n this._topLeft = topLeft;\n this._editor.layoutOverlayWidget(this);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar _a;\nimport { $, append, hide, show } from '../../../../base/browser/dom.js';\nimport { IconLabel } from '../../../../base/browser/ui/iconLabel/iconLabel.js';\nimport { Codicon } from '../../../../base/common/codicons.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { createMatches } from '../../../../base/common/filters.js';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { CompletionItemKinds } from '../../../common/languages.js';\nimport { getIconClasses } from '../../../common/services/getIconClasses.js';\nimport { IModelService } from '../../../common/services/model.js';\nimport { ILanguageService } from '../../../common/languages/language.js';\nimport * as nls from '../../../../nls.js';\nimport { FileKind } from '../../../../platform/files/common/files.js';\nimport { registerIcon } from '../../../../platform/theme/common/iconRegistry.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { canExpandCompletionItem } from './suggestWidgetDetails.js';\nexport function getAriaId(index) {\n return `suggest-aria-id:${index}`;\n}\nconst suggestMoreInfoIcon = registerIcon('suggest-more-info', Codicon.chevronRight, nls.localize('suggestMoreInfoIcon', 'Icon for more information in the suggest widget.'));\nconst _completionItemColor = new (_a = class ColorExtractor {\n extract(item, out) {\n if (item.textLabel.match(_a._regexStrict)) {\n out[0] = item.textLabel;\n return true;\n }\n if (item.completion.detail && item.completion.detail.match(_a._regexStrict)) {\n out[0] = item.completion.detail;\n return true;\n }\n if (item.completion.documentation) {\n const value = typeof item.completion.documentation === 'string'\n ? item.completion.documentation\n : item.completion.documentation.value;\n const match = _a._regexRelaxed.exec(value);\n if (match && (match.index === 0 || match.index + match[0].length === value.length)) {\n out[0] = match[0];\n return true;\n }\n }\n return false;\n }\n },\n _a._regexRelaxed = /(#([\\da-fA-F]{3}){1,2}|(rgb|hsl)a\\(\\s*(\\d{1,3}%?\\s*,\\s*){3}(1|0?\\.\\d+)\\)|(rgb|hsl)\\(\\s*\\d{1,3}%?(\\s*,\\s*\\d{1,3}%?){2}\\s*\\))/,\n _a._regexStrict = new RegExp(`^${_a._regexRelaxed.source}$`, 'i'),\n _a);\nlet ItemRenderer = class ItemRenderer {\n constructor(_editor, _modelService, _languageService, _themeService) {\n this._editor = _editor;\n this._modelService = _modelService;\n this._languageService = _languageService;\n this._themeService = _themeService;\n this._onDidToggleDetails = new Emitter();\n this.onDidToggleDetails = this._onDidToggleDetails.event;\n this.templateId = 'suggestion';\n }\n dispose() {\n this._onDidToggleDetails.dispose();\n }\n renderTemplate(container) {\n const disposables = new DisposableStore();\n const root = container;\n root.classList.add('show-file-icons');\n const icon = append(container, $('.icon'));\n const colorspan = append(icon, $('span.colorspan'));\n const text = append(container, $('.contents'));\n const main = append(text, $('.main'));\n const iconContainer = append(main, $('.icon-label.codicon'));\n const left = append(main, $('span.left'));\n const right = append(main, $('span.right'));\n const iconLabel = new IconLabel(left, { supportHighlights: true, supportIcons: true });\n disposables.add(iconLabel);\n const parametersLabel = append(left, $('span.signature-label'));\n const qualifierLabel = append(left, $('span.qualifier-label'));\n const detailsLabel = append(right, $('span.details-label'));\n const readMore = append(right, $('span.readMore' + ThemeIcon.asCSSSelector(suggestMoreInfoIcon)));\n readMore.title = nls.localize('readMore', \"Read More\");\n const configureFont = () => {\n const options = this._editor.getOptions();\n const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n const fontFamily = fontInfo.getMassagedFontFamily();\n const fontFeatureSettings = fontInfo.fontFeatureSettings;\n const fontSize = options.get(119 /* EditorOption.suggestFontSize */) || fontInfo.fontSize;\n const lineHeight = options.get(120 /* EditorOption.suggestLineHeight */) || fontInfo.lineHeight;\n const fontWeight = fontInfo.fontWeight;\n const letterSpacing = fontInfo.letterSpacing;\n const fontSizePx = `${fontSize}px`;\n const lineHeightPx = `${lineHeight}px`;\n const letterSpacingPx = `${letterSpacing}px`;\n root.style.fontSize = fontSizePx;\n root.style.fontWeight = fontWeight;\n root.style.letterSpacing = letterSpacingPx;\n main.style.fontFamily = fontFamily;\n main.style.fontFeatureSettings = fontFeatureSettings;\n main.style.lineHeight = lineHeightPx;\n icon.style.height = lineHeightPx;\n icon.style.width = lineHeightPx;\n readMore.style.height = lineHeightPx;\n readMore.style.width = lineHeightPx;\n };\n return { root, left, right, icon, colorspan, iconLabel, iconContainer, parametersLabel, qualifierLabel, detailsLabel, readMore, disposables, configureFont };\n }\n renderElement(element, index, data) {\n data.configureFont();\n const { completion } = element;\n data.root.id = getAriaId(index);\n data.colorspan.style.backgroundColor = '';\n const labelOptions = {\n labelEscapeNewLines: true,\n matches: createMatches(element.score)\n };\n const color = [];\n if (completion.kind === 19 /* CompletionItemKind.Color */ && _completionItemColor.extract(element, color)) {\n // special logic for 'color' completion items\n data.icon.className = 'icon customcolor';\n data.iconContainer.className = 'icon hide';\n data.colorspan.style.backgroundColor = color[0];\n }\n else if (completion.kind === 20 /* CompletionItemKind.File */ && this._themeService.getFileIconTheme().hasFileIcons) {\n // special logic for 'file' completion items\n data.icon.className = 'icon hide';\n data.iconContainer.className = 'icon hide';\n const labelClasses = getIconClasses(this._modelService, this._languageService, URI.from({ scheme: 'fake', path: element.textLabel }), FileKind.FILE);\n const detailClasses = getIconClasses(this._modelService, this._languageService, URI.from({ scheme: 'fake', path: completion.detail }), FileKind.FILE);\n labelOptions.extraClasses = labelClasses.length > detailClasses.length ? labelClasses : detailClasses;\n }\n else if (completion.kind === 23 /* CompletionItemKind.Folder */ && this._themeService.getFileIconTheme().hasFolderIcons) {\n // special logic for 'folder' completion items\n data.icon.className = 'icon hide';\n data.iconContainer.className = 'icon hide';\n labelOptions.extraClasses = [\n getIconClasses(this._modelService, this._languageService, URI.from({ scheme: 'fake', path: element.textLabel }), FileKind.FOLDER),\n getIconClasses(this._modelService, this._languageService, URI.from({ scheme: 'fake', path: completion.detail }), FileKind.FOLDER)\n ].flat();\n }\n else {\n // normal icon\n data.icon.className = 'icon hide';\n data.iconContainer.className = '';\n data.iconContainer.classList.add('suggest-icon', ...ThemeIcon.asClassNameArray(CompletionItemKinds.toIcon(completion.kind)));\n }\n if (completion.tags && completion.tags.indexOf(1 /* CompletionItemTag.Deprecated */) >= 0) {\n labelOptions.extraClasses = (labelOptions.extraClasses || []).concat(['deprecated']);\n labelOptions.matches = [];\n }\n data.iconLabel.setLabel(element.textLabel, undefined, labelOptions);\n if (typeof completion.label === 'string') {\n data.parametersLabel.textContent = '';\n data.detailsLabel.textContent = stripNewLines(completion.detail || '');\n data.root.classList.add('string-label');\n }\n else {\n data.parametersLabel.textContent = stripNewLines(completion.label.detail || '');\n data.detailsLabel.textContent = stripNewLines(completion.label.description || '');\n data.root.classList.remove('string-label');\n }\n if (this._editor.getOption(118 /* EditorOption.suggest */).showInlineDetails) {\n show(data.detailsLabel);\n }\n else {\n hide(data.detailsLabel);\n }\n if (canExpandCompletionItem(element)) {\n data.right.classList.add('can-expand-details');\n show(data.readMore);\n data.readMore.onmousedown = e => {\n e.stopPropagation();\n e.preventDefault();\n };\n data.readMore.onclick = e => {\n e.stopPropagation();\n e.preventDefault();\n this._onDidToggleDetails.fire();\n };\n }\n else {\n data.right.classList.remove('can-expand-details');\n hide(data.readMore);\n data.readMore.onmousedown = null;\n data.readMore.onclick = null;\n }\n }\n disposeTemplate(templateData) {\n templateData.disposables.dispose();\n }\n};\nItemRenderer = __decorate([\n __param(1, IModelService),\n __param(2, ILanguageService),\n __param(3, IThemeService)\n], ItemRenderer);\nexport { ItemRenderer };\nfunction stripNewLines(str) {\n return str.replace(/\\r\\n|\\r|\\n/g, '');\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar SuggestWidget_1;\nimport * as dom from '../../../../base/browser/dom.js';\nimport '../../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded\nimport { List } from '../../../../base/browser/ui/list/listWidget.js';\nimport { createCancelablePromise, disposableTimeout, TimeoutTimer } from '../../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter, PauseableEmitter } from '../../../../base/common/event.js';\nimport { DisposableStore, MutableDisposable } from '../../../../base/common/lifecycle.js';\nimport { clamp } from '../../../../base/common/numbers.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport './media/suggest.css';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/codeEditor/embeddedCodeEditorWidget.js';\nimport { SuggestWidgetStatus } from './suggestWidgetStatus.js';\nimport '../../symbolIcons/browser/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors\nimport * as nls from '../../../../nls.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IStorageService } from '../../../../platform/storage/common/storage.js';\nimport { activeContrastBorder, editorForeground, editorWidgetBackground, editorWidgetBorder, listFocusHighlightForeground, listHighlightForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, registerColor, transparent } from '../../../../platform/theme/common/colorRegistry.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { ResizableHTMLElement } from '../../../../base/browser/ui/resizable/resizable.js';\nimport { Context as SuggestContext, suggestWidgetStatusbarMenu } from './suggest.js';\nimport { canExpandCompletionItem, SuggestDetailsOverlay, SuggestDetailsWidget } from './suggestWidgetDetails.js';\nimport { getAriaId, ItemRenderer } from './suggestWidgetRenderer.js';\nimport { getListStyles } from '../../../../platform/theme/browser/defaultStyles.js';\nimport { status } from '../../../../base/browser/ui/aria/aria.js';\n/**\n * Suggest widget colors\n */\nregisterColor('editorSuggestWidget.background', { dark: editorWidgetBackground, light: editorWidgetBackground, hcDark: editorWidgetBackground, hcLight: editorWidgetBackground }, nls.localize('editorSuggestWidgetBackground', 'Background color of the suggest widget.'));\nregisterColor('editorSuggestWidget.border', { dark: editorWidgetBorder, light: editorWidgetBorder, hcDark: editorWidgetBorder, hcLight: editorWidgetBorder }, nls.localize('editorSuggestWidgetBorder', 'Border color of the suggest widget.'));\nconst editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', { dark: editorForeground, light: editorForeground, hcDark: editorForeground, hcLight: editorForeground }, nls.localize('editorSuggestWidgetForeground', 'Foreground color of the suggest widget.'));\nregisterColor('editorSuggestWidget.selectedForeground', { dark: quickInputListFocusForeground, light: quickInputListFocusForeground, hcDark: quickInputListFocusForeground, hcLight: quickInputListFocusForeground }, nls.localize('editorSuggestWidgetSelectedForeground', 'Foreground color of the selected entry in the suggest widget.'));\nregisterColor('editorSuggestWidget.selectedIconForeground', { dark: quickInputListFocusIconForeground, light: quickInputListFocusIconForeground, hcDark: quickInputListFocusIconForeground, hcLight: quickInputListFocusIconForeground }, nls.localize('editorSuggestWidgetSelectedIconForeground', 'Icon foreground color of the selected entry in the suggest widget.'));\nexport const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', { dark: quickInputListFocusBackground, light: quickInputListFocusBackground, hcDark: quickInputListFocusBackground, hcLight: quickInputListFocusBackground }, nls.localize('editorSuggestWidgetSelectedBackground', 'Background color of the selected entry in the suggest widget.'));\nregisterColor('editorSuggestWidget.highlightForeground', { dark: listHighlightForeground, light: listHighlightForeground, hcDark: listHighlightForeground, hcLight: listHighlightForeground }, nls.localize('editorSuggestWidgetHighlightForeground', 'Color of the match highlights in the suggest widget.'));\nregisterColor('editorSuggestWidget.focusHighlightForeground', { dark: listFocusHighlightForeground, light: listFocusHighlightForeground, hcDark: listFocusHighlightForeground, hcLight: listFocusHighlightForeground }, nls.localize('editorSuggestWidgetFocusHighlightForeground', 'Color of the match highlights in the suggest widget when an item is focused.'));\nregisterColor('editorSuggestWidgetStatus.foreground', { dark: transparent(editorSuggestWidgetForeground, .5), light: transparent(editorSuggestWidgetForeground, .5), hcDark: transparent(editorSuggestWidgetForeground, .5), hcLight: transparent(editorSuggestWidgetForeground, .5) }, nls.localize('editorSuggestWidgetStatusForeground', 'Foreground color of the suggest widget status.'));\nclass PersistedWidgetSize {\n constructor(_service, editor) {\n this._service = _service;\n this._key = `suggestWidget.size/${editor.getEditorType()}/${editor instanceof EmbeddedCodeEditorWidget}`;\n }\n restore() {\n var _a;\n const raw = (_a = this._service.get(this._key, 0 /* StorageScope.PROFILE */)) !== null && _a !== void 0 ? _a : '';\n try {\n const obj = JSON.parse(raw);\n if (dom.Dimension.is(obj)) {\n return dom.Dimension.lift(obj);\n }\n }\n catch (_b) {\n // ignore\n }\n return undefined;\n }\n store(size) {\n this._service.store(this._key, JSON.stringify(size), 0 /* StorageScope.PROFILE */, 1 /* StorageTarget.MACHINE */);\n }\n reset() {\n this._service.remove(this._key, 0 /* StorageScope.PROFILE */);\n }\n}\nlet SuggestWidget = SuggestWidget_1 = class SuggestWidget {\n constructor(editor, _storageService, _contextKeyService, _themeService, instantiationService) {\n this.editor = editor;\n this._storageService = _storageService;\n this._state = 0 /* State.Hidden */;\n this._isAuto = false;\n this._pendingLayout = new MutableDisposable();\n this._pendingShowDetails = new MutableDisposable();\n this._ignoreFocusEvents = false;\n this._forceRenderingAbove = false;\n this._explainMode = false;\n this._showTimeout = new TimeoutTimer();\n this._disposables = new DisposableStore();\n this._onDidSelect = new PauseableEmitter();\n this._onDidFocus = new PauseableEmitter();\n this._onDidHide = new Emitter();\n this._onDidShow = new Emitter();\n this.onDidSelect = this._onDidSelect.event;\n this.onDidFocus = this._onDidFocus.event;\n this.onDidHide = this._onDidHide.event;\n this.onDidShow = this._onDidShow.event;\n this._onDetailsKeydown = new Emitter();\n this.onDetailsKeyDown = this._onDetailsKeydown.event;\n this.element = new ResizableHTMLElement();\n this.element.domNode.classList.add('editor-widget', 'suggest-widget');\n this._contentWidget = new SuggestContentWidget(this, editor);\n this._persistedSize = new PersistedWidgetSize(_storageService, editor);\n class ResizeState {\n constructor(persistedSize, currentSize, persistHeight = false, persistWidth = false) {\n this.persistedSize = persistedSize;\n this.currentSize = currentSize;\n this.persistHeight = persistHeight;\n this.persistWidth = persistWidth;\n }\n }\n let state;\n this._disposables.add(this.element.onDidWillResize(() => {\n this._contentWidget.lockPreference();\n state = new ResizeState(this._persistedSize.restore(), this.element.size);\n }));\n this._disposables.add(this.element.onDidResize(e => {\n var _a, _b, _c, _d;\n this._resize(e.dimension.width, e.dimension.height);\n if (state) {\n state.persistHeight = state.persistHeight || !!e.north || !!e.south;\n state.persistWidth = state.persistWidth || !!e.east || !!e.west;\n }\n if (!e.done) {\n return;\n }\n if (state) {\n // only store width or height value that have changed and also\n // only store changes that are above a certain threshold\n const { itemHeight, defaultSize } = this.getLayoutInfo();\n const threshold = Math.round(itemHeight / 2);\n let { width, height } = this.element.size;\n if (!state.persistHeight || Math.abs(state.currentSize.height - height) <= threshold) {\n height = (_b = (_a = state.persistedSize) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : defaultSize.height;\n }\n if (!state.persistWidth || Math.abs(state.currentSize.width - width) <= threshold) {\n width = (_d = (_c = state.persistedSize) === null || _c === void 0 ? void 0 : _c.width) !== null && _d !== void 0 ? _d : defaultSize.width;\n }\n this._persistedSize.store(new dom.Dimension(width, height));\n }\n // reset working state\n this._contentWidget.unlockPreference();\n state = undefined;\n }));\n this._messageElement = dom.append(this.element.domNode, dom.$('.message'));\n this._listElement = dom.append(this.element.domNode, dom.$('.tree'));\n const details = this._disposables.add(instantiationService.createInstance(SuggestDetailsWidget, this.editor));\n details.onDidClose(this.toggleDetails, this, this._disposables);\n this._details = new SuggestDetailsOverlay(details, this.editor);\n const applyIconStyle = () => this.element.domNode.classList.toggle('no-icons', !this.editor.getOption(118 /* EditorOption.suggest */).showIcons);\n applyIconStyle();\n const renderer = instantiationService.createInstance(ItemRenderer, this.editor);\n this._disposables.add(renderer);\n this._disposables.add(renderer.onDidToggleDetails(() => this.toggleDetails()));\n this._list = new List('SuggestWidget', this._listElement, {\n getHeight: (_element) => this.getLayoutInfo().itemHeight,\n getTemplateId: (_element) => 'suggestion'\n }, [renderer], {\n alwaysConsumeMouseWheel: true,\n useShadows: false,\n mouseSupport: false,\n multipleSelectionSupport: false,\n accessibilityProvider: {\n getRole: () => 'option',\n getWidgetAriaLabel: () => nls.localize('suggest', \"Suggest\"),\n getWidgetRole: () => 'listbox',\n getAriaLabel: (item) => {\n let label = item.textLabel;\n if (typeof item.completion.label !== 'string') {\n const { detail, description } = item.completion.label;\n if (detail && description) {\n label = nls.localize('label.full', '{0} {1}, {2}', label, detail, description);\n }\n else if (detail) {\n label = nls.localize('label.detail', '{0} {1}', label, detail);\n }\n else if (description) {\n label = nls.localize('label.desc', '{0}, {1}', label, description);\n }\n }\n if (!item.isResolved || !this._isDetailsVisible()) {\n return label;\n }\n const { documentation, detail } = item.completion;\n const docs = strings.format('{0}{1}', detail || '', documentation ? (typeof documentation === 'string' ? documentation : documentation.value) : '');\n return nls.localize('ariaCurrenttSuggestionReadDetails', \"{0}, docs: {1}\", label, docs);\n },\n }\n });\n this._list.style(getListStyles({\n listInactiveFocusBackground: editorSuggestWidgetSelectedBackground,\n listInactiveFocusOutline: activeContrastBorder\n }));\n this._status = instantiationService.createInstance(SuggestWidgetStatus, this.element.domNode, suggestWidgetStatusbarMenu);\n const applyStatusBarStyle = () => this.element.domNode.classList.toggle('with-status-bar', this.editor.getOption(118 /* EditorOption.suggest */).showStatusBar);\n applyStatusBarStyle();\n this._disposables.add(_themeService.onDidColorThemeChange(t => this._onThemeChange(t)));\n this._onThemeChange(_themeService.getColorTheme());\n this._disposables.add(this._list.onMouseDown(e => this._onListMouseDownOrTap(e)));\n this._disposables.add(this._list.onTap(e => this._onListMouseDownOrTap(e)));\n this._disposables.add(this._list.onDidChangeSelection(e => this._onListSelection(e)));\n this._disposables.add(this._list.onDidChangeFocus(e => this._onListFocus(e)));\n this._disposables.add(this.editor.onDidChangeCursorSelection(() => this._onCursorSelectionChanged()));\n this._disposables.add(this.editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(118 /* EditorOption.suggest */)) {\n applyStatusBarStyle();\n applyIconStyle();\n }\n if (this._completionModel && (e.hasChanged(50 /* EditorOption.fontInfo */) || e.hasChanged(119 /* EditorOption.suggestFontSize */) || e.hasChanged(120 /* EditorOption.suggestLineHeight */))) {\n this._list.splice(0, this._list.length, this._completionModel.items);\n }\n }));\n this._ctxSuggestWidgetVisible = SuggestContext.Visible.bindTo(_contextKeyService);\n this._ctxSuggestWidgetDetailsVisible = SuggestContext.DetailsVisible.bindTo(_contextKeyService);\n this._ctxSuggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(_contextKeyService);\n this._ctxSuggestWidgetHasFocusedSuggestion = SuggestContext.HasFocusedSuggestion.bindTo(_contextKeyService);\n this._disposables.add(dom.addStandardDisposableListener(this._details.widget.domNode, 'keydown', e => {\n this._onDetailsKeydown.fire(e);\n }));\n this._disposables.add(this.editor.onMouseDown((e) => this._onEditorMouseDown(e)));\n }\n dispose() {\n var _a;\n this._details.widget.dispose();\n this._details.dispose();\n this._list.dispose();\n this._status.dispose();\n this._disposables.dispose();\n (_a = this._loadingTimeout) === null || _a === void 0 ? void 0 : _a.dispose();\n this._pendingLayout.dispose();\n this._pendingShowDetails.dispose();\n this._showTimeout.dispose();\n this._contentWidget.dispose();\n this.element.dispose();\n }\n _onEditorMouseDown(mouseEvent) {\n if (this._details.widget.domNode.contains(mouseEvent.target.element)) {\n // Clicking inside details\n this._details.widget.domNode.focus();\n }\n else {\n // Clicking outside details and inside suggest\n if (this.element.domNode.contains(mouseEvent.target.element)) {\n this.editor.focus();\n }\n }\n }\n _onCursorSelectionChanged() {\n if (this._state !== 0 /* State.Hidden */) {\n this._contentWidget.layout();\n }\n }\n _onListMouseDownOrTap(e) {\n if (typeof e.element === 'undefined' || typeof e.index === 'undefined') {\n return;\n }\n // prevent stealing browser focus from the editor\n e.browserEvent.preventDefault();\n e.browserEvent.stopPropagation();\n this._select(e.element, e.index);\n }\n _onListSelection(e) {\n if (e.elements.length) {\n this._select(e.elements[0], e.indexes[0]);\n }\n }\n _select(item, index) {\n const completionModel = this._completionModel;\n if (completionModel) {\n this._onDidSelect.fire({ item, index, model: completionModel });\n this.editor.focus();\n }\n }\n _onThemeChange(theme) {\n this._details.widget.borderWidth = isHighContrast(theme.type) ? 2 : 1;\n }\n _onListFocus(e) {\n var _a;\n if (this._ignoreFocusEvents) {\n return;\n }\n if (!e.elements.length) {\n if (this._currentSuggestionDetails) {\n this._currentSuggestionDetails.cancel();\n this._currentSuggestionDetails = undefined;\n this._focusedItem = undefined;\n }\n this.editor.setAriaOptions({ activeDescendant: undefined });\n this._ctxSuggestWidgetHasFocusedSuggestion.set(false);\n return;\n }\n if (!this._completionModel) {\n return;\n }\n this._ctxSuggestWidgetHasFocusedSuggestion.set(true);\n const item = e.elements[0];\n const index = e.indexes[0];\n if (item !== this._focusedItem) {\n (_a = this._currentSuggestionDetails) === null || _a === void 0 ? void 0 : _a.cancel();\n this._currentSuggestionDetails = undefined;\n this._focusedItem = item;\n this._list.reveal(index);\n this._currentSuggestionDetails = createCancelablePromise(async (token) => {\n const loading = disposableTimeout(() => {\n if (this._isDetailsVisible()) {\n this.showDetails(true);\n }\n }, 250);\n const sub = token.onCancellationRequested(() => loading.dispose());\n try {\n return await item.resolve(token);\n }\n finally {\n loading.dispose();\n sub.dispose();\n }\n });\n this._currentSuggestionDetails.then(() => {\n if (index >= this._list.length || item !== this._list.element(index)) {\n return;\n }\n // item can have extra information, so re-render\n this._ignoreFocusEvents = true;\n this._list.splice(index, 1, [item]);\n this._list.setFocus([index]);\n this._ignoreFocusEvents = false;\n if (this._isDetailsVisible()) {\n this.showDetails(false);\n }\n else {\n this.element.domNode.classList.remove('docs-side');\n }\n this.editor.setAriaOptions({ activeDescendant: getAriaId(index) });\n }).catch(onUnexpectedError);\n }\n // emit an event\n this._onDidFocus.fire({ item, index, model: this._completionModel });\n }\n _setState(state) {\n if (this._state === state) {\n return;\n }\n this._state = state;\n this.element.domNode.classList.toggle('frozen', state === 4 /* State.Frozen */);\n this.element.domNode.classList.remove('message');\n switch (state) {\n case 0 /* State.Hidden */:\n dom.hide(this._messageElement, this._listElement, this._status.element);\n this._details.hide(true);\n this._status.hide();\n this._contentWidget.hide();\n this._ctxSuggestWidgetVisible.reset();\n this._ctxSuggestWidgetMultipleSuggestions.reset();\n this._ctxSuggestWidgetHasFocusedSuggestion.reset();\n this._showTimeout.cancel();\n this.element.domNode.classList.remove('visible');\n this._list.splice(0, this._list.length);\n this._focusedItem = undefined;\n this._cappedHeight = undefined;\n this._explainMode = false;\n break;\n case 1 /* State.Loading */:\n this.element.domNode.classList.add('message');\n this._messageElement.textContent = SuggestWidget_1.LOADING_MESSAGE;\n dom.hide(this._listElement, this._status.element);\n dom.show(this._messageElement);\n this._details.hide();\n this._show();\n this._focusedItem = undefined;\n status(SuggestWidget_1.LOADING_MESSAGE);\n break;\n case 2 /* State.Empty */:\n this.element.domNode.classList.add('message');\n this._messageElement.textContent = SuggestWidget_1.NO_SUGGESTIONS_MESSAGE;\n dom.hide(this._listElement, this._status.element);\n dom.show(this._messageElement);\n this._details.hide();\n this._show();\n this._focusedItem = undefined;\n status(SuggestWidget_1.NO_SUGGESTIONS_MESSAGE);\n break;\n case 3 /* State.Open */:\n dom.hide(this._messageElement);\n dom.show(this._listElement, this._status.element);\n this._show();\n break;\n case 4 /* State.Frozen */:\n dom.hide(this._messageElement);\n dom.show(this._listElement, this._status.element);\n this._show();\n break;\n case 5 /* State.Details */:\n dom.hide(this._messageElement);\n dom.show(this._listElement, this._status.element);\n this._details.show();\n this._show();\n break;\n }\n }\n _show() {\n this._status.show();\n this._contentWidget.show();\n this._layout(this._persistedSize.restore());\n this._ctxSuggestWidgetVisible.set(true);\n this._showTimeout.cancelAndSet(() => {\n this.element.domNode.classList.add('visible');\n this._onDidShow.fire(this);\n }, 100);\n }\n showTriggered(auto, delay) {\n if (this._state !== 0 /* State.Hidden */) {\n return;\n }\n this._contentWidget.setPosition(this.editor.getPosition());\n this._isAuto = !!auto;\n if (!this._isAuto) {\n this._loadingTimeout = disposableTimeout(() => this._setState(1 /* State.Loading */), delay);\n }\n }\n showSuggestions(completionModel, selectionIndex, isFrozen, isAuto, noFocus) {\n var _a, _b;\n this._contentWidget.setPosition(this.editor.getPosition());\n (_a = this._loadingTimeout) === null || _a === void 0 ? void 0 : _a.dispose();\n (_b = this._currentSuggestionDetails) === null || _b === void 0 ? void 0 : _b.cancel();\n this._currentSuggestionDetails = undefined;\n if (this._completionModel !== completionModel) {\n this._completionModel = completionModel;\n }\n if (isFrozen && this._state !== 2 /* State.Empty */ && this._state !== 0 /* State.Hidden */) {\n this._setState(4 /* State.Frozen */);\n return;\n }\n const visibleCount = this._completionModel.items.length;\n const isEmpty = visibleCount === 0;\n this._ctxSuggestWidgetMultipleSuggestions.set(visibleCount > 1);\n if (isEmpty) {\n this._setState(isAuto ? 0 /* State.Hidden */ : 2 /* State.Empty */);\n this._completionModel = undefined;\n return;\n }\n this._focusedItem = undefined;\n // calling list.splice triggers focus event which this widget forwards. That can lead to\n // suggestions being cancelled and the widget being cleared (and hidden). All this happens\n // before revealing and focusing is done which means revealing and focusing will fail when\n // they get run.\n this._onDidFocus.pause();\n this._onDidSelect.pause();\n try {\n this._list.splice(0, this._list.length, this._completionModel.items);\n this._setState(isFrozen ? 4 /* State.Frozen */ : 3 /* State.Open */);\n this._list.reveal(selectionIndex, 0);\n this._list.setFocus(noFocus ? [] : [selectionIndex]);\n }\n finally {\n this._onDidFocus.resume();\n this._onDidSelect.resume();\n }\n this._pendingLayout.value = dom.runAtThisOrScheduleAtNextAnimationFrame(dom.getWindow(this.element.domNode), () => {\n this._pendingLayout.clear();\n this._layout(this.element.size);\n // Reset focus border\n this._details.widget.domNode.classList.remove('focused');\n });\n }\n focusSelected() {\n if (this._list.length > 0) {\n this._list.setFocus([0]);\n }\n }\n selectNextPage() {\n switch (this._state) {\n case 0 /* State.Hidden */:\n return false;\n case 5 /* State.Details */:\n this._details.widget.pageDown();\n return true;\n case 1 /* State.Loading */:\n return !this._isAuto;\n default:\n this._list.focusNextPage();\n return true;\n }\n }\n selectNext() {\n switch (this._state) {\n case 0 /* State.Hidden */:\n return false;\n case 1 /* State.Loading */:\n return !this._isAuto;\n default:\n this._list.focusNext(1, true);\n return true;\n }\n }\n selectLast() {\n switch (this._state) {\n case 0 /* State.Hidden */:\n return false;\n case 5 /* State.Details */:\n this._details.widget.scrollBottom();\n return true;\n case 1 /* State.Loading */:\n return !this._isAuto;\n default:\n this._list.focusLast();\n return true;\n }\n }\n selectPreviousPage() {\n switch (this._state) {\n case 0 /* State.Hidden */:\n return false;\n case 5 /* State.Details */:\n this._details.widget.pageUp();\n return true;\n case 1 /* State.Loading */:\n return !this._isAuto;\n default:\n this._list.focusPreviousPage();\n return true;\n }\n }\n selectPrevious() {\n switch (this._state) {\n case 0 /* State.Hidden */:\n return false;\n case 1 /* State.Loading */:\n return !this._isAuto;\n default:\n this._list.focusPrevious(1, true);\n return false;\n }\n }\n selectFirst() {\n switch (this._state) {\n case 0 /* State.Hidden */:\n return false;\n case 5 /* State.Details */:\n this._details.widget.scrollTop();\n return true;\n case 1 /* State.Loading */:\n return !this._isAuto;\n default:\n this._list.focusFirst();\n return true;\n }\n }\n getFocusedItem() {\n if (this._state !== 0 /* State.Hidden */\n && this._state !== 2 /* State.Empty */\n && this._state !== 1 /* State.Loading */\n && this._completionModel\n && this._list.getFocus().length > 0) {\n return {\n item: this._list.getFocusedElements()[0],\n index: this._list.getFocus()[0],\n model: this._completionModel\n };\n }\n return undefined;\n }\n toggleDetailsFocus() {\n if (this._state === 5 /* State.Details */) {\n this._setState(3 /* State.Open */);\n this._details.widget.domNode.classList.remove('focused');\n }\n else if (this._state === 3 /* State.Open */ && this._isDetailsVisible()) {\n this._setState(5 /* State.Details */);\n this._details.widget.domNode.classList.add('focused');\n }\n }\n toggleDetails() {\n if (this._isDetailsVisible()) {\n // hide details widget\n this._pendingShowDetails.clear();\n this._ctxSuggestWidgetDetailsVisible.set(false);\n this._setDetailsVisible(false);\n this._details.hide();\n this.element.domNode.classList.remove('shows-details');\n }\n else if ((canExpandCompletionItem(this._list.getFocusedElements()[0]) || this._explainMode) && (this._state === 3 /* State.Open */ || this._state === 5 /* State.Details */ || this._state === 4 /* State.Frozen */)) {\n // show details widget (iff possible)\n this._ctxSuggestWidgetDetailsVisible.set(true);\n this._setDetailsVisible(true);\n this.showDetails(false);\n }\n }\n showDetails(loading) {\n this._pendingShowDetails.value = dom.runAtThisOrScheduleAtNextAnimationFrame(dom.getWindow(this.element.domNode), () => {\n this._pendingShowDetails.clear();\n this._details.show();\n if (loading) {\n this._details.widget.renderLoading();\n }\n else {\n this._details.widget.renderItem(this._list.getFocusedElements()[0], this._explainMode);\n }\n if (!this._details.widget.isEmpty) {\n this._positionDetails();\n this.element.domNode.classList.add('shows-details');\n }\n else {\n this._details.hide();\n }\n this.editor.focus();\n });\n }\n toggleExplainMode() {\n if (this._list.getFocusedElements()[0]) {\n this._explainMode = !this._explainMode;\n if (!this._isDetailsVisible()) {\n this.toggleDetails();\n }\n else {\n this.showDetails(false);\n }\n }\n }\n resetPersistedSize() {\n this._persistedSize.reset();\n }\n hideWidget() {\n var _a;\n this._pendingLayout.clear();\n this._pendingShowDetails.clear();\n (_a = this._loadingTimeout) === null || _a === void 0 ? void 0 : _a.dispose();\n this._setState(0 /* State.Hidden */);\n this._onDidHide.fire(this);\n this.element.clearSashHoverState();\n // ensure that a reasonable widget height is persisted so that\n // accidential \"resize-to-single-items\" cases aren't happening\n const dim = this._persistedSize.restore();\n const minPersistedHeight = Math.ceil(this.getLayoutInfo().itemHeight * 4.3);\n if (dim && dim.height < minPersistedHeight) {\n this._persistedSize.store(dim.with(undefined, minPersistedHeight));\n }\n }\n isFrozen() {\n return this._state === 4 /* State.Frozen */;\n }\n _afterRender(position) {\n if (position === null) {\n if (this._isDetailsVisible()) {\n this._details.hide(); //todo@jrieken soft-hide\n }\n return;\n }\n if (this._state === 2 /* State.Empty */ || this._state === 1 /* State.Loading */) {\n // no special positioning when widget isn't showing list\n return;\n }\n if (this._isDetailsVisible() && !this._details.widget.isEmpty) {\n this._details.show();\n }\n this._positionDetails();\n }\n _layout(size) {\n var _a, _b, _c;\n if (!this.editor.hasModel()) {\n return;\n }\n if (!this.editor.getDomNode()) {\n // happens when running tests\n return;\n }\n const bodyBox = dom.getClientArea(this.element.domNode.ownerDocument.body);\n const info = this.getLayoutInfo();\n if (!size) {\n size = info.defaultSize;\n }\n let height = size.height;\n let width = size.width;\n // status bar\n this._status.element.style.height = `${info.itemHeight}px`;\n if (this._state === 2 /* State.Empty */ || this._state === 1 /* State.Loading */) {\n // showing a message only\n height = info.itemHeight + info.borderHeight;\n width = info.defaultSize.width / 2;\n this.element.enableSashes(false, false, false, false);\n this.element.minSize = this.element.maxSize = new dom.Dimension(width, height);\n this._contentWidget.setPreference(2 /* ContentWidgetPositionPreference.BELOW */);\n }\n else {\n // showing items\n // width math\n const maxWidth = bodyBox.width - info.borderHeight - 2 * info.horizontalPadding;\n if (width > maxWidth) {\n width = maxWidth;\n }\n const preferredWidth = this._completionModel ? this._completionModel.stats.pLabelLen * info.typicalHalfwidthCharacterWidth : width;\n // height math\n const fullHeight = info.statusBarHeight + this._list.contentHeight + info.borderHeight;\n const minHeight = info.itemHeight + info.statusBarHeight;\n const editorBox = dom.getDomNodePagePosition(this.editor.getDomNode());\n const cursorBox = this.editor.getScrolledVisiblePosition(this.editor.getPosition());\n const cursorBottom = editorBox.top + cursorBox.top + cursorBox.height;\n const maxHeightBelow = Math.min(bodyBox.height - cursorBottom - info.verticalPadding, fullHeight);\n const availableSpaceAbove = editorBox.top + cursorBox.top - info.verticalPadding;\n const maxHeightAbove = Math.min(availableSpaceAbove, fullHeight);\n let maxHeight = Math.min(Math.max(maxHeightAbove, maxHeightBelow) + info.borderHeight, fullHeight);\n if (height === ((_a = this._cappedHeight) === null || _a === void 0 ? void 0 : _a.capped)) {\n // Restore the old (wanted) height when the current\n // height is capped to fit\n height = this._cappedHeight.wanted;\n }\n if (height < minHeight) {\n height = minHeight;\n }\n if (height > maxHeight) {\n height = maxHeight;\n }\n const forceRenderingAboveRequiredSpace = 150;\n if (height > maxHeightBelow || (this._forceRenderingAbove && availableSpaceAbove > forceRenderingAboveRequiredSpace)) {\n this._contentWidget.setPreference(1 /* ContentWidgetPositionPreference.ABOVE */);\n this.element.enableSashes(true, true, false, false);\n maxHeight = maxHeightAbove;\n }\n else {\n this._contentWidget.setPreference(2 /* ContentWidgetPositionPreference.BELOW */);\n this.element.enableSashes(false, true, true, false);\n maxHeight = maxHeightBelow;\n }\n this.element.preferredSize = new dom.Dimension(preferredWidth, info.defaultSize.height);\n this.element.maxSize = new dom.Dimension(maxWidth, maxHeight);\n this.element.minSize = new dom.Dimension(220, minHeight);\n // Know when the height was capped to fit and remember\n // the wanted height for later. This is required when going\n // left to widen suggestions.\n this._cappedHeight = height === fullHeight\n ? { wanted: (_c = (_b = this._cappedHeight) === null || _b === void 0 ? void 0 : _b.wanted) !== null && _c !== void 0 ? _c : size.height, capped: height }\n : undefined;\n }\n this._resize(width, height);\n }\n _resize(width, height) {\n const { width: maxWidth, height: maxHeight } = this.element.maxSize;\n width = Math.min(maxWidth, width);\n height = Math.min(maxHeight, height);\n const { statusBarHeight } = this.getLayoutInfo();\n this._list.layout(height - statusBarHeight, width);\n this._listElement.style.height = `${height - statusBarHeight}px`;\n this.element.layout(height, width);\n this._contentWidget.layout();\n this._positionDetails();\n }\n _positionDetails() {\n var _a;\n if (this._isDetailsVisible()) {\n this._details.placeAtAnchor(this.element.domNode, ((_a = this._contentWidget.getPosition()) === null || _a === void 0 ? void 0 : _a.preference[0]) === 2 /* ContentWidgetPositionPreference.BELOW */);\n }\n }\n getLayoutInfo() {\n const fontInfo = this.editor.getOption(50 /* EditorOption.fontInfo */);\n const itemHeight = clamp(this.editor.getOption(120 /* EditorOption.suggestLineHeight */) || fontInfo.lineHeight, 8, 1000);\n const statusBarHeight = !this.editor.getOption(118 /* EditorOption.suggest */).showStatusBar || this._state === 2 /* State.Empty */ || this._state === 1 /* State.Loading */ ? 0 : itemHeight;\n const borderWidth = this._details.widget.borderWidth;\n const borderHeight = 2 * borderWidth;\n return {\n itemHeight,\n statusBarHeight,\n borderWidth,\n borderHeight,\n typicalHalfwidthCharacterWidth: fontInfo.typicalHalfwidthCharacterWidth,\n verticalPadding: 22,\n horizontalPadding: 14,\n defaultSize: new dom.Dimension(430, statusBarHeight + 12 * itemHeight + borderHeight)\n };\n }\n _isDetailsVisible() {\n return this._storageService.getBoolean('expandSuggestionDocs', 0 /* StorageScope.PROFILE */, false);\n }\n _setDetailsVisible(value) {\n this._storageService.store('expandSuggestionDocs', value, 0 /* StorageScope.PROFILE */, 0 /* StorageTarget.USER */);\n }\n forceRenderingAbove() {\n if (!this._forceRenderingAbove) {\n this._forceRenderingAbove = true;\n this._layout(this._persistedSize.restore());\n }\n }\n stopForceRenderingAbove() {\n this._forceRenderingAbove = false;\n }\n};\nSuggestWidget.LOADING_MESSAGE = nls.localize('suggestWidget.loading', \"Loading...\");\nSuggestWidget.NO_SUGGESTIONS_MESSAGE = nls.localize('suggestWidget.noSuggestions', \"No suggestions.\");\nSuggestWidget = SuggestWidget_1 = __decorate([\n __param(1, IStorageService),\n __param(2, IContextKeyService),\n __param(3, IThemeService),\n __param(4, IInstantiationService)\n], SuggestWidget);\nexport { SuggestWidget };\nexport class SuggestContentWidget {\n constructor(_widget, _editor) {\n this._widget = _widget;\n this._editor = _editor;\n this.allowEditorOverflow = true;\n this.suppressMouseDown = false;\n this._preferenceLocked = false;\n this._added = false;\n this._hidden = false;\n }\n dispose() {\n if (this._added) {\n this._added = false;\n this._editor.removeContentWidget(this);\n }\n }\n getId() {\n return 'editor.widget.suggestWidget';\n }\n getDomNode() {\n return this._widget.element.domNode;\n }\n show() {\n this._hidden = false;\n if (!this._added) {\n this._added = true;\n this._editor.addContentWidget(this);\n }\n }\n hide() {\n if (!this._hidden) {\n this._hidden = true;\n this.layout();\n }\n }\n layout() {\n this._editor.layoutContentWidget(this);\n }\n getPosition() {\n if (this._hidden || !this._position || !this._preference) {\n return null;\n }\n return {\n position: this._position,\n preference: [this._preference]\n };\n }\n beforeRender() {\n const { height, width } = this._widget.element.size;\n const { borderWidth, horizontalPadding } = this._widget.getLayoutInfo();\n return new dom.Dimension(width + 2 * borderWidth + horizontalPadding, height + 2 * borderWidth);\n }\n afterRender(position) {\n this._widget._afterRender(position);\n }\n setPreference(preference) {\n if (!this._preferenceLocked) {\n this._preference = preference;\n }\n }\n lockPreference() {\n this._preferenceLocked = true;\n }\n unlockPreference() {\n this._preferenceLocked = false;\n }\n setPosition(position) {\n this._position = position;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar SuggestController_1;\nimport { alert } from '../../../../base/browser/ui/aria/aria.js';\nimport { isNonEmptyArray } from '../../../../base/common/arrays.js';\nimport { CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError, onUnexpectedExternalError } from '../../../../base/common/errors.js';\nimport { Emitter, Event } from '../../../../base/common/event.js';\nimport { KeyCodeChord } from '../../../../base/common/keybindings.js';\nimport { DisposableStore, dispose, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { assertType, isObject } from '../../../../base/common/types.js';\nimport { StableEditorScrollState } from '../../../browser/stableEditorScroll.js';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { EditOperation } from '../../../common/core/editOperation.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { SnippetController2 } from '../../snippet/browser/snippetController2.js';\nimport { SnippetParser } from '../../snippet/browser/snippetParser.js';\nimport { ISuggestMemoryService } from './suggestMemory.js';\nimport { WordContextKey } from './wordContextKey.js';\nimport * as nls from '../../../../nls.js';\nimport { CommandsRegistry, ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { ILogService } from '../../../../platform/log/common/log.js';\nimport { Context as SuggestContext, suggestWidgetStatusbarMenu } from './suggest.js';\nimport { SuggestAlternatives } from './suggestAlternatives.js';\nimport { CommitCharacterController } from './suggestCommitCharacters.js';\nimport { SuggestModel } from './suggestModel.js';\nimport { OvertypingCapturer } from './suggestOvertypingCapturer.js';\nimport { SuggestWidget } from './suggestWidget.js';\nimport { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';\nimport { basename, extname } from '../../../../base/common/resources.js';\nimport { hash } from '../../../../base/common/hash.js';\nimport { WindowIdleValue, getWindow } from '../../../../base/browser/dom.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\n// sticky suggest widget which doesn't disappear on focus out and such\nconst _sticky = false;\nclass LineSuffix {\n constructor(_model, _position) {\n this._model = _model;\n this._position = _position;\n this._decorationOptions = ModelDecorationOptions.register({\n description: 'suggest-line-suffix',\n stickiness: 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */\n });\n // spy on what's happening right of the cursor. two cases:\n // 1. end of line -> check that it's still end of line\n // 2. mid of line -> add a marker and compute the delta\n const maxColumn = _model.getLineMaxColumn(_position.lineNumber);\n if (maxColumn !== _position.column) {\n const offset = _model.getOffsetAt(_position);\n const end = _model.getPositionAt(offset + 1);\n _model.changeDecorations(accessor => {\n if (this._marker) {\n accessor.removeDecoration(this._marker);\n }\n this._marker = accessor.addDecoration(Range.fromPositions(_position, end), this._decorationOptions);\n });\n }\n }\n dispose() {\n if (this._marker && !this._model.isDisposed()) {\n this._model.changeDecorations(accessor => {\n accessor.removeDecoration(this._marker);\n this._marker = undefined;\n });\n }\n }\n delta(position) {\n if (this._model.isDisposed() || this._position.lineNumber !== position.lineNumber) {\n // bail out early if things seems fishy\n return 0;\n }\n // read the marker (in case suggest was triggered at line end) or compare\n // the cursor to the line end.\n if (this._marker) {\n const range = this._model.getDecorationRange(this._marker);\n const end = this._model.getOffsetAt(range.getStartPosition());\n return end - this._model.getOffsetAt(position);\n }\n else {\n return this._model.getLineMaxColumn(position.lineNumber) - position.column;\n }\n }\n}\nlet SuggestController = SuggestController_1 = class SuggestController {\n static get(editor) {\n return editor.getContribution(SuggestController_1.ID);\n }\n constructor(editor, _memoryService, _commandService, _contextKeyService, _instantiationService, _logService, _telemetryService) {\n this._memoryService = _memoryService;\n this._commandService = _commandService;\n this._contextKeyService = _contextKeyService;\n this._instantiationService = _instantiationService;\n this._logService = _logService;\n this._telemetryService = _telemetryService;\n this._lineSuffix = new MutableDisposable();\n this._toDispose = new DisposableStore();\n this._selectors = new PriorityRegistry(s => s.priority);\n this._onWillInsertSuggestItem = new Emitter();\n this.onWillInsertSuggestItem = this._onWillInsertSuggestItem.event;\n this.editor = editor;\n this.model = _instantiationService.createInstance(SuggestModel, this.editor);\n // default selector\n this._selectors.register({\n priority: 0,\n select: (model, pos, items) => this._memoryService.select(model, pos, items)\n });\n // context key: update insert/replace mode\n const ctxInsertMode = SuggestContext.InsertMode.bindTo(_contextKeyService);\n ctxInsertMode.set(editor.getOption(118 /* EditorOption.suggest */).insertMode);\n this._toDispose.add(this.model.onDidTrigger(() => ctxInsertMode.set(editor.getOption(118 /* EditorOption.suggest */).insertMode)));\n this.widget = this._toDispose.add(new WindowIdleValue(getWindow(editor.getDomNode()), () => {\n const widget = this._instantiationService.createInstance(SuggestWidget, this.editor);\n this._toDispose.add(widget);\n this._toDispose.add(widget.onDidSelect(item => this._insertSuggestion(item, 0 /* InsertFlags.None */), this));\n // Wire up logic to accept a suggestion on certain characters\n const commitCharacterController = new CommitCharacterController(this.editor, widget, this.model, item => this._insertSuggestion(item, 2 /* InsertFlags.NoAfterUndoStop */));\n this._toDispose.add(commitCharacterController);\n // Wire up makes text edit context key\n const ctxMakesTextEdit = SuggestContext.MakesTextEdit.bindTo(this._contextKeyService);\n const ctxHasInsertAndReplace = SuggestContext.HasInsertAndReplaceRange.bindTo(this._contextKeyService);\n const ctxCanResolve = SuggestContext.CanResolve.bindTo(this._contextKeyService);\n this._toDispose.add(toDisposable(() => {\n ctxMakesTextEdit.reset();\n ctxHasInsertAndReplace.reset();\n ctxCanResolve.reset();\n }));\n this._toDispose.add(widget.onDidFocus(({ item }) => {\n // (ctx: makesTextEdit)\n const position = this.editor.getPosition();\n const startColumn = item.editStart.column;\n const endColumn = position.column;\n let value = true;\n if (this.editor.getOption(1 /* EditorOption.acceptSuggestionOnEnter */) === 'smart'\n && this.model.state === 2 /* State.Auto */\n && !item.completion.additionalTextEdits\n && !(item.completion.insertTextRules & 4 /* CompletionItemInsertTextRule.InsertAsSnippet */)\n && endColumn - startColumn === item.completion.insertText.length) {\n const oldText = this.editor.getModel().getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn,\n endLineNumber: position.lineNumber,\n endColumn\n });\n value = oldText !== item.completion.insertText;\n }\n ctxMakesTextEdit.set(value);\n // (ctx: hasInsertAndReplaceRange)\n ctxHasInsertAndReplace.set(!Position.equals(item.editInsertEnd, item.editReplaceEnd));\n // (ctx: canResolve)\n ctxCanResolve.set(Boolean(item.provider.resolveCompletionItem) || Boolean(item.completion.documentation) || item.completion.detail !== item.completion.label);\n }));\n this._toDispose.add(widget.onDetailsKeyDown(e => {\n // cmd + c on macOS, ctrl + c on Win / Linux\n if (e.toKeyCodeChord().equals(new KeyCodeChord(true, false, false, false, 33 /* KeyCode.KeyC */)) ||\n (platform.isMacintosh && e.toKeyCodeChord().equals(new KeyCodeChord(false, false, false, true, 33 /* KeyCode.KeyC */)))) {\n e.stopPropagation();\n return;\n }\n if (!e.toKeyCodeChord().isModifierKey()) {\n this.editor.focus();\n }\n }));\n return widget;\n }));\n // Wire up text overtyping capture\n this._overtypingCapturer = this._toDispose.add(new WindowIdleValue(getWindow(editor.getDomNode()), () => {\n return this._toDispose.add(new OvertypingCapturer(this.editor, this.model));\n }));\n this._alternatives = this._toDispose.add(new WindowIdleValue(getWindow(editor.getDomNode()), () => {\n return this._toDispose.add(new SuggestAlternatives(this.editor, this._contextKeyService));\n }));\n this._toDispose.add(_instantiationService.createInstance(WordContextKey, editor));\n this._toDispose.add(this.model.onDidTrigger(e => {\n this.widget.value.showTriggered(e.auto, e.shy ? 250 : 50);\n this._lineSuffix.value = new LineSuffix(this.editor.getModel(), e.position);\n }));\n this._toDispose.add(this.model.onDidSuggest(e => {\n if (e.triggerOptions.shy) {\n return;\n }\n let index = -1;\n for (const selector of this._selectors.itemsOrderedByPriorityDesc) {\n index = selector.select(this.editor.getModel(), this.editor.getPosition(), e.completionModel.items);\n if (index !== -1) {\n break;\n }\n }\n if (index === -1) {\n index = 0;\n }\n if (this.model.state === 0 /* State.Idle */) {\n // selecting an item can \"pump\" out selection/cursor change events\n // which can cancel suggest halfway through this function. therefore\n // we need to check again and bail if the session has been canceled\n return;\n }\n let noFocus = false;\n if (e.triggerOptions.auto) {\n // don't \"focus\" item when configured to do\n const options = this.editor.getOption(118 /* EditorOption.suggest */);\n if (options.selectionMode === 'never' || options.selectionMode === 'always') {\n // simple: always or never\n noFocus = options.selectionMode === 'never';\n }\n else if (options.selectionMode === 'whenTriggerCharacter') {\n // on with trigger character\n noFocus = e.triggerOptions.triggerKind !== 1 /* CompletionTriggerKind.TriggerCharacter */;\n }\n else if (options.selectionMode === 'whenQuickSuggestion') {\n // without trigger character or when refiltering\n noFocus = e.triggerOptions.triggerKind === 1 /* CompletionTriggerKind.TriggerCharacter */ && !e.triggerOptions.refilter;\n }\n }\n this.widget.value.showSuggestions(e.completionModel, index, e.isFrozen, e.triggerOptions.auto, noFocus);\n }));\n this._toDispose.add(this.model.onDidCancel(e => {\n if (!e.retrigger) {\n this.widget.value.hideWidget();\n }\n }));\n this._toDispose.add(this.editor.onDidBlurEditorWidget(() => {\n if (!_sticky) {\n this.model.cancel();\n this.model.clear();\n }\n }));\n // Manage the acceptSuggestionsOnEnter context key\n const acceptSuggestionsOnEnter = SuggestContext.AcceptSuggestionsOnEnter.bindTo(_contextKeyService);\n const updateFromConfig = () => {\n const acceptSuggestionOnEnter = this.editor.getOption(1 /* EditorOption.acceptSuggestionOnEnter */);\n acceptSuggestionsOnEnter.set(acceptSuggestionOnEnter === 'on' || acceptSuggestionOnEnter === 'smart');\n };\n this._toDispose.add(this.editor.onDidChangeConfiguration(() => updateFromConfig()));\n updateFromConfig();\n }\n dispose() {\n this._alternatives.dispose();\n this._toDispose.dispose();\n this.widget.dispose();\n this.model.dispose();\n this._lineSuffix.dispose();\n this._onWillInsertSuggestItem.dispose();\n }\n _insertSuggestion(event, flags) {\n if (!event || !event.item) {\n this._alternatives.value.reset();\n this.model.cancel();\n this.model.clear();\n return;\n }\n if (!this.editor.hasModel()) {\n return;\n }\n const snippetController = SnippetController2.get(this.editor);\n if (!snippetController) {\n return;\n }\n this._onWillInsertSuggestItem.fire({ item: event.item });\n const model = this.editor.getModel();\n const modelVersionNow = model.getAlternativeVersionId();\n const { item } = event;\n //\n const tasks = [];\n const cts = new CancellationTokenSource();\n // pushing undo stops *before* additional text edits and\n // *after* the main edit\n if (!(flags & 1 /* InsertFlags.NoBeforeUndoStop */)) {\n this.editor.pushUndoStop();\n }\n // compute overwrite[Before|After] deltas BEFORE applying extra edits\n const info = this.getOverwriteInfo(item, Boolean(flags & 8 /* InsertFlags.AlternativeOverwriteConfig */));\n // keep item in memory\n this._memoryService.memorize(model, this.editor.getPosition(), item);\n const isResolved = item.isResolved;\n // telemetry data points: duration of command execution, info about async additional edits (-1=n/a, -2=none, 1=success, 0=failed)\n let _commandExectionDuration = -1;\n let _additionalEditsAppliedAsync = -1;\n if (Array.isArray(item.completion.additionalTextEdits)) {\n // cancel -> stops all listening and closes widget\n this.model.cancel();\n // sync additional edits\n const scrollState = StableEditorScrollState.capture(this.editor);\n this.editor.executeEdits('suggestController.additionalTextEdits.sync', item.completion.additionalTextEdits.map(edit => {\n let range = Range.lift(edit.range);\n if (range.startLineNumber === item.position.lineNumber && range.startColumn > item.position.column) {\n // shift additional edit when it is \"after\" the completion insertion position\n const columnDelta = this.editor.getPosition().column - item.position.column;\n const startColumnDelta = columnDelta;\n const endColumnDelta = Range.spansMultipleLines(range) ? 0 : columnDelta;\n range = new Range(range.startLineNumber, range.startColumn + startColumnDelta, range.endLineNumber, range.endColumn + endColumnDelta);\n }\n return EditOperation.replaceMove(range, edit.text);\n }));\n scrollState.restoreRelativeVerticalPositionOfCursor(this.editor);\n }\n else if (!isResolved) {\n // async additional edits\n const sw = new StopWatch();\n let position;\n const docListener = model.onDidChangeContent(e => {\n if (e.isFlush) {\n cts.cancel();\n docListener.dispose();\n return;\n }\n for (const change of e.changes) {\n const thisPosition = Range.getEndPosition(change.range);\n if (!position || Position.isBefore(thisPosition, position)) {\n position = thisPosition;\n }\n }\n });\n const oldFlags = flags;\n flags |= 2 /* InsertFlags.NoAfterUndoStop */;\n let didType = false;\n const typeListener = this.editor.onWillType(() => {\n typeListener.dispose();\n didType = true;\n if (!(oldFlags & 2 /* InsertFlags.NoAfterUndoStop */)) {\n this.editor.pushUndoStop();\n }\n });\n tasks.push(item.resolve(cts.token).then(() => {\n if (!item.completion.additionalTextEdits || cts.token.isCancellationRequested) {\n return undefined;\n }\n if (position && item.completion.additionalTextEdits.some(edit => Position.isBefore(position, Range.getStartPosition(edit.range)))) {\n return false;\n }\n if (didType) {\n this.editor.pushUndoStop();\n }\n const scrollState = StableEditorScrollState.capture(this.editor);\n this.editor.executeEdits('suggestController.additionalTextEdits.async', item.completion.additionalTextEdits.map(edit => EditOperation.replaceMove(Range.lift(edit.range), edit.text)));\n scrollState.restoreRelativeVerticalPositionOfCursor(this.editor);\n if (didType || !(oldFlags & 2 /* InsertFlags.NoAfterUndoStop */)) {\n this.editor.pushUndoStop();\n }\n return true;\n }).then(applied => {\n this._logService.trace('[suggest] async resolving of edits DONE (ms, applied?)', sw.elapsed(), applied);\n _additionalEditsAppliedAsync = applied === true ? 1 : applied === false ? 0 : -2;\n }).finally(() => {\n docListener.dispose();\n typeListener.dispose();\n }));\n }\n let { insertText } = item.completion;\n if (!(item.completion.insertTextRules & 4 /* CompletionItemInsertTextRule.InsertAsSnippet */)) {\n insertText = SnippetParser.escape(insertText);\n }\n // cancel -> stops all listening and closes widget\n this.model.cancel();\n snippetController.insert(insertText, {\n overwriteBefore: info.overwriteBefore,\n overwriteAfter: info.overwriteAfter,\n undoStopBefore: false,\n undoStopAfter: false,\n adjustWhitespace: !(item.completion.insertTextRules & 1 /* CompletionItemInsertTextRule.KeepWhitespace */),\n clipboardText: event.model.clipboardText,\n overtypingCapturer: this._overtypingCapturer.value\n });\n if (!(flags & 2 /* InsertFlags.NoAfterUndoStop */)) {\n this.editor.pushUndoStop();\n }\n if (item.completion.command) {\n if (item.completion.command.id === TriggerSuggestAction.id) {\n // retigger\n this.model.trigger({ auto: true, retrigger: true });\n }\n else {\n // exec command, done\n const sw = new StopWatch();\n tasks.push(this._commandService.executeCommand(item.completion.command.id, ...(item.completion.command.arguments ? [...item.completion.command.arguments] : [])).catch(e => {\n if (item.completion.extensionId) {\n onUnexpectedExternalError(e);\n }\n else {\n onUnexpectedError(e);\n }\n }).finally(() => {\n _commandExectionDuration = sw.elapsed();\n }));\n }\n }\n if (flags & 4 /* InsertFlags.KeepAlternativeSuggestions */) {\n this._alternatives.value.set(event, next => {\n // cancel resolving of additional edits\n cts.cancel();\n // this is not so pretty. when inserting the 'next'\n // suggestion we undo until we are at the state at\n // which we were before inserting the previous suggestion...\n while (model.canUndo()) {\n if (modelVersionNow !== model.getAlternativeVersionId()) {\n model.undo();\n }\n this._insertSuggestion(next, 1 /* InsertFlags.NoBeforeUndoStop */ | 2 /* InsertFlags.NoAfterUndoStop */ | (flags & 8 /* InsertFlags.AlternativeOverwriteConfig */ ? 8 /* InsertFlags.AlternativeOverwriteConfig */ : 0));\n break;\n }\n });\n }\n this._alertCompletionItem(item);\n // clear only now - after all tasks are done\n Promise.all(tasks).finally(() => {\n this._reportSuggestionAcceptedTelemetry(item, model, isResolved, _commandExectionDuration, _additionalEditsAppliedAsync);\n this.model.clear();\n cts.dispose();\n });\n }\n _reportSuggestionAcceptedTelemetry(item, model, itemResolved, commandExectionDuration, additionalEditsAppliedAsync) {\n var _a, _b, _c;\n if (Math.floor(Math.random() * 100) === 0) {\n // throttle telemetry event because accepting completions happens a lot\n return;\n }\n this._telemetryService.publicLog2('suggest.acceptedSuggestion', {\n extensionId: (_b = (_a = item.extensionId) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 'unknown',\n providerId: (_c = item.provider._debugDisplayName) !== null && _c !== void 0 ? _c : 'unknown',\n kind: item.completion.kind,\n basenameHash: hash(basename(model.uri)).toString(16),\n languageId: model.getLanguageId(),\n fileExtension: extname(model.uri),\n resolveInfo: !item.provider.resolveCompletionItem ? -1 : itemResolved ? 1 : 0,\n resolveDuration: item.resolveDuration,\n commandDuration: commandExectionDuration,\n additionalEditsAsync: additionalEditsAppliedAsync\n });\n }\n getOverwriteInfo(item, toggleMode) {\n assertType(this.editor.hasModel());\n let replace = this.editor.getOption(118 /* EditorOption.suggest */).insertMode === 'replace';\n if (toggleMode) {\n replace = !replace;\n }\n const overwriteBefore = item.position.column - item.editStart.column;\n const overwriteAfter = (replace ? item.editReplaceEnd.column : item.editInsertEnd.column) - item.position.column;\n const columnDelta = this.editor.getPosition().column - item.position.column;\n const suffixDelta = this._lineSuffix.value ? this._lineSuffix.value.delta(this.editor.getPosition()) : 0;\n return {\n overwriteBefore: overwriteBefore + columnDelta,\n overwriteAfter: overwriteAfter + suffixDelta\n };\n }\n _alertCompletionItem(item) {\n if (isNonEmptyArray(item.completion.additionalTextEdits)) {\n const msg = nls.localize('aria.alert.snippet', \"Accepting '{0}' made {1} additional edits\", item.textLabel, item.completion.additionalTextEdits.length);\n alert(msg);\n }\n }\n triggerSuggest(onlyFrom, auto, noFilter) {\n if (this.editor.hasModel()) {\n this.model.trigger({\n auto: auto !== null && auto !== void 0 ? auto : false,\n completionOptions: { providerFilter: onlyFrom, kindFilter: noFilter ? new Set() : undefined }\n });\n this.editor.revealPosition(this.editor.getPosition(), 0 /* ScrollType.Smooth */);\n this.editor.focus();\n }\n }\n triggerSuggestAndAcceptBest(arg) {\n if (!this.editor.hasModel()) {\n return;\n }\n const positionNow = this.editor.getPosition();\n const fallback = () => {\n if (positionNow.equals(this.editor.getPosition())) {\n this._commandService.executeCommand(arg.fallback);\n }\n };\n const makesTextEdit = (item) => {\n if (item.completion.insertTextRules & 4 /* CompletionItemInsertTextRule.InsertAsSnippet */ || item.completion.additionalTextEdits) {\n // snippet, other editor -> makes edit\n return true;\n }\n const position = this.editor.getPosition();\n const startColumn = item.editStart.column;\n const endColumn = position.column;\n if (endColumn - startColumn !== item.completion.insertText.length) {\n // unequal lengths -> makes edit\n return true;\n }\n const textNow = this.editor.getModel().getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn,\n endLineNumber: position.lineNumber,\n endColumn\n });\n // unequal text -> makes edit\n return textNow !== item.completion.insertText;\n };\n Event.once(this.model.onDidTrigger)(_ => {\n // wait for trigger because only then the cancel-event is trustworthy\n const listener = [];\n Event.any(this.model.onDidTrigger, this.model.onDidCancel)(() => {\n // retrigger or cancel -> try to type default text\n dispose(listener);\n fallback();\n }, undefined, listener);\n this.model.onDidSuggest(({ completionModel }) => {\n dispose(listener);\n if (completionModel.items.length === 0) {\n fallback();\n return;\n }\n const index = this._memoryService.select(this.editor.getModel(), this.editor.getPosition(), completionModel.items);\n const item = completionModel.items[index];\n if (!makesTextEdit(item)) {\n fallback();\n return;\n }\n this.editor.pushUndoStop();\n this._insertSuggestion({ index, item, model: completionModel }, 4 /* InsertFlags.KeepAlternativeSuggestions */ | 1 /* InsertFlags.NoBeforeUndoStop */ | 2 /* InsertFlags.NoAfterUndoStop */);\n }, undefined, listener);\n });\n this.model.trigger({ auto: false, shy: true });\n this.editor.revealPosition(positionNow, 0 /* ScrollType.Smooth */);\n this.editor.focus();\n }\n acceptSelectedSuggestion(keepAlternativeSuggestions, alternativeOverwriteConfig) {\n const item = this.widget.value.getFocusedItem();\n let flags = 0;\n if (keepAlternativeSuggestions) {\n flags |= 4 /* InsertFlags.KeepAlternativeSuggestions */;\n }\n if (alternativeOverwriteConfig) {\n flags |= 8 /* InsertFlags.AlternativeOverwriteConfig */;\n }\n this._insertSuggestion(item, flags);\n }\n acceptNextSuggestion() {\n this._alternatives.value.next();\n }\n acceptPrevSuggestion() {\n this._alternatives.value.prev();\n }\n cancelSuggestWidget() {\n this.model.cancel();\n this.model.clear();\n this.widget.value.hideWidget();\n }\n focusSuggestion() {\n this.widget.value.focusSelected();\n }\n selectNextSuggestion() {\n this.widget.value.selectNext();\n }\n selectNextPageSuggestion() {\n this.widget.value.selectNextPage();\n }\n selectLastSuggestion() {\n this.widget.value.selectLast();\n }\n selectPrevSuggestion() {\n this.widget.value.selectPrevious();\n }\n selectPrevPageSuggestion() {\n this.widget.value.selectPreviousPage();\n }\n selectFirstSuggestion() {\n this.widget.value.selectFirst();\n }\n toggleSuggestionDetails() {\n this.widget.value.toggleDetails();\n }\n toggleExplainMode() {\n this.widget.value.toggleExplainMode();\n }\n toggleSuggestionFocus() {\n this.widget.value.toggleDetailsFocus();\n }\n resetWidgetSize() {\n this.widget.value.resetPersistedSize();\n }\n forceRenderingAbove() {\n this.widget.value.forceRenderingAbove();\n }\n stopForceRenderingAbove() {\n if (!this.widget.isInitialized) {\n // This method has no effect if the widget is not initialized yet.\n return;\n }\n this.widget.value.stopForceRenderingAbove();\n }\n registerSelector(selector) {\n return this._selectors.register(selector);\n }\n};\nSuggestController.ID = 'editor.contrib.suggestController';\nSuggestController = SuggestController_1 = __decorate([\n __param(1, ISuggestMemoryService),\n __param(2, ICommandService),\n __param(3, IContextKeyService),\n __param(4, IInstantiationService),\n __param(5, ILogService),\n __param(6, ITelemetryService)\n], SuggestController);\nexport { SuggestController };\nclass PriorityRegistry {\n constructor(prioritySelector) {\n this.prioritySelector = prioritySelector;\n this._items = new Array();\n }\n register(value) {\n if (this._items.indexOf(value) !== -1) {\n throw new Error('Value is already registered');\n }\n this._items.push(value);\n this._items.sort((s1, s2) => this.prioritySelector(s2) - this.prioritySelector(s1));\n return {\n dispose: () => {\n const idx = this._items.indexOf(value);\n if (idx >= 0) {\n this._items.splice(idx, 1);\n }\n }\n };\n }\n get itemsOrderedByPriorityDesc() {\n return this._items;\n }\n}\nexport class TriggerSuggestAction extends EditorAction {\n constructor() {\n super({\n id: TriggerSuggestAction.id,\n label: nls.localize('suggest.trigger.label', \"Trigger Suggest\"),\n alias: 'Trigger Suggest',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCompletionItemProvider, SuggestContext.Visible.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* KeyMod.CtrlCmd */ | 10 /* KeyCode.Space */,\n secondary: [2048 /* KeyMod.CtrlCmd */ | 39 /* KeyCode.KeyI */],\n mac: { primary: 256 /* KeyMod.WinCtrl */ | 10 /* KeyCode.Space */, secondary: [512 /* KeyMod.Alt */ | 9 /* KeyCode.Escape */, 2048 /* KeyMod.CtrlCmd */ | 39 /* KeyCode.KeyI */] },\n weight: 100 /* KeybindingWeight.EditorContrib */\n }\n });\n }\n run(_accessor, editor, args) {\n const controller = SuggestController.get(editor);\n if (!controller) {\n return;\n }\n let auto;\n if (args && typeof args === 'object') {\n if (args.auto === true) {\n auto = true;\n }\n }\n controller.triggerSuggest(undefined, auto, undefined);\n }\n}\nTriggerSuggestAction.id = 'editor.action.triggerSuggest';\nregisterEditorContribution(SuggestController.ID, SuggestController, 2 /* EditorContributionInstantiation.BeforeFirstInteraction */);\nregisterEditorAction(TriggerSuggestAction);\nconst weight = 100 /* KeybindingWeight.EditorContrib */ + 90;\nconst SuggestCommand = EditorCommand.bindToContribution(SuggestController.get);\nregisterEditorCommand(new SuggestCommand({\n id: 'acceptSelectedSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.HasFocusedSuggestion),\n handler(x) {\n x.acceptSelectedSuggestion(true, false);\n },\n kbOpts: [{\n // normal tab\n primary: 2 /* KeyCode.Tab */,\n kbExpr: ContextKeyExpr.and(SuggestContext.Visible, EditorContextKeys.textInputFocus),\n weight,\n }, {\n // accept on enter has special rules\n primary: 3 /* KeyCode.Enter */,\n kbExpr: ContextKeyExpr.and(SuggestContext.Visible, EditorContextKeys.textInputFocus, SuggestContext.AcceptSuggestionsOnEnter, SuggestContext.MakesTextEdit),\n weight,\n }],\n menuOpts: [{\n menuId: suggestWidgetStatusbarMenu,\n title: nls.localize('accept.insert', \"Insert\"),\n group: 'left',\n order: 1,\n when: SuggestContext.HasInsertAndReplaceRange.toNegated()\n }, {\n menuId: suggestWidgetStatusbarMenu,\n title: nls.localize('accept.insert', \"Insert\"),\n group: 'left',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('insert'))\n }, {\n menuId: suggestWidgetStatusbarMenu,\n title: nls.localize('accept.replace', \"Replace\"),\n group: 'left',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('replace'))\n }]\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'acceptAlternativeSelectedSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, EditorContextKeys.textInputFocus, SuggestContext.HasFocusedSuggestion),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* KeyMod.Shift */ | 3 /* KeyCode.Enter */,\n secondary: [1024 /* KeyMod.Shift */ | 2 /* KeyCode.Tab */],\n },\n handler(x) {\n x.acceptSelectedSuggestion(false, true);\n },\n menuOpts: [{\n menuId: suggestWidgetStatusbarMenu,\n group: 'left',\n order: 2,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('insert')),\n title: nls.localize('accept.replace', \"Replace\")\n }, {\n menuId: suggestWidgetStatusbarMenu,\n group: 'left',\n order: 2,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('replace')),\n title: nls.localize('accept.insert', \"Insert\")\n }]\n}));\n// continue to support the old command\nCommandsRegistry.registerCommandAlias('acceptSelectedSuggestionOnEnter', 'acceptSelectedSuggestion');\nregisterEditorCommand(new SuggestCommand({\n id: 'hideSuggestWidget',\n precondition: SuggestContext.Visible,\n handler: x => x.cancelSuggestWidget(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 9 /* KeyCode.Escape */,\n secondary: [1024 /* KeyMod.Shift */ | 9 /* KeyCode.Escape */]\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectNextSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, ContextKeyExpr.or(SuggestContext.MultipleSuggestions, SuggestContext.HasFocusedSuggestion.negate())),\n handler: c => c.selectNextSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 18 /* KeyCode.DownArrow */,\n secondary: [2048 /* KeyMod.CtrlCmd */ | 18 /* KeyCode.DownArrow */],\n mac: { primary: 18 /* KeyCode.DownArrow */, secondary: [2048 /* KeyMod.CtrlCmd */ | 18 /* KeyCode.DownArrow */, 256 /* KeyMod.WinCtrl */ | 44 /* KeyCode.KeyN */] }\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectNextPageSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, ContextKeyExpr.or(SuggestContext.MultipleSuggestions, SuggestContext.HasFocusedSuggestion.negate())),\n handler: c => c.selectNextPageSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 12 /* KeyCode.PageDown */,\n secondary: [2048 /* KeyMod.CtrlCmd */ | 12 /* KeyCode.PageDown */]\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectLastSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, ContextKeyExpr.or(SuggestContext.MultipleSuggestions, SuggestContext.HasFocusedSuggestion.negate())),\n handler: c => c.selectLastSuggestion()\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectPrevSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, ContextKeyExpr.or(SuggestContext.MultipleSuggestions, SuggestContext.HasFocusedSuggestion.negate())),\n handler: c => c.selectPrevSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 16 /* KeyCode.UpArrow */,\n secondary: [2048 /* KeyMod.CtrlCmd */ | 16 /* KeyCode.UpArrow */],\n mac: { primary: 16 /* KeyCode.UpArrow */, secondary: [2048 /* KeyMod.CtrlCmd */ | 16 /* KeyCode.UpArrow */, 256 /* KeyMod.WinCtrl */ | 46 /* KeyCode.KeyP */] }\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectPrevPageSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, ContextKeyExpr.or(SuggestContext.MultipleSuggestions, SuggestContext.HasFocusedSuggestion.negate())),\n handler: c => c.selectPrevPageSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 11 /* KeyCode.PageUp */,\n secondary: [2048 /* KeyMod.CtrlCmd */ | 11 /* KeyCode.PageUp */]\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectFirstSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, ContextKeyExpr.or(SuggestContext.MultipleSuggestions, SuggestContext.HasFocusedSuggestion.negate())),\n handler: c => c.selectFirstSuggestion()\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'focusSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.HasFocusedSuggestion.negate()),\n handler: x => x.focusSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* KeyMod.CtrlCmd */ | 10 /* KeyCode.Space */,\n secondary: [2048 /* KeyMod.CtrlCmd */ | 39 /* KeyCode.KeyI */],\n mac: { primary: 256 /* KeyMod.WinCtrl */ | 10 /* KeyCode.Space */, secondary: [2048 /* KeyMod.CtrlCmd */ | 39 /* KeyCode.KeyI */] }\n },\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'focusAndAcceptSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.HasFocusedSuggestion.negate()),\n handler: c => {\n c.focusSuggestion();\n c.acceptSelectedSuggestion(true, false);\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'toggleSuggestionDetails',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.HasFocusedSuggestion),\n handler: x => x.toggleSuggestionDetails(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* KeyMod.CtrlCmd */ | 10 /* KeyCode.Space */,\n secondary: [2048 /* KeyMod.CtrlCmd */ | 39 /* KeyCode.KeyI */],\n mac: { primary: 256 /* KeyMod.WinCtrl */ | 10 /* KeyCode.Space */, secondary: [2048 /* KeyMod.CtrlCmd */ | 39 /* KeyCode.KeyI */] }\n },\n menuOpts: [{\n menuId: suggestWidgetStatusbarMenu,\n group: 'right',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.DetailsVisible, SuggestContext.CanResolve),\n title: nls.localize('detail.more', \"show less\")\n }, {\n menuId: suggestWidgetStatusbarMenu,\n group: 'right',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.DetailsVisible.toNegated(), SuggestContext.CanResolve),\n title: nls.localize('detail.less', \"show more\")\n }]\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'toggleExplainMode',\n precondition: SuggestContext.Visible,\n handler: x => x.toggleExplainMode(),\n kbOpts: {\n weight: 100 /* KeybindingWeight.EditorContrib */,\n primary: 2048 /* KeyMod.CtrlCmd */ | 90 /* KeyCode.Slash */,\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'toggleSuggestionFocus',\n precondition: SuggestContext.Visible,\n handler: x => x.toggleSuggestionFocus(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* KeyMod.CtrlCmd */ | 512 /* KeyMod.Alt */ | 10 /* KeyCode.Space */,\n mac: { primary: 256 /* KeyMod.WinCtrl */ | 512 /* KeyMod.Alt */ | 10 /* KeyCode.Space */ }\n }\n}));\n//#region tab completions\nregisterEditorCommand(new SuggestCommand({\n id: 'insertBestCompletion',\n precondition: ContextKeyExpr.and(EditorContextKeys.textInputFocus, ContextKeyExpr.equals('config.editor.tabCompletion', 'on'), WordContextKey.AtEnd, SuggestContext.Visible.toNegated(), SuggestAlternatives.OtherSuggestions.toNegated(), SnippetController2.InSnippetMode.toNegated()),\n handler: (x, arg) => {\n x.triggerSuggestAndAcceptBest(isObject(arg) ? { fallback: 'tab', ...arg } : { fallback: 'tab' });\n },\n kbOpts: {\n weight,\n primary: 2 /* KeyCode.Tab */\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'insertNextSuggestion',\n precondition: ContextKeyExpr.and(EditorContextKeys.textInputFocus, ContextKeyExpr.equals('config.editor.tabCompletion', 'on'), SuggestAlternatives.OtherSuggestions, SuggestContext.Visible.toNegated(), SnippetController2.InSnippetMode.toNegated()),\n handler: x => x.acceptNextSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2 /* KeyCode.Tab */\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'insertPrevSuggestion',\n precondition: ContextKeyExpr.and(EditorContextKeys.textInputFocus, ContextKeyExpr.equals('config.editor.tabCompletion', 'on'), SuggestAlternatives.OtherSuggestions, SuggestContext.Visible.toNegated(), SnippetController2.InSnippetMode.toNegated()),\n handler: x => x.acceptPrevSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* KeyMod.Shift */ | 2 /* KeyCode.Tab */\n }\n}));\nregisterEditorAction(class extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.resetSuggestSize',\n label: nls.localize('suggest.reset.label', \"Reset Suggest Widget Size\"),\n alias: 'Reset Suggest Widget Size',\n precondition: undefined\n });\n }\n run(_accessor, editor) {\n var _a;\n (_a = SuggestController.get(editor)) === null || _a === void 0 ? void 0 : _a.resetWidgetSize();\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\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 { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { Range } from '../../../common/core/range.js';\nimport { registerEditorFeature } from '../../../common/editorFeatures.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { CompletionModel, LineContext } from './completionModel.js';\nimport { 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';\nclass SuggestInlineCompletion {\n constructor(range, insertText, filterText, additionalTextEdits, command, completion) {\n this.range = range;\n this.insertText = insertText;\n this.filterText = filterText;\n this.additionalTextEdits = additionalTextEdits;\n this.command = command;\n this.completion = completion;\n }\n}\nlet InlineCompletionResults = class InlineCompletionResults extends RefCountedDisposable {\n constructor(model, line, word, completionModel, completions, _suggestMemoryService) {\n super(completions.disposable);\n this.model = model;\n this.line = line;\n this.word = word;\n this.completionModel = completionModel;\n this._suggestMemoryService = _suggestMemoryService;\n }\n canBeReused(model, line, word) {\n return this.model === model // same model\n && this.line === line\n && this.word.word.length > 0\n && this.word.startColumn === word.startColumn && this.word.endColumn < word.endColumn // same word\n && this.completionModel.getIncompleteProvider().size === 0; // no incomplete results\n }\n get items() {\n var _a;\n const result = [];\n // Split items by preselected index. This ensures the memory-selected item shows first and that better/worst\n // ranked items are before/after\n const { items } = this.completionModel;\n const selectedIndex = this._suggestMemoryService.select(this.model, { lineNumber: this.line, column: this.word.endColumn + this.completionModel.lineContext.characterCountDelta }, items);\n const first = Iterable.slice(items, selectedIndex);\n const second = Iterable.slice(items, 0, selectedIndex);\n let resolveCount = 5;\n for (const item of Iterable.concat(first, second)) {\n if (item.score === FuzzyScore.Default) {\n // skip items that have no overlap\n continue;\n }\n const range = new Range(item.editStart.lineNumber, item.editStart.column, item.editInsertEnd.lineNumber, item.editInsertEnd.column + this.completionModel.lineContext.characterCountDelta // end PLUS character delta\n );\n const insertText = item.completion.insertTextRules && (item.completion.insertTextRules & 4 /* CompletionItemInsertTextRule.InsertAsSnippet */)\n ? { snippet: item.completion.insertText }\n : item.completion.insertText;\n result.push(new SuggestInlineCompletion(range, insertText, (_a = item.filterTextLow) !== null && _a !== void 0 ? _a : item.labelLow, item.completion.additionalTextEdits, item.completion.command, item));\n // resolve the first N suggestions eagerly\n if (resolveCount-- >= 0) {\n item.resolve(CancellationToken.None);\n }\n }\n return result;\n }\n};\nInlineCompletionResults = __decorate([\n __param(5, ISuggestMemoryService)\n], InlineCompletionResults);\nlet SuggestInlineCompletions = class SuggestInlineCompletions extends Disposable {\n constructor(_languageFeatureService, _clipboardService, _suggestMemoryService, _editorService) {\n super();\n this._languageFeatureService = _languageFeatureService;\n this._clipboardService = _clipboardService;\n this._suggestMemoryService = _suggestMemoryService;\n this._editorService = _editorService;\n this._store.add(_languageFeatureService.inlineCompletionsProvider.register('*', this));\n }\n async provideInlineCompletions(model, position, context, token) {\n var _a;\n if (context.selectedSuggestionInfo) {\n return;\n }\n let editor;\n for (const candidate of this._editorService.listCodeEditors()) {\n if (candidate.getModel() === model) {\n editor = candidate;\n break;\n }\n }\n if (!editor) {\n return;\n }\n const config = editor.getOption(89 /* EditorOption.quickSuggestions */);\n if (QuickSuggestionsOptions.isAllOff(config)) {\n // quick suggest is off (for this model/language)\n return;\n }\n model.tokenization.tokenizeIfCheap(position.lineNumber);\n const lineTokens = model.tokenization.getLineTokens(position.lineNumber);\n const tokenType = lineTokens.getStandardTokenType(lineTokens.findTokenIndexAtOffset(Math.max(position.column - 1 - 1, 0)));\n if (QuickSuggestionsOptions.valueFor(config, tokenType) !== 'inline') {\n // quick suggest is off (for this token)\n return undefined;\n }\n // We consider non-empty leading words and trigger characters. The latter only\n // when no word is being typed (word characters superseed trigger characters)\n let wordInfo = model.getWordAtPosition(position);\n let triggerCharacterInfo;\n if (!(wordInfo === null || wordInfo === void 0 ? void 0 : wordInfo.word)) {\n triggerCharacterInfo = this._getTriggerCharacterInfo(model, position);\n }\n if (!(wordInfo === null || wordInfo === void 0 ? void 0 : wordInfo.word) && !triggerCharacterInfo) {\n // not at word, not a trigger character\n return;\n }\n // ensure that we have word information and that we are at the end of a word\n // otherwise we stop because we don't want to do quick suggestions inside words\n if (!wordInfo) {\n wordInfo = model.getWordUntilPosition(position);\n }\n if (wordInfo.endColumn !== position.column) {\n return;\n }\n let result;\n const leadingLineContents = model.getValueInRange(new Range(position.lineNumber, 1, position.lineNumber, position.column));\n if (!triggerCharacterInfo && ((_a = this._lastResult) === null || _a === void 0 ? void 0 : _a.canBeReused(model, position.lineNumber, wordInfo))) {\n // reuse a previous result iff possible, only a refilter is needed\n // TODO@jrieken this can be improved further and only incomplete results can be updated\n // console.log(`REUSE with ${wordInfo.word}`);\n const newLineContext = new LineContext(leadingLineContents, position.column - this._lastResult.word.endColumn);\n this._lastResult.completionModel.lineContext = newLineContext;\n this._lastResult.acquire();\n result = this._lastResult;\n }\n else {\n // refesh model is required\n const completions = await provideSuggestionItems(this._languageFeatureService.completionProvider, model, position, new CompletionOptions(undefined, SuggestModel.createSuggestFilter(editor).itemKind, triggerCharacterInfo === null || triggerCharacterInfo === void 0 ? void 0 : triggerCharacterInfo.providers), triggerCharacterInfo && { triggerKind: 1 /* CompletionTriggerKind.TriggerCharacter */, triggerCharacter: triggerCharacterInfo.ch }, token);\n let clipboardText;\n if (completions.needsClipboard) {\n clipboardText = await this._clipboardService.readText();\n }\n const completionModel = new CompletionModel(completions.items, position.column, new LineContext(leadingLineContents, 0), WordDistance.None, editor.getOption(118 /* EditorOption.suggest */), editor.getOption(112 /* EditorOption.snippetSuggestions */), { boostFullMatch: false, firstMatchCanBeWeak: false }, clipboardText);\n result = new InlineCompletionResults(model, position.lineNumber, wordInfo, completionModel, completions, this._suggestMemoryService);\n }\n this._lastResult = result;\n return result;\n }\n handleItemDidShow(_completions, item) {\n item.completion.resolve(CancellationToken.None);\n }\n freeInlineCompletions(result) {\n result.release();\n }\n _getTriggerCharacterInfo(model, position) {\n var _a;\n const ch = model.getValueInRange(Range.fromPositions({ lineNumber: position.lineNumber, column: position.column - 1 }, position));\n const providers = new Set();\n for (const provider of this._languageFeatureService.completionProvider.all(model)) {\n if ((_a = provider.triggerCharacters) === null || _a === void 0 ? void 0 : _a.includes(ch)) {\n providers.add(provider);\n }\n }\n if (providers.size === 0) {\n return undefined;\n }\n return { providers, ch };\n }\n};\nSuggestInlineCompletions = __decorate([\n __param(0, ILanguageFeaturesService),\n __param(1, IClipboardService),\n __param(2, ISuggestMemoryService),\n __param(3, ICodeEditorService)\n], SuggestInlineCompletions);\nexport { SuggestInlineCompletions };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar SuggestMemoryService_1;\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../../base/common/map.js';\nimport { TernarySearchTree } from '../../../../base/common/ternarySearchTree.js';\nimport { CompletionItemKinds } from '../../../common/languages.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { registerSingleton } from '../../../../platform/instantiation/common/extensions.js';\nimport { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IStorageService, WillSaveStateReason } from '../../../../platform/storage/common/storage.js';\nexport class Memory {\n constructor(name) {\n this.name = name;\n }\n select(model, pos, items) {\n if (items.length === 0) {\n return 0;\n }\n const topScore = items[0].score[0];\n for (let i = 0; i < items.length; i++) {\n const { score, completion: suggestion } = items[i];\n if (score[0] !== topScore) {\n // stop when leaving the group of top matches\n break;\n }\n if (suggestion.preselect) {\n // stop when seeing an auto-select-item\n return i;\n }\n }\n return 0;\n }\n}\nexport class NoMemory extends Memory {\n constructor() {\n super('first');\n }\n memorize(model, pos, item) {\n // no-op\n }\n toJSON() {\n return undefined;\n }\n fromJSON() {\n //\n }\n}\nexport class LRUMemory extends Memory {\n constructor() {\n super('recentlyUsed');\n this._cache = new LRUCache(300, 0.66);\n this._seq = 0;\n }\n memorize(model, pos, item) {\n const key = `${model.getLanguageId()}/${item.textLabel}`;\n this._cache.set(key, {\n touch: this._seq++,\n type: item.completion.kind,\n insertText: item.completion.insertText\n });\n }\n select(model, pos, items) {\n if (items.length === 0) {\n return 0;\n }\n const lineSuffix = model.getLineContent(pos.lineNumber).substr(pos.column - 10, pos.column - 1);\n if (/\\s$/.test(lineSuffix)) {\n return super.select(model, pos, items);\n }\n const topScore = items[0].score[0];\n let indexPreselect = -1;\n let indexRecency = -1;\n let seq = -1;\n for (let i = 0; i < items.length; i++) {\n if (items[i].score[0] !== topScore) {\n // consider only top items\n break;\n }\n const key = `${model.getLanguageId()}/${items[i].textLabel}`;\n const item = this._cache.peek(key);\n if (item && item.touch > seq && item.type === items[i].completion.kind && item.insertText === items[i].completion.insertText) {\n seq = item.touch;\n indexRecency = i;\n }\n if (items[i].completion.preselect && indexPreselect === -1) {\n // stop when seeing an auto-select-item\n return indexPreselect = i;\n }\n }\n if (indexRecency !== -1) {\n return indexRecency;\n }\n else if (indexPreselect !== -1) {\n return indexPreselect;\n }\n else {\n return 0;\n }\n }\n toJSON() {\n return this._cache.toJSON();\n }\n fromJSON(data) {\n this._cache.clear();\n const seq = 0;\n for (const [key, value] of data) {\n value.touch = seq;\n value.type = typeof value.type === 'number' ? value.type : CompletionItemKinds.fromString(value.type);\n this._cache.set(key, value);\n }\n this._seq = this._cache.size;\n }\n}\nexport class PrefixMemory extends Memory {\n constructor() {\n super('recentlyUsedByPrefix');\n this._trie = TernarySearchTree.forStrings();\n this._seq = 0;\n }\n memorize(model, pos, item) {\n const { word } = model.getWordUntilPosition(pos);\n const key = `${model.getLanguageId()}/${word}`;\n this._trie.set(key, {\n type: item.completion.kind,\n insertText: item.completion.insertText,\n touch: this._seq++\n });\n }\n select(model, pos, items) {\n const { word } = model.getWordUntilPosition(pos);\n if (!word) {\n return super.select(model, pos, items);\n }\n const key = `${model.getLanguageId()}/${word}`;\n let item = this._trie.get(key);\n if (!item) {\n item = this._trie.findSubstr(key);\n }\n if (item) {\n for (let i = 0; i < items.length; i++) {\n const { kind, insertText } = items[i].completion;\n if (kind === item.type && insertText === item.insertText) {\n return i;\n }\n }\n }\n return super.select(model, pos, items);\n }\n toJSON() {\n const entries = [];\n this._trie.forEach((value, key) => entries.push([key, value]));\n // sort by last recently used (touch), then\n // take the top 200 item and normalize their\n // touch\n entries\n .sort((a, b) => -(a[1].touch - b[1].touch))\n .forEach((value, i) => value[1].touch = i);\n return entries.slice(0, 200);\n }\n fromJSON(data) {\n this._trie.clear();\n if (data.length > 0) {\n this._seq = data[0][1].touch + 1;\n for (const [key, value] of data) {\n value.type = typeof value.type === 'number' ? value.type : CompletionItemKinds.fromString(value.type);\n this._trie.set(key, value);\n }\n }\n }\n}\nlet SuggestMemoryService = SuggestMemoryService_1 = class SuggestMemoryService {\n constructor(_storageService, _configService) {\n this._storageService = _storageService;\n this._configService = _configService;\n this._disposables = new DisposableStore();\n this._persistSoon = new RunOnceScheduler(() => this._saveState(), 500);\n this._disposables.add(_storageService.onWillSaveState(e => {\n if (e.reason === WillSaveStateReason.SHUTDOWN) {\n this._saveState();\n }\n }));\n }\n dispose() {\n this._disposables.dispose();\n this._persistSoon.dispose();\n }\n memorize(model, pos, item) {\n this._withStrategy(model, pos).memorize(model, pos, item);\n this._persistSoon.schedule();\n }\n select(model, pos, items) {\n return this._withStrategy(model, pos).select(model, pos, items);\n }\n _withStrategy(model, pos) {\n var _a;\n const mode = this._configService.getValue('editor.suggestSelection', {\n overrideIdentifier: model.getLanguageIdAtPosition(pos.lineNumber, pos.column),\n resource: model.uri\n });\n if (((_a = this._strategy) === null || _a === void 0 ? void 0 : _a.name) !== mode) {\n this._saveState();\n const ctor = SuggestMemoryService_1._strategyCtors.get(mode) || NoMemory;\n this._strategy = new ctor();\n try {\n const share = this._configService.getValue('editor.suggest.shareSuggestSelections');\n const scope = share ? 0 /* StorageScope.PROFILE */ : 1 /* StorageScope.WORKSPACE */;\n const raw = this._storageService.get(`${SuggestMemoryService_1._storagePrefix}/${mode}`, scope);\n if (raw) {\n this._strategy.fromJSON(JSON.parse(raw));\n }\n }\n catch (e) {\n // things can go wrong with JSON...\n }\n }\n return this._strategy;\n }\n _saveState() {\n if (this._strategy) {\n const share = this._configService.getValue('editor.suggest.shareSuggestSelections');\n const scope = share ? 0 /* StorageScope.PROFILE */ : 1 /* StorageScope.WORKSPACE */;\n const raw = JSON.stringify(this._strategy);\n this._storageService.store(`${SuggestMemoryService_1._storagePrefix}/${this._strategy.name}`, raw, scope, 1 /* StorageTarget.MACHINE */);\n }\n }\n};\nSuggestMemoryService._strategyCtors = new Map([\n ['recentlyUsedByPrefix', PrefixMemory],\n ['recentlyUsed', LRUMemory],\n ['first', NoMemory]\n]);\nSuggestMemoryService._storagePrefix = 'suggest/memories';\nSuggestMemoryService = SuggestMemoryService_1 = __decorate([\n __param(0, IStorageService),\n __param(1, IConfigurationService)\n], SuggestMemoryService);\nexport { SuggestMemoryService };\nexport const ISuggestMemoryService = createDecorator('ISuggestMemories');\nregisterSingleton(ISuggestMemoryService, SuggestMemoryService, 1 /* InstantiationType.Delayed */);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar SuggestModel_1;\nimport { TimeoutTimer } from '../../../../base/common/async.js';\nimport { CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { DisposableStore, dispose } from '../../../../base/common/lifecycle.js';\nimport { getLeadingWhitespace, isHighSurrogate, isLowSurrogate } from '../../../../base/common/strings.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { IEditorWorkerService } from '../../../common/services/editorWorker.js';\nimport { WordDistance } from './wordDistance.js';\nimport { IClipboardService } from '../../../../platform/clipboard/common/clipboardService.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { ILogService } from '../../../../platform/log/common/log.js';\nimport { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';\nimport { CompletionModel } from './completionModel.js';\nimport { CompletionOptions, getSnippetSuggestSupport, provideSuggestionItems, QuickSuggestionsOptions } from './suggest.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { FuzzyScoreOptions } from '../../../../base/common/filters.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { InlineCompletionContextKeys } from '../../inlineCompletions/browser/inlineCompletionContextKeys.js';\nimport { SnippetController2 } from '../../snippet/browser/snippetController2.js';\nimport { IEnvironmentService } from '../../../../platform/environment/common/environment.js';\nexport class LineContext {\n static shouldAutoTrigger(editor) {\n if (!editor.hasModel()) {\n return false;\n }\n const model = editor.getModel();\n const pos = editor.getPosition();\n model.tokenization.tokenizeIfCheap(pos.lineNumber);\n const word = model.getWordAtPosition(pos);\n if (!word) {\n return false;\n }\n if (word.endColumn !== pos.column &&\n word.startColumn + 1 !== pos.column /* after typing a single character before a word */) {\n return false;\n }\n if (!isNaN(Number(word.word))) {\n return false;\n }\n return true;\n }\n constructor(model, position, triggerOptions) {\n this.leadingLineContent = model.getLineContent(position.lineNumber).substr(0, position.column - 1);\n this.leadingWord = model.getWordUntilPosition(position);\n this.lineNumber = position.lineNumber;\n this.column = position.column;\n this.triggerOptions = triggerOptions;\n }\n}\nfunction canShowQuickSuggest(editor, contextKeyService, configurationService) {\n if (!Boolean(contextKeyService.getContextKeyValue(InlineCompletionContextKeys.inlineSuggestionVisible.key))) {\n // Allow if there is no inline suggestion.\n return true;\n }\n const suppressSuggestions = contextKeyService.getContextKeyValue(InlineCompletionContextKeys.suppressSuggestions.key);\n if (suppressSuggestions !== undefined) {\n return !suppressSuggestions;\n }\n return !editor.getOption(62 /* EditorOption.inlineSuggest */).suppressSuggestions;\n}\nfunction canShowSuggestOnTriggerCharacters(editor, contextKeyService, configurationService) {\n if (!Boolean(contextKeyService.getContextKeyValue('inlineSuggestionVisible'))) {\n // Allow if there is no inline suggestion.\n return true;\n }\n const suppressSuggestions = contextKeyService.getContextKeyValue(InlineCompletionContextKeys.suppressSuggestions.key);\n if (suppressSuggestions !== undefined) {\n return !suppressSuggestions;\n }\n return !editor.getOption(62 /* EditorOption.inlineSuggest */).suppressSuggestions;\n}\nlet SuggestModel = SuggestModel_1 = class SuggestModel {\n constructor(_editor, _editorWorkerService, _clipboardService, _telemetryService, _logService, _contextKeyService, _configurationService, _languageFeaturesService, _envService) {\n this._editor = _editor;\n this._editorWorkerService = _editorWorkerService;\n this._clipboardService = _clipboardService;\n this._telemetryService = _telemetryService;\n this._logService = _logService;\n this._contextKeyService = _contextKeyService;\n this._configurationService = _configurationService;\n this._languageFeaturesService = _languageFeaturesService;\n this._envService = _envService;\n this._toDispose = new DisposableStore();\n this._triggerCharacterListener = new DisposableStore();\n this._triggerQuickSuggest = new TimeoutTimer();\n this._triggerState = undefined;\n this._completionDisposables = new DisposableStore();\n this._onDidCancel = new Emitter();\n this._onDidTrigger = new Emitter();\n this._onDidSuggest = new Emitter();\n this.onDidCancel = this._onDidCancel.event;\n this.onDidTrigger = this._onDidTrigger.event;\n this.onDidSuggest = this._onDidSuggest.event;\n this._telemetryGate = 0;\n this._currentSelection = this._editor.getSelection() || new Selection(1, 1, 1, 1);\n // wire up various listeners\n this._toDispose.add(this._editor.onDidChangeModel(() => {\n this._updateTriggerCharacters();\n this.cancel();\n }));\n this._toDispose.add(this._editor.onDidChangeModelLanguage(() => {\n this._updateTriggerCharacters();\n this.cancel();\n }));\n this._toDispose.add(this._editor.onDidChangeConfiguration(() => {\n this._updateTriggerCharacters();\n }));\n this._toDispose.add(this._languageFeaturesService.completionProvider.onDidChange(() => {\n this._updateTriggerCharacters();\n this._updateActiveSuggestSession();\n }));\n let editorIsComposing = false;\n this._toDispose.add(this._editor.onDidCompositionStart(() => {\n editorIsComposing = true;\n }));\n this._toDispose.add(this._editor.onDidCompositionEnd(() => {\n editorIsComposing = false;\n this._onCompositionEnd();\n }));\n this._toDispose.add(this._editor.onDidChangeCursorSelection(e => {\n // only trigger suggest when the editor isn't composing a character\n if (!editorIsComposing) {\n this._onCursorChange(e);\n }\n }));\n this._toDispose.add(this._editor.onDidChangeModelContent(() => {\n // only filter completions when the editor isn't composing a character\n // allow-any-unicode-next-line\n // e.g. ¨ + u makes ü but just ¨ cannot be used for filtering\n if (!editorIsComposing && this._triggerState !== undefined) {\n this._refilterCompletionItems();\n }\n }));\n this._updateTriggerCharacters();\n }\n dispose() {\n dispose(this._triggerCharacterListener);\n dispose([this._onDidCancel, this._onDidSuggest, this._onDidTrigger, this._triggerQuickSuggest]);\n this._toDispose.dispose();\n this._completionDisposables.dispose();\n this.cancel();\n }\n _updateTriggerCharacters() {\n this._triggerCharacterListener.clear();\n if (this._editor.getOption(91 /* EditorOption.readOnly */)\n || !this._editor.hasModel()\n || !this._editor.getOption(121 /* EditorOption.suggestOnTriggerCharacters */)) {\n return;\n }\n const supportsByTriggerCharacter = new Map();\n for (const support of this._languageFeaturesService.completionProvider.all(this._editor.getModel())) {\n for (const ch of support.triggerCharacters || []) {\n let set = supportsByTriggerCharacter.get(ch);\n if (!set) {\n set = new Set();\n set.add(getSnippetSuggestSupport());\n supportsByTriggerCharacter.set(ch, set);\n }\n set.add(support);\n }\n }\n const checkTriggerCharacter = (text) => {\n var _a;\n if (!canShowSuggestOnTriggerCharacters(this._editor, this._contextKeyService, this._configurationService)) {\n return;\n }\n if (LineContext.shouldAutoTrigger(this._editor)) {\n // don't trigger by trigger characters when this is a case for quick suggest\n return;\n }\n if (!text) {\n // came here from the compositionEnd-event\n const position = this._editor.getPosition();\n const model = this._editor.getModel();\n text = model.getLineContent(position.lineNumber).substr(0, position.column - 1);\n }\n let lastChar = '';\n if (isLowSurrogate(text.charCodeAt(text.length - 1))) {\n if (isHighSurrogate(text.charCodeAt(text.length - 2))) {\n lastChar = text.substr(text.length - 2);\n }\n }\n else {\n lastChar = text.charAt(text.length - 1);\n }\n const supports = supportsByTriggerCharacter.get(lastChar);\n if (supports) {\n // keep existing items that where not computed by the\n // supports/providers that want to trigger now\n const providerItemsToReuse = new Map();\n if (this._completionModel) {\n for (const [provider, items] of this._completionModel.getItemsByProvider()) {\n if (!supports.has(provider)) {\n providerItemsToReuse.set(provider, items);\n }\n }\n }\n this.trigger({\n auto: true,\n triggerKind: 1 /* CompletionTriggerKind.TriggerCharacter */,\n triggerCharacter: lastChar,\n retrigger: Boolean(this._completionModel),\n clipboardText: (_a = this._completionModel) === null || _a === void 0 ? void 0 : _a.clipboardText,\n completionOptions: { providerFilter: supports, providerItemsToReuse }\n });\n }\n };\n this._triggerCharacterListener.add(this._editor.onDidType(checkTriggerCharacter));\n this._triggerCharacterListener.add(this._editor.onDidCompositionEnd(() => checkTriggerCharacter()));\n }\n // --- trigger/retrigger/cancel suggest\n get state() {\n if (!this._triggerState) {\n return 0 /* State.Idle */;\n }\n else if (!this._triggerState.auto) {\n return 1 /* State.Manual */;\n }\n else {\n return 2 /* State.Auto */;\n }\n }\n cancel(retrigger = false) {\n var _a;\n if (this._triggerState !== undefined) {\n this._triggerQuickSuggest.cancel();\n (_a = this._requestToken) === null || _a === void 0 ? void 0 : _a.cancel();\n this._requestToken = undefined;\n this._triggerState = undefined;\n this._completionModel = undefined;\n this._context = undefined;\n this._onDidCancel.fire({ retrigger });\n }\n }\n clear() {\n this._completionDisposables.clear();\n }\n _updateActiveSuggestSession() {\n if (this._triggerState !== undefined) {\n if (!this._editor.hasModel() || !this._languageFeaturesService.completionProvider.has(this._editor.getModel())) {\n this.cancel();\n }\n else {\n this.trigger({ auto: this._triggerState.auto, retrigger: true });\n }\n }\n }\n _onCursorChange(e) {\n if (!this._editor.hasModel()) {\n return;\n }\n const prevSelection = this._currentSelection;\n this._currentSelection = this._editor.getSelection();\n if (!e.selection.isEmpty()\n || (e.reason !== 0 /* CursorChangeReason.NotSet */ && e.reason !== 3 /* CursorChangeReason.Explicit */)\n || (e.source !== 'keyboard' && e.source !== 'deleteLeft')) {\n // Early exit if nothing needs to be done!\n // Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n this.cancel();\n return;\n }\n if (this._triggerState === undefined && e.reason === 0 /* CursorChangeReason.NotSet */) {\n if (prevSelection.containsRange(this._currentSelection) || prevSelection.getEndPosition().isBeforeOrEqual(this._currentSelection.getPosition())) {\n // cursor did move RIGHT due to typing -> trigger quick suggest\n this._doTriggerQuickSuggest();\n }\n }\n else if (this._triggerState !== undefined && e.reason === 3 /* CursorChangeReason.Explicit */) {\n // suggest is active and something like cursor keys are used to move\n // the cursor. this means we can refilter at the new position\n this._refilterCompletionItems();\n }\n }\n _onCompositionEnd() {\n // trigger or refilter when composition ends\n if (this._triggerState === undefined) {\n this._doTriggerQuickSuggest();\n }\n else {\n this._refilterCompletionItems();\n }\n }\n _doTriggerQuickSuggest() {\n var _a;\n if (QuickSuggestionsOptions.isAllOff(this._editor.getOption(89 /* EditorOption.quickSuggestions */))) {\n // not enabled\n return;\n }\n if (this._editor.getOption(118 /* EditorOption.suggest */).snippetsPreventQuickSuggestions && ((_a = SnippetController2.get(this._editor)) === null || _a === void 0 ? void 0 : _a.isInSnippet())) {\n // no quick suggestion when in snippet mode\n return;\n }\n this.cancel();\n this._triggerQuickSuggest.cancelAndSet(() => {\n if (this._triggerState !== undefined) {\n return;\n }\n if (!LineContext.shouldAutoTrigger(this._editor)) {\n return;\n }\n if (!this._editor.hasModel() || !this._editor.hasWidgetFocus()) {\n return;\n }\n const model = this._editor.getModel();\n const pos = this._editor.getPosition();\n // validate enabled now\n const config = this._editor.getOption(89 /* EditorOption.quickSuggestions */);\n if (QuickSuggestionsOptions.isAllOff(config)) {\n return;\n }\n if (!QuickSuggestionsOptions.isAllOn(config)) {\n // Check the type of the token that triggered this\n model.tokenization.tokenizeIfCheap(pos.lineNumber);\n const lineTokens = model.tokenization.getLineTokens(pos.lineNumber);\n const tokenType = lineTokens.getStandardTokenType(lineTokens.findTokenIndexAtOffset(Math.max(pos.column - 1 - 1, 0)));\n if (QuickSuggestionsOptions.valueFor(config, tokenType) !== 'on') {\n return;\n }\n }\n if (!canShowQuickSuggest(this._editor, this._contextKeyService, this._configurationService)) {\n // do not trigger quick suggestions if inline suggestions are shown\n return;\n }\n if (!this._languageFeaturesService.completionProvider.has(model)) {\n return;\n }\n // we made it till here -> trigger now\n this.trigger({ auto: true });\n }, this._editor.getOption(90 /* EditorOption.quickSuggestionsDelay */));\n }\n _refilterCompletionItems() {\n assertType(this._editor.hasModel());\n assertType(this._triggerState !== undefined);\n const model = this._editor.getModel();\n const position = this._editor.getPosition();\n const ctx = new LineContext(model, position, { ...this._triggerState, refilter: true });\n this._onNewContext(ctx);\n }\n trigger(options) {\n var _a, _b, _c, _d, _e, _f;\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n const ctx = new LineContext(model, this._editor.getPosition(), options);\n // Cancel previous requests, change state & update UI\n this.cancel(options.retrigger);\n this._triggerState = options;\n this._onDidTrigger.fire({ auto: options.auto, shy: (_a = options.shy) !== null && _a !== void 0 ? _a : false, position: this._editor.getPosition() });\n // Capture context when request was sent\n this._context = ctx;\n // Build context for request\n let suggestCtx = { triggerKind: (_b = options.triggerKind) !== null && _b !== void 0 ? _b : 0 /* CompletionTriggerKind.Invoke */ };\n if (options.triggerCharacter) {\n suggestCtx = {\n triggerKind: 1 /* CompletionTriggerKind.TriggerCharacter */,\n triggerCharacter: options.triggerCharacter\n };\n }\n this._requestToken = new CancellationTokenSource();\n // kind filter and snippet sort rules\n const snippetSuggestions = this._editor.getOption(112 /* EditorOption.snippetSuggestions */);\n let snippetSortOrder = 1 /* SnippetSortOrder.Inline */;\n switch (snippetSuggestions) {\n case 'top':\n snippetSortOrder = 0 /* SnippetSortOrder.Top */;\n break;\n // \t↓ that's the default anyways...\n // case 'inline':\n // \tsnippetSortOrder = SnippetSortOrder.Inline;\n // \tbreak;\n case 'bottom':\n snippetSortOrder = 2 /* SnippetSortOrder.Bottom */;\n break;\n }\n const { itemKind: itemKindFilter, showDeprecated } = SuggestModel_1.createSuggestFilter(this._editor);\n const completionOptions = new CompletionOptions(snippetSortOrder, (_d = (_c = options.completionOptions) === null || _c === void 0 ? void 0 : _c.kindFilter) !== null && _d !== void 0 ? _d : itemKindFilter, (_e = options.completionOptions) === null || _e === void 0 ? void 0 : _e.providerFilter, (_f = options.completionOptions) === null || _f === void 0 ? void 0 : _f.providerItemsToReuse, showDeprecated);\n const wordDistance = WordDistance.create(this._editorWorkerService, this._editor);\n const completions = provideSuggestionItems(this._languageFeaturesService.completionProvider, model, this._editor.getPosition(), completionOptions, suggestCtx, this._requestToken.token);\n Promise.all([completions, wordDistance]).then(async ([completions, wordDistance]) => {\n var _a;\n (_a = this._requestToken) === null || _a === void 0 ? void 0 : _a.dispose();\n if (!this._editor.hasModel()) {\n return;\n }\n let clipboardText = options === null || options === void 0 ? void 0 : options.clipboardText;\n if (!clipboardText && completions.needsClipboard) {\n clipboardText = await this._clipboardService.readText();\n }\n if (this._triggerState === undefined) {\n return;\n }\n const model = this._editor.getModel();\n // const items = completions.items;\n // if (existing) {\n // \tconst cmpFn = getSuggestionComparator(snippetSortOrder);\n // \titems = items.concat(existing.items).sort(cmpFn);\n // }\n const ctx = new LineContext(model, this._editor.getPosition(), options);\n const fuzzySearchOptions = {\n ...FuzzyScoreOptions.default,\n firstMatchCanBeWeak: !this._editor.getOption(118 /* EditorOption.suggest */).matchOnWordStartOnly\n };\n this._completionModel = new CompletionModel(completions.items, this._context.column, {\n leadingLineContent: ctx.leadingLineContent,\n characterCountDelta: ctx.column - this._context.column\n }, wordDistance, this._editor.getOption(118 /* EditorOption.suggest */), this._editor.getOption(112 /* EditorOption.snippetSuggestions */), fuzzySearchOptions, clipboardText);\n // store containers so that they can be disposed later\n this._completionDisposables.add(completions.disposable);\n this._onNewContext(ctx);\n // finally report telemetry about durations\n this._reportDurationsTelemetry(completions.durations);\n // report invalid completions by source\n if (!this._envService.isBuilt || this._envService.isExtensionDevelopment) {\n for (const item of completions.items) {\n if (item.isInvalid) {\n this._logService.warn(`[suggest] did IGNORE invalid completion item from ${item.provider._debugDisplayName}`, item.completion);\n }\n }\n }\n }).catch(onUnexpectedError);\n }\n _reportDurationsTelemetry(durations) {\n if (this._telemetryGate++ % 230 !== 0) {\n return;\n }\n setTimeout(() => {\n this._telemetryService.publicLog2('suggest.durations.json', { data: JSON.stringify(durations) });\n this._logService.debug('suggest.durations.json', durations);\n });\n }\n static createSuggestFilter(editor) {\n // kind filter and snippet sort rules\n const result = new Set();\n // snippet setting\n const snippetSuggestions = editor.getOption(112 /* EditorOption.snippetSuggestions */);\n if (snippetSuggestions === 'none') {\n result.add(27 /* CompletionItemKind.Snippet */);\n }\n // type setting\n const suggestOptions = editor.getOption(118 /* EditorOption.suggest */);\n if (!suggestOptions.showMethods) {\n result.add(0 /* CompletionItemKind.Method */);\n }\n if (!suggestOptions.showFunctions) {\n result.add(1 /* CompletionItemKind.Function */);\n }\n if (!suggestOptions.showConstructors) {\n result.add(2 /* CompletionItemKind.Constructor */);\n }\n if (!suggestOptions.showFields) {\n result.add(3 /* CompletionItemKind.Field */);\n }\n if (!suggestOptions.showVariables) {\n result.add(4 /* CompletionItemKind.Variable */);\n }\n if (!suggestOptions.showClasses) {\n result.add(5 /* CompletionItemKind.Class */);\n }\n if (!suggestOptions.showStructs) {\n result.add(6 /* CompletionItemKind.Struct */);\n }\n if (!suggestOptions.showInterfaces) {\n result.add(7 /* CompletionItemKind.Interface */);\n }\n if (!suggestOptions.showModules) {\n result.add(8 /* CompletionItemKind.Module */);\n }\n if (!suggestOptions.showProperties) {\n result.add(9 /* CompletionItemKind.Property */);\n }\n if (!suggestOptions.showEvents) {\n result.add(10 /* CompletionItemKind.Event */);\n }\n if (!suggestOptions.showOperators) {\n result.add(11 /* CompletionItemKind.Operator */);\n }\n if (!suggestOptions.showUnits) {\n result.add(12 /* CompletionItemKind.Unit */);\n }\n if (!suggestOptions.showValues) {\n result.add(13 /* CompletionItemKind.Value */);\n }\n if (!suggestOptions.showConstants) {\n result.add(14 /* CompletionItemKind.Constant */);\n }\n if (!suggestOptions.showEnums) {\n result.add(15 /* CompletionItemKind.Enum */);\n }\n if (!suggestOptions.showEnumMembers) {\n result.add(16 /* CompletionItemKind.EnumMember */);\n }\n if (!suggestOptions.showKeywords) {\n result.add(17 /* CompletionItemKind.Keyword */);\n }\n if (!suggestOptions.showWords) {\n result.add(18 /* CompletionItemKind.Text */);\n }\n if (!suggestOptions.showColors) {\n result.add(19 /* CompletionItemKind.Color */);\n }\n if (!suggestOptions.showFiles) {\n result.add(20 /* CompletionItemKind.File */);\n }\n if (!suggestOptions.showReferences) {\n result.add(21 /* CompletionItemKind.Reference */);\n }\n if (!suggestOptions.showColors) {\n result.add(22 /* CompletionItemKind.Customcolor */);\n }\n if (!suggestOptions.showFolders) {\n result.add(23 /* CompletionItemKind.Folder */);\n }\n if (!suggestOptions.showTypeParameters) {\n result.add(24 /* CompletionItemKind.TypeParameter */);\n }\n if (!suggestOptions.showSnippets) {\n result.add(27 /* CompletionItemKind.Snippet */);\n }\n if (!suggestOptions.showUsers) {\n result.add(25 /* CompletionItemKind.User */);\n }\n if (!suggestOptions.showIssues) {\n result.add(26 /* CompletionItemKind.Issue */);\n }\n return { itemKind: result, showDeprecated: suggestOptions.showDeprecated };\n }\n _onNewContext(ctx) {\n if (!this._context) {\n // happens when 24x7 IntelliSense is enabled and still in its delay\n return;\n }\n if (ctx.lineNumber !== this._context.lineNumber) {\n // e.g. happens when pressing Enter while IntelliSense is computed\n this.cancel();\n return;\n }\n if (getLeadingWhitespace(ctx.leadingLineContent) !== getLeadingWhitespace(this._context.leadingLineContent)) {\n // cancel IntelliSense when line start changes\n // happens when the current word gets outdented\n this.cancel();\n return;\n }\n if (ctx.column < this._context.column) {\n // typed -> moved cursor LEFT -> retrigger if still on a word\n if (ctx.leadingWord.word) {\n this.trigger({ auto: this._context.triggerOptions.auto, retrigger: true });\n }\n else {\n this.cancel();\n }\n return;\n }\n if (!this._completionModel) {\n // happens when IntelliSense is not yet computed\n return;\n }\n if (ctx.leadingWord.word.length !== 0 && ctx.leadingWord.startColumn > this._context.leadingWord.startColumn) {\n // started a new word while IntelliSense shows -> retrigger but reuse all items that we currently have\n const shouldAutoTrigger = LineContext.shouldAutoTrigger(this._editor);\n if (shouldAutoTrigger && this._context) {\n // shouldAutoTrigger forces tokenization, which can cause pending cursor change events to be emitted, which can cause\n // suggestions to be cancelled, which causes `this._context` to be undefined\n const map = this._completionModel.getItemsByProvider();\n this.trigger({\n auto: this._context.triggerOptions.auto,\n retrigger: true,\n clipboardText: this._completionModel.clipboardText,\n completionOptions: { providerItemsToReuse: map }\n });\n }\n return;\n }\n if (ctx.column > this._context.column && this._completionModel.getIncompleteProvider().size > 0 && ctx.leadingWord.word.length !== 0) {\n // typed -> moved cursor RIGHT & incomple model & still on a word -> retrigger\n const providerItemsToReuse = new Map();\n const providerFilter = new Set();\n for (const [provider, items] of this._completionModel.getItemsByProvider()) {\n if (items.length > 0 && items[0].container.incomplete) {\n providerFilter.add(provider);\n }\n else {\n providerItemsToReuse.set(provider, items);\n }\n }\n this.trigger({\n auto: this._context.triggerOptions.auto,\n triggerKind: 2 /* CompletionTriggerKind.TriggerForIncompleteCompletions */,\n retrigger: true,\n clipboardText: this._completionModel.clipboardText,\n completionOptions: { providerFilter, providerItemsToReuse }\n });\n }\n else {\n // typed -> moved cursor RIGHT -> update UI\n const oldLineContext = this._completionModel.lineContext;\n let isFrozen = false;\n this._completionModel.lineContext = {\n leadingLineContent: ctx.leadingLineContent,\n characterCountDelta: ctx.column - this._context.column\n };\n if (this._completionModel.items.length === 0) {\n const shouldAutoTrigger = LineContext.shouldAutoTrigger(this._editor);\n if (!this._context) {\n // shouldAutoTrigger forces tokenization, which can cause pending cursor change events to be emitted, which can cause\n // suggestions to be cancelled, which causes `this._context` to be undefined\n this.cancel();\n return;\n }\n if (shouldAutoTrigger && this._context.leadingWord.endColumn < ctx.leadingWord.startColumn) {\n // retrigger when heading into a new word\n this.trigger({ auto: this._context.triggerOptions.auto, retrigger: true });\n return;\n }\n if (!this._context.triggerOptions.auto) {\n // freeze when IntelliSense was manually requested\n this._completionModel.lineContext = oldLineContext;\n isFrozen = this._completionModel.items.length > 0;\n if (isFrozen && ctx.leadingWord.word.length === 0) {\n // there were results before but now there aren't\n // and also we are not on a word anymore -> cancel\n this.cancel();\n return;\n }\n }\n else {\n // nothing left\n this.cancel();\n return;\n }\n }\n this._onDidSuggest.fire({\n completionModel: this._completionModel,\n triggerOptions: ctx.triggerOptions,\n isFrozen,\n });\n }\n }\n};\nSuggestModel = SuggestModel_1 = __decorate([\n __param(1, IEditorWorkerService),\n __param(2, IClipboardService),\n __param(3, ITelemetryService),\n __param(4, ILogService),\n __param(5, IContextKeyService),\n __param(6, IConfigurationService),\n __param(7, ILanguageFeaturesService),\n __param(8, IEnvironmentService)\n], SuggestModel);\nexport { SuggestModel };\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 { binarySearch, isFalsyOrEmpty } from '../../../../base/common/arrays.js';\nimport { Range } from '../../../common/core/range.js';\nimport { BracketSelectionRangeProvider } from '../../smartSelect/browser/bracketSelections.js';\nexport class WordDistance {\n static async create(service, editor) {\n if (!editor.getOption(118 /* EditorOption.suggest */).localityBonus) {\n return WordDistance.None;\n }\n if (!editor.hasModel()) {\n return WordDistance.None;\n }\n const model = editor.getModel();\n const position = editor.getPosition();\n if (!service.canComputeWordRanges(model.uri)) {\n return WordDistance.None;\n }\n const [ranges] = await new BracketSelectionRangeProvider().provideSelectionRanges(model, [position]);\n if (ranges.length === 0) {\n return WordDistance.None;\n }\n const wordRanges = await service.computeWordRanges(model.uri, ranges[0].range);\n if (!wordRanges) {\n return WordDistance.None;\n }\n // remove current word\n const wordUntilPos = model.getWordUntilPosition(position);\n delete wordRanges[wordUntilPos.word];\n return new class extends WordDistance {\n distance(anchor, item) {\n if (!position.equals(editor.getPosition())) {\n return 0;\n }\n if (item.kind === 17 /* CompletionItemKind.Keyword */) {\n return 2 << 20;\n }\n const word = typeof item.label === 'string' ? item.label : item.label.label;\n const wordLines = wordRanges[word];\n if (isFalsyOrEmpty(wordLines)) {\n return 2 << 20;\n }\n const idx = binarySearch(wordLines, Range.fromPositions(anchor), Range.compareRangesUsingStarts);\n const bestWordRange = idx >= 0 ? wordLines[idx] : wordLines[Math.max(0, ~idx - 1)];\n let blockDistance = ranges.length;\n for (const range of ranges) {\n if (!Range.containsRange(range.range, bestWordRange)) {\n break;\n }\n blockDistance -= 1;\n }\n return blockDistance;\n }\n };\n }\n}\nWordDistance.None = new class extends WordDistance {\n distance() { return 0; }\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 './symbolIcons.css';\nimport { localize } from '../../../../nls.js';\nimport { foreground, registerColor } from '../../../../platform/theme/common/colorRegistry.js';\nexport const SYMBOL_ICON_ARRAY_FOREGROUND = registerColor('symbolIcon.arrayForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground,\n}, localize('symbolIcon.arrayForeground', 'The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_BOOLEAN_FOREGROUND = registerColor('symbolIcon.booleanForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground,\n}, localize('symbolIcon.booleanForeground', 'The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_CLASS_FOREGROUND = registerColor('symbolIcon.classForeground', {\n dark: '#EE9D28',\n light: '#D67E00',\n hcDark: '#EE9D28',\n hcLight: '#D67E00'\n}, localize('symbolIcon.classForeground', 'The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_COLOR_FOREGROUND = registerColor('symbolIcon.colorForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.colorForeground', 'The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_CONSTANT_FOREGROUND = registerColor('symbolIcon.constantForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.constantForeground', 'The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_CONSTRUCTOR_FOREGROUND = registerColor('symbolIcon.constructorForeground', {\n dark: '#B180D7',\n light: '#652D90',\n hcDark: '#B180D7',\n hcLight: '#652D90'\n}, localize('symbolIcon.constructorForeground', 'The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_ENUMERATOR_FOREGROUND = registerColor('symbolIcon.enumeratorForeground', {\n dark: '#EE9D28',\n light: '#D67E00',\n hcDark: '#EE9D28',\n hcLight: '#D67E00'\n}, localize('symbolIcon.enumeratorForeground', 'The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND = registerColor('symbolIcon.enumeratorMemberForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hcDark: '#75BEFF',\n hcLight: '#007ACC'\n}, localize('symbolIcon.enumeratorMemberForeground', 'The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_EVENT_FOREGROUND = registerColor('symbolIcon.eventForeground', {\n dark: '#EE9D28',\n light: '#D67E00',\n hcDark: '#EE9D28',\n hcLight: '#D67E00'\n}, localize('symbolIcon.eventForeground', 'The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FIELD_FOREGROUND = registerColor('symbolIcon.fieldForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hcDark: '#75BEFF',\n hcLight: '#007ACC'\n}, localize('symbolIcon.fieldForeground', 'The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FILE_FOREGROUND = registerColor('symbolIcon.fileForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.fileForeground', 'The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FOLDER_FOREGROUND = registerColor('symbolIcon.folderForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.folderForeground', 'The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FUNCTION_FOREGROUND = registerColor('symbolIcon.functionForeground', {\n dark: '#B180D7',\n light: '#652D90',\n hcDark: '#B180D7',\n hcLight: '#652D90'\n}, localize('symbolIcon.functionForeground', 'The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_INTERFACE_FOREGROUND = registerColor('symbolIcon.interfaceForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hcDark: '#75BEFF',\n hcLight: '#007ACC'\n}, localize('symbolIcon.interfaceForeground', 'The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_KEY_FOREGROUND = registerColor('symbolIcon.keyForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.keyForeground', 'The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_KEYWORD_FOREGROUND = registerColor('symbolIcon.keywordForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.keywordForeground', 'The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_METHOD_FOREGROUND = registerColor('symbolIcon.methodForeground', {\n dark: '#B180D7',\n light: '#652D90',\n hcDark: '#B180D7',\n hcLight: '#652D90'\n}, localize('symbolIcon.methodForeground', 'The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_MODULE_FOREGROUND = registerColor('symbolIcon.moduleForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.moduleForeground', 'The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_NAMESPACE_FOREGROUND = registerColor('symbolIcon.namespaceForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.namespaceForeground', 'The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_NULL_FOREGROUND = registerColor('symbolIcon.nullForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.nullForeground', 'The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_NUMBER_FOREGROUND = registerColor('symbolIcon.numberForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.numberForeground', 'The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_OBJECT_FOREGROUND = registerColor('symbolIcon.objectForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.objectForeground', 'The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_OPERATOR_FOREGROUND = registerColor('symbolIcon.operatorForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.operatorForeground', 'The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_PACKAGE_FOREGROUND = registerColor('symbolIcon.packageForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.packageForeground', 'The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_PROPERTY_FOREGROUND = registerColor('symbolIcon.propertyForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.propertyForeground', 'The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_REFERENCE_FOREGROUND = registerColor('symbolIcon.referenceForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.referenceForeground', 'The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_SNIPPET_FOREGROUND = registerColor('symbolIcon.snippetForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.snippetForeground', 'The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_STRING_FOREGROUND = registerColor('symbolIcon.stringForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.stringForeground', 'The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_STRUCT_FOREGROUND = registerColor('symbolIcon.structForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground,\n}, localize('symbolIcon.structForeground', 'The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_TEXT_FOREGROUND = registerColor('symbolIcon.textForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.textForeground', 'The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_TYPEPARAMETER_FOREGROUND = registerColor('symbolIcon.typeParameterForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.typeParameterForeground', 'The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_UNIT_FOREGROUND = registerColor('symbolIcon.unitForeground', {\n dark: foreground,\n light: foreground,\n hcDark: foreground,\n hcLight: foreground\n}, localize('symbolIcon.unitForeground', 'The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_VARIABLE_FOREGROUND = registerColor('symbolIcon.variableForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hcDark: '#75BEFF',\n hcLight: '#007ACC',\n}, localize('symbolIcon.variableForeground', 'The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\n"],"names":["LineContext","constructor","leadingLineContent","characterCountDelta","this","CompletionModel","items","column","lineContext","wordDistance","options","snippetSuggestions","fuzzyScoreOptions","clipboardText","undefined","_snippetCompareFn","_compareCompletionItems","_items","_column","_wordDistance","_options","_refilterKind","_lineContext","_fuzzyScoreOptions","_compareCompletionItemsSnippetsUp","_compareCompletionItemsSnippetsDown","value","_filteredItems","_ensureCachedState","getItemsByProvider","_itemsByProvider","getIncompleteProvider","result","Set","provider","length","container","incomplete","add","stats","_stats","_createCachedState","Map","labelLengths","word","wordLow","source","target","scoreFn","filterGraceful","i","item","isInvalid","arr","get","push","set","overwriteBefore","position","editStart","wordLen","slice","toLowerCase","score","wordPos","ch","charCodeAt","completion","filterText","match","filterTextLow","textLabel","labelLow","idx","distance","sort","pLabelLen","a","b","kind","Context","Visible","HasFocusedSuggestion","DetailsVisible","MultipleSuggestions","MakesTextEdit","AcceptSuggestionsOnEnter","HasInsertAndReplaceRange","InsertMode","type","description","CanResolve","suggestWidgetStatusbarMenu","CompletionItem","_a","label","sortTextLow","sortText","extensionId","range","startLineNumber","startColumn","editInsertEnd","endLineNumber","endColumn","editReplaceEnd","lineNumber","insert","replace","resolveCompletionItem","_resolveCache","Promise","resolve","_resolveDuration","isResolved","resolveDuration","token","sub","onCancellationRequested","sw","then","Object","assign","elapsed","err","finally","dispose","CompletionOptions","snippetSortOrder","kindFilter","providerFilter","providerItemsToReuse","showDeprecated","_snippetSuggestSupport","getSnippetSuggestSupport","default","CompletionItemModel","needsClipboard","durations","disposable","async","provideSuggestionItems","registry","model","context","triggerKind","clone","getWordAtPosition","defaultReplaceRange","defaultRange","setEndPosition","disposables","onCompletionList","_b","_c","didAddResult","suggestion","suggestions","has","tags","includes","insertTextRules","insertText","providerName","_debugDisplayName","elapsedProvider","duration","elapsedOverall","snippetCompletions","reuseItems","forEach","size","list","provideCompletionItems","providerGroup","orderedGroups","all","map","isCancellationRequested","reject","snippetConfig","_snippetComparators","entries","defaultComparator","showSimpleSuggestions","editor","getContribution","triggerSuggest","accessor","args","uri","triggerCharacter","maxItemsToResolve","completionProvider","ref","createModelReference","resolving","actualPosition","object","textEditorModel","validatePosition","completions","setTimeout","QuickSuggestionsOptions","isAllOff","config","other","comments","strings","isAllOn","valueFor","tokenType","WordContextKey_1","__decorate","decorators","key","desc","d","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","WordContextKey","_editor","contextKeyService","_enabled","_ckAtEnd","AtEnd","bindTo","_configListener","onDidChangeConfiguration","e","hasChanged","_update","_selectionListener","reset","enabled","getOption","checkForWordEnd","hasModel","getModel","selection","getSelection","getStartPosition","onDidChangeCursorSelection","SuggestAlternatives_1","SuggestAlternatives","_index","_ckOtherSuggestions","OtherSuggestions","_listener","_model","_acceptNext","_ignore","index","acceptNext","_moveIndex","onDidChangeCursorPosition","fwd","newIndex","rounds","additionalTextEdits","next","_move","prev","CommitCharacterController","widget","accept","_disposables","onDidSuggest","completionModel","onDidCancel","onDidShow","_onItem","getFocusedItem","onDidFocus","onDidHide","onWillType","text","_active","isFrozen","state","acceptCharacters","selected","commitCharacters","OvertypingCapturer","suggestModel","_lastOvertyped","_locked","selections","getSelections","selectionsLength","willOvertype","isEmpty","getValueLengthInRange","_maxSelectionLength","getValueInRange","multiline","onDidTrigger","getLastOvertypedInfo","StatusBarViewItem","updateLabel","kb","_keybindingService","lookupKeybinding","_action","id","_contextKeyService","super","textContent","comment","symbolPrintEnter","getLabel","SuggestWidgetStatus","_menuId","instantiationService","_menuService","_menuDisposables","element","dom","$","actionViewItemProvider","action","createInstance","_leftActions","_rightActions","domNode","classList","remove","show","menu","createMenu","renderMenu","left","right","group","actions","getActions","clear","onDidChange","hide","canExpandCompletionItem","Boolean","documentation","detail","SuggestDetailsWidget","instaService","_onDidClose","onDidClose","event","_onDidChangeContents","onDidChangeContents","_renderDisposeable","_borderWidth","_size","_markdownRenderer","_body","_scrollbar","alwaysConsumeMouseWheel","getDomNode","_header","_close","title","nls","_type","_docs","_configureFont","getOptions","fontInfo","fontFamily","getMassagedFontFamily","fontSize","lineHeight","fontWeight","fontSizePx","lineHeightPx","style","fontFeatureSettings","height","width","getLayoutInfo","borderWidth","borderHeight","verticalPadding","horizontalPadding","renderLoading","layout","fire","renderItem","explainMode","md","join","appendCodeblock","cappedDetail","substr","toggle","test","renderedContents","render","appendChild","onDidRenderAsync","clientHeight","userSelect","tabIndex","onmousedown","preventDefault","stopPropagation","onclick","scrollTop","clearContents","contains","newSize","scanDomNode","scrollDown","much","scrollUp","scrollBottom","scrollHeight","pageDown","pageUp","SuggestDetailsOverlay","topLeftNow","sizeNow","allowEditorOverflow","_added","_preferAlignAtTop","_resizable","enableSashes","deltaTop","deltaLeft","onDidWillResize","_topLeft","onDidResize","dimension","updateTopLeft","west","north","_applyTopLeft","top","done","_userSize","_anchorBox","_placeAtAnchor","getId","getPosition","preference","addOverlayWidget","sessionEnded","clearSashHoverState","removeOverlayWidget","placeAtAnchor","anchor","preferAlignAtTop","anchorBox","getBoundingClientRect","bodyBox","ownerDocument","body","info","defaultMinSize","defaultTop","eastPlacement","maxSizeTop","maxSizeBottom","with","fit","minSize","Math","min","westPlacement","max","southPacement","placements","placement","find","p","bottom","alignAtTop","maxHeight","maxSize","editorDomNode","editorBoundingBox","topLeft","layoutOverlayWidget","getAriaId","suggestMoreInfoIcon","_completionItemColor","extract","out","_regexStrict","_regexRelaxed","exec","RegExp","ItemRenderer","_modelService","_languageService","_themeService","_onDidToggleDetails","onDidToggleDetails","templateId","renderTemplate","root","icon","colorspan","main","iconContainer","iconLabel","supportHighlights","supportIcons","parametersLabel","qualifierLabel","detailsLabel","readMore","configureFont","letterSpacingPx","letterSpacing","renderElement","data","backgroundColor","labelOptions","labelEscapeNewLines","matches","color","className","getFileIconTheme","hasFileIcons","labelClasses","getIconClasses","scheme","path","detailClasses","extraClasses","hasFolderIcons","flat","indexOf","concat","setLabel","stripNewLines","showInlineDetails","disposeTemplate","templateData","str","SuggestWidget_1","dark","light","hcDark","hcLight","editorSuggestWidgetForeground","editorSuggestWidgetSelectedBackground","PersistedWidgetSize","_service","_key","getEditorType","restore","raw","obj","JSON","parse","store","stringify","SuggestWidget","_storageService","_state","_isAuto","_pendingLayout","_pendingShowDetails","_ignoreFocusEvents","_forceRenderingAbove","_explainMode","_showTimeout","_onDidSelect","_onDidFocus","_onDidHide","_onDidShow","onDidSelect","_onDetailsKeydown","onDetailsKeyDown","_contentWidget","SuggestContentWidget","_persistedSize","ResizeState","persistedSize","currentSize","persistHeight","persistWidth","lockPreference","_d","_resize","south","east","itemHeight","defaultSize","threshold","round","abs","unlockPreference","_messageElement","_listElement","details","toggleDetails","_details","applyIconStyle","showIcons","renderer","_list","getHeight","_element","getTemplateId","useShadows","mouseSupport","multipleSelectionSupport","accessibilityProvider","getRole","getWidgetAriaLabel","getWidgetRole","getAriaLabel","_isDetailsVisible","docs","listInactiveFocusBackground","listInactiveFocusOutline","_status","suggest","applyStatusBarStyle","showStatusBar","onDidColorThemeChange","t","_onThemeChange","getColorTheme","onMouseDown","_onListMouseDownOrTap","onTap","onDidChangeSelection","_onListSelection","onDidChangeFocus","_onListFocus","_onCursorSelectionChanged","_completionModel","splice","_ctxSuggestWidgetVisible","_ctxSuggestWidgetDetailsVisible","_ctxSuggestWidgetMultipleSuggestions","_ctxSuggestWidgetHasFocusedSuggestion","_onEditorMouseDown","_loadingTimeout","mouseEvent","focus","browserEvent","_select","elements","indexes","theme","_currentSuggestionDetails","cancel","_focusedItem","setAriaOptions","activeDescendant","reveal","loading","showDetails","setFocus","catch","_setState","_cappedHeight","LOADING_MESSAGE","_show","NO_SUGGESTIONS_MESSAGE","_layout","cancelAndSet","showTriggered","auto","delay","setPosition","showSuggestions","selectionIndex","isAuto","noFocus","visibleCount","pause","resume","focusSelected","selectNextPage","focusNextPage","selectNext","focusNext","selectLast","focusLast","selectPreviousPage","focusPreviousPage","selectPrevious","focusPrevious","selectFirst","focusFirst","getFocus","getFocusedElements","toggleDetailsFocus","_setDetailsVisible","_positionDetails","toggleExplainMode","resetPersistedSize","hideWidget","dim","minPersistedHeight","ceil","_afterRender","setPreference","maxWidth","preferredWidth","typicalHalfwidthCharacterWidth","fullHeight","statusBarHeight","contentHeight","minHeight","editorBox","cursorBox","getScrolledVisiblePosition","cursorBottom","maxHeightBelow","availableSpaceAbove","maxHeightAbove","capped","wanted","forceRenderingAboveRequiredSpace","preferredSize","getBoolean","forceRenderingAbove","stopForceRenderingAbove","_widget","suppressMouseDown","_preferenceLocked","_hidden","removeContentWidget","addContentWidget","layoutContentWidget","_position","_preference","beforeRender","afterRender","SuggestController_1","LineSuffix","_decorationOptions","stickiness","getLineMaxColumn","offset","getOffsetAt","end","getPositionAt","changeDecorations","_marker","removeDecoration","addDecoration","isDisposed","delta","getDecorationRange","SuggestController","ID","_memoryService","_commandService","_instantiationService","_logService","_telemetryService","_lineSuffix","_toDispose","_selectors","PriorityRegistry","s","priority","_onWillInsertSuggestItem","onWillInsertSuggestItem","register","select","pos","ctxInsertMode","insertMode","_insertSuggestion","commitCharacterController","ctxMakesTextEdit","ctxHasInsertAndReplace","ctxCanResolve","toKeyCodeChord","equals","platform","isModifierKey","_overtypingCapturer","_alternatives","shy","triggerOptions","selector","itemsOrderedByPriorityDesc","selectionMode","refilter","retrigger","onDidBlurEditorWidget","acceptSuggestionsOnEnter","updateFromConfig","acceptSuggestionOnEnter","flags","snippetController","modelVersionNow","getAlternativeVersionId","tasks","cts","pushUndoStop","getOverwriteInfo","memorize","_commandExectionDuration","_additionalEditsAppliedAsync","Array","isArray","scrollState","executeEdits","edit","columnDelta","startColumnDelta","endColumnDelta","restoreRelativeVerticalPositionOfCursor","docListener","onDidChangeContent","isFlush","change","changes","thisPosition","oldFlags","didType","typeListener","some","applied","trace","overwriteAfter","undoStopBefore","undoStopAfter","adjustWhitespace","overtypingCapturer","command","TriggerSuggestAction","trigger","executeCommand","canUndo","undo","_alertCompletionItem","_reportSuggestionAcceptedTelemetry","itemResolved","commandExectionDuration","additionalEditsAppliedAsync","floor","random","publicLog2","providerId","basenameHash","hash","toString","languageId","getLanguageId","fileExtension","resolveInfo","commandDuration","additionalEditsAsync","toggleMode","msg","onlyFrom","noFilter","completionOptions","revealPosition","triggerSuggestAndAcceptBest","arg","positionNow","fallback","makesTextEdit","_","listener","acceptSelectedSuggestion","keepAlternativeSuggestions","alternativeOverwriteConfig","acceptNextSuggestion","acceptPrevSuggestion","cancelSuggestWidget","focusSuggestion","selectNextSuggestion","selectNextPageSuggestion","selectLastSuggestion","selectPrevSuggestion","selectPrevPageSuggestion","selectFirstSuggestion","toggleSuggestionDetails","toggleSuggestionFocus","resetWidgetSize","isInitialized","registerSelector","prioritySelector","Error","s1","s2","alias","precondition","kbOpts","kbExpr","primary","secondary","mac","weight","run","_accessor","controller","SuggestCommand","handler","x","menuOpts","menuId","order","when","toNegated","SuggestInlineCompletion","InlineCompletionResults","line","_suggestMemoryService","canBeReused","selectedIndex","first","second","resolveCount","snippet","SuggestInlineCompletions","_languageFeatureService","_clipboardService","_editorService","_store","inlineCompletionsProvider","provideInlineCompletions","selectedSuggestionInfo","candidate","listCodeEditors","tokenization","tokenizeIfCheap","lineTokens","getLineTokens","getStandardTokenType","findTokenIndexAtOffset","triggerCharacterInfo","wordInfo","_getTriggerCharacterInfo","getWordUntilPosition","leadingLineContents","_lastResult","newLineContext","acquire","itemKind","providers","readText","boostFullMatch","firstMatchCanBeWeak","handleItemDidShow","_completions","freeInlineCompletions","release","triggerCharacters","SuggestMemoryService_1","Memory","name","topScore","preselect","NoMemory","toJSON","fromJSON","SuggestMemoryService","_configService","_persistSoon","_saveState","onWillSaveState","reason","_withStrategy","schedule","mode","getValue","overrideIdentifier","getLanguageIdAtPosition","resource","_strategy","ctor","_strategyCtors","scope","_storagePrefix","_trie","_seq","touch","findSubstr","_cache","lineSuffix","getLineContent","indexPreselect","indexRecency","seq","peek","ISuggestMemoryService","SuggestModel_1","shouldAutoTrigger","isNaN","Number","leadingWord","SuggestModel","_editorWorkerService","_configurationService","_languageFeaturesService","_envService","_triggerCharacterListener","_triggerQuickSuggest","_triggerState","_completionDisposables","_onDidCancel","_onDidTrigger","_onDidSuggest","_telemetryGate","_currentSelection","onDidChangeModel","_updateTriggerCharacters","onDidChangeModelLanguage","_updateActiveSuggestSession","editorIsComposing","onDidCompositionStart","onDidCompositionEnd","_onCompositionEnd","_onCursorChange","onDidChangeModelContent","_refilterCompletionItems","supportsByTriggerCharacter","support","checkTriggerCharacter","configurationService","getContextKeyValue","suppressSuggestions","canShowSuggestOnTriggerCharacters","lastChar","charAt","supports","onDidType","_requestToken","_context","prevSelection","containsRange","getEndPosition","isBeforeOrEqual","_doTriggerQuickSuggest","snippetsPreventQuickSuggestions","isInSnippet","hasWidgetFocus","canShowQuickSuggest","ctx","_onNewContext","_e","_f","suggestCtx","itemKindFilter","createSuggestFilter","fuzzySearchOptions","matchOnWordStartOnly","_reportDurationsTelemetry","isBuilt","isExtensionDevelopment","warn","debug","suggestOptions","showMethods","showFunctions","showConstructors","showFields","showVariables","showClasses","showStructs","showInterfaces","showModules","showProperties","showEvents","showOperators","showUnits","showValues","showConstants","showEnums","showEnumMembers","showKeywords","showWords","showColors","showFiles","showReferences","showFolders","showTypeParameters","showSnippets","showUsers","showIssues","oldLineContext","WordDistance","create","service","localityBonus","None","canComputeWordRanges","ranges","provideSelectionRanges","wordRanges","computeWordRanges","wordUntilPos","wordLines","bestWordRange","blockDistance"],"sourceRoot":""}