9b24da30b7f2760034acf50e769dc62702db8388c47485b888fd7c7286f144ba11b42adca2d88fabed932b6898f1a231cef2fb11c8c5f7469da8ca41c16e01 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  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 { Color } from '../../../base/common/color.js';
  15. import { Range } from '../../common/core/range.js';
  16. import * as languages from '../../common/languages.js';
  17. import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js';
  18. import { ModesRegistry } from '../../common/languages/modesRegistry.js';
  19. import { ILanguageService } from '../../common/languages/language.js';
  20. import * as standaloneEnums from '../../common/standalone/standaloneEnums.js';
  21. import { StandaloneServices } from './standaloneServices.js';
  22. import { compile } from '../common/monarch/monarchCompile.js';
  23. import { MonarchTokenizer } from '../common/monarch/monarchLexer.js';
  24. import { IStandaloneThemeService } from '../common/standaloneTheme.js';
  25. import { IMarkerService } from '../../../platform/markers/common/markers.js';
  26. import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js';
  27. import { IConfigurationService } from '../../../platform/configuration/common/configuration.js';
  28. /**
  29. * Register information about a new language.
  30. */
  31. export function register(language) {
  32. // Intentionally using the `ModesRegistry` here to avoid
  33. // instantiating services too quickly in the standalone editor.
  34. ModesRegistry.registerLanguage(language);
  35. }
  36. /**
  37. * Get the information of all the registered languages.
  38. */
  39. export function getLanguages() {
  40. let result = [];
  41. result = result.concat(ModesRegistry.getLanguages());
  42. return result;
  43. }
  44. export function getEncodedLanguageId(languageId) {
  45. const languageService = StandaloneServices.get(ILanguageService);
  46. return languageService.languageIdCodec.encodeLanguageId(languageId);
  47. }
  48. /**
  49. * An event emitted when a language is needed for the first time (e.g. a model has it set).
  50. * @event
  51. */
  52. export function onLanguage(languageId, callback) {
  53. const languageService = StandaloneServices.get(ILanguageService);
  54. const disposable = languageService.onDidEncounterLanguage((encounteredLanguageId) => {
  55. if (encounteredLanguageId === languageId) {
  56. // stop listening
  57. disposable.dispose();
  58. // invoke actual listener
  59. callback();
  60. }
  61. });
  62. return disposable;
  63. }
  64. /**
  65. * Set the editing configuration for a language.
  66. */
  67. export function setLanguageConfiguration(languageId, configuration) {
  68. const languageService = StandaloneServices.get(ILanguageService);
  69. if (!languageService.isRegisteredLanguageId(languageId)) {
  70. throw new Error(`Cannot set configuration for unknown language ${languageId}`);
  71. }
  72. const languageConfigurationService = StandaloneServices.get(ILanguageConfigurationService);
  73. return languageConfigurationService.register(languageId, configuration, 100);
  74. }
  75. /**
  76. * @internal
  77. */
  78. export class EncodedTokenizationSupportAdapter {
  79. constructor(languageId, actual) {
  80. this._languageId = languageId;
  81. this._actual = actual;
  82. }
  83. getInitialState() {
  84. return this._actual.getInitialState();
  85. }
  86. tokenize(line, hasEOL, state) {
  87. if (typeof this._actual.tokenize === 'function') {
  88. return TokenizationSupportAdapter.adaptTokenize(this._languageId, this._actual, line, state);
  89. }
  90. throw new Error('Not supported!');
  91. }
  92. tokenizeEncoded(line, hasEOL, state) {
  93. const result = this._actual.tokenizeEncoded(line, state);
  94. return new languages.EncodedTokenizationResult(result.tokens, result.endState);
  95. }
  96. }
  97. /**
  98. * @internal
  99. */
  100. export class TokenizationSupportAdapter {
  101. constructor(_languageId, _actual, _languageService, _standaloneThemeService) {
  102. this._languageId = _languageId;
  103. this._actual = _actual;
  104. this._languageService = _languageService;
  105. this._standaloneThemeService = _standaloneThemeService;
  106. }
  107. getInitialState() {
  108. return this._actual.getInitialState();
  109. }
  110. static _toClassicTokens(tokens, language) {
  111. const result = [];
  112. let previousStartIndex = 0;
  113. for (let i = 0, len = tokens.length; i < len; i++) {
  114. const t = tokens[i];
  115. let startIndex = t.startIndex;
  116. // Prevent issues stemming from a buggy external tokenizer.
  117. if (i === 0) {
  118. // Force first token to start at first index!
  119. startIndex = 0;
  120. }
  121. else if (startIndex < previousStartIndex) {
  122. // Force tokens to be after one another!
  123. startIndex = previousStartIndex;
  124. }
  125. result[i] = new languages.Token(startIndex, t.scopes, language);
  126. previousStartIndex = startIndex;
  127. }
  128. return result;
  129. }
  130. static adaptTokenize(language, actual, line, state) {
  131. const actualResult = actual.tokenize(line, state);
  132. const tokens = TokenizationSupportAdapter._toClassicTokens(actualResult.tokens, language);
  133. let endState;
  134. // try to save an object if possible
  135. if (actualResult.endState.equals(state)) {
  136. endState = state;
  137. }
  138. else {
  139. endState = actualResult.endState;
  140. }
  141. return new languages.TokenizationResult(tokens, endState);
  142. }
  143. tokenize(line, hasEOL, state) {
  144. return TokenizationSupportAdapter.adaptTokenize(this._languageId, this._actual, line, state);
  145. }
  146. _toBinaryTokens(languageIdCodec, tokens) {
  147. const languageId = languageIdCodec.encodeLanguageId(this._languageId);
  148. const tokenTheme = this._standaloneThemeService.getColorTheme().tokenTheme;
  149. const result = [];
  150. let resultLen = 0;
  151. let previousStartIndex = 0;
  152. for (let i = 0, len = tokens.length; i < len; i++) {
  153. const t = tokens[i];
  154. const metadata = tokenTheme.match(languageId, t.scopes);
  155. if (resultLen > 0 && result[resultLen - 1] === metadata) {
  156. // same metadata
  157. continue;
  158. }
  159. let startIndex = t.startIndex;
  160. // Prevent issues stemming from a buggy external tokenizer.
  161. if (i === 0) {
  162. // Force first token to start at first index!
  163. startIndex = 0;
  164. }
  165. else if (startIndex < previousStartIndex) {
  166. // Force tokens to be after one another!
  167. startIndex = previousStartIndex;
  168. }
  169. result[resultLen++] = startIndex;
  170. result[resultLen++] = metadata;
  171. previousStartIndex = startIndex;
  172. }
  173. const actualResult = new Uint32Array(resultLen);
  174. for (let i = 0; i < resultLen; i++) {
  175. actualResult[i] = result[i];
  176. }
  177. return actualResult;
  178. }
  179. tokenizeEncoded(line, hasEOL, state) {
  180. const actualResult = this._actual.tokenize(line, state);
  181. const tokens = this._toBinaryTokens(this._languageService.languageIdCodec, actualResult.tokens);
  182. let endState;
  183. // try to save an object if possible
  184. if (actualResult.endState.equals(state)) {
  185. endState = state;
  186. }
  187. else {
  188. endState = actualResult.endState;
  189. }
  190. return new languages.EncodedTokenizationResult(tokens, endState);
  191. }
  192. }
  193. function isATokensProvider(provider) {
  194. return (typeof provider.getInitialState === 'function');
  195. }
  196. function isEncodedTokensProvider(provider) {
  197. return 'tokenizeEncoded' in provider;
  198. }
  199. function isThenable(obj) {
  200. return obj && typeof obj.then === 'function';
  201. }
  202. /**
  203. * Change the color map that is used for token colors.
  204. * Supported formats (hex): #RRGGBB, $RRGGBBAA, #RGB, #RGBA
  205. */
  206. export function setColorMap(colorMap) {
  207. const standaloneThemeService = StandaloneServices.get(IStandaloneThemeService);
  208. if (colorMap) {
  209. const result = [null];
  210. for (let i = 1, len = colorMap.length; i < len; i++) {
  211. result[i] = Color.fromHex(colorMap[i]);
  212. }
  213. standaloneThemeService.setColorMapOverride(result);
  214. }
  215. else {
  216. standaloneThemeService.setColorMapOverride(null);
  217. }
  218. }
  219. /**
  220. * @internal
  221. */
  222. function createTokenizationSupportAdapter(languageId, provider) {
  223. if (isEncodedTokensProvider(provider)) {
  224. return new EncodedTokenizationSupportAdapter(languageId, provider);
  225. }
  226. else {
  227. return new TokenizationSupportAdapter(languageId, provider, StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService));
  228. }
  229. }
  230. /**
  231. * Register a tokens provider factory for a language. This tokenizer will be exclusive with a tokenizer
  232. * set using `setTokensProvider` or one created using `setMonarchTokensProvider`, but will work together
  233. * with a tokens provider set using `registerDocumentSemanticTokensProvider` or `registerDocumentRangeSemanticTokensProvider`.
  234. */
  235. export function registerTokensProviderFactory(languageId, factory) {
  236. const adaptedFactory = {
  237. createTokenizationSupport: () => __awaiter(this, void 0, void 0, function* () {
  238. const result = yield Promise.resolve(factory.create());
  239. if (!result) {
  240. return null;
  241. }
  242. if (isATokensProvider(result)) {
  243. return createTokenizationSupportAdapter(languageId, result);
  244. }
  245. return new MonarchTokenizer(StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService), languageId, compile(languageId, result), StandaloneServices.get(IConfigurationService));
  246. })
  247. };
  248. return languages.TokenizationRegistry.registerFactory(languageId, adaptedFactory);
  249. }
  250. /**
  251. * Set the tokens provider for a language (manual implementation). This tokenizer will be exclusive
  252. * with a tokenizer created using `setMonarchTokensProvider`, or with `registerTokensProviderFactory`,
  253. * but will work together with a tokens provider set using `registerDocumentSemanticTokensProvider`
  254. * or `registerDocumentRangeSemanticTokensProvider`.
  255. */
  256. export function setTokensProvider(languageId, provider) {
  257. const languageService = StandaloneServices.get(ILanguageService);
  258. if (!languageService.isRegisteredLanguageId(languageId)) {
  259. throw new Error(`Cannot set tokens provider for unknown language ${languageId}`);
  260. }
  261. if (isThenable(provider)) {
  262. return registerTokensProviderFactory(languageId, { create: () => provider });
  263. }
  264. return languages.TokenizationRegistry.register(languageId, createTokenizationSupportAdapter(languageId, provider));
  265. }
  266. /**
  267. * Set the tokens provider for a language (monarch implementation). This tokenizer will be exclusive
  268. * with a tokenizer set using `setTokensProvider`, or with `registerTokensProviderFactory`, but will
  269. * work together with a tokens provider set using `registerDocumentSemanticTokensProvider` or
  270. * `registerDocumentRangeSemanticTokensProvider`.
  271. */
  272. export function setMonarchTokensProvider(languageId, languageDef) {
  273. const create = (languageDef) => {
  274. return new MonarchTokenizer(StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService), languageId, compile(languageId, languageDef), StandaloneServices.get(IConfigurationService));
  275. };
  276. if (isThenable(languageDef)) {
  277. return registerTokensProviderFactory(languageId, { create: () => languageDef });
  278. }
  279. return languages.TokenizationRegistry.register(languageId, create(languageDef));
  280. }
  281. /**
  282. * Register a reference provider (used by e.g. reference search).
  283. */
  284. export function registerReferenceProvider(languageSelector, provider) {
  285. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  286. return languageFeaturesService.referenceProvider.register(languageSelector, provider);
  287. }
  288. /**
  289. * Register a rename provider (used by e.g. rename symbol).
  290. */
  291. export function registerRenameProvider(languageSelector, provider) {
  292. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  293. return languageFeaturesService.renameProvider.register(languageSelector, provider);
  294. }
  295. /**
  296. * Register a signature help provider (used by e.g. parameter hints).
  297. */
  298. export function registerSignatureHelpProvider(languageSelector, provider) {
  299. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  300. return languageFeaturesService.signatureHelpProvider.register(languageSelector, provider);
  301. }
  302. /**
  303. * Register a hover provider (used by e.g. editor hover).
  304. */
  305. export function registerHoverProvider(languageSelector, provider) {
  306. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  307. return languageFeaturesService.hoverProvider.register(languageSelector, {
  308. provideHover: (model, position, token) => {
  309. const word = model.getWordAtPosition(position);
  310. return Promise.resolve(provider.provideHover(model, position, token)).then((value) => {
  311. if (!value) {
  312. return undefined;
  313. }
  314. if (!value.range && word) {
  315. value.range = new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);
  316. }
  317. if (!value.range) {
  318. value.range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);
  319. }
  320. return value;
  321. });
  322. }
  323. });
  324. }
  325. /**
  326. * Register a document symbol provider (used by e.g. outline).
  327. */
  328. export function registerDocumentSymbolProvider(languageSelector, provider) {
  329. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  330. return languageFeaturesService.documentSymbolProvider.register(languageSelector, provider);
  331. }
  332. /**
  333. * Register a document highlight provider (used by e.g. highlight occurrences).
  334. */
  335. export function registerDocumentHighlightProvider(languageSelector, provider) {
  336. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  337. return languageFeaturesService.documentHighlightProvider.register(languageSelector, provider);
  338. }
  339. /**
  340. * Register an linked editing range provider.
  341. */
  342. export function registerLinkedEditingRangeProvider(languageSelector, provider) {
  343. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  344. return languageFeaturesService.linkedEditingRangeProvider.register(languageSelector, provider);
  345. }
  346. /**
  347. * Register a definition provider (used by e.g. go to definition).
  348. */
  349. export function registerDefinitionProvider(languageSelector, provider) {
  350. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  351. return languageFeaturesService.definitionProvider.register(languageSelector, provider);
  352. }
  353. /**
  354. * Register a implementation provider (used by e.g. go to implementation).
  355. */
  356. export function registerImplementationProvider(languageSelector, provider) {
  357. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  358. return languageFeaturesService.implementationProvider.register(languageSelector, provider);
  359. }
  360. /**
  361. * Register a type definition provider (used by e.g. go to type definition).
  362. */
  363. export function registerTypeDefinitionProvider(languageSelector, provider) {
  364. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  365. return languageFeaturesService.typeDefinitionProvider.register(languageSelector, provider);
  366. }
  367. /**
  368. * Register a code lens provider (used by e.g. inline code lenses).
  369. */
  370. export function registerCodeLensProvider(languageSelector, provider) {
  371. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  372. return languageFeaturesService.codeLensProvider.register(languageSelector, provider);
  373. }
  374. /**
  375. * Register a code action provider (used by e.g. quick fix).
  376. */
  377. export function registerCodeActionProvider(languageSelector, provider, metadata) {
  378. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  379. return languageFeaturesService.codeActionProvider.register(languageSelector, {
  380. providedCodeActionKinds: metadata === null || metadata === void 0 ? void 0 : metadata.providedCodeActionKinds,
  381. documentation: metadata === null || metadata === void 0 ? void 0 : metadata.documentation,
  382. provideCodeActions: (model, range, context, token) => {
  383. const markerService = StandaloneServices.get(IMarkerService);
  384. const markers = markerService.read({ resource: model.uri }).filter(m => {
  385. return Range.areIntersectingOrTouching(m, range);
  386. });
  387. return provider.provideCodeActions(model, range, { markers, only: context.only, trigger: context.trigger }, token);
  388. },
  389. resolveCodeAction: provider.resolveCodeAction
  390. });
  391. }
  392. /**
  393. * Register a formatter that can handle only entire models.
  394. */
  395. export function registerDocumentFormattingEditProvider(languageSelector, provider) {
  396. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  397. return languageFeaturesService.documentFormattingEditProvider.register(languageSelector, provider);
  398. }
  399. /**
  400. * Register a formatter that can handle a range inside a model.
  401. */
  402. export function registerDocumentRangeFormattingEditProvider(languageSelector, provider) {
  403. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  404. return languageFeaturesService.documentRangeFormattingEditProvider.register(languageSelector, provider);
  405. }
  406. /**
  407. * Register a formatter than can do formatting as the user types.
  408. */
  409. export function registerOnTypeFormattingEditProvider(languageSelector, provider) {
  410. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  411. return languageFeaturesService.onTypeFormattingEditProvider.register(languageSelector, provider);
  412. }
  413. /**
  414. * Register a link provider that can find links in text.
  415. */
  416. export function registerLinkProvider(languageSelector, provider) {
  417. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  418. return languageFeaturesService.linkProvider.register(languageSelector, provider);
  419. }
  420. /**
  421. * Register a completion item provider (use by e.g. suggestions).
  422. */
  423. export function registerCompletionItemProvider(languageSelector, provider) {
  424. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  425. return languageFeaturesService.completionProvider.register(languageSelector, provider);
  426. }
  427. /**
  428. * Register a document color provider (used by Color Picker, Color Decorator).
  429. */
  430. export function registerColorProvider(languageSelector, provider) {
  431. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  432. return languageFeaturesService.colorProvider.register(languageSelector, provider);
  433. }
  434. /**
  435. * Register a folding range provider
  436. */
  437. export function registerFoldingRangeProvider(languageSelector, provider) {
  438. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  439. return languageFeaturesService.foldingRangeProvider.register(languageSelector, provider);
  440. }
  441. /**
  442. * Register a declaration provider
  443. */
  444. export function registerDeclarationProvider(languageSelector, provider) {
  445. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  446. return languageFeaturesService.declarationProvider.register(languageSelector, provider);
  447. }
  448. /**
  449. * Register a selection range provider
  450. */
  451. export function registerSelectionRangeProvider(languageSelector, provider) {
  452. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  453. return languageFeaturesService.selectionRangeProvider.register(languageSelector, provider);
  454. }
  455. /**
  456. * Register a document semantic tokens provider. A semantic tokens provider will complement and enhance a
  457. * simple top-down tokenizer. Simple top-down tokenizers can be set either via `setMonarchTokensProvider`
  458. * or `setTokensProvider`.
  459. *
  460. * For the best user experience, register both a semantic tokens provider and a top-down tokenizer.
  461. */
  462. export function registerDocumentSemanticTokensProvider(languageSelector, provider) {
  463. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  464. return languageFeaturesService.documentSemanticTokensProvider.register(languageSelector, provider);
  465. }
  466. /**
  467. * Register a document range semantic tokens provider. A semantic tokens provider will complement and enhance a
  468. * simple top-down tokenizer. Simple top-down tokenizers can be set either via `setMonarchTokensProvider`
  469. * or `setTokensProvider`.
  470. *
  471. * For the best user experience, register both a semantic tokens provider and a top-down tokenizer.
  472. */
  473. export function registerDocumentRangeSemanticTokensProvider(languageSelector, provider) {
  474. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  475. return languageFeaturesService.documentRangeSemanticTokensProvider.register(languageSelector, provider);
  476. }
  477. /**
  478. * Register an inline completions provider.
  479. */
  480. export function registerInlineCompletionsProvider(languageSelector, provider) {
  481. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  482. return languageFeaturesService.inlineCompletionsProvider.register(languageSelector, provider);
  483. }
  484. /**
  485. * Register an inlay hints provider.
  486. */
  487. export function registerInlayHintsProvider(languageSelector, provider) {
  488. const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);
  489. return languageFeaturesService.inlayHintsProvider.register(languageSelector, provider);
  490. }
  491. /**
  492. * @internal
  493. */
  494. export function createMonacoLanguagesAPI() {
  495. return {
  496. register: register,
  497. getLanguages: getLanguages,
  498. onLanguage: onLanguage,
  499. getEncodedLanguageId: getEncodedLanguageId,
  500. // provider methods
  501. setLanguageConfiguration: setLanguageConfiguration,
  502. setColorMap: setColorMap,
  503. registerTokensProviderFactory: registerTokensProviderFactory,
  504. setTokensProvider: setTokensProvider,
  505. setMonarchTokensProvider: setMonarchTokensProvider,
  506. registerReferenceProvider: registerReferenceProvider,
  507. registerRenameProvider: registerRenameProvider,
  508. registerCompletionItemProvider: registerCompletionItemProvider,
  509. registerSignatureHelpProvider: registerSignatureHelpProvider,
  510. registerHoverProvider: registerHoverProvider,
  511. registerDocumentSymbolProvider: registerDocumentSymbolProvider,
  512. registerDocumentHighlightProvider: registerDocumentHighlightProvider,
  513. registerLinkedEditingRangeProvider: registerLinkedEditingRangeProvider,
  514. registerDefinitionProvider: registerDefinitionProvider,
  515. registerImplementationProvider: registerImplementationProvider,
  516. registerTypeDefinitionProvider: registerTypeDefinitionProvider,
  517. registerCodeLensProvider: registerCodeLensProvider,
  518. registerCodeActionProvider: registerCodeActionProvider,
  519. registerDocumentFormattingEditProvider: registerDocumentFormattingEditProvider,
  520. registerDocumentRangeFormattingEditProvider: registerDocumentRangeFormattingEditProvider,
  521. registerOnTypeFormattingEditProvider: registerOnTypeFormattingEditProvider,
  522. registerLinkProvider: registerLinkProvider,
  523. registerColorProvider: registerColorProvider,
  524. registerFoldingRangeProvider: registerFoldingRangeProvider,
  525. registerDeclarationProvider: registerDeclarationProvider,
  526. registerSelectionRangeProvider: registerSelectionRangeProvider,
  527. registerDocumentSemanticTokensProvider: registerDocumentSemanticTokensProvider,
  528. registerDocumentRangeSemanticTokensProvider: registerDocumentRangeSemanticTokensProvider,
  529. registerInlineCompletionsProvider: registerInlineCompletionsProvider,
  530. registerInlayHintsProvider: registerInlayHintsProvider,
  531. // enums
  532. DocumentHighlightKind: standaloneEnums.DocumentHighlightKind,
  533. CompletionItemKind: standaloneEnums.CompletionItemKind,
  534. CompletionItemTag: standaloneEnums.CompletionItemTag,
  535. CompletionItemInsertTextRule: standaloneEnums.CompletionItemInsertTextRule,
  536. SymbolKind: standaloneEnums.SymbolKind,
  537. SymbolTag: standaloneEnums.SymbolTag,
  538. IndentAction: standaloneEnums.IndentAction,
  539. CompletionTriggerKind: standaloneEnums.CompletionTriggerKind,
  540. SignatureHelpTriggerKind: standaloneEnums.SignatureHelpTriggerKind,
  541. InlayHintKind: standaloneEnums.InlayHintKind,
  542. InlineCompletionTriggerKind: standaloneEnums.InlineCompletionTriggerKind,
  543. CodeActionTriggerType: standaloneEnums.CodeActionTriggerType,
  544. // classes
  545. FoldingRangeKind: languages.FoldingRangeKind,
  546. };
  547. }