jsonMode.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. import { WorkerManager } from './workerManager.js';
  6. import * as languageFeatures from './languageFeatures.js';
  7. import { createTokenizationSupport } from './tokenization.js';
  8. import { languages } from './fillers/monaco-editor-core.js';
  9. export function setupMode(defaults) {
  10. var disposables = [];
  11. var providers = [];
  12. var client = new WorkerManager(defaults);
  13. disposables.push(client);
  14. var worker = function () {
  15. var uris = [];
  16. for (var _i = 0; _i < arguments.length; _i++) {
  17. uris[_i] = arguments[_i];
  18. }
  19. return client.getLanguageServiceWorker.apply(client, uris);
  20. };
  21. function registerProviders() {
  22. var languageId = defaults.languageId, modeConfiguration = defaults.modeConfiguration;
  23. disposeAll(providers);
  24. if (modeConfiguration.documentFormattingEdits) {
  25. providers.push(languages.registerDocumentFormattingEditProvider(languageId, new languageFeatures.DocumentFormattingEditProvider(worker)));
  26. }
  27. if (modeConfiguration.documentRangeFormattingEdits) {
  28. providers.push(languages.registerDocumentRangeFormattingEditProvider(languageId, new languageFeatures.DocumentRangeFormattingEditProvider(worker)));
  29. }
  30. if (modeConfiguration.completionItems) {
  31. providers.push(languages.registerCompletionItemProvider(languageId, new languageFeatures.CompletionAdapter(worker)));
  32. }
  33. if (modeConfiguration.hovers) {
  34. providers.push(languages.registerHoverProvider(languageId, new languageFeatures.HoverAdapter(worker)));
  35. }
  36. if (modeConfiguration.documentSymbols) {
  37. providers.push(languages.registerDocumentSymbolProvider(languageId, new languageFeatures.DocumentSymbolAdapter(worker)));
  38. }
  39. if (modeConfiguration.tokens) {
  40. providers.push(languages.setTokensProvider(languageId, createTokenizationSupport(true)));
  41. }
  42. if (modeConfiguration.colors) {
  43. providers.push(languages.registerColorProvider(languageId, new languageFeatures.DocumentColorAdapter(worker)));
  44. }
  45. if (modeConfiguration.foldingRanges) {
  46. providers.push(languages.registerFoldingRangeProvider(languageId, new languageFeatures.FoldingRangeAdapter(worker)));
  47. }
  48. if (modeConfiguration.diagnostics) {
  49. providers.push(new languageFeatures.DiagnosticsAdapter(languageId, worker, defaults));
  50. }
  51. if (modeConfiguration.selectionRanges) {
  52. providers.push(languages.registerSelectionRangeProvider(languageId, new languageFeatures.SelectionRangeAdapter(worker)));
  53. }
  54. }
  55. registerProviders();
  56. disposables.push(languages.setLanguageConfiguration(defaults.languageId, richEditConfiguration));
  57. var modeConfiguration = defaults.modeConfiguration;
  58. defaults.onDidChange(function (newDefaults) {
  59. if (newDefaults.modeConfiguration !== modeConfiguration) {
  60. modeConfiguration = newDefaults.modeConfiguration;
  61. registerProviders();
  62. }
  63. });
  64. disposables.push(asDisposable(providers));
  65. return asDisposable(disposables);
  66. }
  67. function asDisposable(disposables) {
  68. return { dispose: function () { return disposeAll(disposables); } };
  69. }
  70. function disposeAll(disposables) {
  71. while (disposables.length) {
  72. disposables.pop().dispose();
  73. }
  74. }
  75. var richEditConfiguration = {
  76. wordPattern: /(-?\d*\.\d\w*)|([^\[\{\]\}\:\"\,\s]+)/g,
  77. comments: {
  78. lineComment: '//',
  79. blockComment: ['/*', '*/']
  80. },
  81. brackets: [
  82. ['{', '}'],
  83. ['[', ']']
  84. ],
  85. autoClosingPairs: [
  86. { open: '{', close: '}', notIn: ['string'] },
  87. { open: '[', close: ']', notIn: ['string'] },
  88. { open: '"', close: '"', notIn: ['string'] }
  89. ]
  90. };