mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 04:49:35 +00:00
[html] update dependencies, extract folding, folding tests
This commit is contained in:
parent
a4c05af8a3
commit
6804f4d9cd
|
@ -235,8 +235,8 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"vscode-extension-telemetry": "0.0.15",
|
"vscode-extension-telemetry": "0.0.15",
|
||||||
"vscode-languageclient": "4.0.0-next.9",
|
"vscode-languageclient": "^4.0.0",
|
||||||
"vscode-nls": "^3.2.1"
|
"vscode-nls": "^3.2.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "7.0.43"
|
"@types/node": "7.0.43"
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
"node": "*"
|
"node": "*"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"vscode-css-languageservice": "^3.0.6",
|
"vscode-css-languageservice": "^3.0.8",
|
||||||
"vscode-emmet-helper": "1.2.1",
|
"vscode-emmet-helper": "1.2.1",
|
||||||
"vscode-html-languageservice": "^2.0.17-next.3",
|
"vscode-html-languageservice": "^2.1.1",
|
||||||
"vscode-languageserver": "4.0.0-next.4",
|
"vscode-languageserver": "^4.0.0",
|
||||||
"vscode-languageserver-types": "^3.6.0-next.1",
|
"vscode-languageserver-types": "^3.6.1",
|
||||||
"vscode-nls": "^3.2.1",
|
"vscode-nls": "^3.2.2",
|
||||||
"vscode-uri": "^1.0.1"
|
"vscode-uri": "^1.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/mocha": "2.2.33",
|
"@types/mocha": "2.2.33",
|
||||||
|
|
|
@ -4,14 +4,15 @@
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, RequestType, DocumentRangeFormattingRequest, Disposable, DocumentSelector, TextDocumentPositionParams, ServerCapabilities, Position, CompletionTriggerKind } from 'vscode-languageserver';
|
import {
|
||||||
|
createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, RequestType,
|
||||||
|
DocumentRangeFormattingRequest, Disposable, DocumentSelector, TextDocumentPositionParams, ServerCapabilities,
|
||||||
|
Position, CompletionTriggerKind, ConfigurationRequest, ConfigurationParams, DidChangeWorkspaceFoldersNotification,
|
||||||
|
WorkspaceFolder, DocumentColorRequest, ColorInformation, ColorPresentationRequest
|
||||||
|
} from 'vscode-languageserver';
|
||||||
import { TextDocument, Diagnostic, DocumentLink, SymbolInformation, CompletionList } from 'vscode-languageserver-types';
|
import { TextDocument, Diagnostic, DocumentLink, SymbolInformation, CompletionList } from 'vscode-languageserver-types';
|
||||||
import { getLanguageModes, LanguageModes, Settings } from './modes/languageModes';
|
import { getLanguageModes, LanguageModes, Settings } from './modes/languageModes';
|
||||||
|
|
||||||
import { ConfigurationRequest, ConfigurationParams } from 'vscode-languageserver-protocol/lib/protocol.configuration.proposed';
|
|
||||||
import { DocumentColorRequest, ServerCapabilities as CPServerCapabilities, ColorInformation, ColorPresentationRequest } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed';
|
|
||||||
import { DidChangeWorkspaceFoldersNotification, WorkspaceFolder } from 'vscode-languageserver-protocol/lib/protocol.workspaceFolders.proposed';
|
|
||||||
|
|
||||||
import { format } from './modes/formatting';
|
import { format } from './modes/formatting';
|
||||||
import { pushAll } from './utils/arrays';
|
import { pushAll } from './utils/arrays';
|
||||||
import { getDocumentContext } from './utils/documentContext';
|
import { getDocumentContext } from './utils/documentContext';
|
||||||
|
@ -21,6 +22,7 @@ import { doComplete as emmetDoComplete, updateExtensionsPath as updateEmmetExten
|
||||||
import { getPathCompletionParticipant } from './modes/pathCompletion';
|
import { getPathCompletionParticipant } from './modes/pathCompletion';
|
||||||
|
|
||||||
import { FoldingRangesRequest, FoldingProviderServerCapabilities } from './protocol/foldingProvider.proposed';
|
import { FoldingRangesRequest, FoldingProviderServerCapabilities } from './protocol/foldingProvider.proposed';
|
||||||
|
import { getFoldingRegions } from './modes/htmlFolding';
|
||||||
|
|
||||||
namespace TagCloseRequest {
|
namespace TagCloseRequest {
|
||||||
export const type: RequestType<TextDocumentPositionParams, string | null, any, any> = new RequestType('html/tag');
|
export const type: RequestType<TextDocumentPositionParams, string | null, any, any> = new RequestType('html/tag');
|
||||||
|
@ -113,7 +115,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
|
||||||
clientDynamicRegisterSupport = hasClientCapability('workspace', 'symbol', 'dynamicRegistration');
|
clientDynamicRegisterSupport = hasClientCapability('workspace', 'symbol', 'dynamicRegistration');
|
||||||
scopedSettingsSupport = hasClientCapability('workspace', 'configuration');
|
scopedSettingsSupport = hasClientCapability('workspace', 'configuration');
|
||||||
workspaceFoldersSupport = hasClientCapability('workspace', 'workspaceFolders');
|
workspaceFoldersSupport = hasClientCapability('workspace', 'workspaceFolders');
|
||||||
let capabilities: ServerCapabilities & CPServerCapabilities & FoldingProviderServerCapabilities = {
|
let capabilities: ServerCapabilities & FoldingProviderServerCapabilities = {
|
||||||
// Tell the client that the server works in FULL text document sync mode
|
// Tell the client that the server works in FULL text document sync mode
|
||||||
textDocumentSync: documents.syncKind,
|
textDocumentSync: documents.syncKind,
|
||||||
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: [...emmetTriggerCharacters, '.', ':', '<', '"', '=', '/'] } : undefined,
|
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: [...emmetTriggerCharacters, '.', ':', '<', '"', '=', '/'] } : undefined,
|
||||||
|
@ -469,15 +471,11 @@ connection.onRequest(TagCloseRequest.type, params => {
|
||||||
}, null, `Error while computing tag close actions for ${params.textDocument.uri}`);
|
}, null, `Error while computing tag close actions for ${params.textDocument.uri}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
connection.onRequest(FoldingRangesRequest.type, params => {
|
connection.onRequest(FoldingRangesRequest.type, (params, token) => {
|
||||||
return runSafe(() => {
|
return runSafe(() => {
|
||||||
let document = documents.get(params.textDocument.uri);
|
let document = documents.get(params.textDocument.uri);
|
||||||
if (document) {
|
if (document) {
|
||||||
let mode = languageModes.getMode('html');
|
return getFoldingRegions(languageModes, document, params.maxRanges, token);
|
||||||
if (mode && mode.getFoldingRanges) {
|
|
||||||
return mode.getFoldingRanges(document);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}, null, `Error while computing folding regions for ${params.textDocument.uri}`);
|
}, null, `Error while computing folding regions for ${params.textDocument.uri}`);
|
||||||
|
|
|
@ -9,7 +9,7 @@ import { TextDocument, Position, Range } from 'vscode-languageserver-types';
|
||||||
import { getCSSLanguageService, Stylesheet, ICompletionParticipant } from 'vscode-css-languageservice';
|
import { getCSSLanguageService, Stylesheet, ICompletionParticipant } from 'vscode-css-languageservice';
|
||||||
import { LanguageMode, Settings } from './languageModes';
|
import { LanguageMode, Settings } from './languageModes';
|
||||||
import { HTMLDocumentRegions, CSS_STYLE_RULE } from './embeddedSupport';
|
import { HTMLDocumentRegions, CSS_STYLE_RULE } from './embeddedSupport';
|
||||||
import { Color } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed';
|
import { Color } from 'vscode-languageserver';
|
||||||
import { extractAbbreviation } from 'vscode-emmet-helper';
|
import { extractAbbreviation } from 'vscode-emmet-helper';
|
||||||
|
|
||||||
export function getCSSMode(documentRegions: LanguageModelCache<HTMLDocumentRegions>): LanguageMode {
|
export function getCSSMode(documentRegions: LanguageModelCache<HTMLDocumentRegions>): LanguageMode {
|
||||||
|
|
170
extensions/html/server/src/modes/htmlFolding.ts
Normal file
170
extensions/html/server/src/modes/htmlFolding.ts
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
'use strict';
|
||||||
|
import { TextDocument, CancellationToken, Position } from 'vscode-languageserver';
|
||||||
|
import { LanguageService as HTMLLanguageService, TokenType, Range } from 'vscode-html-languageservice';
|
||||||
|
|
||||||
|
import { FoldingRangeType, FoldingRange, FoldingRangeList } from '../protocol/foldingProvider.proposed';
|
||||||
|
import { LanguageModes } from './languageModes';
|
||||||
|
|
||||||
|
export function getFoldingRegions(languageModes: LanguageModes, document: TextDocument, maxRanges: number | undefined, cancellationToken: CancellationToken | null): FoldingRangeList {
|
||||||
|
let htmlMode = languageModes.getMode('html');
|
||||||
|
let range = Range.create(Position.create(0, 0), Position.create(document.lineCount, 0));
|
||||||
|
let ranges: FoldingRange[] = [];
|
||||||
|
if (htmlMode && htmlMode.getFoldingRanges) {
|
||||||
|
ranges.push(...htmlMode.getFoldingRanges(document, range));
|
||||||
|
}
|
||||||
|
let modeRanges = languageModes.getModesInRange(document, range);
|
||||||
|
for (let modeRange of modeRanges) {
|
||||||
|
let mode = modeRange.mode;
|
||||||
|
if (mode && mode !== htmlMode && mode.getFoldingRanges && !modeRange.attributeValue) {
|
||||||
|
ranges.push(...mode.getFoldingRanges(document, modeRange));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (maxRanges && ranges.length > maxRanges) {
|
||||||
|
ranges = limitRanges(ranges, maxRanges);
|
||||||
|
}
|
||||||
|
return { ranges };
|
||||||
|
}
|
||||||
|
|
||||||
|
function limitRanges(ranges: FoldingRange[], maxRanges: number) {
|
||||||
|
ranges = ranges.sort((r1, r2) => {
|
||||||
|
let diff = r1.startLine - r2.startLine;
|
||||||
|
if (diff === 0) {
|
||||||
|
diff = r1.endLine - r2.endLine;
|
||||||
|
}
|
||||||
|
return diff;
|
||||||
|
});
|
||||||
|
|
||||||
|
// compute each range's nesting level in 'nestingLevels'.
|
||||||
|
// count the number of ranges for each level in 'nestingLevelCounts'
|
||||||
|
let top: FoldingRange | null = null;
|
||||||
|
let previous: FoldingRange[] = [];
|
||||||
|
let nestingLevels: number[] = [];
|
||||||
|
let nestingLevelCounts: number[] = [];
|
||||||
|
|
||||||
|
let setNestingLevel = (level: number) => {
|
||||||
|
nestingLevels.push(level);
|
||||||
|
if (level < 30) {
|
||||||
|
nestingLevelCounts[level] = (nestingLevelCounts[level] || 0) + 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
for (let i = 0; i < ranges.length; i++) {
|
||||||
|
let entry = ranges[i];
|
||||||
|
if (!top) {
|
||||||
|
top = entry;
|
||||||
|
setNestingLevel(0);
|
||||||
|
} else {
|
||||||
|
if (entry.startLine > top.startLine) {
|
||||||
|
if (entry.endLine <= top.endLine) {
|
||||||
|
previous.push(top);
|
||||||
|
top = entry;
|
||||||
|
setNestingLevel(previous.length);
|
||||||
|
} else if (entry.startLine > top.startLine) {
|
||||||
|
do {
|
||||||
|
top = previous.pop();
|
||||||
|
} while (top && entry.startLine > top.endLine);
|
||||||
|
previous.push(top);
|
||||||
|
top = entry;
|
||||||
|
setNestingLevel(previous.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let entries = 0;
|
||||||
|
let maxLevel = 0;
|
||||||
|
for (let i = 0; i < nestingLevels.length; i++) {
|
||||||
|
let n = nestingLevels[i];
|
||||||
|
if (n) {
|
||||||
|
if (n + entries > maxRanges) {
|
||||||
|
maxLevel = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
entries += n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ranges.filter((r, index) => (typeof nestingLevels[index] === 'number') && nestingLevels[index] < maxLevel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function getHTMLFoldingRegions(htmlLanguageService: HTMLLanguageService, document: TextDocument, range: Range): FoldingRange[] {
|
||||||
|
const scanner = htmlLanguageService.createScanner(document.getText());
|
||||||
|
let token = scanner.scan();
|
||||||
|
let ranges: FoldingRange[] = [];
|
||||||
|
let stack: FoldingRange[] = [];
|
||||||
|
let elementNames: string[] = [];
|
||||||
|
let lastTagName = null;
|
||||||
|
let prevStart = -1;
|
||||||
|
|
||||||
|
function addRange(range: FoldingRange) {
|
||||||
|
ranges.push(range);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (token !== TokenType.EOS) {
|
||||||
|
switch (token) {
|
||||||
|
case TokenType.StartTagOpen: {
|
||||||
|
let startLine = document.positionAt(scanner.getTokenOffset()).line;
|
||||||
|
let range = { startLine, endLine: startLine };
|
||||||
|
stack.push(range);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TokenType.StartTag: {
|
||||||
|
lastTagName = scanner.getTokenText();
|
||||||
|
elementNames.push(lastTagName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TokenType.EndTag: {
|
||||||
|
lastTagName = scanner.getTokenText();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TokenType.EndTagClose:
|
||||||
|
case TokenType.StartTagSelfClose: {
|
||||||
|
let name = elementNames.pop();
|
||||||
|
let range = stack.pop();
|
||||||
|
while (name && name !== lastTagName) {
|
||||||
|
name = elementNames.pop();
|
||||||
|
range = stack.pop();
|
||||||
|
}
|
||||||
|
let line = document.positionAt(scanner.getTokenOffset()).line;
|
||||||
|
if (range && line > range.startLine + 1 && prevStart !== range.startLine) {
|
||||||
|
range.endLine = line - 1;
|
||||||
|
addRange(range);
|
||||||
|
prevStart = range.startLine;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TokenType.Comment: {
|
||||||
|
let text = scanner.getTokenText();
|
||||||
|
let m = text.match(/^\s*#(region\b)|(endregion\b)/);
|
||||||
|
if (m) {
|
||||||
|
let line = document.positionAt(scanner.getTokenOffset()).line;
|
||||||
|
if (m[1]) { // start pattern match
|
||||||
|
let range = { startLine: line, endLine: line, type: FoldingRangeType.Region };
|
||||||
|
stack.push(range);
|
||||||
|
elementNames.push('');
|
||||||
|
} else {
|
||||||
|
let i = stack.length - 1;
|
||||||
|
while (i >= 0 && stack[i].type !== FoldingRangeType.Region) {
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
if (i >= 0) {
|
||||||
|
let range = stack[i];
|
||||||
|
stack.length = i;
|
||||||
|
if (line > range.startLine && prevStart !== range.startLine) {
|
||||||
|
range.endLine = line;
|
||||||
|
addRange(range);
|
||||||
|
prevStart = range.startLine;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
token = scanner.scan();
|
||||||
|
}
|
||||||
|
return ranges;
|
||||||
|
}
|
|
@ -5,11 +5,12 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { getLanguageModelCache } from '../languageModelCache';
|
import { getLanguageModelCache } from '../languageModelCache';
|
||||||
import { LanguageService as HTMLLanguageService, HTMLDocument, DocumentContext, FormattingOptions, HTMLFormatConfiguration, TokenType } from 'vscode-html-languageservice';
|
import { LanguageService as HTMLLanguageService, HTMLDocument, DocumentContext, FormattingOptions, HTMLFormatConfiguration } from 'vscode-html-languageservice';
|
||||||
import { TextDocument, Position, Range } from 'vscode-languageserver-types';
|
import { TextDocument, Position, Range } from 'vscode-languageserver-types';
|
||||||
import { LanguageMode, Settings } from './languageModes';
|
import { LanguageMode, Settings } from './languageModes';
|
||||||
|
|
||||||
import { FoldingRangeType, FoldingRange, FoldingRangeList } from '../protocol/foldingProvider.proposed';
|
import { FoldingRange } from '../protocol/foldingProvider.proposed';
|
||||||
|
import { getHTMLFoldingRegions } from './htmlFolding';
|
||||||
|
|
||||||
export function getHTMLMode(htmlLanguageService: HTMLLanguageService): LanguageMode {
|
export function getHTMLMode(htmlLanguageService: HTMLLanguageService): LanguageMode {
|
||||||
let globalSettings: Settings = {};
|
let globalSettings: Settings = {};
|
||||||
|
@ -67,78 +68,8 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService): LanguageM
|
||||||
formatSettings = merge(formatParams, formatSettings);
|
formatSettings = merge(formatParams, formatSettings);
|
||||||
return htmlLanguageService.format(document, range, formatSettings);
|
return htmlLanguageService.format(document, range, formatSettings);
|
||||||
},
|
},
|
||||||
getFoldingRanges(document: TextDocument): FoldingRangeList {
|
getFoldingRanges(document: TextDocument, range: Range): FoldingRange[] {
|
||||||
const scanner = htmlLanguageService.createScanner(document.getText());
|
return getHTMLFoldingRegions(htmlLanguageService, document, range);
|
||||||
let token = scanner.scan();
|
|
||||||
let ranges: FoldingRange[] = [];
|
|
||||||
let stack: FoldingRange[] = [];
|
|
||||||
let elementNames: string[] = [];
|
|
||||||
let lastTagName = null;
|
|
||||||
let prevStart = -1;
|
|
||||||
while (token !== TokenType.EOS) {
|
|
||||||
switch (token) {
|
|
||||||
case TokenType.StartTagOpen: {
|
|
||||||
let startLine = document.positionAt(scanner.getTokenOffset()).line;
|
|
||||||
let range = { startLine, endLine: startLine };
|
|
||||||
stack.push(range);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case TokenType.StartTag: {
|
|
||||||
lastTagName = scanner.getTokenText();
|
|
||||||
elementNames.push(lastTagName);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case TokenType.EndTag: {
|
|
||||||
lastTagName = scanner.getTokenText();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case TokenType.EndTagClose:
|
|
||||||
case TokenType.StartTagSelfClose: {
|
|
||||||
let name = elementNames.pop();
|
|
||||||
let range = stack.pop();
|
|
||||||
while (name && name !== lastTagName) {
|
|
||||||
name = elementNames.pop();
|
|
||||||
range = stack.pop();
|
|
||||||
}
|
|
||||||
let line = document.positionAt(scanner.getTokenOffset()).line;
|
|
||||||
if (range && line > range.startLine + 1 && prevStart !== range.startLine) {
|
|
||||||
range.endLine = line - 1;
|
|
||||||
ranges.push(range);
|
|
||||||
prevStart = range.startLine;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case TokenType.Comment: {
|
|
||||||
let text = scanner.getTokenText();
|
|
||||||
let m = text.match(/^\s*#(region\b)|(endregion\b)/);
|
|
||||||
if (m) {
|
|
||||||
let line = document.positionAt(scanner.getTokenOffset()).line;
|
|
||||||
if (m[1]) { // start pattern match
|
|
||||||
let range = { startLine: line, endLine: line, type: FoldingRangeType.Region };
|
|
||||||
stack.push(range);
|
|
||||||
elementNames.push('');
|
|
||||||
} else {
|
|
||||||
let i = stack.length - 1;
|
|
||||||
while (i >= 0 && stack[i].type !== FoldingRangeType.Region) {
|
|
||||||
i--;
|
|
||||||
}
|
|
||||||
if (i >= 0) {
|
|
||||||
let range = stack[i];
|
|
||||||
stack.length = i;
|
|
||||||
if (line > range.startLine && prevStart !== range.startLine) {
|
|
||||||
range.endLine = line;
|
|
||||||
ranges.push(range);
|
|
||||||
prevStart = range.startLine;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
token = scanner.scan();
|
|
||||||
}
|
|
||||||
return <FoldingRangeList>{ ranges };
|
|
||||||
},
|
},
|
||||||
|
|
||||||
doAutoClose(document: TextDocument, position: Position) {
|
doAutoClose(document: TextDocument, position: Position) {
|
||||||
|
|
|
@ -9,8 +9,8 @@ import {
|
||||||
CompletionItem, Location, SignatureHelp, Definition, TextEdit, TextDocument, Diagnostic, DocumentLink, Range,
|
CompletionItem, Location, SignatureHelp, Definition, TextEdit, TextDocument, Diagnostic, DocumentLink, Range,
|
||||||
Hover, DocumentHighlight, CompletionList, Position, FormattingOptions, SymbolInformation
|
Hover, DocumentHighlight, CompletionList, Position, FormattingOptions, SymbolInformation
|
||||||
} from 'vscode-languageserver-types';
|
} from 'vscode-languageserver-types';
|
||||||
|
import { ColorInformation, ColorPresentation, Color } from 'vscode-languageserver';
|
||||||
import { ColorInformation, ColorPresentation, Color } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed';
|
import { FoldingRange } from '../protocol/foldingProvider.proposed';
|
||||||
|
|
||||||
import { getLanguageModelCache, LanguageModelCache } from '../languageModelCache';
|
import { getLanguageModelCache, LanguageModelCache } from '../languageModelCache';
|
||||||
import { getDocumentRegions, HTMLDocumentRegions } from './embeddedSupport';
|
import { getDocumentRegions, HTMLDocumentRegions } from './embeddedSupport';
|
||||||
|
@ -20,8 +20,6 @@ import { getHTMLMode } from './htmlMode';
|
||||||
|
|
||||||
export { ColorInformation, ColorPresentation, Color };
|
export { ColorInformation, ColorPresentation, Color };
|
||||||
|
|
||||||
import { FoldingRangeList } from '../protocol/foldingProvider.proposed';
|
|
||||||
|
|
||||||
export interface Settings {
|
export interface Settings {
|
||||||
css?: any;
|
css?: any;
|
||||||
html?: any;
|
html?: any;
|
||||||
|
@ -51,7 +49,7 @@ export interface LanguageMode {
|
||||||
findDocumentColors?: (document: TextDocument) => ColorInformation[];
|
findDocumentColors?: (document: TextDocument) => ColorInformation[];
|
||||||
getColorPresentations?: (document: TextDocument, color: Color, range: Range) => ColorPresentation[];
|
getColorPresentations?: (document: TextDocument, color: Color, range: Range) => ColorPresentation[];
|
||||||
doAutoClose?: (document: TextDocument, position: Position) => string | null;
|
doAutoClose?: (document: TextDocument, position: Position) => string | null;
|
||||||
getFoldingRanges?: (document: TextDocument) => FoldingRangeList | null;
|
getFoldingRanges?: (document: TextDocument, range: Range) => FoldingRange[];
|
||||||
onDocumentRemoved(document: TextDocument): void;
|
onDocumentRemoved(document: TextDocument): void;
|
||||||
dispose(): void;
|
dispose(): void;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,17 +5,17 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { TextDocument, CompletionList, CompletionItemKind, CompletionItem, TextEdit, Range, Position } from 'vscode-languageserver-types';
|
import { TextDocument, CompletionList, CompletionItemKind, CompletionItem, TextEdit, Range, Position } from 'vscode-languageserver-types';
|
||||||
import { Proposed } from 'vscode-languageserver-protocol';
|
import { WorkspaceFolder } from 'vscode-languageserver';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import URI from 'vscode-uri';
|
import URI from 'vscode-uri';
|
||||||
import { ICompletionParticipant } from 'vscode-html-languageservice/lib/htmlLanguageService';
|
import { ICompletionParticipant } from 'vscode-html-languageservice';
|
||||||
import { startsWith } from '../utils/strings';
|
import { startsWith } from '../utils/strings';
|
||||||
import { contains } from '../utils/arrays';
|
import { contains } from '../utils/arrays';
|
||||||
|
|
||||||
export function getPathCompletionParticipant(
|
export function getPathCompletionParticipant(
|
||||||
document: TextDocument,
|
document: TextDocument,
|
||||||
workspaceFolders: Proposed.WorkspaceFolder[] | undefined,
|
workspaceFolders: WorkspaceFolder[] | undefined,
|
||||||
result: CompletionList
|
result: CompletionList
|
||||||
): ICompletionParticipant {
|
): ICompletionParticipant {
|
||||||
return {
|
return {
|
||||||
|
@ -104,7 +104,7 @@ const isDir = (p: string) => {
|
||||||
return fs.statSync(p).isDirectory();
|
return fs.statSync(p).isDirectory();
|
||||||
};
|
};
|
||||||
|
|
||||||
function resolveWorkspaceRoot(activeDoc: TextDocument, workspaceFolders: Proposed.WorkspaceFolder[]): string | undefined {
|
function resolveWorkspaceRoot(activeDoc: TextDocument, workspaceFolders: WorkspaceFolder[]): string | undefined {
|
||||||
for (let i = 0; i < workspaceFolders.length; i++) {
|
for (let i = 0; i < workspaceFolders.length; i++) {
|
||||||
if (startsWith(activeDoc.uri, workspaceFolders[i].uri)) {
|
if (startsWith(activeDoc.uri, workspaceFolders[i].uri)) {
|
||||||
return path.resolve(URI.parse(workspaceFolders[i].uri).fsPath);
|
return path.resolve(URI.parse(workspaceFolders[i].uri).fsPath);
|
||||||
|
|
|
@ -12,7 +12,7 @@ import { TextDocument, CompletionList, CompletionItemKind, } from 'vscode-langua
|
||||||
import { getLanguageModes } from '../modes/languageModes';
|
import { getLanguageModes } from '../modes/languageModes';
|
||||||
import { applyEdits } from '../utils/edits';
|
import { applyEdits } from '../utils/edits';
|
||||||
import { getPathCompletionParticipant } from '../modes/pathCompletion';
|
import { getPathCompletionParticipant } from '../modes/pathCompletion';
|
||||||
import { Proposed } from 'vscode-languageserver-protocol';
|
import { WorkspaceFolder } from 'vscode-languageserver';
|
||||||
|
|
||||||
export interface ItemDescription {
|
export interface ItemDescription {
|
||||||
label: string;
|
label: string;
|
||||||
|
@ -49,7 +49,7 @@ suite('Completions', () => {
|
||||||
|
|
||||||
const testUri = 'test://test/test.html';
|
const testUri = 'test://test/test.html';
|
||||||
|
|
||||||
function assertCompletions(value: string, expected: { count?: number, items?: ItemDescription[] }, uri = testUri, workspaceFolders?: Proposed.WorkspaceFolder[]): void {
|
function assertCompletions(value: string, expected: { count?: number, items?: ItemDescription[] }, uri = testUri, workspaceFolders?: WorkspaceFolder[]): void {
|
||||||
let offset = value.indexOf('|');
|
let offset = value.indexOf('|');
|
||||||
value = value.substr(0, offset) + value.substr(offset + 1);
|
value = value.substr(0, offset) + value.substr(offset + 1);
|
||||||
|
|
||||||
|
|
140
extensions/html/server/src/test/folding.test.ts
Normal file
140
extensions/html/server/src/test/folding.test.ts
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
import 'mocha';
|
||||||
|
import * as assert from 'assert';
|
||||||
|
import { TextDocument } from 'vscode-languageserver';
|
||||||
|
import { getFoldingRegions } from '../modes/htmlFolding';
|
||||||
|
import { getLanguageModes } from '../modes/languageModes';
|
||||||
|
|
||||||
|
interface ExpectedIndentRange {
|
||||||
|
startLine: number;
|
||||||
|
endLine: number;
|
||||||
|
type?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertRanges(lines: string[], expected: ExpectedIndentRange[], nRanges?: number): void {
|
||||||
|
let document = TextDocument.create('test://foo/bar.json', 'json', 1, lines.join('\n'));
|
||||||
|
let languageModes = getLanguageModes({ css: true, javascript: true });
|
||||||
|
let actual = getFoldingRegions(languageModes, document, nRanges, null)!.ranges;
|
||||||
|
|
||||||
|
let actualRanges = [];
|
||||||
|
for (let i = 0; i < actual.length; i++) {
|
||||||
|
actualRanges[i] = r(actual[i].startLine, actual[i].endLine, actual[i].type);
|
||||||
|
}
|
||||||
|
actualRanges = actualRanges.sort((r1, r2) => r1.startLine - r2.startLine);
|
||||||
|
assert.deepEqual(actualRanges, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
function r(startLine: number, endLine: number, type?: string): ExpectedIndentRange {
|
||||||
|
return { startLine, endLine, type };
|
||||||
|
}
|
||||||
|
|
||||||
|
suite('Object Folding', () => {
|
||||||
|
test('Fold one level', () => {
|
||||||
|
let input = [
|
||||||
|
/*0*/'<html>',
|
||||||
|
/*1*/'Hello',
|
||||||
|
/*2*/'</html>'
|
||||||
|
];
|
||||||
|
assertRanges(input, [r(0, 1)]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Fold two level', () => {
|
||||||
|
let input = [
|
||||||
|
/*0*/'<html>',
|
||||||
|
/*1*/'<head>',
|
||||||
|
/*2*/'Hello',
|
||||||
|
/*3*/'</head>',
|
||||||
|
/*4*/'</html>'
|
||||||
|
];
|
||||||
|
assertRanges(input, [r(0, 3), r(1, 2)]);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Fold siblings', () => {
|
||||||
|
let input = [
|
||||||
|
/*0*/'<html>',
|
||||||
|
/*1*/'<head>',
|
||||||
|
/*2*/'Head',
|
||||||
|
/*3*/'</head>',
|
||||||
|
/*4*/'<body class="f">',
|
||||||
|
/*5*/'Body',
|
||||||
|
/*6*/'</body>',
|
||||||
|
/*7*/'</html>'
|
||||||
|
];
|
||||||
|
assertRanges(input, [r(0, 6), r(1, 2), r(4, 5)]);
|
||||||
|
});
|
||||||
|
|
||||||
|
// test('Fold self-closing tags', () => {
|
||||||
|
// let input = [
|
||||||
|
// /*0*/'<div>',
|
||||||
|
// /*1*/'<a src="top">',
|
||||||
|
// /*2*/'<img ',
|
||||||
|
// /*3*/'</head>',
|
||||||
|
// /*4*/'<body class="f">',
|
||||||
|
// /*5*/'Body',
|
||||||
|
// /*6*/'</body>',
|
||||||
|
// /*7*/'</html>'
|
||||||
|
// ];
|
||||||
|
// assertRanges(input, [r(0, 6), r(1, 2), r(4, 5)]);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// test('Fold commment', () => {
|
||||||
|
// let input = [
|
||||||
|
// /*0*/'/*',
|
||||||
|
// /*1*/' multi line',
|
||||||
|
// /*2*/'*/',
|
||||||
|
// ];
|
||||||
|
// assertRanges(input, [r(0, 2, 'comment')]);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// test('Fold regions', () => {
|
||||||
|
// let input = [
|
||||||
|
// /*0*/'// #region',
|
||||||
|
// /*1*/'{',
|
||||||
|
// /*2*/'}',
|
||||||
|
// /*3*/'// #endregion',
|
||||||
|
// ];
|
||||||
|
// assertRanges(input, [r(0, 3, 'region')]);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// test('Test limit', () => {
|
||||||
|
// let input = [
|
||||||
|
// /* 0*/'[',
|
||||||
|
// /* 1*/' [',
|
||||||
|
// /* 2*/' [',
|
||||||
|
// /* 3*/' ',
|
||||||
|
// /* 4*/' ],',
|
||||||
|
// /* 5*/' [',
|
||||||
|
// /* 6*/' [',
|
||||||
|
// /* 7*/' ',
|
||||||
|
// /* 8*/' ],',
|
||||||
|
// /* 9*/' [',
|
||||||
|
// /*10*/' ',
|
||||||
|
// /*11*/' ],',
|
||||||
|
// /*12*/' ],',
|
||||||
|
// /*13*/' [',
|
||||||
|
// /*14*/' ',
|
||||||
|
// /*15*/' ],',
|
||||||
|
// /*16*/' [',
|
||||||
|
// /*17*/' ',
|
||||||
|
// /*18*/' ]',
|
||||||
|
// /*19*/' ]',
|
||||||
|
// /*20*/']',
|
||||||
|
// ];
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(6, 7, 'array'), r(9, 10, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], void 0);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(6, 7, 'array'), r(9, 10, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], 8);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], 7);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array'), r(2, 3, 'array'), r(5, 11, 'array'), r(13, 14, 'array'), r(16, 17, 'array')], 6);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 5);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 4);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 3);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array'), r(1, 18, 'array')], 2);
|
||||||
|
// assertRanges(input, [r(0, 19, 'array')], 1);
|
||||||
|
// });
|
||||||
|
|
||||||
|
});
|
|
@ -7,7 +7,7 @@
|
||||||
import { DocumentContext } from 'vscode-html-languageservice';
|
import { DocumentContext } from 'vscode-html-languageservice';
|
||||||
import { endsWith, startsWith } from '../utils/strings';
|
import { endsWith, startsWith } from '../utils/strings';
|
||||||
import * as url from 'url';
|
import * as url from 'url';
|
||||||
import { WorkspaceFolder } from 'vscode-languageserver-protocol/lib/protocol.workspaceFolders.proposed';
|
import { WorkspaceFolder } from 'vscode-languageserver';
|
||||||
|
|
||||||
export function getDocumentContext(documentUri: string, workspaceFolders: WorkspaceFolder[]): DocumentContext {
|
export function getDocumentContext(documentUri: string, workspaceFolders: WorkspaceFolder[]): DocumentContext {
|
||||||
function getRootFolder(): string | undefined {
|
function getRootFolder(): string | undefined {
|
||||||
|
|
|
@ -18,12 +18,12 @@ jsonc-parser@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272"
|
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-1.0.0.tgz#ddcc864ae708e60a7a6dd36daea00172fa8d9272"
|
||||||
|
|
||||||
vscode-css-languageservice@^3.0.6:
|
vscode-css-languageservice@^3.0.8:
|
||||||
version "3.0.6"
|
version "3.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.6.tgz#0e9230347040ba0161fba941885195215ec9be40"
|
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.8.tgz#dc27a2f6eefd191bc603be6b9c0a59232a4c2b9f"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-languageserver-types "^3.6.0-next.1"
|
vscode-languageserver-types "^3.6.1"
|
||||||
vscode-nls "^2.0.1"
|
vscode-nls "^3.2.1"
|
||||||
|
|
||||||
vscode-emmet-helper@1.2.1:
|
vscode-emmet-helper@1.2.1:
|
||||||
version "1.2.1"
|
version "1.2.1"
|
||||||
|
@ -33,44 +33,52 @@ vscode-emmet-helper@1.2.1:
|
||||||
jsonc-parser "^1.0.0"
|
jsonc-parser "^1.0.0"
|
||||||
vscode-languageserver-types "^3.6.0-next.1"
|
vscode-languageserver-types "^3.6.0-next.1"
|
||||||
|
|
||||||
vscode-html-languageservice@^2.0.17-next.3:
|
vscode-html-languageservice@^2.1.1:
|
||||||
version "2.0.17-next.3"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.0.17-next.3.tgz#dd5e90fac3073ffc2c624bd26daa9f27adfa50eb"
|
resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.1.1.tgz#11a4e307f3a983d566313039f99bb37656e86cce"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-languageserver-types "^3.6.0-next.1"
|
vscode-languageserver-types "^3.6.1"
|
||||||
vscode-nls "^2.0.2"
|
vscode-nls "^3.2.1"
|
||||||
vscode-uri "^1.0.1"
|
vscode-uri "^1.0.3"
|
||||||
|
|
||||||
vscode-jsonrpc@^3.6.0-next.1:
|
vscode-jsonrpc@^3.6.0:
|
||||||
version "3.6.0-next.1"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0-next.1.tgz#3cb463dffe5842d6aec16718ca9252708cd6aabe"
|
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0.tgz#848d56995d5168950d84feb5d9c237ae5c6a02d4"
|
||||||
|
|
||||||
vscode-languageserver-protocol@^3.6.0-next.5:
|
vscode-languageserver-protocol@^3.6.0:
|
||||||
version "3.6.0-next.5"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0-next.5.tgz#ed2ec2db759826f753c0a13977dfb2bedc4d31b3"
|
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0.tgz#579642cdcccf74b0cd771c33daa3239acb40d040"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-jsonrpc "^3.6.0-next.1"
|
vscode-jsonrpc "^3.6.0"
|
||||||
vscode-languageserver-types "^3.6.0-next.1"
|
vscode-languageserver-types "^3.6.0"
|
||||||
|
|
||||||
|
vscode-languageserver-types@^3.6.0, vscode-languageserver-types@^3.6.1:
|
||||||
|
version "3.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.1.tgz#4bc06a48dff653495f12f94b8b1e228988a1748d"
|
||||||
|
|
||||||
vscode-languageserver-types@^3.6.0-next.1:
|
vscode-languageserver-types@^3.6.0-next.1:
|
||||||
version "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"
|
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.0-next.1.tgz#98e488d3f87b666b4ee1a3d89f0023e246d358f3"
|
||||||
|
|
||||||
vscode-languageserver@4.0.0-next.4:
|
vscode-languageserver@^4.0.0:
|
||||||
version "4.0.0-next.4"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.0.0-next.4.tgz#162440b15bedaab07e1676f046e4d9b8578b3d92"
|
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-4.0.0.tgz#8b792f0d6d10acfe363d02371ed4ce53d08af88a"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-languageserver-protocol "^3.6.0-next.5"
|
vscode-languageserver-protocol "^3.6.0"
|
||||||
vscode-uri "^1.0.1"
|
vscode-uri "^1.0.1"
|
||||||
|
|
||||||
vscode-nls@^2.0.1, vscode-nls@^2.0.2:
|
|
||||||
version "2.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-2.0.2.tgz#808522380844b8ad153499af5c3b03921aea02da"
|
|
||||||
|
|
||||||
vscode-nls@^3.2.1:
|
vscode-nls@^3.2.1:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
|
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
|
||||||
|
|
||||||
|
vscode-nls@^3.2.2:
|
||||||
|
version "3.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
|
||||||
|
|
||||||
vscode-uri@^1.0.1:
|
vscode-uri@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.1.tgz#11a86befeac3c4aa3ec08623651a3c81a6d0bbc8"
|
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.1.tgz#11a86befeac3c4aa3ec08623651a3c81a6d0bbc8"
|
||||||
|
|
||||||
|
vscode-uri@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.3.tgz#631bdbf716dccab0e65291a8dc25c23232085a52"
|
||||||
|
|
|
@ -34,30 +34,30 @@ vscode-extension-telemetry@0.0.15:
|
||||||
dependencies:
|
dependencies:
|
||||||
applicationinsights "1.0.1"
|
applicationinsights "1.0.1"
|
||||||
|
|
||||||
vscode-jsonrpc@^3.6.0-next.1:
|
vscode-jsonrpc@^3.6.0:
|
||||||
version "3.6.0-next.1"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0-next.1.tgz#3cb463dffe5842d6aec16718ca9252708cd6aabe"
|
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.6.0.tgz#848d56995d5168950d84feb5d9c237ae5c6a02d4"
|
||||||
|
|
||||||
vscode-languageclient@4.0.0-next.9:
|
vscode-languageclient@^4.0.0:
|
||||||
version "4.0.0-next.9"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-4.0.0-next.9.tgz#2a06568f46ee9de3490f85e227d3740a21a03d3a"
|
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-4.0.0.tgz#635f5bfbcfa1385dae489b394857f1db8b459a7d"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-languageserver-protocol "^3.6.0-next.5"
|
vscode-languageserver-protocol "^3.6.0"
|
||||||
|
|
||||||
vscode-languageserver-protocol@^3.6.0-next.5:
|
vscode-languageserver-protocol@^3.6.0:
|
||||||
version "3.6.0-next.5"
|
version "3.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0-next.5.tgz#ed2ec2db759826f753c0a13977dfb2bedc4d31b3"
|
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.6.0.tgz#579642cdcccf74b0cd771c33daa3239acb40d040"
|
||||||
dependencies:
|
dependencies:
|
||||||
vscode-jsonrpc "^3.6.0-next.1"
|
vscode-jsonrpc "^3.6.0"
|
||||||
vscode-languageserver-types "^3.6.0-next.1"
|
vscode-languageserver-types "^3.6.0"
|
||||||
|
|
||||||
vscode-languageserver-types@^3.6.0-next.1:
|
vscode-languageserver-types@^3.6.0:
|
||||||
version "3.6.0-next.1"
|
version "3.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.0-next.1.tgz#98e488d3f87b666b4ee1a3d89f0023e246d358f3"
|
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.6.1.tgz#4bc06a48dff653495f12f94b8b1e228988a1748d"
|
||||||
|
|
||||||
vscode-nls@^3.2.1:
|
vscode-nls@^3.2.2:
|
||||||
version "3.2.1"
|
version "3.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.1.tgz#b1f3e04e8a94a715d5a7bcbc8339c51e6d74ca51"
|
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.2.tgz#3817eca5b985c2393de325197cf4e15eb2aa5350"
|
||||||
|
|
||||||
zone.js@0.7.6:
|
zone.js@0.7.6:
|
||||||
version "0.7.6"
|
version "0.7.6"
|
||||||
|
|
Loading…
Reference in a new issue