vscode-xml/src/extension.ts

68 lines
2.6 KiB
TypeScript
Raw Normal View History

2018-03-01 21:22:53 -05:00
import { languages, window, workspace, commands } from "vscode";
2018-02-13 23:25:07 -05:00
import { ExtensionContext, TextEditor, TextEditorSelectionChangeEvent, WorkspaceConfiguration } from "vscode";
2018-01-27 20:30:03 -05:00
2018-03-01 21:50:18 -05:00
import { XQueryCompletionItemProvider } from "./completion/xquery-completion-item-provider";
2018-03-01 21:22:53 -05:00
import { FormatAsXmlCommandName, formatAsXml } from "./formatting/commands/formatAsXml";
2018-03-01 21:31:14 -05:00
import { MinifyXmlCommandName, minifyXml } from "./formatting/commands/minifyXml";
2018-03-01 21:22:53 -05:00
import { XmlFormatterFactory } from "./formatting/xml-formatter";
2018-01-28 01:19:06 -05:00
import { XmlFormattingEditProvider } from "./formatting/xml-formatting-edit-provider";
2018-02-13 23:25:07 -05:00
import { XQueryLinter } from "./linting/xquery-linter";
2018-04-27 23:10:55 -04:00
import { XmlTreeDataProvider } from "./tree-view/xml-tree-data-provider";
2018-01-28 01:19:06 -05:00
import * as constants from "./constants";
2018-01-27 20:30:03 -05:00
export function activate(context: ExtensionContext) {
2018-01-28 01:19:06 -05:00
const config = workspace.getConfiguration(constants.extensionPrefix);
2018-01-27 20:30:03 -05:00
2018-03-01 21:50:18 -05:00
/* Completion Features */
context.subscriptions.push(
languages.registerCompletionItemProvider("xquery", new XQueryCompletionItemProvider(), ":", "$")
);
2018-01-28 01:19:06 -05:00
/* Formatting Features */
2018-03-01 21:22:53 -05:00
const xmlFormattingEditProvider = new XmlFormattingEditProvider(config, XmlFormatterFactory.getXmlFormatter());
2018-01-27 20:30:03 -05:00
2018-01-28 01:19:06 -05:00
context.subscriptions.push(
2018-03-01 21:22:53 -05:00
commands.registerTextEditorCommand(FormatAsXmlCommandName, formatAsXml),
2018-03-01 21:31:14 -05:00
commands.registerTextEditorCommand(MinifyXmlCommandName, minifyXml),
2018-01-28 01:19:06 -05:00
languages.registerDocumentFormattingEditProvider("xml", xmlFormattingEditProvider),
languages.registerDocumentRangeFormattingEditProvider("xml", xmlFormattingEditProvider)
);
2018-02-13 23:25:07 -05:00
/* Linting Features */
context.subscriptions.push(
window.onDidChangeActiveTextEditor(_handleChangeActiveTextEditor),
window.onDidChangeTextEditorSelection(_handleChangeTextEditorSelection)
);
2018-04-27 23:10:55 -04:00
/* Tree View Features */
context.subscriptions.push(
window.registerTreeDataProvider("xmlTreeView", new XmlTreeDataProvider(context))
);
2018-01-27 20:30:03 -05:00
}
2018-01-28 01:19:06 -05:00
export function deactivate() {
// do nothing
}
2018-02-13 23:25:07 -05:00
function _handleContextChange(editor: TextEditor): void {
if (!editor || !editor.document) {
return;
}
2018-02-13 23:30:01 -05:00
2018-02-13 23:25:07 -05:00
switch (editor.document.languageId) {
case "xquery":
languages.createDiagnosticCollection("XQueryDiagnostics").set(editor.document.uri, new XQueryLinter().lint(editor.document.getText()));
break;
}
}
function _handleChangeActiveTextEditor(editor: TextEditor): void {
_handleContextChange(editor);
}
function _handleChangeTextEditorSelection(e: TextEditorSelectionChangeEvent): void {
_handleContextChange(e.textEditor);
}