a9fcf0d81da60b13c47f372302138d67842ca8b96786d46bcc30f346df3d23a736cf1abd07f8780f8574711becaa3992df550f7b80fcbf027a0107b3c0c4ba 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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 languages from '../../../common/languages.js';
  20. import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';
  21. import { ITextModelService } from '../../../common/services/resolverService.js';
  22. import { CommandsRegistry } from '../../../../platform/commands/common/commands.js';
  23. import { RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';
  24. export const Context = {
  25. Visible: new RawContextKey('parameterHintsVisible', false),
  26. MultipleSignatures: new RawContextKey('parameterHintsMultipleSignatures', false),
  27. };
  28. export function provideSignatureHelp(registry, model, position, context, token) {
  29. return __awaiter(this, void 0, void 0, function* () {
  30. const supports = registry.ordered(model);
  31. for (const support of supports) {
  32. try {
  33. const result = yield support.provideSignatureHelp(model, position, token, context);
  34. if (result) {
  35. return result;
  36. }
  37. }
  38. catch (err) {
  39. onUnexpectedExternalError(err);
  40. }
  41. }
  42. return undefined;
  43. });
  44. }
  45. CommandsRegistry.registerCommand('_executeSignatureHelpProvider', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {
  46. const [uri, position, triggerCharacter] = args;
  47. assertType(URI.isUri(uri));
  48. assertType(Position.isIPosition(position));
  49. assertType(typeof triggerCharacter === 'string' || !triggerCharacter);
  50. const languageFeaturesService = accessor.get(ILanguageFeaturesService);
  51. const ref = yield accessor.get(ITextModelService).createModelReference(uri);
  52. try {
  53. const result = yield provideSignatureHelp(languageFeaturesService.signatureHelpProvider, ref.object.textEditorModel, Position.lift(position), {
  54. triggerKind: languages.SignatureHelpTriggerKind.Invoke,
  55. isRetrigger: false,
  56. triggerCharacter,
  57. }, CancellationToken.None);
  58. if (!result) {
  59. return undefined;
  60. }
  61. setTimeout(() => result.dispose(), 0);
  62. return result.value;
  63. }
  64. finally {
  65. ref.dispose();
  66. }
  67. }));