UNPKG

@theia/monaco

Version:
292 lines • 20.2 kB
"use strict"; // ***************************************************************************** // Copyright (C) 2018 TypeFox and others. // // This program and the accompanying materials are made available under the // terms of the Eclipse Public License v. 2.0 which is available at // http://www.eclipse.org/legal/epl-2.0. // // This Source Code may also be made available under the following Secondary // Licenses when the conditions for such availability set forth in the Eclipse // Public License v. 2.0 are satisfied: GNU General Public License, version 2 // with the GNU Classpath Exception which is available at // https://www.gnu.org/software/classpath/license.html. // // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 // ***************************************************************************** Object.defineProperty(exports, "__esModule", { value: true }); exports.createMonacoConfigurationService = exports.MonacoConfigurationService = void 0; require("../../src/browser/style/index.css"); const inversify_1 = require("@theia/core/shared/inversify"); const common_1 = require("@theia/core/lib/common"); const browser_1 = require("@theia/core/lib/browser"); const browser_2 = require("@theia/editor/lib/browser"); const monaco_editor_provider_1 = require("./monaco-editor-provider"); const monaco_menu_1 = require("./monaco-menu"); const monaco_command_1 = require("./monaco-command"); const monaco_keybinding_1 = require("./monaco-keybinding"); const monaco_languages_1 = require("./monaco-languages"); const monaco_workspace_1 = require("./monaco-workspace"); const monaco_editor_service_1 = require("./monaco-editor-service"); const monaco_text_model_service_1 = require("./monaco-text-model-service"); const monaco_context_menu_1 = require("./monaco-context-menu"); const monaco_outline_contribution_1 = require("./monaco-outline-contribution"); const monaco_status_bar_contribution_1 = require("./monaco-status-bar-contribution"); const monaco_command_service_1 = require("./monaco-command-service"); const monaco_command_registry_1 = require("./monaco-command-registry"); const monaco_diff_navigator_factory_1 = require("./monaco-diff-navigator-factory"); const monaco_frontend_application_contribution_1 = require("./monaco-frontend-application-contribution"); const monaco_textmate_frontend_bindings_1 = require("./textmate/monaco-textmate-frontend-bindings"); const monaco_bulk_edit_service_1 = require("./monaco-bulk-edit-service"); const monaco_outline_decorator_1 = require("./monaco-outline-decorator"); const outline_decorator_service_1 = require("@theia/outline-view/lib/browser/outline-decorator-service"); const monaco_snippet_suggest_provider_1 = require("./monaco-snippet-suggest-provider"); const context_key_service_1 = require("@theia/core/lib/browser/context-key-service"); const monaco_context_key_service_1 = require("./monaco-context-key-service"); const monaco_mime_service_1 = require("./monaco-mime-service"); const mime_service_1 = require("@theia/core/lib/browser/mime-service"); const monaco_editor_1 = require("./monaco-editor"); const monaco_color_registry_1 = require("./monaco-color-registry"); const color_registry_1 = require("@theia/core/lib/browser/color-registry"); const monaco_icon_registry_1 = require("./monaco-icon-registry"); const icon_registry_1 = require("@theia/core/lib/browser/icon-registry"); const monaco_theming_service_1 = require("./monaco-theming-service"); const core_1 = require("@theia/core"); const workspace_symbol_command_1 = require("./workspace-symbol-command"); const language_service_1 = require("@theia/core/lib/browser/language-service"); const monaco_to_protocol_converter_1 = require("./monaco-to-protocol-converter"); const protocol_to_monaco_converter_1 = require("./protocol-to-monaco-converter"); const monaco_formatting_conflicts_1 = require("./monaco-formatting-conflicts"); const monaco_quick_input_service_1 = require("./monaco-quick-input-service"); const monaco_gotoline_quick_access_1 = require("./monaco-gotoline-quick-access"); const monaco_gotosymbol_quick_access_1 = require("./monaco-gotosymbol-quick-access"); const quick_access_1 = require("@theia/core/lib/browser/quick-input/quick-access"); const monaco_quick_access_registry_1 = require("./monaco-quick-access-registry"); const standaloneServices_1 = require("@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices"); const markdown_renderer_1 = require("@theia/core/lib/browser/markdown-rendering/markdown-renderer"); const monaco_markdown_renderer_1 = require("./markdown-renderer/monaco-markdown-renderer"); const theming_1 = require("@theia/core/lib/browser/theming"); const monaco_indexed_db_1 = require("./monaco-indexed-db"); const monaco_undo_redo_handler_1 = require("./monaco-undo-redo-handler"); const log_1 = require("@theia/monaco-editor-core/esm/vs/platform/log/common/log"); const default_content_hover_widget_patcher_1 = require("./default-content-hover-widget-patcher"); const monaco_workspace_context_service_1 = require("./monaco-workspace-context-service"); const monaco_code_action_save_participant_1 = require("./monaco-code-action-save-participant"); const monaco_code_action_service_1 = require("./monaco-code-action-service"); exports.default = new inversify_1.ContainerModule((bind, unbind, isBound, rebind) => { bind(monaco_theming_service_1.MonacoThemingService).toSelf().inSingletonScope(); bind(monaco_context_key_service_1.MonacoContextKeyService).toSelf().inSingletonScope(); rebind(context_key_service_1.ContextKeyService).toService(monaco_context_key_service_1.MonacoContextKeyService); bind(monaco_snippet_suggest_provider_1.MonacoSnippetSuggestProvider).toSelf().inSingletonScope(); bind(monaco_frontend_application_contribution_1.MonacoFrontendApplicationContribution).toSelf().inSingletonScope(); bind(browser_1.FrontendApplicationContribution).toService(monaco_frontend_application_contribution_1.MonacoFrontendApplicationContribution); bind(browser_1.StylingParticipant).toService(monaco_frontend_application_contribution_1.MonacoFrontendApplicationContribution); bind(monaco_code_action_service_1.MonacoCodeActionServiceImpl).toSelf().inSingletonScope(); bind(monaco_code_action_service_1.MonacoCodeActionService).toService(monaco_code_action_service_1.MonacoCodeActionServiceImpl); bind(monaco_code_action_save_participant_1.MonacoCodeActionSaveParticipant).toSelf().inSingletonScope(); bind(monaco_editor_provider_1.SaveParticipant).toService(monaco_code_action_save_participant_1.MonacoCodeActionSaveParticipant); bind(monaco_to_protocol_converter_1.MonacoToProtocolConverter).toSelf().inSingletonScope(); bind(protocol_to_monaco_converter_1.ProtocolToMonacoConverter).toSelf().inSingletonScope(); bind(monaco_languages_1.MonacoLanguages).toSelf().inSingletonScope(); rebind(language_service_1.LanguageService).toService(monaco_languages_1.MonacoLanguages); bind(workspace_symbol_command_1.WorkspaceSymbolCommand).toSelf().inSingletonScope(); for (const identifier of [common_1.CommandContribution, browser_1.KeybindingContribution, common_1.MenuContribution, quick_access_1.QuickAccessContribution]) { bind(identifier).toService(workspace_symbol_command_1.WorkspaceSymbolCommand); } bind(monaco_workspace_1.MonacoWorkspace).toSelf().inSingletonScope(); bind(monaco_workspace_context_service_1.MonacoWorkspaceContextService).toSelf().inSingletonScope(); bind(exports.MonacoConfigurationService).toDynamicValue(({ container }) => createMonacoConfigurationService(container)).inSingletonScope(); bind(monaco_bulk_edit_service_1.MonacoBulkEditService).toSelf().inSingletonScope(); (0, core_1.bindContributionProvider)(bind, monaco_editor_service_1.ActiveMonacoEditorContribution); bind(monaco_editor_service_1.MonacoEditorServiceFactory).toFactory((context) => (contextKeyService, themeService) => { const child = context.container.createChild(); child.bind(monaco_editor_service_1.VSCodeContextKeyService).toConstantValue(contextKeyService); child.bind(monaco_editor_service_1.VSCodeThemeService).toConstantValue(themeService); child.bind(monaco_editor_service_1.MonacoEditorService).toSelf().inSingletonScope(); return child.get(monaco_editor_service_1.MonacoEditorService); }); bind(monaco_text_model_service_1.MonacoTextModelService).toSelf().inSingletonScope(); bind(monaco_context_menu_1.MonacoContextMenuService).toSelf().inSingletonScope(); bind(monaco_editor_1.MonacoEditorServices).toSelf().inSingletonScope(); bind(monaco_editor_provider_1.MonacoEditorProvider).toSelf().inSingletonScope(); (0, core_1.bindContributionProvider)(bind, monaco_editor_provider_1.MonacoEditorFactory); (0, core_1.bindContributionProvider)(bind, monaco_text_model_service_1.MonacoEditorModelFactory); (0, core_1.bindContributionProvider)(bind, monaco_text_model_service_1.MonacoEditorModelFilter); (0, core_1.bindContributionProvider)(bind, monaco_editor_provider_1.SaveParticipant); bind(monaco_command_service_1.MonacoCommandService).toSelf().inTransientScope(); bind(browser_2.TextEditorProvider).toProvider(context => uri => context.container.get(monaco_editor_provider_1.MonacoEditorProvider).get(uri)); bind(monaco_diff_navigator_factory_1.MonacoDiffNavigatorFactory).toSelf().inSingletonScope(); bind(browser_2.DiffNavigatorProvider).toFactory(context => (editor) => context.container.get(monaco_editor_provider_1.MonacoEditorProvider).getDiffNavigator(editor)); bind(monaco_outline_contribution_1.MonacoOutlineContribution).toSelf().inSingletonScope(); bind(browser_1.FrontendApplicationContribution).toService(monaco_outline_contribution_1.MonacoOutlineContribution); rebind(markdown_renderer_1.MarkdownRenderer).to(monaco_markdown_renderer_1.MonacoMarkdownRenderer).inSingletonScope(); bind(monaco_formatting_conflicts_1.MonacoFormattingConflictsContribution).toSelf().inSingletonScope(); bind(browser_1.FrontendApplicationContribution).toService(monaco_formatting_conflicts_1.MonacoFormattingConflictsContribution); bind(monaco_status_bar_contribution_1.MonacoStatusBarContribution).toSelf().inSingletonScope(); bind(browser_1.WidgetStatusBarContribution).toService(monaco_status_bar_contribution_1.MonacoStatusBarContribution); bind(monaco_command_registry_1.MonacoCommandRegistry).toSelf().inSingletonScope(); bind(monaco_command_1.MonacoEditorCommandHandlers).toSelf().inSingletonScope(); bind(common_1.CommandContribution).toService(monaco_command_1.MonacoEditorCommandHandlers); bind(monaco_menu_1.MonacoEditorMenuContribution).toSelf().inSingletonScope(); bind(common_1.MenuContribution).toService(monaco_menu_1.MonacoEditorMenuContribution); bind(monaco_keybinding_1.MonacoKeybindingContribution).toSelf().inSingletonScope(); bind(browser_1.KeybindingContribution).toService(monaco_keybinding_1.MonacoKeybindingContribution); bind(monaco_quick_input_service_1.MonacoQuickInputImplementation).toSelf().inSingletonScope(); bind(monaco_quick_input_service_1.MonacoQuickInputService).toSelf().inSingletonScope().onActivation(({ container }, quickInputService) => { browser_1.WebSocketConnectionProvider.createHandler(container, common_1.quickInputServicePath, quickInputService); return quickInputService; }); bind(browser_1.QuickInputService).toService(monaco_quick_input_service_1.MonacoQuickInputService); bind(monaco_quick_access_registry_1.MonacoQuickAccessRegistry).toSelf().inSingletonScope(); bind(quick_access_1.QuickAccessRegistry).toService(monaco_quick_access_registry_1.MonacoQuickAccessRegistry); bind(monaco_gotoline_quick_access_1.GotoLineQuickAccessContribution).toSelf().inSingletonScope(); bind(quick_access_1.QuickAccessContribution).toService(monaco_gotoline_quick_access_1.GotoLineQuickAccessContribution); bind(monaco_gotosymbol_quick_access_1.GotoSymbolQuickAccessContribution).toSelf().inSingletonScope(); bind(quick_access_1.QuickAccessContribution).toService(monaco_gotosymbol_quick_access_1.GotoSymbolQuickAccessContribution); (0, monaco_textmate_frontend_bindings_1.default)(bind, unbind, isBound, rebind); bind(monaco_outline_decorator_1.MonacoOutlineDecorator).toSelf().inSingletonScope(); bind(outline_decorator_service_1.OutlineTreeDecorator).toService(monaco_outline_decorator_1.MonacoOutlineDecorator); bind(monaco_mime_service_1.MonacoMimeService).toSelf().inSingletonScope(); rebind(mime_service_1.MimeService).toService(monaco_mime_service_1.MonacoMimeService); bind(monaco_color_registry_1.MonacoColorRegistry).toSelf().inSingletonScope(); rebind(color_registry_1.ColorRegistry).toService(monaco_color_registry_1.MonacoColorRegistry); bind(monaco_indexed_db_1.ThemeServiceWithDB).toSelf().inSingletonScope(); rebind(theming_1.ThemeService).toService(monaco_indexed_db_1.ThemeServiceWithDB); bind(monaco_icon_registry_1.MonacoIconRegistry).toSelf().inSingletonScope(); bind(icon_registry_1.IconRegistry).toService(monaco_icon_registry_1.MonacoIconRegistry); bind(monaco_undo_redo_handler_1.FocusedMonacoUndoRedoHandler).toSelf().inSingletonScope(); bind(monaco_undo_redo_handler_1.ActiveMonacoUndoRedoHandler).toSelf().inSingletonScope(); bind(browser_1.UndoRedoHandler).toService(monaco_undo_redo_handler_1.FocusedMonacoUndoRedoHandler); bind(browser_1.UndoRedoHandler).toService(monaco_undo_redo_handler_1.ActiveMonacoUndoRedoHandler); bind(default_content_hover_widget_patcher_1.DefaultContentHoverWidgetPatcher).toSelf().inSingletonScope(); bind(browser_1.FrontendApplicationContribution).toService(default_content_hover_widget_patcher_1.DefaultContentHoverWidgetPatcher); }); exports.MonacoConfigurationService = Symbol('MonacoConfigurationService'); function createMonacoConfigurationService(container) { const preferences = container.get(browser_1.PreferenceService); const preferenceSchemaProvider = container.get(browser_1.PreferenceSchemaProvider); const service = new standaloneServices_1.StandaloneConfigurationService(standaloneServices_1.StandaloneServices.get(log_1.ILogService)); const _configuration = service['_configuration']; _configuration.getValue = (section, overrides) => { const overrideIdentifier = (overrides && 'overrideIdentifier' in overrides && typeof overrides.overrideIdentifier === 'string') ? overrides['overrideIdentifier'] : undefined; const resourceUri = (overrides && 'resource' in overrides && !!overrides['resource']) ? overrides['resource'].toString() : undefined; // eslint-disable-next-line @typescript-eslint/no-explicit-any const proxy = (0, browser_1.createPreferenceProxy)(preferences, preferenceSchemaProvider.getCombinedSchema(), { resourceUri, overrideIdentifier, style: 'both' }); if (section) { return proxy[section]; } return proxy; }; /* * Since we never read values from the underlying service, writing to it doesn't make sense. The standalone editor writes to the configuration when being created, * which makes sense in the standalone case where there is no preference infrastructure in place. Those writes degrade the performance, however, so we patch the * service to an empty implementation. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any service.updateValues = (values) => Promise.resolve(); /* * There are a few places in Monaco where this method is called from, including actions for editor minimap in `ContextMenuController`. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any service.updateValue = (key, value) => preferences.updateValue(key, value); const toTarget = (scope) => { switch (scope) { case browser_1.PreferenceScope.Default: return 7 /* ConfigurationTarget.DEFAULT */; case browser_1.PreferenceScope.User: return 2 /* ConfigurationTarget.USER */; case browser_1.PreferenceScope.Workspace: return 5 /* ConfigurationTarget.WORKSPACE */; case browser_1.PreferenceScope.Folder: return 6 /* ConfigurationTarget.WORKSPACE_FOLDER */; } }; const newFireDidChangeConfigurationContext = () => ({ changes: [], affectedKeys: new Set(), keys: new Set(), overrides: new Map() }); const fireDidChangeConfiguration = (source, context) => { if (!context.affectedKeys.size) { return; } const overrides = []; for (const [override, values] of context.overrides) { overrides.push([override, [...values]]); } service['_onDidChangeConfiguration'].fire({ sourceConfig: {}, change: { keys: [...context.keys], overrides }, affectedKeys: context.affectedKeys, source, affectsConfiguration: (prefix, options) => { var _a; if (!context.affectedKeys.has(prefix)) { return false; } for (const change of context.changes) { const overridden = preferences.overriddenPreferenceName(change.preferenceName); const preferenceName = overridden ? overridden.preferenceName : change.preferenceName; if (preferenceName.startsWith(prefix)) { if ((options === null || options === void 0 ? void 0 : options.overrideIdentifier) !== undefined) { if (overridden && overridden.overrideIdentifier !== (options === null || options === void 0 ? void 0 : options.overrideIdentifier)) { continue; } } if (change.affects((_a = options === null || options === void 0 ? void 0 : options.resource) === null || _a === void 0 ? void 0 : _a.toString())) { return true; } } } return false; } }); }; preferences.onPreferencesChanged(event => { var _a; let source; let context = newFireDidChangeConfigurationContext(); for (let key of Object.keys(event)) { const change = event[key]; const target = toTarget(change.scope); if (source !== undefined && target !== source) { fireDidChangeConfiguration(source, context); context = newFireDidChangeConfigurationContext(); } context.changes.push(change); source = target; let overrideKeys; if (key.startsWith('[')) { const index = key.indexOf('.'); const override = key.substring(0, index); const overrideIdentifier = (_a = override.match(browser_1.OVERRIDE_PROPERTY_PATTERN)) === null || _a === void 0 ? void 0 : _a[1]; if (overrideIdentifier) { context.keys.add(override); context.affectedKeys.add(override); overrideKeys = context.overrides.get(overrideIdentifier) || new Set(); context.overrides.set(overrideIdentifier, overrideKeys); key = key.substring(index + 1); } } while (key) { if (overrideKeys) { overrideKeys.add(key); } context.keys.add(key); context.affectedKeys.add(key); const index = key.lastIndexOf('.'); key = key.substring(0, index); } } if (source) { fireDidChangeConfiguration(source, context); } }); return service; } exports.createMonacoConfigurationService = createMonacoConfigurationService; //# sourceMappingURL=monaco-frontend-module.js.map