emmet serverless

This commit is contained in:
Martin Aeschlimann 2020-07-09 17:23:06 +02:00
parent 33b51eb210
commit 9b1773e013
11 changed files with 162 additions and 96 deletions

View file

@ -0,0 +1,22 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
//@ts-check
'use strict';
const withBrowserDefaults
= require('../shared.webpack.config').browser;
module.exports = withBrowserDefaults({
context: __dirname,
entry: {
extension: './src/browser/emmetBrowserMain.ts'
},
output: {
filename: 'emmetBrowserMain.js'
}
});

View file

@ -7,14 +7,20 @@
'use strict';
const path = require('path');
const withDefaults = require('../shared.webpack.config');
module.exports = withDefaults({
context: __dirname,
entry: {
extension: './src/extension.ts',
extension: './src/node/emmetNodeMain.ts',
},
output: {
path: path.join(__dirname, 'dist', 'node'),
filename: 'emmetNodeMain.js'
},
externals: {
'vscode-emmet-helper': 'commonjs vscode-emmet-helper',
'vscode-emmet-helper2': 'commonjs vscode-emmet-helper2',
},
});

View file

@ -24,7 +24,8 @@
"onLanguage:scss",
"onLanguage:less"
],
"main": "./out/extension",
"main": "./out/node/emmetNodeMain",
"browser": "./dist/browser/emmetBrowserMain",
"contributes": {
"configuration": {
"type": "object",
@ -50,7 +51,7 @@
"emmet.includeLanguages": {
"type": "object",
"additionalProperties": {
"type": "string"
"type": "string"
},
"default": {},
"markdownDescription": "%emmetIncludeLanguages%"
@ -346,96 +347,74 @@
"menus": {
"commandPalette": [
{
"command": "editor.emmet.action.wrapIndividualLinesWithAbbreviation",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.wrapIndividualLinesWithAbbreviation"
},
{
"command": "editor.emmet.action.wrapWithAbbreviation",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.wrapWithAbbreviation"
},
{
"command": "editor.emmet.action.removeTag",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.removeTag"
},
{
"command": "editor.emmet.action.updateTag",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.updateTag"
},
{
"command": "editor.emmet.action.matchTag",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.matchTag"
},
{
"command": "editor.emmet.action.balanceIn",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.balanceIn"
},
{
"command": "editor.emmet.action.balanceOut",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.balanceOut"
},
{
"command": "editor.emmet.action.prevEditPoint",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.prevEditPoint"
},
{
"command": "editor.emmet.action.nextEditPoint",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.nextEditPoint"
},
{
"command": "editor.emmet.action.mergeLines",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.mergeLines"
},
{
"command": "editor.emmet.action.selectPrevItem",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.selectPrevItem"
},
{
"command": "editor.emmet.action.selectNextItem",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.selectNextItem"
},
{
"command": "editor.emmet.action.splitJoinTag",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.splitJoinTag"
},
{
"command": "editor.emmet.action.toggleComment",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.toggleComment"
},
{
"command": "editor.emmet.action.evaluateMathExpression",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.evaluateMathExpression"
},
{
"command": "editor.emmet.action.updateImageSize",
"when": "resourceScheme =~ /^untitled$|^file$/"
"when": "resourceScheme =~ /^file$/"
},
{
"command": "editor.emmet.action.incrementNumberByOneTenth",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.incrementNumberByOneTenth"
},
{
"command": "editor.emmet.action.incrementNumberByOne",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.incrementNumberByOne"
},
{
"command": "editor.emmet.action.incrementNumberByTen",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.incrementNumberByTen"
},
{
"command": "editor.emmet.action.decrementNumberByOneTenth",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.decrementNumberByOneTenth"
},
{
"command": "editor.emmet.action.decrementNumberByOne",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.decrementNumberByOne"
},
{
"command": "editor.emmet.action.decrementNumberByTen",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.decrementNumberByTen"
},
{
"command": "editor.emmet.action.reflectCSSValue",
"when": "resourceScheme =~ /^untitled$|^file$/"
"command": "editor.emmet.action.reflectCSSValue"
}
]
}
@ -443,7 +422,7 @@
"scripts": {
"watch": "gulp watch-extension:emmet",
"compile": "gulp compile-extension:emmet",
"deps": "yarn add vscode-emmet-helper"
"deps": "yarn add vscode-emmet-helper2"
},
"devDependencies": {
"@types/node": "^12.11.7",
@ -456,7 +435,7 @@
"@emmetio/html-matcher": "^0.3.3",
"@emmetio/math-expression": "^0.1.1",
"image-size": "^0.5.2",
"vscode-emmet-helper": "^1.2.17",
"vscode-emmet-helper2": "^2.0.0-next.0",
"vscode-html-languageservice": "^3.0.3"
}
}

View file

@ -5,7 +5,7 @@
import * as vscode from 'vscode';
import { Node, HtmlNode, Rule, Property, Stylesheet } from 'EmmetNode';
import { getEmmetHelper, getNode, getInnerRange, getMappingForIncludedLanguages, parseDocument, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode, parsePartialStylesheet, isStyleAttribute, getEmbeddedCssNodeIfAny, allowedMimeTypesInScriptTag } from './util';
import { getEmmetHelper, getNode, getInnerRange, getMappingForIncludedLanguages, parseDocument, validate, getEmmetConfiguration, isStyleSheet, getEmmetMode, parsePartialStylesheet, isStyleAttribute, getEmbeddedCssNodeIfAny, allowedMimeTypesInScriptTag, toLSTextDocument } from './util';
const trimRegex = /[\u00a0]*[\d#\-\*\u2022]+\.?/;
const hexColorRegex = /^#[\da-fA-F]{0,6}$/;
@ -276,6 +276,7 @@ export function expandEmmetAbbreviation(args: any): Thenable<boolean | undefined
const helper = getEmmetHelper();
let getAbbreviation = (document: vscode.TextDocument, selection: vscode.Selection, position: vscode.Position, syntax: string): [vscode.Range | null, string, string] => {
position = document.validatePosition(position);
let rangeToReplace: vscode.Range = selection;
let abbr = document.getText(rangeToReplace);
if (!rangeToReplace.isEmpty) {
@ -299,7 +300,7 @@ export function expandEmmetAbbreviation(args: any): Thenable<boolean | undefined
return [rangeToReplace, abbr, ''];
}
}
let extractedResults = helper.extractAbbreviation(editor.document, position, false);
let extractedResults = helper.extractAbbreviation(toLSTextDocument(editor.document), position, false);
if (!extractedResults) {
return [null, '', ''];
}
@ -608,7 +609,7 @@ function expandAbbreviationInRange(editor: vscode.TextEditor, expandAbbrList: Ex
/**
* Expands abbreviation as detailed in given input.
*/
function expandAbbr(input: ExpandAbbreviationInput): string {
function expandAbbr(input: ExpandAbbreviationInput): string | undefined {
const helper = getEmmetHelper();
const expandOptions = helper.getExpandOptions(input.syntax, getEmmetConfiguration(input.syntax), input.filter);

View file

@ -0,0 +1,11 @@
/*---------------------------------------------------------------------------------------------
* 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 { activateEmmetExtension } from '../emmetCommon';
export function activate(context: vscode.ExtensionContext) {
activateEmmetExtension(context);
}

View file

@ -6,8 +6,8 @@
import * as vscode from 'vscode';
import { Node, Stylesheet } from 'EmmetNode';
import { isValidLocationForEmmetAbbreviation, getSyntaxFromArgs } from './abbreviationActions';
import { getEmmetHelper, getMappingForIncludedLanguages, parsePartialStylesheet, getEmmetConfiguration, getEmmetMode, isStyleSheet, parseDocument, getNode, allowedMimeTypesInScriptTag, trimQuotes } from './util';
import { getLanguageService, TextDocument, TokenType } from 'vscode-html-languageservice';
import { getEmmetHelper, getMappingForIncludedLanguages, parsePartialStylesheet, getEmmetConfiguration, getEmmetMode, isStyleSheet, parseDocument, getNode, allowedMimeTypesInScriptTag, trimQuotes, toLSTextDocument } from './util';
import { getLanguageService, TokenType, Range as LSRange } from 'vscode-html-languageservice';
export class DefaultCompletionItemProvider implements vscode.CompletionItemProvider {
@ -50,19 +50,24 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
const mappedLanguages = getMappingForIncludedLanguages();
const isSyntaxMapped = mappedLanguages[document.languageId] ? true : false;
let syntax = getEmmetMode((isSyntaxMapped ? mappedLanguages[document.languageId] : document.languageId), excludedLanguages);
let emmetMode = getEmmetMode((isSyntaxMapped ? mappedLanguages[document.languageId] : document.languageId), excludedLanguages);
if (!syntax
if (!emmetMode
|| emmetConfig['showExpandedAbbreviation'] === 'never'
|| ((isSyntaxMapped || syntax === 'jsx') && emmetConfig['showExpandedAbbreviation'] !== 'always')) {
|| ((isSyntaxMapped || emmetMode === 'jsx') && emmetConfig['showExpandedAbbreviation'] !== 'always')) {
return;
}
let syntax = emmetMode;
const helper = getEmmetHelper();
let validateLocation = syntax === 'html' || syntax === 'jsx' || syntax === 'xml';
let rootNode: Node | undefined = undefined;
let currentNode: Node | null = null;
const lsDoc = toLSTextDocument(document);
position = document.validatePosition(position);
if (document.languageId === 'html') {
if (context.triggerKind === vscode.CompletionTriggerKind.TriggerForIncompleteCompletions) {
switch (this.lastCompletionType) {
@ -79,7 +84,7 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
}
if (validateLocation) {
const lsDoc = TextDocument.create(document.uri.toString(), 'html', 0, document.getText());
const parsedLsDoc = this.htmlLS.parseHTMLDocument(lsDoc);
const positionOffset = document.offsetAt(position);
const node = parsedLsDoc.findNodeAt(positionOffset);
@ -132,7 +137,7 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
}
}
const extractAbbreviationResults = helper.extractAbbreviation(document, position, !isStyleSheet(syntax));
const extractAbbreviationResults = helper.extractAbbreviation(lsDoc, position, !isStyleSheet(syntax));
if (!extractAbbreviationResults || !helper.isAbbreviationValid(syntax, extractAbbreviationResults.abbreviation)) {
return;
}
@ -149,7 +154,7 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
if (validateLocation && !isValidLocationForEmmetAbbreviation(document, rootNode, currentNode, syntax, position, extractAbbreviationResults.abbreviationRange)) {
if (validateLocation && !isValidLocationForEmmetAbbreviation(document, rootNode, currentNode, syntax, position, toRange(extractAbbreviationResults.abbreviationRange))) {
return;
}
@ -174,7 +179,7 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
return;
}
let result = helper.doComplete(document, position, syntax, getEmmetConfiguration(syntax!));
let result = helper.doComplete(toLSTextDocument(document), position, syntax, getEmmetConfiguration(syntax!));
// https://github.com/microsoft/vscode/issues/86941
if (result && result.items && result.items.length === 1) {
@ -207,3 +212,7 @@ export class DefaultCompletionItemProvider implements vscode.CompletionItemProvi
});
}
}
function toRange(lsRange: LSRange) {
return new vscode.Range(lsRange.start.line, lsRange.start.character, lsRange.end.line, lsRange.end.character);
}

View file

@ -18,10 +18,9 @@ import { fetchSelectItem } from './selectItem';
import { evaluateMathExpression } from './evaluateMathExpression';
import { incrementDecrement } from './incrementDecrement';
import { LANGUAGE_MODES, getMappingForIncludedLanguages, updateEmmetExtensionsPath } from './util';
import { updateImageSize } from './updateImageSize';
import { reflectCssValue } from './reflectCssValue';
export function activate(context: vscode.ExtensionContext) {
export function activateEmmetExtension(context: vscode.ExtensionContext) {
registerCompletionProviders(context);
context.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.wrapWithAbbreviation', (args) => {
@ -121,10 +120,6 @@ export function activate(context: vscode.ExtensionContext) {
return incrementDecrement(-10);
}));
context.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.updateImageSize', () => {
return updateImageSize();
}));
context.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.reflectCSSValue', () => {
return reflectCssValue();
}));

View file

@ -0,0 +1,19 @@
/*---------------------------------------------------------------------------------------------
* 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 { homedir } from 'os';
import { activateEmmetExtension } from '../emmetCommon';
import { setHomeDir } from '../util';
export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(vscode.commands.registerCommand('editor.emmet.action.updateImageSize', () => {
return import('../updateImageSize').then(uis => uis.updateImageSize());
}));
setHomeDir(vscode.Uri.file(homedir()));
activateEmmetExtension(context);
}

View file

@ -4,9 +4,8 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import { getDeepestNode, findNextWord, findPrevWord, getHtmlNode } from './util';
import { getDeepestNode, findNextWord, findPrevWord, getHtmlNode, isNumber } from './util';
import { HtmlNode } from 'EmmetNode';
import { isNumber } from 'util';
export function nextItemHTML(selectionStart: vscode.Position, selectionEnd: vscode.Position, editor: vscode.TextEditor, rootNode: HtmlNode): vscode.Selection | undefined {
let currentNode = getHtmlNode(editor.document, rootNode, selectionEnd, false);
@ -209,4 +208,4 @@ function getPrevAttribute(selectionStart: vscode.Position, selectionEnd: vscode.
}
return;
}
}

View file

@ -8,15 +8,25 @@ import parse from '@emmetio/html-matcher';
import parseStylesheet from '@emmetio/css-parser';
import { Node, HtmlNode, CssToken, Property, Rule, Stylesheet } from 'EmmetNode';
import { DocumentStreamReader } from './bufferStream';
import * as EmmetHelper from 'vscode-emmet-helper2';
import { TextDocument as LSTextDocument } from 'vscode-html-languageservice';
let _emmetHelper: any;
let _emmetHelper: typeof EmmetHelper;
let _currentExtensionsPath: string | undefined = undefined;
let _homeDir: vscode.Uri | undefined;
export function setHomeDir(homeDir: vscode.Uri) {
_homeDir = homeDir;
}
export function getEmmetHelper() {
// Lazy load vscode-emmet-helper instead of importing it
// directly to reduce the start-up time of the extension
if (!_emmetHelper) {
_emmetHelper = require('vscode-emmet-helper');
_emmetHelper = require('vscode-emmet-helper2');
}
updateEmmetExtensionsPath();
return _emmetHelper;
@ -32,11 +42,12 @@ export function updateEmmetExtensionsPath() {
let extensionsPath = vscode.workspace.getConfiguration('emmet')['extensionsPath'];
if (_currentExtensionsPath !== extensionsPath) {
_currentExtensionsPath = extensionsPath;
if (!vscode.workspace.workspaceFolders) {
if (!vscode.workspace.workspaceFolders || vscode.workspace.workspaceFolders.length === 0) {
return;
} else {
const rootPath = vscode.workspace.workspaceFolders[0].uri.fsPath;
_emmetHelper.updateExtensionsPath(extensionsPath, rootPath).then(null, (err: string) => vscode.window.showErrorMessage(err));
const rootPath = vscode.workspace.workspaceFolders[0].uri;
const fileSystem = vscode.workspace.fs;
_emmetHelper.updateExtensionsPath(extensionsPath, fileSystem, rootPath, _homeDir).then(null, (err: string) => vscode.window.showErrorMessage(err));
}
}
}
@ -628,3 +639,11 @@ export function trimQuotes(s: string) {
return s;
}
export function isNumber(obj: any): obj is number {
return typeof obj === 'number';
}
export function toLSTextDocument(doc: vscode.TextDocument): LSTextDocument {
return LSTextDocument.create(doc.uri.toString(), doc.languageId, doc.version, doc.getText());
}

View file

@ -9,10 +9,10 @@
"@emmetio/stream-reader" "^2.2.0"
"@emmetio/stream-reader-utils" "^0.1.0"
"@emmetio/extract-abbreviation@0.1.6":
version "0.1.6"
resolved "https://registry.yarnpkg.com/@emmetio/extract-abbreviation/-/extract-abbreviation-0.1.6.tgz#e4a9856c1057f0aff7d443b8536477c243abe28c"
integrity sha512-Ce3xE2JvTSEbASFbRbA1gAIcMcZWdS2yUYRaQbeM0nbOzaZrUYfa3ePtcriYRZOZmr+CkKA+zbjhvTpIOAYVcw==
"@emmetio/extract-abbreviation@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@emmetio/extract-abbreviation/-/extract-abbreviation-0.2.0.tgz#0afc2b40c060549b98ea7b18f426e8317df5829e"
integrity sha512-eWIRoybKwQ0LkZw7aSULPFS+r2kp0+HdJlnw0HaE6g3AKbMNL4Ogwm2OTA9gNWZ5zdp6daOAOHFqjDqqhE5y/g==
"@emmetio/html-matcher@^0.3.3":
version "0.3.3"
@ -1233,10 +1233,10 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
jsonc-parser@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272"
integrity sha1-3cyGSucI5gp6bdNtrqABcvqNknI=
jsonc-parser@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.0.tgz#7c7fc988ee1486d35734faaaa866fadb00fa91ee"
integrity sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==
jsonify@~0.0.0:
version "0.0.0"
@ -2469,14 +2469,15 @@ vinyl@~2.0.1:
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
vscode-emmet-helper@^1.2.17:
version "1.2.17"
resolved "https://registry.yarnpkg.com/vscode-emmet-helper/-/vscode-emmet-helper-1.2.17.tgz#f0c6bfcebc4285d081fb2618e6e5b9a08c567afa"
integrity sha512-X4pzcrJ8dE7M3ArFuySF5fgipKDd/EauXkiJwtjBIVRWpVNq0tF9+lNCyuC7iDUwP3Oq7ow/TGssD3GdG96Jow==
vscode-emmet-helper2@^2.0.0-next.0:
version "2.0.0-next.0"
resolved "https://registry.yarnpkg.com/vscode-emmet-helper2/-/vscode-emmet-helper2-2.0.0-next.0.tgz#86eb4c2e581a577e7eb56a51f662e72fb1c63b47"
integrity sha512-ccm6Fb5dkbdEDNLIAebWwVcb8X3AXZDsACLi4KYdCxyFSMV+pOoNokBf4rsu+rSYWNe+fMqxjXZs9z0G2CxPGg==
dependencies:
"@emmetio/extract-abbreviation" "0.1.6"
jsonc-parser "^1.0.0"
vscode-languageserver-types "^3.6.0-next.1"
"@emmetio/extract-abbreviation" "^0.2.0"
jsonc-parser "^2.3.0"
vscode-languageserver-types "^3.15.1"
vscode-uri "^2.1.2"
vscode-html-languageservice@^3.0.3:
version "3.0.3"
@ -2492,10 +2493,10 @@ vscode-languageserver-types@^3.15.0-next.2:
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.0-next.2.tgz#a0601332cdaafac21931f497bb080cfb8d73f254"
integrity sha512-2JkrMWWUi2rlVLSo9OFR2PIGUzdiowEM8NgNYiwLKnXTjpwpjjIrJbNNxDik7Rv4oo9KtikcFQZKXbrKilL/MQ==
vscode-languageserver-types@^3.6.0-next.1:
version "3.6.0-next.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.0-next.1.tgz#98e488d3f87b666b4ee1a3d89f0023e246d358f3"
integrity sha512-n4G+hCgZwAhtcJSCkwJP153TLdcEBWwrIrb3Su/SpOkhmU7KjDgxaQBLA45hf+QbhB8uKQb+TVStPvbuYFHSMA==
vscode-languageserver-types@^3.15.1:
version "3.15.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz#17be71d78d2f6236d414f0001ce1ef4d23e6b6de"
integrity sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==
vscode-nls@^4.1.1:
version "4.1.1"
@ -2507,6 +2508,11 @@ vscode-uri@^2.0.3:
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.0.3.tgz#25e5f37f552fbee3cec7e5f80cef8469cefc6543"
integrity sha512-4D3DI3F4uRy09WNtDGD93H9q034OHImxiIcSq664Hq1Y1AScehlP3qqZyTkX/RWxeu0MRMHGkrxYqm2qlDF/aw==
vscode-uri@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c"
integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==
vscode@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.0.1.tgz#3d161200615fe2af1d92ddc650751159411a513b"