Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/markdown-language-features/src/extension.shared.ts')
-rw-r--r--extensions/markdown-language-features/src/extension.shared.ts108
1 files changed, 108 insertions, 0 deletions
diff --git a/extensions/markdown-language-features/src/extension.shared.ts b/extensions/markdown-language-features/src/extension.shared.ts
new file mode 100644
index 00000000000..c5ebe5650c0
--- /dev/null
+++ b/extensions/markdown-language-features/src/extension.shared.ts
@@ -0,0 +1,108 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import { CommandManager } from './commandManager';
+import * as commands from './commands/index';
+import { registerPasteSupport } from './languageFeatures/copyPaste';
+import { registerDefinitionSupport } from './languageFeatures/definitions';
+import { registerDiagnosticSupport } from './languageFeatures/diagnostics';
+import { MdLinkProvider, registerDocumentLinkSupport } from './languageFeatures/documentLinks';
+import { registerDropIntoEditorSupport } from './languageFeatures/dropIntoEditor';
+import { registerFindFileReferenceSupport } from './languageFeatures/fileReferences';
+import { registerPathCompletionSupport } from './languageFeatures/pathCompletions';
+import { MdReferencesProvider, registerReferencesSupport } from './languageFeatures/references';
+import { registerRenameSupport } from './languageFeatures/rename';
+import { ILogger } from './logging';
+import { IMdParser, MarkdownItEngine, MdParsingProvider } from './markdownEngine';
+import { MarkdownContributionProvider } from './markdownExtensions';
+import { MdDocumentRenderer } from './preview/documentRenderer';
+import { MarkdownPreviewManager } from './preview/previewManager';
+import { ContentSecurityPolicyArbiter, ExtensionContentSecurityPolicyArbiter, PreviewSecuritySelector } from './preview/security';
+import { MdTableOfContentsProvider } from './tableOfContents';
+import { loadDefaultTelemetryReporter, TelemetryReporter } from './telemetryReporter';
+import { IMdWorkspace } from './workspace';
+
+export function activateShared(
+ context: vscode.ExtensionContext,
+ workspace: IMdWorkspace,
+ engine: MarkdownItEngine,
+ logger: ILogger,
+ contributions: MarkdownContributionProvider,
+) {
+ const telemetryReporter = loadDefaultTelemetryReporter();
+ context.subscriptions.push(telemetryReporter);
+
+ const cspArbiter = new ExtensionContentSecurityPolicyArbiter(context.globalState, context.workspaceState);
+ const commandManager = new CommandManager();
+
+ const parser = new MdParsingProvider(engine, workspace);
+ const tocProvider = new MdTableOfContentsProvider(parser, workspace, logger);
+ context.subscriptions.push(parser, tocProvider);
+
+ const contentProvider = new MdDocumentRenderer(engine, context, cspArbiter, contributions, logger);
+ const previewManager = new MarkdownPreviewManager(contentProvider, workspace, logger, contributions, tocProvider);
+ context.subscriptions.push(previewManager);
+
+ context.subscriptions.push(registerMarkdownLanguageFeatures(parser, workspace, commandManager, tocProvider, logger));
+ context.subscriptions.push(registerMarkdownCommands(commandManager, previewManager, telemetryReporter, cspArbiter, engine, tocProvider));
+
+ context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => {
+ previewManager.updateConfiguration();
+ }));
+}
+
+function registerMarkdownLanguageFeatures(
+ parser: IMdParser,
+ workspace: IMdWorkspace,
+ commandManager: CommandManager,
+ tocProvider: MdTableOfContentsProvider,
+ logger: ILogger,
+): vscode.Disposable {
+ const selector: vscode.DocumentSelector = { language: 'markdown', scheme: '*' };
+
+ const linkProvider = new MdLinkProvider(parser, workspace, logger);
+ const referencesProvider = new MdReferencesProvider(parser, workspace, tocProvider, logger);
+
+ return vscode.Disposable.from(
+ linkProvider,
+ referencesProvider,
+
+ // Language features
+ registerDefinitionSupport(selector, referencesProvider),
+ registerDiagnosticSupport(selector, workspace, linkProvider, commandManager, referencesProvider, tocProvider, logger),
+ registerDocumentLinkSupport(selector, linkProvider),
+ registerDropIntoEditorSupport(selector),
+ registerFindFileReferenceSupport(commandManager, referencesProvider),
+ registerPasteSupport(selector),
+ registerPathCompletionSupport(selector, workspace, parser, linkProvider),
+ registerReferencesSupport(selector, referencesProvider),
+ registerRenameSupport(selector, workspace, referencesProvider, parser.slugifier),
+ );
+}
+
+function registerMarkdownCommands(
+ commandManager: CommandManager,
+ previewManager: MarkdownPreviewManager,
+ telemetryReporter: TelemetryReporter,
+ cspArbiter: ContentSecurityPolicyArbiter,
+ engine: MarkdownItEngine,
+ tocProvider: MdTableOfContentsProvider,
+): vscode.Disposable {
+ const previewSecuritySelector = new PreviewSecuritySelector(cspArbiter, previewManager);
+
+ commandManager.register(new commands.ShowPreviewCommand(previewManager, telemetryReporter));
+ commandManager.register(new commands.ShowPreviewToSideCommand(previewManager, telemetryReporter));
+ commandManager.register(new commands.ShowLockedPreviewToSideCommand(previewManager, telemetryReporter));
+ commandManager.register(new commands.ShowSourceCommand(previewManager));
+ commandManager.register(new commands.RefreshPreviewCommand(previewManager, engine));
+ commandManager.register(new commands.MoveCursorToPositionCommand());
+ commandManager.register(new commands.ShowPreviewSecuritySelectorCommand(previewSecuritySelector, previewManager));
+ commandManager.register(new commands.OpenDocumentLinkCommand(tocProvider));
+ commandManager.register(new commands.ToggleLockCommand(previewManager));
+ commandManager.register(new commands.RenderDocument(engine));
+ commandManager.register(new commands.ReloadPlugins(previewManager, engine));
+ return commandManager;
+}