forked from asciidoctor/asciidoctor-vscode
/
extension.ts
82 lines (70 loc) · 4.5 KB
/
extension.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*---------------------------------------------------------------------------------------------
* 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 LinkProvider from './features/documentLinkProvider'
import AdocDocumentSymbolProvider from './features/documentSymbolProvider'
// import AsciidocFoldingProvider from './features/foldingProvider';
import { AsciidocContentProvider } from './features/previewContentProvider'
import { AsciidocPreviewManager } from './features/previewManager'
import AsciidocWorkspaceSymbolProvider from './features/workspaceSymbolProvider'
import { Logger } from './logger'
import { AsciidocEngine } from './asciidocEngine'
import { getAsciidocExtensionContributions } from './asciidocExtensions'
import { ExtensionContentSecurityPolicyArbiter, PreviewSecuritySelector } from './security'
import { githubSlugifier } from './slugify'
import { AttributeCompleter } from './features/attributeCompleter'
import { AsciidocFileIncludeAutoCompletionMonitor } from './util/includeAutoCompletion'
export function activate (context: vscode.ExtensionContext) {
const contributions = getAsciidocExtensionContributions(context)
const cspArbiter = new ExtensionContentSecurityPolicyArbiter(context.globalState, context.workspaceState)
const errorCollection = vscode.languages.createDiagnosticCollection('asciidoc')
const engine = new AsciidocEngine(contributions, githubSlugifier, errorCollection)
const logger = new Logger()
logger.log('Extension was started')
const selector: vscode.DocumentSelector = [
{ language: 'asciidoc', scheme: 'file' },
{ language: 'asciidoc', scheme: 'untitled' },
]
const contentProvider = new AsciidocContentProvider(engine, context, cspArbiter, contributions, logger)
const symbolProvider = new AdocDocumentSymbolProvider(engine, null)
const previewManager = new AsciidocPreviewManager(contentProvider, logger, contributions)
context.subscriptions.push(previewManager)
const includeAutoCompletionMonitor = new AsciidocFileIncludeAutoCompletionMonitor()
context.subscriptions.push(includeAutoCompletionMonitor)
context.subscriptions.push(vscode.languages.registerDocumentSymbolProvider(selector, symbolProvider))
context.subscriptions.push(vscode.languages.registerDocumentLinkProvider(selector, new LinkProvider()))
// context.subscriptions.push(vscode.languages.registerFoldingRangeProvider(selector, new AsciidocFoldingProvider(engine)));
context.subscriptions.push(vscode.languages.registerWorkspaceSymbolProvider(new AsciidocWorkspaceSymbolProvider(symbolProvider)))
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, new AttributeCompleter(), '{'))
const previewSecuritySelector = new PreviewSecuritySelector(cspArbiter, previewManager)
const commandManager = new CommandManager()
context.subscriptions.push(commandManager)
commandManager.register(new commands.ShowPreviewCommand(previewManager))
commandManager.register(new commands.ShowPreviewToSideCommand(previewManager))
commandManager.register(new commands.ShowLockedPreviewToSideCommand(previewManager))
commandManager.register(new commands.ShowSourceCommand(previewManager))
commandManager.register(new commands.RefreshPreviewCommand(previewManager))
commandManager.register(new commands.MoveCursorToPositionCommand())
commandManager.register(new commands.ShowPreviewSecuritySelectorCommand(previewSecuritySelector, previewManager))
commandManager.register(new commands.OpenDocumentLinkCommand(engine))
commandManager.register(new commands.ExportAsPDF(engine, logger))
commandManager.register(new commands.PasteImage())
commandManager.register(new commands.ToggleLockCommand(previewManager))
commandManager.register(new commands.ShowPreviewCommand(previewManager))
commandManager.register(new commands.SaveHTML(engine))
commandManager.register(new commands.SaveDocbook(engine))
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => {
logger.updateConfiguration()
previewManager.updateConfiguration()
previewManager.refresh(true)
}))
context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(() => {
errorCollection.clear()
}))
context.subscriptions.push(vscode.workspace.onDidSaveTextDocument(() => {
previewManager.refresh(true)
}))
}