@mirascript/monaco 0.1.43 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/basic/index.js +2 -2
  2. package/dist/basic/tokens-provider.d.ts.map +1 -1
  3. package/dist/{chunk-QENEDDTR.js → chunk-LZVIYOSD.js} +8 -3
  4. package/dist/chunk-LZVIYOSD.js.map +6 -0
  5. package/dist/{chunk-B45DYEY5.js → chunk-NAOKM25O.js} +2 -2
  6. package/dist/chunk-NAOKM25O.js.map +6 -0
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -2
  10. package/dist/index.js.map +1 -1
  11. package/dist/lsp/compile-result.d.ts +3 -6
  12. package/dist/lsp/compile-result.d.ts.map +1 -1
  13. package/dist/lsp/diagnostics.d.ts.map +1 -1
  14. package/dist/lsp/index.d.ts +22 -1
  15. package/dist/lsp/index.d.ts.map +1 -1
  16. package/dist/lsp/index.js +149 -85
  17. package/dist/lsp/index.js.map +1 -1
  18. package/dist/lsp/providers/base.d.ts +4 -0
  19. package/dist/lsp/providers/base.d.ts.map +1 -1
  20. package/dist/lsp/providers/completion-item-provider.d.ts.map +1 -1
  21. package/dist/lsp/providers/definition-reference-provider.d.ts +3 -2
  22. package/dist/lsp/providers/definition-reference-provider.d.ts.map +1 -1
  23. package/dist/lsp/providers/hover-provider.d.ts.map +1 -1
  24. package/dist/lsp/providers/semantic-tokens-provider.d.ts.map +1 -1
  25. package/dist/lsp/utils.d.ts.map +1 -1
  26. package/dist/lsp/worker-helper.d.ts.map +1 -1
  27. package/package.json +6 -6
  28. package/src/basic/tokens-provider.ts +6 -1
  29. package/src/index.ts +3 -1
  30. package/src/lsp/compile-result.ts +8 -5
  31. package/src/lsp/diagnostics.ts +10 -18
  32. package/src/lsp/index.ts +71 -36
  33. package/src/lsp/providers/base.ts +6 -0
  34. package/src/lsp/providers/code-lens-provider.ts +1 -1
  35. package/src/lsp/providers/completion-item-provider.ts +44 -11
  36. package/src/lsp/providers/definition-reference-provider.ts +9 -10
  37. package/src/lsp/providers/hover-provider.ts +5 -0
  38. package/src/lsp/providers/semantic-tokens-provider.ts +7 -0
  39. package/src/lsp/utils.ts +17 -10
  40. package/src/lsp/worker-helper.ts +1 -0
  41. package/src/monaco-api.js +1 -1
  42. package/dist/chunk-B45DYEY5.js.map +0 -6
  43. package/dist/chunk-QENEDDTR.js.map +0 -6
package/dist/lsp/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  REG_ORDINAL_FULL,
9
9
  RESERVED_KEYWORDS,
10
10
  isKeyword
11
- } from "../chunk-QENEDDTR.js";
11
+ } from "../chunk-LZVIYOSD.js";
12
12
  import {
13
13
  Emitter,
14
14
  MarkerSeverity,
@@ -18,7 +18,7 @@ import {
18
18
  Uri,
19
19
  editor,
20
20
  languages
21
- } from "../chunk-B45DYEY5.js";
21
+ } from "../chunk-NAOKM25O.js";
22
22
 
23
23
  // src/lsp/providers/base.ts
24
24
  import { DefaultVmContext } from "@mirascript/mirascript/subtle";
@@ -49,11 +49,12 @@ import {
49
49
  parseDiagnostics,
50
50
  DiagnosticCode
51
51
  } from "@mirascript/mirascript/subtle";
52
- var LocalFunctionType = [DiagnosticCode.LocalFunction];
53
52
  var LocalVariableType = [
54
53
  DiagnosticCode.LocalMutable,
55
54
  DiagnosticCode.LocalImmutable,
56
- DiagnosticCode.LocalConst
55
+ DiagnosticCode.LocalConst,
56
+ DiagnosticCode.LocalFunction,
57
+ DiagnosticCode.LocalModule
57
58
  ];
