provideSignatureHelp.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  6. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  7. return new (P || (P = Promise))(function (resolve, reject) {
  8. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  9. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  10. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  11. step((generator = generator.apply(thisArg, _arguments || [])).next());
  12. });
  13. };
  14. import { CancellationToken } from '../../../base/common/cancellation.js';
  15. import { onUnexpectedExternalError } from '../../../base/common/errors.js';
  16. import { assertType } from '../../../base/common/types.js';
  17. import { URI } from '../../../base/common/uri.js';
  18. import { Position } from '../../common/core/position.js';
  19. import * as modes from '../../common/modes.js';
  20. import { ITextModelService } from '../../common/services/resolverService.js';
  21. import { CommandsRegistry } from '../../../platform/commands/common/commands.js';
  22. import { RawContextKey } from '../../../platform/contextkey/common/contextkey.js';
  23. export const Context = {
  24. Visible: new RawContextKey('parameterHintsVisible', false),
  25. MultipleSignatures: new RawContextKey('parameterHintsMultipleSignatures', false),
  26. };
  27. export function provideSignatureHelp(model, position, context, token) {
  28. return __awaiter(this, void 0, void 0, function* () {
  29. const supports = modes.SignatureHelpProviderRegistry.ordered(model);
  30. for (const support of supports) {
  31. try {
  32. const result = yield support.provideSignatureHelp(model, position, token, context);
  33. if (result) {
  34. return result;
  35. }
  36. }
  37. catch (err) {
  38. onUnexpectedExternalError(err);
  39. }
  40. }
  41. return undefined;
  42. });
  43. }
  44. CommandsRegistry.registerCommand('_executeSignatureHelpProvider', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {
  45. const [uri, position, triggerCharacter] = args;
  46. assertType(URI.isUri(uri));
  47. assertType(Position.isIPosition(position));
  48. assertType(typeof triggerCharacter === 'string' || !triggerCharacter);
  49. const ref = yield accessor.get(ITextModelService).createModelReference(uri);
  50. try {
  51. const result = yield provideSignatureHelp(ref.object.textEditorModel, Position.lift(position), {
  52. triggerKind: modes.SignatureHelpTriggerKind.Invoke,
  53. isRetrigger: false,
  54. triggerCharacter,
  55. }, CancellationToken.None);
  56. if (!result) {
  57. return undefined;
  58. }
  59. setTimeout(() => result.dispose(), 0);
  60. return result.value;
  61. }
  62. finally {
  63. ref.dispose();
  64. }
  65. }));