diff --git a/build/npm/dirs.js b/build/npm/dirs.js index a2a22f333b..90ff8cb589 100644 --- a/build/npm/dirs.js +++ b/build/npm/dirs.js @@ -56,6 +56,7 @@ const dirs = [ 'extensions/sql-database-projects', 'extensions/sql-migration', 'extensions/vscode-test-resolver', + 'extensions/xml-language-features', // {{SQL CARBON EDIT}} - End 'remote', 'remote/web', diff --git a/extensions/xml-language-features/.eslintrc.json b/extensions/xml-language-features/.eslintrc.json new file mode 100644 index 0000000000..0b87813c38 --- /dev/null +++ b/extensions/xml-language-features/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "rules": { + "@typescript-eslint/explicit-function-return-type": ["off"], + "@typescript-eslint/await-thenable": ["off"] + } +} diff --git a/extensions/xml-language-features/.vscodeignore b/extensions/xml-language-features/.vscodeignore new file mode 100644 index 0000000000..469e86abac --- /dev/null +++ b/extensions/xml-language-features/.vscodeignore @@ -0,0 +1,11 @@ +test/** +src/** +tsconfig.json +out/test/** +out/** +extension.webpack.config.js +cgmanifest.json +yarn.lock +preview-src/** +webpack.config.js +.vscode diff --git a/extensions/xml-language-features/extension.webpack.config.js b/extensions/xml-language-features/extension.webpack.config.js new file mode 100644 index 0000000000..f35561d9f2 --- /dev/null +++ b/extensions/xml-language-features/extension.webpack.config.js @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +//@ts-check + +'use strict'; + +const withDefaults = require('../shared.webpack.config'); + +module.exports = withDefaults({ + context: __dirname, + resolve: { + mainFields: ['module', 'main'] + }, + entry: { + extension: './src/extension.ts', + } +}); diff --git a/extensions/xml-language-features/package.json b/extensions/xml-language-features/package.json new file mode 100644 index 0000000000..47da07861c --- /dev/null +++ b/extensions/xml-language-features/package.json @@ -0,0 +1,28 @@ +{ + "name": "xml-language-features", + "displayName": "%displayName%", + "description": "%description%", + "version": "1.0.0", + "publisher": "Microsoft", + "engines": { + "vscode": "^1.20.0" + }, + "main": "./out/extension", + "categories": [ + "Programming Languages" + ], + "activationEvents": [ + "onLanguage:sql", + "onLanguage:xml" + ], + "scripts": { + "compile": "gulp compile-extension:markdown-language-features && npm run build-preview", + "watch": "npm run build-preview && gulp watch-extension:markdown-language-features", + "vscode:prepublish": "npm run build-ext && npm run build-preview", + "build-ext": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:markdown-language-features ./tsconfig.json", + "build-preview": "webpack --mode development" + }, + "dependencies": { + "tsxml": "^0.1.0" + } +} diff --git a/extensions/xml-language-features/package.nls.json b/extensions/xml-language-features/package.nls.json new file mode 100644 index 0000000000..0021e0b113 --- /dev/null +++ b/extensions/xml-language-features/package.nls.json @@ -0,0 +1,4 @@ +{ + "displayName": "XML Language Features", + "description": "Provides rich language support for XML." +} diff --git a/extensions/xml-language-features/src/extension.ts b/extensions/xml-language-features/src/extension.ts new file mode 100644 index 0000000000..4e865f75ab --- /dev/null +++ b/extensions/xml-language-features/src/extension.ts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import * as xml from 'tsxml'; + +export function activate(context: vscode.ExtensionContext) { + context.subscriptions.push(vscode.languages.registerDocumentFormattingEditProvider({ language: 'xml' }, { + provideDocumentFormattingEdits: document => format(document) + })); +} + +function format(document: vscode.TextDocument): vscode.ProviderResult { + const range = new vscode.Range(0, 0, document.lineCount, document.lineAt(document.lineCount - 1).range.end.character); + return xml.Compiler.formatXmlString(document.getText()).then(formatted => [new vscode.TextEdit(range, formatted)], () => [new vscode.TextEdit(range, document.getText())]); +} diff --git a/extensions/xml-language-features/tsconfig.json b/extensions/xml-language-features/tsconfig.json new file mode 100644 index 0000000000..ac03ca408b --- /dev/null +++ b/extensions/xml-language-features/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "outDir": "./out", + "experimentalDecorators": true, + "typeRoots": [ + "./node_modules/@types" + ] + }, + "include": [ + "src/**/*", + "../../src/vscode-dts/vscode.d.ts", + "../../src/vscode-dts/vscode.proposed.notebookWorkspaceEdit.d.ts" + ] +} diff --git a/extensions/xml-language-features/yarn.lock b/extensions/xml-language-features/yarn.lock new file mode 100644 index 0000000000..cf7e370ca0 --- /dev/null +++ b/extensions/xml-language-features/yarn.lock @@ -0,0 +1,8 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +tsxml@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tsxml/-/tsxml-0.1.0.tgz#d73f14a0d844af51edc0b98bdb52634a41b9b0d4" + integrity sha1-1z8UoNhEr1HtwLmL21JjSkG5sNQ=