58
59
  var ParameterExplicitType = [
59
60
  DiagnosticCode.ParameterMutable,
@@ -77,7 +78,7 @@ var ParameterPlaceholderType = [
77
78
  ...ParameterPatternType,
78
79
  ...ParameterItType
79
80
  ];
80
- var LocalDefinitionType = [...LocalVariableType, ...LocalFunctionType, ...ParameterDefinitionType];
81
+ var LocalDefinitionType = [...LocalVariableType, ...ParameterDefinitionType];
81
82
  var CompileResult = class {
82
83
  constructor(cacheKey, version, source, result) {
83
84
  this.cacheKey = cacheKey;
@@ -407,7 +408,7 @@ var CompileResult = class {
407
408
  };
408
409
 
409
410
  // src/lsp/diagnostics.ts
410
- import { DiagnosticCode as DiagnosticCode3, getDiagnosticMessage } from "@mirascript/mirascript/subtle";
411
+ import { DiagnosticCode as DiagnosticCode3, getDiagnosticMessage, formatDiagnosticMessage } from "@mirascript/mirascript/subtle";
411
412
 
412
413
  // src/lsp/utils.ts
413
414
  import { DiagnosticCode as DiagnosticCode2 } from "@mirascript/constants";
@@ -745,25 +746,33 @@ function valueDoc(name, value, type, parent) {
745
746
  prefix = `${name}: `;
746
747
  }
747
748
  if (isVmModule(value)) {
748
- const doc = `模块 \`${value.name}\``;
749
749
  let script;
750
750
  if (type === "declare") {
751
751
  const exports = value.keys();
752
- script = "\n";
753
- for (const k of exports) {
754
- const v = value.get(k);
755
- const vDoc = valueDoc(k, v, isVmModule(v) ? "field" : "declare", value);
756
- const code = [...docComment(vDoc.doc), "pub " + vDoc.script, "", ""];
757
- script += code.join("\n");
758
- }
759
- script = script.trimEnd();
752
+ if (!exports.length) {
753
+ script = `mod ${value.name} { }`;
754
+ } else {
755
+ script = `mod ${value.name} {
756
+ `;
757
+ for (const k of exports) {
758
+ const v = value.get(k);
759
+ const vDoc = valueDoc(k, v, "declare", value);
760
+ const code = [...docComment(vDoc.doc), "pub " + vDoc.script];
761
+ const lines = code.flatMap((line) => line.split("\n"));
762
+ for (const line of lines) {
763
+ script += line ? " " + line + "\n" : "\n";
764
+ }
765
+ script += "\n";
766
+ }
767
+ script = script.trimEnd() + "\n}";
768
+ }
760
769
  } else {
761
- script = `(module) ${value.name}`;
770
+ script = `mod ${value.name}`;
762
771
  if (value.name !== name) {
763
772
  script = `${prefix}${script}`;
764
773
  }
765
774
  }
766
- return { script, doc: doc ? [doc] : [] };
775
+ return { script, doc: [`模块 \`${value.name}\``] };
767
776
  }
768
777
  let valueStr = UNKNOWN_REPR;
769
778
  if (value !== void 0) {
@@ -838,12 +847,12 @@ function isDeprecatedGlobal(globals, name) {
838
847
  }
839
848
 
840
849
  // src/lsp/diagnostics.ts
841
- var formatMessage = (model, template, $0) => {
842
- if (template.includes(`$0`)) {
843
- const replacement = typeof $0 == "string" ? $0 : $0 ? model.getValueInRange($0) : "";
844
- template = template.replaceAll(`$0`, replacement.replaceAll("$", "$$$$"));
845
- }
846
- return template;
850
+ var formatMessage = (model, code, $0) => {
851
+ return formatDiagnosticMessage(code, () => {
852
+ if (!$0) return void 0;
853
+ if (typeof $0 == "string") return $0;
854
+ return model.getValueInRange($0);
855
+ });
847
856
  };
848
857
  var makeMarkerData = (model, range, code, message, severity, tags) => {
849
858
  const { startLineNumber, startColumn, endLineNumber, endColumn } = range;
@@ -851,8 +860,7 @@ var makeMarkerData = (model, range, code, message, severity, tags) => {
851
860
  if (typeof code != "number") {
852
861
  message = "";
853
862
  } else {
854
- const template = getDiagnosticMessage(code);
855
- message = template ? formatMessage(model, template, range) : "Unknown diagnostic";
863
+ message = formatMessage(model, code, range);
856
864
  }
857
865
  }
858
866
  const marker = {
@@ -941,9 +949,7 @@ async function makeModelMarkers(model, result) {
941
949
  for (const g of globals) {
942
950
  const { name } = g;
943
951
  if (!context.has(name)) {
944
- const template = getDiagnosticMessage(DiagnosticCode3.GlobalVariableNotDeclared);
945
- if (!template) continue;
946
- const message = formatMessage(model, template, name);
952
+ const message = formatMessage(model, DiagnosticCode3.GlobalVariableNotDeclared, name);
947
953
  for (const ref of g.references) {
948
954
  markers.push(
949
955
  makeMarkerData(
@@ -961,9 +967,7 @@ async function makeModelMarkers(model, result) {
961
967
  if (deprecated) {
962
968
  const replacement = deprecated.use;
963
969
  if (replacement) {
964
- const template = getDiagnosticMessage(deprecated.message);
965
- if (!template) continue;
966
- const message = formatMessage(model, template, replacement);
970
+ const message = formatMessage(model, deprecated.message, replacement);
967
971
  for (const ref of g.references) {
968
972
  markers.push(
969
973
  makeMarkerData(model, ref.range, deprecated.message, message, MarkerSeverity.Hint, [
@@ -1072,6 +1076,7 @@ async function compile(model) {
1072
1076
  const req = [cacheKey, version, value, mode];
1073
1077
  const res = USE_WORKER ? compileWorker(req) : compileSync(req);
1074
1078
  void res.then(async (result) => {
1079
+ if (model.isDisposed()) return;
1075
1080
  const setModelMarkers = editor?.setModelMarkers;
1076
1081
  if (typeof setModelMarkers != "function") return;
1077
1082
  const markers = await makeModelMarkers(model, result);
@@ -1168,11 +1173,16 @@ async function getContextImpl(model, clearCache) {
1168
1173
  }
1169
1174
  var cachedContext = null;
1170
1175
  var Provider = class _Provider {
1171
- constructor() {
1176
+ constructor(enabled = () => true) {
1177
+ this.enabled = enabled;
1172
1178
  this.displayName = "MiraScript LSP";
1173
1179
  this._debugDisplayName = "MiraScript LSP";
1174
1180
  this._onDidChange = null;
1175
1181
  }
1182
+ /** 是否启用 */
1183
+ get isEnabled() {
1184
+ return this.enabled();
1185
+ }
1176
1186
  /** 设置全局变量提供者 */
1177
1187
  static setContextProvider(provider) {
1178
1188
  contextProvider = provider;
@@ -1187,6 +1197,7 @@ var Provider = class _Provider {
1187
1197
  }
1188
1198
  /** 获取编译结果 */
1189
1199
  async getCompileResult(model) {
1200
+ if (!this.isEnabled) return void 0;
1190
1201
  return _Provider.getCompileResult(model);
1191
1202
  }
1192
1203
  /** 获取执行上下文(全局变量) */
@@ -1422,7 +1433,7 @@ var CodeLensProvider = class extends Provider {
1422
1433
  if (!result) return void 0;
1423
1434
  const lenses = [];
1424
1435
  for (const { definition, references } of result.groupedTags(model).locals) {
1425
- if (definition.code === DiagnosticCode5.LocalFunction) {
1436
+ if (definition.code === DiagnosticCode5.LocalFunction || definition.code === DiagnosticCode5.LocalModule) {
1426
1437
  lenses.push({
1427
1438
  range: definition.range,
1428
1439
  command: {
@@ -1728,13 +1739,34 @@ var CompletionItemProvider = class extends Provider {
1728
1739
  this.triggerCharacters = [".", ":"];
1729
1740
  }
1730
1741
  /** 查找全局变量 */
1731
- async completeGlobal(model, char, locals, range) {
1742
+ async completeGlobal(model, char, locals, range, hasGlobalPrefix) {
1732
1743
  const global = await this.getContext(model);
1733
1744
  const suggestions = [];
1734
1745
  const localKeys = new Set(locals.map((item) => item.insertText));
1735
1746
  for (const key of new Set(global.keys())) {
1736
1747
  if (!global.has(key)) continue;
1737
1748
  const element = global.get(key);
1749
+ let prefix = key;
1750
+ const edits = [];
1751
+ if (!REG_IDENTIFIER_FULL.test(key)) {
1752
+ const kStr = serialize2(key);
1753
+ if (hasGlobalPrefix) {
1754
+ prefix = `[${kStr}]`;
1755
+ edits.push({
1756
+ range: {
1757
+ startLineNumber: range.replace.startLineNumber,
1758
+ startColumn: range.replace.startColumn - 1,
1759
+ endLineNumber: range.replace.endLineNumber,
1760
+ endColumn: range.replace.endColumn
1761
+ },
1762
+ text: ""
1763
+ });
1764
+ } else {
1765
+ prefix = `global[${serialize2(key)}]`;
1766
+ }
1767
+ } else if (!hasGlobalPrefix && (localKeys.has(key) || isKeyword(key))) {
1768
+ prefix = `global.${key}`;
1769
+ }
1738
1770
  if (isVmModule2(element)) {
1739
1771
  for (const f of element.keys()) {
1740
1772
  if (char && !f.toLowerCase().includes(char)) {
@@ -1743,9 +1775,10 @@ var CompletionItemProvider = class extends Provider {
1743
1775
  const field = element.get(f);
1744
1776
  if (field === void 0) continue;
1745
1777
  suggestions.push({
1746
- insertText: localKeys.has(key) || isKeyword(key) ? `global.${key}.${f}` : `${key}.${f}`,
1778
+ insertText: `${prefix}.${f}`,
1747
1779
  filterText: filterText(f, char),
1748
1780
  range,
1781
+ additionalTextEdits: edits,
1749
1782
  vmParent: element,
1750
1783
  ...completion(model, DESC_GLOBAL, `${key}.${f}`, field, void 0, true)
1751
1784
  });
@@ -1758,9 +1791,10 @@ var CompletionItemProvider = class extends Provider {
1758
1791
  continue;
1759
1792
  }
1760
1793
  suggestions.push({
1761
- insertText: localKeys.has(key) || isKeyword(key) ? `global.${key}` : REG_IDENTIFIER_FULL.test(key) ? key : `global[${serialize2(key)}]`,
1794
+ insertText: prefix,
1762
1795
  filterText: filterText(key, char),
1763
1796
  range,
1797
+ additionalTextEdits: edits,
1764
1798
  vmParent: global,
1765
1799
  ...completion(model, DESC_GLOBAL, key, element, void 0, false)
1766
1800
  });
@@ -1780,12 +1814,18 @@ var CompletionItemProvider = class extends Provider {
1780
1814
  if (char && !name.toLowerCase().includes(char)) continue;
1781
1815
  if (locals.has(name)) continue;
1782
1816
  locals.add(name);
1783
- suggestions.push({
1817
+ const suggestion = {
1784
1818
  insertText: name,
1785
1819
  filterText: filterText(name, char),
1786
1820
  range,
1787
1821
  ...completion(model, DESC_LOCAL, name, void 0, fn, false)
1788
- });
1822
+ };
1823
+ if (definition.code === DiagnosticCode7.LocalModule) {
1824
+ suggestion.kind = languages.CompletionItemKind.Module;
1825
+ } else if (definition.code === DiagnosticCode7.LocalFunction) {
1826
+ suggestion.kind = languages.CompletionItemKind.Function;
1827
+ }
1828
+ suggestions.push(suggestion);
1789
1829
  }
1790
1830
  if (!scope.parent) break;
1791
1831
  scope = scope.parent;
@@ -1849,7 +1889,13 @@ var CompletionItemProvider = class extends Provider {
1849
1889
  model,
1850
1890
  void 0,
1851
1891
  [],
1852
- void 0
1892
+ this.toCompletionItemRanges(position, {
1893
+ startLineNumber: position.lineNumber,
1894
+ startColumn: position.column,
1895
+ endLineNumber: position.lineNumber,
1896
+ endColumn: position.column
1897
+ }),
1898
+ true
1853
1899
  );
1854
1900
  return { suggestions: globals2 };
1855
1901
  }
@@ -1907,7 +1953,7 @@ var CompletionItemProvider = class extends Provider {
1907
1953
  }
1908
1954
  const suggestions = COMMON_GLOBAL_SUGGESTIONS(completionRange, prev === "::");
1909
1955
  const locals = await this.completeLocal(model, position, char, completionRange);
1910
- const globals = await this.completeGlobal(model, char, locals, completionRange);
1956
+ const globals = await this.completeGlobal(model, char, locals, completionRange, false);
1911
1957
  suggestions.push(...locals, ...globals);
1912
1958
  return { suggestions };
1913
1959
  }
@@ -1933,23 +1979,22 @@ ${def.doc.join("\n")}`
1933
1979
 
1934
1980
  // src/lsp/providers/definition-reference-provider.ts
1935
1981
  var DefinitionReferenceProvider = class extends Provider {
1936
- constructor(globalModel = editor.createModel(
1937
- ``,
1938
- "mirascript-doc",
1939
- Uri.parse("mirascript:///lib/global.mira")
1940
- )) {
1941
- super();
1942
- this.globalModel = globalModel;
1982
+ /** 全局模型 */
1983
+ get globalModel() {
1984
+ if (!this._globalModel || this._globalModel.isDisposed()) {
1985
+ this._globalModel = editor.createModel(``, "mirascript-doc", Uri.parse("mirascript:///lib/global.mira"));
1986
+ }
1987
+ return this._globalModel;
1943
1988
  }
1944
1989
  /** 准备要显示的定义 */
1945
1990
  async prepareGlobal(model, path) {
1946
- const { globalModel } = this;
1947
1991
  const globals = await this.getContext(model);
1948
1992
  const [name, ...access] = path;
1949
1993
  const [parent, value] = getDeep(globals, name, access);
1950
1994
  if (value === void 0) return void 0;
1951
1995
  const { script, doc } = valueDoc(path.at(-1), value, "declare", parent);
1952
- const code = ["", ...docComment(doc), script, ""];
1996
+ const code = [...docComment(doc), script, ""];
1997
+ const { globalModel } = this;
1953
1998
  globalModel.setValue(code.join("\n"));
1954
1999
  return {
1955
2000
  uri: globalModel.uri,
@@ -2303,6 +2348,11 @@ var HoverProvider = class extends Provider {
2303
2348
  };
2304
2349
  break;
2305
2350
  }
2351
+ case DiagnosticCode10.LocalModule:
2352
+ content = {
2353
+ value: codeblock(`\0mod ${model.getValueInRange(tag.range)}`)
2354
+ };
2355
+ break;
2306
2356
  case DiagnosticCode10.LocalImmutable:
2307
2357
  content = {
2308
2358
  value: codeblock(`\0let ${model.getValueInRange(tag.range)}`)
@@ -2734,6 +2784,10 @@ var DocumentSemanticTokensProvider = class extends Provider {
2734
2784
  tokenType = 4 /* FUNCTION */;
2735
2785
  break;
2736
2786
  }
2787
+ case DiagnosticCode13.LocalModule: {
2788
+ tokenType = 5 /* MODULE */;
2789
+ break;
2790
+ }
2737
2791
  case DiagnosticCode13.ParameterMutable:
2738
2792
  case DiagnosticCode13.ParameterSubPatternMutable:
2739
2793
  case DiagnosticCode13.ParameterMutableRest: {
@@ -2789,6 +2843,9 @@ var DocumentSemanticTokensProvider = class extends Provider {
2789
2843
  });
2790
2844
  }
2791
2845
  for (const ref of references) {
2846
+ if (ref.code === DiagnosticCode13.ExportedLocal) {
2847
+ continue;
2848
+ }
2792
2849
  data.push({
2793
2850
  row: ref.range.startLineNumber - 1,
2794
2851
  col: ref.range.startColumn - 1,
@@ -2933,45 +2990,52 @@ var SignatureHelpProvider = class extends Provider {
2933
2990
  };
2934
2991
 
2935
2992
  // src/lsp/index.ts
2936
- async function registerLSP(contextProvider2) {
2993
+ async function registerLSP(contextProvider2, features = {}) {
2937
2994
  Provider.setContextProvider(contextProvider2);
2938
2995
  const { loadModule } = await import("@mirascript/bindings/wasm");
2939
2996
  await loadModule();
2940
- const codeActionProvider = new CodeActionProvider();
2941
- const codeLensProvider = new CodeLensProvider();
2942
- const colorProvider = new ColorProvider();
2943
- const completionItemProvider = new CompletionItemProvider();
2944
- const definitionReferenceProvider = new DefinitionReferenceProvider();
2945
- const documentHighlightProvider = new DocumentHighlightProvider();
2946
- const documentSymbolProvider = new DocumentSymbolProvider();
2947
- const formatterProvider = new FormatterProvider();
2948
- const hoverProvider = new HoverProvider();
2949
- const inlayHintsProvider = new InlayHintsProvider();
2950
- const rangeProvider = new RangeProvider();
2951
- const renameProvider = new RenameProvider();
2952
- const documentSemanticTokensProvider = new DocumentSemanticTokensProvider();
2953
- const signatureHelpProvider = new SignatureHelpProvider();
2954
- const language = ["mirascript", "mirascript-template"];
2955
- return [
2956
- languages.registerCodeActionProvider(language, codeActionProvider),
2957
- languages.registerCodeLensProvider(language, codeLensProvider),
2958
- languages.registerColorProvider(language, colorProvider),
2959
- languages.registerDefinitionProvider(language, definitionReferenceProvider),
2960
- languages.registerReferenceProvider(language, definitionReferenceProvider),
2961
- languages.registerDocumentHighlightProvider(language, documentHighlightProvider),
2962
- languages.registerDocumentSymbolProvider(language, documentSymbolProvider),
2963
- languages.registerDocumentFormattingEditProvider(language, formatterProvider),
2964
- // languages.registerDocumentRangeFormattingEditProvider(language, formatterProvider),
2965
- // languages.registerOnTypeFormattingEditProvider(language, formatterProvider),
2966
- languages.registerHoverProvider(language, hoverProvider),
2967
- languages.registerInlayHintsProvider(language, inlayHintsProvider),
2968
- languages.registerFoldingRangeProvider(language, rangeProvider),
2969
- languages.registerSelectionRangeProvider(language, rangeProvider),
2970
- languages.registerDocumentSemanticTokensProvider(language, documentSemanticTokensProvider),
2971
- languages.registerRenameProvider(language, renameProvider),
2972
- languages.registerCompletionItemProvider(language, completionItemProvider),
2973
- languages.registerSignatureHelpProvider(language, signatureHelpProvider)
2974
- ];
2997
+ const disposables = [];
2998
+ const registerIfEnabled = (feature, provider, register) => {
2999
+ const providerInstance = new provider(() => features[feature] !== false);
3000
+ const d = register(["mirascript", "mirascript-template"], providerInstance);
3001
+ if (Array.isArray(d)) disposables.push(...d);
3002
+ else disposables.push(d);
3003
+ };
3004
+ registerIfEnabled("codeAction", CodeActionProvider, languages.registerCodeActionProvider);
3005
+ registerIfEnabled("codeLens", CodeLensProvider, languages.registerCodeLensProvider);
3006
+ registerIfEnabled("color", ColorProvider, languages.registerColorProvider);
3007
+ registerIfEnabled("definitionReference", DefinitionReferenceProvider, (language, provider) => {
3008
+ return [
3009
+ languages.registerDefinitionProvider(language, provider),
3010
+ languages.registerReferenceProvider(language, provider)
3011
+ ];
3012
+ });
3013
+ registerIfEnabled("documentHighlight", DocumentHighlightProvider, languages.registerDocumentHighlightProvider);
3014
+ registerIfEnabled("documentSymbol", DocumentSymbolProvider, languages.registerDocumentSymbolProvider);
3015
+ registerIfEnabled("formatter", FormatterProvider, (language, provider) => {
3016
+ return [
3017
+ languages.registerDocumentFormattingEditProvider(language, provider)
3018
+ // languages.registerDocumentRangeFormattingEditProvider(language, provider),
3019
+ // languages.registerOnTypeFormattingEditProvider(language, provider),
3020
+ ];
3021
+ });
3022
+ registerIfEnabled("hover", HoverProvider, languages.registerHoverProvider);
3023
+ registerIfEnabled("inlayHints", InlayHintsProvider, languages.registerInlayHintsProvider);
3024
+ registerIfEnabled("range", RangeProvider, (language, provider) => {
3025
+ return [
3026
+ languages.registerFoldingRangeProvider(language, provider),
3027
+ languages.registerSelectionRangeProvider(language, provider)
3028
+ ];
3029
+ });
3030
+ registerIfEnabled(
3031
+ "documentSemanticTokens",
3032
+ DocumentSemanticTokensProvider,
3033
+ languages.registerDocumentSemanticTokensProvider
3034
+ );
3035
+ registerIfEnabled("rename", RenameProvider, languages.registerRenameProvider);
3036
+ registerIfEnabled("completionItem", CompletionItemProvider, languages.registerCompletionItemProvider);
3037
+ registerIfEnabled("signatureHelp", SignatureHelpProvider, languages.registerSignatureHelpProvider);
3038
+ return disposables;
2975
3039
  }
2976
3040
  export {
2977
3041
  CodeActionProvider,