Path: blob/main/src/vs/editor/contrib/parameterHints/browser/provideSignatureHelp.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { CancellationToken } from '../../../../base/common/cancellation.js';6import { onUnexpectedExternalError } from '../../../../base/common/errors.js';7import { assertType } from '../../../../base/common/types.js';8import { URI } from '../../../../base/common/uri.js';9import { IPosition, Position } from '../../../common/core/position.js';10import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry.js';11import * as languages from '../../../common/languages.js';12import { ITextModel } from '../../../common/model.js';13import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';14import { ITextModelService } from '../../../common/services/resolverService.js';15import { CommandsRegistry } from '../../../../platform/commands/common/commands.js';16import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';1718export const Context = {19Visible: new RawContextKey<boolean>('parameterHintsVisible', false),20MultipleSignatures: new RawContextKey<boolean>('parameterHintsMultipleSignatures', false),21};2223export async function provideSignatureHelp(24registry: LanguageFeatureRegistry<languages.SignatureHelpProvider>,25model: ITextModel,26position: Position,27context: languages.SignatureHelpContext,28token: CancellationToken29): Promise<languages.SignatureHelpResult | undefined> {3031const supports = registry.ordered(model);3233for (const support of supports) {34try {35const result = await support.provideSignatureHelp(model, position, token, context);36if (result) {37return result;38}39} catch (err) {40onUnexpectedExternalError(err);41}42}43return undefined;44}4546CommandsRegistry.registerCommand('_executeSignatureHelpProvider', async (accessor, ...args: [URI, IPosition, string?]) => {47const [uri, position, triggerCharacter] = args;48assertType(URI.isUri(uri));49assertType(Position.isIPosition(position));50assertType(typeof triggerCharacter === 'string' || !triggerCharacter);5152const languageFeaturesService = accessor.get(ILanguageFeaturesService);5354const ref = await accessor.get(ITextModelService).createModelReference(uri);55try {5657const result = await provideSignatureHelp(languageFeaturesService.signatureHelpProvider, ref.object.textEditorModel, Position.lift(position), {58triggerKind: languages.SignatureHelpTriggerKind.Invoke,59isRetrigger: false,60triggerCharacter,61}, CancellationToken.None);6263if (!result) {64return undefined;65}6667setTimeout(() => result.dispose(), 0);68return result.value;6970} finally {71ref.dispose();72}73});747576