Update LKG
This commit is contained in:
Родитель
bc8b9ee39d
Коммит
892bc6d7cb
|
@ -7355,6 +7355,8 @@ interface HTMLCanvasElement extends HTMLElement {
|
|||
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
|
||||
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
|
||||
*/
|
||||
getContext(contextId: "2d"): CanvasRenderingContext2D;
|
||||
getContext(contextId: "experimental-webgl"): WebGLRenderingContext;
|
||||
getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext;
|
||||
/**
|
||||
* Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing.
|
||||
|
|
|
@ -6185,6 +6185,8 @@ interface HTMLCanvasElement extends HTMLElement {
|
|||
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
|
||||
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
|
||||
*/
|
||||
getContext(contextId: "2d"): CanvasRenderingContext2D;
|
||||
getContext(contextId: "experimental-webgl"): WebGLRenderingContext;
|
||||
getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext;
|
||||
/**
|
||||
* Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing.
|
||||
|
|
|
@ -8700,6 +8700,8 @@ interface HTMLCanvasElement extends HTMLElement {
|
|||
* Returns an object that provides methods and properties for drawing and manipulating images and graphics on a canvas element in a document. A context object includes information about colors, line widths, fonts, and other graphic parameters that can be drawn on a canvas.
|
||||
* @param contextId The identifier (ID) of the type of canvas to create. Internet Explorer 9 and Internet Explorer 10 support only a 2-D context using canvas.getContext("2d"); IE11 Preview also supports 3-D or WebGL context using canvas.getContext("experimental-webgl");
|
||||
*/
|
||||
getContext(contextId: "2d"): CanvasRenderingContext2D;
|
||||
getContext(contextId: "experimental-webgl"): WebGLRenderingContext;
|
||||
getContext(contextId: string, ...args: any[]): CanvasRenderingContext2D | WebGLRenderingContext;
|
||||
/**
|
||||
* Returns a blob object encoded as a Portable Network Graphics (PNG) format from a canvas image or drawing.
|
||||
|
|
241
bin/tsserver.js
241
bin/tsserver.js
|
@ -31086,7 +31086,8 @@ var ts;
|
|||
ClassificationTypeNames.interfaceName = "interface name";
|
||||
ClassificationTypeNames.moduleName = "module name";
|
||||
ClassificationTypeNames.typeParameterName = "type parameter name";
|
||||
ClassificationTypeNames.typeAlias = "type alias name";
|
||||
ClassificationTypeNames.typeAliasName = "type alias name";
|
||||
ClassificationTypeNames.parameterName = "parameter name";
|
||||
return ClassificationTypeNames;
|
||||
})();
|
||||
ts.ClassificationTypeNames = ClassificationTypeNames;
|
||||
|
@ -34330,35 +34331,43 @@ var ts;
|
|||
return ts.NavigationBar.getNavigationBarItems(sourceFile);
|
||||
}
|
||||
function getSemanticClassifications(fileName, span) {
|
||||
return convertClassifications(getEncodedSemanticClassifications(fileName, span));
|
||||
}
|
||||
function getEncodedSemanticClassifications(fileName, span) {
|
||||
synchronizeHostData();
|
||||
var sourceFile = getValidSourceFile(fileName);
|
||||
var typeChecker = program.getTypeChecker();
|
||||
var result = [];
|
||||
processNode(sourceFile);
|
||||
return result;
|
||||
return { spans: result, endOfLineState: 0 };
|
||||
function pushClassification(start, length, type) {
|
||||
result.push(start);
|
||||
result.push(length);
|
||||
result.push(type);
|
||||
}
|
||||
function classifySymbol(symbol, meaningAtPosition) {
|
||||
var flags = symbol.getFlags();
|
||||
if (flags & 32) {
|
||||
return ClassificationTypeNames.className;
|
||||
return 11;
|
||||
}
|
||||
else if (flags & 384) {
|
||||
return ClassificationTypeNames.enumName;
|
||||
return 12;
|
||||
}
|
||||
else if (flags & 524288) {
|
||||
return ClassificationTypeNames.typeAlias;
|
||||
return 16;
|
||||
}
|
||||
else if (meaningAtPosition & 2) {
|
||||
if (flags & 64) {
|
||||
return ClassificationTypeNames.interfaceName;
|
||||
return 13;
|
||||
}
|
||||
else if (flags & 262144) {
|
||||
return ClassificationTypeNames.typeParameterName;
|
||||
return 15;
|
||||
}
|
||||
}
|
||||
else if (flags & 1536) {
|
||||
if (meaningAtPosition & 4 ||
|
||||
(meaningAtPosition & 1 && hasValueSideModule(symbol))) {
|
||||
return ClassificationTypeNames.moduleName;
|
||||
return 14;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
|
@ -34375,10 +34384,7 @@ var ts;
|
|||
if (symbol) {
|
||||
var type = classifySymbol(symbol, getMeaningFromLocation(node));
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(node.getStart(), node.getWidth()),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(node.getStart(), node.getWidth(), type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34386,13 +34392,53 @@ var ts;
|
|||
}
|
||||
}
|
||||
}
|
||||
function getClassificationTypeName(type) {
|
||||
switch (type) {
|
||||
case 1: return ClassificationTypeNames.comment;
|
||||
case 2: return ClassificationTypeNames.identifier;
|
||||
case 3: return ClassificationTypeNames.keyword;
|
||||
case 4: return ClassificationTypeNames.numericLiteral;
|
||||
case 5: return ClassificationTypeNames.operator;
|
||||
case 6: return ClassificationTypeNames.stringLiteral;
|
||||
case 8: return ClassificationTypeNames.whiteSpace;
|
||||
case 9: return ClassificationTypeNames.text;
|
||||
case 10: return ClassificationTypeNames.punctuation;
|
||||
case 11: return ClassificationTypeNames.className;
|
||||
case 12: return ClassificationTypeNames.enumName;
|
||||
case 13: return ClassificationTypeNames.interfaceName;
|
||||
case 14: return ClassificationTypeNames.moduleName;
|
||||
case 15: return ClassificationTypeNames.typeParameterName;
|
||||
case 16: return ClassificationTypeNames.typeAliasName;
|
||||
case 17: return ClassificationTypeNames.parameterName;
|
||||
}
|
||||
}
|
||||
function convertClassifications(classifications) {
|
||||
ts.Debug.assert(classifications.spans.length % 3 === 0);
|
||||
var dense = classifications.spans;
|
||||
var result = [];
|
||||
for (var i = 0, n = dense.length; i < n; i += 3) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(dense[i], dense[i + 1]),
|
||||
classificationType: getClassificationTypeName(dense[i + 2])
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function getSyntacticClassifications(fileName, span) {
|
||||
return convertClassifications(getEncodedSyntacticClassifications(fileName, span));
|
||||
}
|
||||
function getEncodedSyntacticClassifications(fileName, span) {
|
||||
var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);
|
||||
var triviaScanner = ts.createScanner(2, false, sourceFile.text);
|
||||
var mergeConflictScanner = ts.createScanner(2, false, sourceFile.text);
|
||||
var result = [];
|
||||
processElement(sourceFile);
|
||||
return result;
|
||||
return { spans: result, endOfLineState: 0 };
|
||||
function pushClassification(start, length, type) {
|
||||
result.push(start);
|
||||
result.push(length);
|
||||
result.push(type);
|
||||
}
|
||||
function classifyLeadingTrivia(token) {
|
||||
var tokenStart = ts.skipTrivia(sourceFile.text, token.pos, false);
|
||||
if (tokenStart === token.pos) {
|
||||
|
@ -34409,20 +34455,14 @@ var ts;
|
|||
return;
|
||||
}
|
||||
if (ts.isComment(kind)) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(start, width),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, width, 1);
|
||||
continue;
|
||||
}
|
||||
if (kind === 6) {
|
||||
var text = sourceFile.text;
|
||||
var ch = text.charCodeAt(start);
|
||||
if (ch === 60 || ch === 62) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(start, width),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, width, 1);
|
||||
continue;
|
||||
}
|
||||
ts.Debug.assert(ch === 61);
|
||||
|
@ -34437,10 +34477,7 @@ var ts;
|
|||
break;
|
||||
}
|
||||
}
|
||||
result.push({
|
||||
textSpan: ts.createTextSpanFromBounds(start, i),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, i - start, 1);
|
||||
mergeConflictScanner.setTextPos(i);
|
||||
while (mergeConflictScanner.getTextPos() < end) {
|
||||
classifyDisabledCodeToken();
|
||||
|
@ -34452,10 +34489,7 @@ var ts;
|
|||
var end = mergeConflictScanner.getTextPos();
|
||||
var type = classifyTokenType(tokenKind);
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpanFromBounds(start, end),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(start, end - start, type);
|
||||
}
|
||||
}
|
||||
function classifyToken(token) {
|
||||
|
@ -34463,20 +34497,17 @@ var ts;
|
|||
if (token.getWidth() > 0) {
|
||||
var type = classifyTokenType(token.kind, token);
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(token.getStart(), token.getWidth()),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(token.getStart(), token.getWidth(), type);
|
||||
}
|
||||
}
|
||||
}
|
||||
function classifyTokenType(tokenKind, token) {
|
||||
if (ts.isKeyword(tokenKind)) {
|
||||
return ClassificationTypeNames.keyword;
|
||||
return 3;
|
||||
}
|
||||
if (tokenKind === 24 || tokenKind === 25) {
|
||||
if (token && ts.getTypeArgumentOrTypeParameterList(token.parent)) {
|
||||
return ClassificationTypeNames.punctuation;
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
if (ts.isPunctuation(tokenKind)) {
|
||||
|
@ -34485,61 +34516,66 @@ var ts;
|
|||
if (token.parent.kind === 199 ||
|
||||
token.parent.kind === 133 ||
|
||||
token.parent.kind === 130) {
|
||||
return ClassificationTypeNames.operator;
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
if (token.parent.kind === 170 ||
|
||||
token.parent.kind === 168 ||
|
||||
token.parent.kind === 169 ||
|
||||
token.parent.kind === 171) {
|
||||
return ClassificationTypeNames.operator;
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
return ClassificationTypeNames.punctuation;
|
||||
return 10;
|
||||
}
|
||||
else if (tokenKind === 7) {
|
||||
return ClassificationTypeNames.numericLiteral;
|
||||
return 4;
|
||||
}
|
||||
else if (tokenKind === 8) {
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6;
|
||||
}
|
||||
else if (tokenKind === 9) {
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6;
|
||||
}
|
||||
else if (ts.isTemplateLiteralKind(tokenKind)) {
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6;
|
||||
}
|
||||
else if (tokenKind === 65) {
|
||||
if (token) {
|
||||
switch (token.parent.kind) {
|
||||
case 202:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.className;
|
||||
return 11;
|
||||
}
|
||||
return;
|
||||
case 129:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.typeParameterName;
|
||||
return 15;
|
||||
}
|
||||
return;
|
||||
case 203:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.interfaceName;
|
||||
return 13;
|
||||
}
|
||||
return;
|
||||
case 205:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.enumName;
|
||||
return 12;
|
||||
}
|
||||
return;
|
||||
case 206:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.moduleName;
|
||||
return 14;
|
||||
}
|
||||
return;
|
||||
case 130:
|
||||
if (token.parent.name === token) {
|
||||
return 17;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
return ClassificationTypeNames.text;
|
||||
return 9;
|
||||
}
|
||||
}
|
||||
function processElement(element) {
|
||||
|
@ -34748,6 +34784,8 @@ var ts;
|
|||
getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics,
|
||||
getSyntacticClassifications: getSyntacticClassifications,
|
||||
getSemanticClassifications: getSemanticClassifications,
|
||||
getEncodedSyntacticClassifications: getEncodedSyntacticClassifications,
|
||||
getEncodedSemanticClassifications: getEncodedSemanticClassifications,
|
||||
getCompletionsAtPosition: getCompletionsAtPosition,
|
||||
getCompletionEntryDetails: getCompletionEntryDetails,
|
||||
getSignatureHelpItems: getSignatureHelpItems,
|
||||
|
@ -34839,7 +34877,55 @@ var ts;
|
|||
}
|
||||
return true;
|
||||
}
|
||||
function convertClassifications(classifications, text) {
|
||||
var entries = [];
|
||||
var dense = classifications.spans;
|
||||
var lastEnd = 0;
|
||||
for (var i = 0, n = dense.length; i < n; i += 3) {
|
||||
var start = dense[i];
|
||||
var length_1 = dense[i + 1];
|
||||
var type = dense[i + 2];
|
||||
if (lastEnd >= 0) {
|
||||
var whitespaceLength_1 = start - lastEnd;
|
||||
if (whitespaceLength_1 > 0) {
|
||||
entries.push({ length: whitespaceLength_1, classification: TokenClass.Whitespace });
|
||||
}
|
||||
}
|
||||
entries.push({ length: length_1, classification: convertClassification(type) });
|
||||
lastEnd = start + length_1;
|
||||
}
|
||||
var whitespaceLength = text.length - lastEnd;
|
||||
if (whitespaceLength > 0) {
|
||||
entries.push({ length: whitespaceLength, classification: TokenClass.Whitespace });
|
||||
}
|
||||
return { entries: entries, finalLexState: classifications.endOfLineState };
|
||||
}
|
||||
function convertClassification(type) {
|
||||
switch (type) {
|
||||
case 1: return TokenClass.Comment;
|
||||
case 3: return TokenClass.Keyword;
|
||||
case 4: return TokenClass.NumberLiteral;
|
||||
case 5: return TokenClass.Operator;
|
||||
case 6: return TokenClass.StringLiteral;
|
||||
case 8: return TokenClass.Whitespace;
|
||||
case 10: return TokenClass.Punctuation;
|
||||
case 2:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
case 14:
|
||||
case 15:
|
||||
case 16:
|
||||
case 9:
|
||||
case 17:
|
||||
default:
|
||||
return TokenClass.Identifier;
|
||||
}
|
||||
}
|
||||
function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) {
|
||||
return convertClassifications(getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent), text);
|
||||
}
|
||||
function getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent) {
|
||||
var offset = 0;
|
||||
var token = 0;
|
||||
var lastNonTriviaToken = 0;
|
||||
|
@ -34872,8 +34958,8 @@ var ts;
|
|||
}
|
||||
scanner.setText(text);
|
||||
var result = {
|
||||
finalLexState: 0,
|
||||
entries: []
|
||||
endOfLineState: 0,
|
||||
spans: []
|
||||
};
|
||||
var angleBracketStack = 0;
|
||||
do {
|
||||
|
@ -34940,7 +35026,7 @@ var ts;
|
|||
function processToken() {
|
||||
var start = scanner.getTokenPos();
|
||||
var end = scanner.getTextPos();
|
||||
addResult(end - start, classFromKind(token));
|
||||
addResult(start, end, classFromKind(token));
|
||||
if (end >= text.length) {
|
||||
if (token === 8) {
|
||||
var tokenText = scanner.getTokenText();
|
||||
|
@ -34952,7 +35038,7 @@ var ts;
|
|||
}
|
||||
if (numBackslashes & 1) {
|
||||
var quoteChar = tokenText.charCodeAt(0);
|
||||
result.finalLexState = quoteChar === 34
|
||||
result.endOfLineState = quoteChar === 34
|
||||
? 3
|
||||
: 2;
|
||||
}
|
||||
|
@ -34960,16 +35046,16 @@ var ts;
|
|||
}
|
||||
else if (token === 3) {
|
||||
if (scanner.isUnterminated()) {
|
||||
result.finalLexState = 1;
|
||||
result.endOfLineState = 1;
|
||||
}
|
||||
}
|
||||
else if (ts.isTemplateLiteralKind(token)) {
|
||||
if (scanner.isUnterminated()) {
|
||||
if (token === 13) {
|
||||
result.finalLexState = 5;
|
||||
result.endOfLineState = 5;
|
||||
}
|
||||
else if (token === 10) {
|
||||
result.finalLexState = 4;
|
||||
result.endOfLineState = 4;
|
||||
}
|
||||
else {
|
||||
ts.Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #" + token);
|
||||
|
@ -34977,16 +35063,24 @@ var ts;
|
|||
}
|
||||
}
|
||||
else if (templateStack.length > 0 && ts.lastOrUndefined(templateStack) === 11) {
|
||||
result.finalLexState = 6;
|
||||
result.endOfLineState = 6;
|
||||
}
|
||||
}
|
||||
}
|
||||
function addResult(length, classification) {
|
||||
function addResult(start, end, classification) {
|
||||
if (classification === 8) {
|
||||
return;
|
||||
}
|
||||
if (start === 0 && offset > 0) {
|
||||
start += offset;
|
||||
}
|
||||
start -= offset;
|
||||
end -= offset;
|
||||
var length = end - start;
|
||||
if (length > 0) {
|
||||
if (result.entries.length === 0) {
|
||||
length -= offset;
|
||||
}
|
||||
result.entries.push({ length: length, classification: classification });
|
||||
result.spans.push(start);
|
||||
result.spans.push(length);
|
||||
result.spans.push(classification);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35051,37 +35145,40 @@ var ts;
|
|||
}
|
||||
function classFromKind(token) {
|
||||
if (isKeyword(token)) {
|
||||
return TokenClass.Keyword;
|
||||
return 3;
|
||||
}
|
||||
else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
|
||||
return TokenClass.Operator;
|
||||
return 5;
|
||||
}
|
||||
else if (token >= 14 && token <= 64) {
|
||||
return TokenClass.Punctuation;
|
||||
return 10;
|
||||
}
|
||||
switch (token) {
|
||||
case 7:
|
||||
return TokenClass.NumberLiteral;
|
||||
return 4;
|
||||
case 8:
|
||||
return TokenClass.StringLiteral;
|
||||
return 6;
|
||||
case 9:
|
||||
return TokenClass.RegExpLiteral;
|
||||
return 7;
|
||||
case 6:
|
||||
case 3:
|
||||
case 2:
|
||||
return TokenClass.Comment;
|
||||
return 1;
|
||||
case 5:
|
||||
case 4:
|
||||
return TokenClass.Whitespace;
|
||||
return 8;
|
||||
case 65:
|
||||
default:
|
||||
if (ts.isTemplateLiteralKind(token)) {
|
||||
return TokenClass.StringLiteral;
|
||||
return 6;
|
||||
}
|
||||
return TokenClass.Identifier;
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
return { getClassificationsForLine: getClassificationsForLine };
|
||||
return {
|
||||
getClassificationsForLine: getClassificationsForLine,
|
||||
getEncodedLexicalClassifications: getEncodedLexicalClassifications
|
||||
};
|
||||
}
|
||||
ts.createClassifier = createClassifier;
|
||||
function getDefaultLibFilePath(options) {
|
||||
|
|
|
@ -1361,8 +1361,16 @@ declare module "typescript" {
|
|||
getSyntacticDiagnostics(fileName: string): Diagnostic[];
|
||||
getSemanticDiagnostics(fileName: string): Diagnostic[];
|
||||
getCompilerOptionsDiagnostics(): Diagnostic[];
|
||||
/**
|
||||
* @deprecated Use getEncodedSyntacticClassifications instead.
|
||||
*/
|
||||
getSyntacticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[];
|
||||
/**
|
||||
* @deprecated Use getEncodedSemanticClassifications instead.
|
||||
*/
|
||||
getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[];
|
||||
getEncodedSyntacticClassifications(fileName: string, span: TextSpan): Classifications;
|
||||
getEncodedSemanticClassifications(fileName: string, span: TextSpan): Classifications;
|
||||
getCompletionsAtPosition(fileName: string, position: number): CompletionInfo;
|
||||
getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails;
|
||||
getQuickInfoAtPosition(fileName: string, position: number): QuickInfo;
|
||||
|
@ -1391,6 +1399,10 @@ declare module "typescript" {
|
|||
getSourceFile(fileName: string): SourceFile;
|
||||
dispose(): void;
|
||||
}
|
||||
interface Classifications {
|
||||
spans: number[];
|
||||
endOfLineState: EndOfLineState;
|
||||
}
|
||||
interface ClassifiedSpan {
|
||||
textSpan: TextSpan;
|
||||
classificationType: string;
|
||||
|
@ -1602,7 +1614,7 @@ declare module "typescript" {
|
|||
text: string;
|
||||
}
|
||||
const enum EndOfLineState {
|
||||
Start = 0,
|
||||
None = 0,
|
||||
InMultiLineCommentTrivia = 1,
|
||||
InSingleQuoteStringLiteral = 2,
|
||||
InDoubleQuoteStringLiteral = 3,
|
||||
|
@ -1648,8 +1660,10 @@ declare module "typescript" {
|
|||
* classifications which may be incorrectly categorized will be given
|
||||
* back as Identifiers in order to allow the syntactic classifier to
|
||||
* subsume the classification.
|
||||
* @deprecated Use getLexicalClassifications instead.
|
||||
*/
|
||||
getClassificationsForLine(text: string, lexState: EndOfLineState, syntacticClassifierAbsent: boolean): ClassificationResult;
|
||||
getEncodedLexicalClassifications(text: string, endOfLineState: EndOfLineState, syntacticClassifierAbsent: boolean): Classifications;
|
||||
}
|
||||
/**
|
||||
* The document registry represents a store of SourceFile objects that can be shared between
|
||||
|
@ -1760,7 +1774,27 @@ declare module "typescript" {
|
|||
static interfaceName: string;
|
||||
static moduleName: string;
|
||||
static typeParameterName: string;
|
||||
static typeAlias: string;
|
||||
static typeAliasName: string;
|
||||
static parameterName: string;
|
||||
}
|
||||
const enum ClassificationType {
|
||||
comment = 1,
|
||||
identifier = 2,
|
||||
keyword = 3,
|
||||
numericLiteral = 4,
|
||||
operator = 5,
|
||||
stringLiteral = 6,
|
||||
regularExpressionLiteral = 7,
|
||||
whiteSpace = 8,
|
||||
text = 9,
|
||||
punctuation = 10,
|
||||
className = 11,
|
||||
enumName = 12,
|
||||
interfaceName = 13,
|
||||
moduleName = 14,
|
||||
typeParameterName = 15,
|
||||
typeAliasName = 16,
|
||||
parameterName = 17,
|
||||
}
|
||||
interface DisplayPartsSymbolWriter extends SymbolWriter {
|
||||
displayParts(): SymbolDisplayPart[];
|
||||
|
|
|
@ -36218,7 +36218,7 @@ var ts;
|
|||
})(ts.OutputFileType || (ts.OutputFileType = {}));
|
||||
var OutputFileType = ts.OutputFileType;
|
||||
(function (EndOfLineState) {
|
||||
EndOfLineState[EndOfLineState["Start"] = 0] = "Start";
|
||||
EndOfLineState[EndOfLineState["None"] = 0] = "None";
|
||||
EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia";
|
||||
EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral";
|
||||
EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral";
|
||||
|
@ -36320,10 +36320,31 @@ var ts;
|
|||
ClassificationTypeNames.interfaceName = "interface name";
|
||||
ClassificationTypeNames.moduleName = "module name";
|
||||
ClassificationTypeNames.typeParameterName = "type parameter name";
|
||||
ClassificationTypeNames.typeAlias = "type alias name";
|
||||
ClassificationTypeNames.typeAliasName = "type alias name";
|
||||
ClassificationTypeNames.parameterName = "parameter name";
|
||||
return ClassificationTypeNames;
|
||||
})();
|
||||
ts.ClassificationTypeNames = ClassificationTypeNames;
|
||||
(function (ClassificationType) {
|
||||
ClassificationType[ClassificationType["comment"] = 1] = "comment";
|
||||
ClassificationType[ClassificationType["identifier"] = 2] = "identifier";
|
||||
ClassificationType[ClassificationType["keyword"] = 3] = "keyword";
|
||||
ClassificationType[ClassificationType["numericLiteral"] = 4] = "numericLiteral";
|
||||
ClassificationType[ClassificationType["operator"] = 5] = "operator";
|
||||
ClassificationType[ClassificationType["stringLiteral"] = 6] = "stringLiteral";
|
||||
ClassificationType[ClassificationType["regularExpressionLiteral"] = 7] = "regularExpressionLiteral";
|
||||
ClassificationType[ClassificationType["whiteSpace"] = 8] = "whiteSpace";
|
||||
ClassificationType[ClassificationType["text"] = 9] = "text";
|
||||
ClassificationType[ClassificationType["punctuation"] = 10] = "punctuation";
|
||||
ClassificationType[ClassificationType["className"] = 11] = "className";
|
||||
ClassificationType[ClassificationType["enumName"] = 12] = "enumName";
|
||||
ClassificationType[ClassificationType["interfaceName"] = 13] = "interfaceName";
|
||||
ClassificationType[ClassificationType["moduleName"] = 14] = "moduleName";
|
||||
ClassificationType[ClassificationType["typeParameterName"] = 15] = "typeParameterName";
|
||||
ClassificationType[ClassificationType["typeAliasName"] = 16] = "typeAliasName";
|
||||
ClassificationType[ClassificationType["parameterName"] = 17] = "parameterName";
|
||||
})(ts.ClassificationType || (ts.ClassificationType = {}));
|
||||
var ClassificationType = ts.ClassificationType;
|
||||
function displayPartsToString(displayParts) {
|
||||
if (displayParts) {
|
||||
return ts.map(displayParts, function (displayPart) { return displayPart.text; }).join("");
|
||||
|
@ -40027,29 +40048,37 @@ var ts;
|
|||
return ts.NavigationBar.getNavigationBarItems(sourceFile);
|
||||
}
|
||||
function getSemanticClassifications(fileName, span) {
|
||||
return convertClassifications(getEncodedSemanticClassifications(fileName, span));
|
||||
}
|
||||
function getEncodedSemanticClassifications(fileName, span) {
|
||||
synchronizeHostData();
|
||||
var sourceFile = getValidSourceFile(fileName);
|
||||
var typeChecker = program.getTypeChecker();
|
||||
var result = [];
|
||||
processNode(sourceFile);
|
||||
return result;
|
||||
return { spans: result, endOfLineState: 0 /* None */ };
|
||||
function pushClassification(start, length, type) {
|
||||
result.push(start);
|
||||
result.push(length);
|
||||
result.push(type);
|
||||
}
|
||||
function classifySymbol(symbol, meaningAtPosition) {
|
||||
var flags = symbol.getFlags();
|
||||
if (flags & 32 /* Class */) {
|
||||
return ClassificationTypeNames.className;
|
||||
return 11 /* className */;
|
||||
}
|
||||
else if (flags & 384 /* Enum */) {
|
||||
return ClassificationTypeNames.enumName;
|
||||
return 12 /* enumName */;
|
||||
}
|
||||
else if (flags & 524288 /* TypeAlias */) {
|
||||
return ClassificationTypeNames.typeAlias;
|
||||
return 16 /* typeAliasName */;
|
||||
}
|
||||
else if (meaningAtPosition & 2 /* Type */) {
|
||||
if (flags & 64 /* Interface */) {
|
||||
return ClassificationTypeNames.interfaceName;
|
||||
return 13 /* interfaceName */;
|
||||
}
|
||||
else if (flags & 262144 /* TypeParameter */) {
|
||||
return ClassificationTypeNames.typeParameterName;
|
||||
return 15 /* typeParameterName */;
|
||||
}
|
||||
}
|
||||
else if (flags & 1536 /* Module */) {
|
||||
|
@ -40058,7 +40087,7 @@ var ts;
|
|||
// - There exists a module declaration which actually impacts the value side.
|
||||
if (meaningAtPosition & 4 /* Namespace */ ||
|
||||
(meaningAtPosition & 1 /* Value */ && hasValueSideModule(symbol))) {
|
||||
return ClassificationTypeNames.moduleName;
|
||||
return 14 /* moduleName */;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
|
@ -40079,10 +40108,7 @@ var ts;
|
|||
if (symbol) {
|
||||
var type = classifySymbol(symbol, getMeaningFromLocation(node));
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(node.getStart(), node.getWidth()),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(node.getStart(), node.getWidth(), type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40090,7 +40116,42 @@ var ts;
|
|||
}
|
||||
}
|
||||
}
|
||||
function getClassificationTypeName(type) {
|
||||
switch (type) {
|
||||
case 1 /* comment */: return ClassificationTypeNames.comment;
|
||||
case 2 /* identifier */: return ClassificationTypeNames.identifier;
|
||||
case 3 /* keyword */: return ClassificationTypeNames.keyword;
|
||||
case 4 /* numericLiteral */: return ClassificationTypeNames.numericLiteral;
|
||||
case 5 /* operator */: return ClassificationTypeNames.operator;
|
||||
case 6 /* stringLiteral */: return ClassificationTypeNames.stringLiteral;
|
||||
case 8 /* whiteSpace */: return ClassificationTypeNames.whiteSpace;
|
||||
case 9 /* text */: return ClassificationTypeNames.text;
|
||||
case 10 /* punctuation */: return ClassificationTypeNames.punctuation;
|
||||
case 11 /* className */: return ClassificationTypeNames.className;
|
||||
case 12 /* enumName */: return ClassificationTypeNames.enumName;
|
||||
case 13 /* interfaceName */: return ClassificationTypeNames.interfaceName;
|
||||
case 14 /* moduleName */: return ClassificationTypeNames.moduleName;
|
||||
case 15 /* typeParameterName */: return ClassificationTypeNames.typeParameterName;
|
||||
case 16 /* typeAliasName */: return ClassificationTypeNames.typeAliasName;
|
||||
case 17 /* parameterName */: return ClassificationTypeNames.parameterName;
|
||||
}
|
||||
}
|
||||
function convertClassifications(classifications) {
|
||||
ts.Debug.assert(classifications.spans.length % 3 === 0);
|
||||
var dense = classifications.spans;
|
||||
var result = [];
|
||||
for (var i = 0, n = dense.length; i < n; i += 3) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(dense[i], dense[i + 1]),
|
||||
classificationType: getClassificationTypeName(dense[i + 2])
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function getSyntacticClassifications(fileName, span) {
|
||||
return convertClassifications(getEncodedSyntacticClassifications(fileName, span));
|
||||
}
|
||||
function getEncodedSyntacticClassifications(fileName, span) {
|
||||
// doesn't use compiler - no need to synchronize with host
|
||||
var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);
|
||||
// Make a scanner we can get trivia from.
|
||||
|
@ -40098,7 +40159,12 @@ var ts;
|
|||
var mergeConflictScanner = ts.createScanner(2 /* Latest */, false, sourceFile.text);
|
||||
var result = [];
|
||||
processElement(sourceFile);
|
||||
return result;
|
||||
return { spans: result, endOfLineState: 0 /* None */ };
|
||||
function pushClassification(start, length, type) {
|
||||
result.push(start);
|
||||
result.push(length);
|
||||
result.push(type);
|
||||
}
|
||||
function classifyLeadingTrivia(token) {
|
||||
var tokenStart = ts.skipTrivia(sourceFile.text, token.pos, false);
|
||||
if (tokenStart === token.pos) {
|
||||
|
@ -40117,10 +40183,7 @@ var ts;
|
|||
}
|
||||
if (ts.isComment(kind)) {
|
||||
// Simple comment. Just add as is.
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(start, width),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, width, 1 /* comment */);
|
||||
continue;
|
||||
}
|
||||
if (kind === 6 /* ConflictMarkerTrivia */) {
|
||||
|
@ -40129,10 +40192,7 @@ var ts;
|
|||
// for the <<<<<<< and >>>>>>> markers, we just add them in as comments
|
||||
// in the classification stream.
|
||||
if (ch === 60 /* lessThan */ || ch === 62 /* greaterThan */) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(start, width),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, width, 1 /* comment */);
|
||||
continue;
|
||||
}
|
||||
// for the ======== add a comment for the first line, and then lex all
|
||||
|
@ -40151,10 +40211,7 @@ var ts;
|
|||
break;
|
||||
}
|
||||
}
|
||||
result.push({
|
||||
textSpan: ts.createTextSpanFromBounds(start, i),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, i - start, 1 /* comment */);
|
||||
mergeConflictScanner.setTextPos(i);
|
||||
while (mergeConflictScanner.getTextPos() < end) {
|
||||
classifyDisabledCodeToken();
|
||||
|
@ -40166,10 +40223,7 @@ var ts;
|
|||
var end = mergeConflictScanner.getTextPos();
|
||||
var type = classifyTokenType(tokenKind);
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpanFromBounds(start, end),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(start, end - start, type);
|
||||
}
|
||||
}
|
||||
function classifyToken(token) {
|
||||
|
@ -40177,10 +40231,7 @@ var ts;
|
|||
if (token.getWidth() > 0) {
|
||||
var type = classifyTokenType(token.kind, token);
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(token.getStart(), token.getWidth()),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(token.getStart(), token.getWidth(), type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40189,7 +40240,7 @@ var ts;
|
|||
// classify based on that instead.
|
||||
function classifyTokenType(tokenKind, token) {
|
||||
if (ts.isKeyword(tokenKind)) {
|
||||
return ClassificationTypeNames.keyword;
|
||||
return 3 /* keyword */;
|
||||
}
|
||||
// Special case < and > If they appear in a generic context they are punctuation,
|
||||
// not operators.
|
||||
|
@ -40197,7 +40248,7 @@ var ts;
|
|||
// If the node owning the token has a type argument list or type parameter list, then
|
||||
// we can effectively assume that a '<' and '>' belong to those lists.
|
||||
if (token && ts.getTypeArgumentOrTypeParameterList(token.parent)) {
|
||||
return ClassificationTypeNames.punctuation;
|
||||
return 10 /* punctuation */;
|
||||
}
|
||||
}
|
||||
if (ts.isPunctuation(tokenKind)) {
|
||||
|
@ -40207,63 +40258,68 @@ var ts;
|
|||
if (token.parent.kind === 199 /* VariableDeclaration */ ||
|
||||
token.parent.kind === 133 /* PropertyDeclaration */ ||
|
||||
token.parent.kind === 130 /* Parameter */) {
|
||||
return ClassificationTypeNames.operator;
|
||||
return 5 /* operator */;
|
||||
}
|
||||
}
|
||||
if (token.parent.kind === 170 /* BinaryExpression */ ||
|
||||
token.parent.kind === 168 /* PrefixUnaryExpression */ ||
|
||||
token.parent.kind === 169 /* PostfixUnaryExpression */ ||
|
||||
token.parent.kind === 171 /* ConditionalExpression */) {
|
||||
return ClassificationTypeNames.operator;
|
||||
return 5 /* operator */;
|
||||
}
|
||||
}
|
||||
return ClassificationTypeNames.punctuation;
|
||||
return 10 /* punctuation */;
|
||||
}
|
||||
else if (tokenKind === 7 /* NumericLiteral */) {
|
||||
return ClassificationTypeNames.numericLiteral;
|
||||
return 4 /* numericLiteral */;
|
||||
}
|
||||
else if (tokenKind === 8 /* StringLiteral */) {
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
else if (tokenKind === 9 /* RegularExpressionLiteral */) {
|
||||
// TODO: we should get another classification type for these literals.
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
else if (ts.isTemplateLiteralKind(tokenKind)) {
|
||||
// TODO (drosen): we should *also* get another classification type for these literals.
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
else if (tokenKind === 65 /* Identifier */) {
|
||||
if (token) {
|
||||
switch (token.parent.kind) {
|
||||
case 202 /* ClassDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.className;
|
||||
return 11 /* className */;
|
||||
}
|
||||
return;
|
||||
case 129 /* TypeParameter */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.typeParameterName;
|
||||
return 15 /* typeParameterName */;
|
||||
}
|
||||
return;
|
||||
case 203 /* InterfaceDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.interfaceName;
|
||||
return 13 /* interfaceName */;
|
||||
}
|
||||
return;
|
||||
case 205 /* EnumDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.enumName;
|
||||
return 12 /* enumName */;
|
||||
}
|
||||
return;
|
||||
case 206 /* ModuleDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.moduleName;
|
||||
return 14 /* moduleName */;
|
||||
}
|
||||
return;
|
||||
case 130 /* Parameter */:
|
||||
if (token.parent.name === token) {
|
||||
return 17 /* parameterName */;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
return ClassificationTypeNames.text;
|
||||
return 9 /* text */;
|
||||
}
|
||||
}
|
||||
function processElement(element) {
|
||||
|
@ -40543,6 +40599,8 @@ var ts;
|
|||
getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics,
|
||||
getSyntacticClassifications: getSyntacticClassifications,
|
||||
getSemanticClassifications: getSemanticClassifications,
|
||||
getEncodedSyntacticClassifications: getEncodedSyntacticClassifications,
|
||||
getEncodedSemanticClassifications: getEncodedSemanticClassifications,
|
||||
getCompletionsAtPosition: getCompletionsAtPosition,
|
||||
getCompletionEntryDetails: getCompletionEntryDetails,
|
||||
getSignatureHelpItems: getSignatureHelpItems,
|
||||
|
@ -40671,9 +40729,58 @@ var ts;
|
|||
// if there are more cases we want the classifier to be better at.
|
||||
return true;
|
||||
}
|
||||
function convertClassifications(classifications, text) {
|
||||
var entries = [];
|
||||
var dense = classifications.spans;
|
||||
var lastEnd = 0;
|
||||
for (var i = 0, n = dense.length; i < n; i += 3) {
|
||||
var start = dense[i];
|
||||
var length_1 = dense[i + 1];
|
||||
var type = dense[i + 2];
|
||||
// Make a whitespace entry between the last item and this one.
|
||||
if (lastEnd >= 0) {
|
||||
var whitespaceLength_1 = start - lastEnd;
|
||||
if (whitespaceLength_1 > 0) {
|
||||
entries.push({ length: whitespaceLength_1, classification: TokenClass.Whitespace });
|
||||
}
|
||||
}
|
||||
entries.push({ length: length_1, classification: convertClassification(type) });
|
||||
lastEnd = start + length_1;
|
||||
}
|
||||
var whitespaceLength = text.length - lastEnd;
|
||||
if (whitespaceLength > 0) {
|
||||
entries.push({ length: whitespaceLength, classification: TokenClass.Whitespace });
|
||||
}
|
||||
return { entries: entries, finalLexState: classifications.endOfLineState };
|
||||
}
|
||||
function convertClassification(type) {
|
||||
switch (type) {
|
||||
case 1 /* comment */: return TokenClass.Comment;
|
||||
case 3 /* keyword */: return TokenClass.Keyword;
|
||||
case 4 /* numericLiteral */: return TokenClass.NumberLiteral;
|
||||
case 5 /* operator */: return TokenClass.Operator;
|
||||
case 6 /* stringLiteral */: return TokenClass.StringLiteral;
|
||||
case 8 /* whiteSpace */: return TokenClass.Whitespace;
|
||||
case 10 /* punctuation */: return TokenClass.Punctuation;
|
||||
case 2 /* identifier */:
|
||||
case 11 /* className */:
|
||||
case 12 /* enumName */:
|
||||
case 13 /* interfaceName */:
|
||||
case 14 /* moduleName */:
|
||||
case 15 /* typeParameterName */:
|
||||
case 16 /* typeAliasName */:
|
||||
case 9 /* text */:
|
||||
case 17 /* parameterName */:
|
||||
default:
|
||||
return TokenClass.Identifier;
|
||||
}
|
||||
}
|
||||
function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) {
|
||||
return convertClassifications(getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent), text);
|
||||
}
|
||||
// If there is a syntactic classifier ('syntacticClassifierAbsent' is false),
|
||||
// we will be more conservative in order to avoid conflicting with the syntactic classifier.
|
||||
function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) {
|
||||
function getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent) {
|
||||
var offset = 0;
|
||||
var token = 0 /* Unknown */;
|
||||
var lastNonTriviaToken = 0 /* Unknown */;
|
||||
|
@ -40713,8 +40820,8 @@ var ts;
|
|||
}
|
||||
scanner.setText(text);
|
||||
var result = {
|
||||
finalLexState: 0 /* Start */,
|
||||
entries: []
|
||||
endOfLineState: 0 /* None */,
|
||||
spans: []
|
||||
};
|
||||
// We can run into an unfortunate interaction between the lexical and syntactic classifier
|
||||
// when the user is typing something generic. Consider the case where the user types:
|
||||
|
@ -40816,7 +40923,7 @@ var ts;
|
|||
function processToken() {
|
||||
var start = scanner.getTokenPos();
|
||||
var end = scanner.getTextPos();
|
||||
addResult(end - start, classFromKind(token));
|
||||
addResult(start, end, classFromKind(token));
|
||||
if (end >= text.length) {
|
||||
if (token === 8 /* StringLiteral */) {
|
||||
// Check to see if we finished up on a multiline string literal.
|
||||
|
@ -40830,7 +40937,7 @@ var ts;
|
|||
// If we have an odd number of backslashes, then the multiline string is unclosed
|
||||
if (numBackslashes & 1) {
|
||||
var quoteChar = tokenText.charCodeAt(0);
|
||||
result.finalLexState = quoteChar === 34 /* doubleQuote */
|
||||
result.endOfLineState = quoteChar === 34 /* doubleQuote */
|
||||
? 3 /* InDoubleQuoteStringLiteral */
|
||||
: 2 /* InSingleQuoteStringLiteral */;
|
||||
}
|
||||
|
@ -40839,16 +40946,16 @@ var ts;
|
|||
else if (token === 3 /* MultiLineCommentTrivia */) {
|
||||
// Check to see if the multiline comment was unclosed.
|
||||
if (scanner.isUnterminated()) {
|
||||
result.finalLexState = 1 /* InMultiLineCommentTrivia */;
|
||||
result.endOfLineState = 1 /* InMultiLineCommentTrivia */;
|
||||
}
|
||||
}
|
||||
else if (ts.isTemplateLiteralKind(token)) {
|
||||
if (scanner.isUnterminated()) {
|
||||
if (token === 13 /* TemplateTail */) {
|
||||
result.finalLexState = 5 /* InTemplateMiddleOrTail */;
|
||||
result.endOfLineState = 5 /* InTemplateMiddleOrTail */;
|
||||
}
|
||||
else if (token === 10 /* NoSubstitutionTemplateLiteral */) {
|
||||
result.finalLexState = 4 /* InTemplateHeadOrNoSubstitutionTemplate */;
|
||||
result.endOfLineState = 4 /* InTemplateHeadOrNoSubstitutionTemplate */;
|
||||
}
|
||||
else {
|
||||
ts.Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #" + token);
|
||||
|
@ -40856,18 +40963,30 @@ var ts;
|
|||
}
|
||||
}
|
||||
else if (templateStack.length > 0 && ts.lastOrUndefined(templateStack) === 11 /* TemplateHead */) {
|
||||
result.finalLexState = 6 /* InTemplateSubstitutionPosition */;
|
||||
result.endOfLineState = 6 /* InTemplateSubstitutionPosition */;
|
||||
}
|
||||
}
|
||||
}
|
||||
function addResult(length, classification) {
|
||||
function addResult(start, end, classification) {
|
||||
if (classification === 8 /* whiteSpace */) {
|
||||
// Don't bother with whitespace classifications. They're not needed.
|
||||
return;
|
||||
}
|
||||
if (start === 0 && offset > 0) {
|
||||
// We're classifying the first token, and this was a case where we prepended
|
||||
// text. We should consider the start of this token to be at the start of
|
||||
// the original text.
|
||||
start += offset;
|
||||
}
|
||||
// All our tokens are in relation to the augmented text. Move them back to be
|
||||
// relative to the original text.
|
||||
start -= offset;
|
||||
end -= offset;
|
||||
var length = end - start;
|
||||
if (length > 0) {
|
||||
// If this is the first classification we're adding to the list, then remove any
|
||||
// offset we have if we were continuing a construct from the previous line.
|
||||
if (result.entries.length === 0) {
|
||||
length -= offset;
|
||||
}
|
||||
result.entries.push({ length: length, classification: classification });
|
||||
result.spans.push(start);
|
||||
result.spans.push(length);
|
||||
result.spans.push(classification);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40932,37 +41051,40 @@ var ts;
|
|||
}
|
||||
function classFromKind(token) {
|
||||
if (isKeyword(token)) {
|
||||
return TokenClass.Keyword;
|
||||
return 3 /* keyword */;
|
||||
}
|
||||
else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
|
||||
return TokenClass.Operator;
|
||||
return 5 /* operator */;
|
||||
}
|
||||
else if (token >= 14 /* FirstPunctuation */ && token <= 64 /* LastPunctuation */) {
|
||||
return TokenClass.Punctuation;
|
||||
return 10 /* punctuation */;
|
||||
}
|
||||
switch (token) {
|
||||
case 7 /* NumericLiteral */:
|
||||
return TokenClass.NumberLiteral;
|
||||
return 4 /* numericLiteral */;
|
||||
case 8 /* StringLiteral */:
|
||||
return TokenClass.StringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
case 9 /* RegularExpressionLiteral */:
|
||||
return TokenClass.RegExpLiteral;
|
||||
return 7 /* regularExpressionLiteral */;
|
||||
case 6 /* ConflictMarkerTrivia */:
|
||||
case 3 /* MultiLineCommentTrivia */:
|
||||
case 2 /* SingleLineCommentTrivia */:
|
||||
return TokenClass.Comment;
|
||||
return 1 /* comment */;
|
||||
case 5 /* WhitespaceTrivia */:
|
||||
case 4 /* NewLineTrivia */:
|
||||
return TokenClass.Whitespace;
|
||||
return 8 /* whiteSpace */;
|
||||
case 65 /* Identifier */:
|
||||
default:
|
||||
if (ts.isTemplateLiteralKind(token)) {
|
||||
return TokenClass.StringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
return TokenClass.Identifier;
|
||||
return 2 /* identifier */;
|
||||
}
|
||||
}
|
||||
return { getClassificationsForLine: getClassificationsForLine };
|
||||
return {
|
||||
getClassificationsForLine: getClassificationsForLine,
|
||||
getEncodedLexicalClassifications: getEncodedLexicalClassifications
|
||||
};
|
||||
}
|
||||
ts.createClassifier = createClassifier;
|
||||
/**
|
||||
|
@ -41461,7 +41583,9 @@ var debugObjectHost = this;
|
|||
var ts;
|
||||
(function (ts) {
|
||||
function logInternalError(logger, err) {
|
||||
logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message);
|
||||
if (logger) {
|
||||
logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message);
|
||||
}
|
||||
}
|
||||
var ScriptSnapshotShimAdapter = (function () {
|
||||
function ScriptSnapshotShimAdapter(scriptSnapshotShim) {
|
||||
|
@ -41565,24 +41689,28 @@ var ts;
|
|||
return CoreServicesShimHostAdapter;
|
||||
})();
|
||||
ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter;
|
||||
function simpleForwardCall(logger, actionDescription, action) {
|
||||
logger.log(actionDescription);
|
||||
var start = Date.now();
|
||||
function simpleForwardCall(logger, actionDescription, action, noPerfLogging) {
|
||||
if (!noPerfLogging) {
|
||||
logger.log(actionDescription);
|
||||
var start = Date.now();
|
||||
}
|
||||
var result = action();
|
||||
var end = Date.now();
|
||||
logger.log(actionDescription + " completed in " + (end - start) + " msec");
|
||||
if (typeof (result) === "string") {
|
||||
var str = result;
|
||||
if (str.length > 128) {
|
||||
str = str.substring(0, 128) + "...";
|
||||
if (!noPerfLogging) {
|
||||
var end = Date.now();
|
||||
logger.log(actionDescription + " completed in " + (end - start) + " msec");
|
||||
if (typeof (result) === "string") {
|
||||
var str = result;
|
||||
if (str.length > 128) {
|
||||
str = str.substring(0, 128) + "...";
|
||||
}
|
||||
logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'");
|
||||
}
|
||||
logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function forwardJSONCall(logger, actionDescription, action) {
|
||||
function forwardJSONCall(logger, actionDescription, action, noPerfLogging) {
|
||||
try {
|
||||
var result = simpleForwardCall(logger, actionDescription, action);
|
||||
var result = simpleForwardCall(logger, actionDescription, action, noPerfLogging);
|
||||
return JSON.stringify({ result: result });
|
||||
}
|
||||
catch (err) {
|
||||
|
@ -41627,7 +41755,7 @@ var ts;
|
|||
this.logger = this.host;
|
||||
}
|
||||
LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
|
||||
return forwardJSONCall(this.logger, actionDescription, action);
|
||||
return forwardJSONCall(this.logger, actionDescription, action, false);
|
||||
};
|
||||
/// DISPOSE
|
||||
/**
|
||||
|
@ -41680,6 +41808,22 @@ var ts;
|
|||
return classifications;
|
||||
});
|
||||
};
|
||||
LanguageServiceShimObject.prototype.getEncodedSyntacticClassifications = function (fileName, start, length) {
|
||||
var _this = this;
|
||||
return this.forwardJSONCall("getEncodedSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
|
||||
// directly serialize the spans out to a string. This is much faster to decode
|
||||
// on the managed side versus a full JSON array.
|
||||
return convertClassifications(_this.languageService.getEncodedSyntacticClassifications(fileName, ts.createTextSpan(start, length)));
|
||||
});
|
||||
};
|
||||
LanguageServiceShimObject.prototype.getEncodedSemanticClassifications = function (fileName, start, length) {
|
||||
var _this = this;
|
||||
return this.forwardJSONCall("getEncodedSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
|
||||
// directly serialize the spans out to a string. This is much faster to decode
|
||||
// on the managed side versus a full JSON array.
|
||||
return convertClassifications(_this.languageService.getEncodedSemanticClassifications(fileName, ts.createTextSpan(start, length)));
|
||||
});
|
||||
};
|
||||
LanguageServiceShimObject.prototype.getNewLine = function () {
|
||||
return this.host.getNewLine ? this.host.getNewLine() : "\r\n";
|
||||
};
|
||||
|
@ -41899,12 +42043,21 @@ var ts;
|
|||
};
|
||||
return LanguageServiceShimObject;
|
||||
})(ShimBase);
|
||||
function convertClassifications(classifications) {
|
||||
return { spans: classifications.spans.join(","), endOfLineState: classifications.endOfLineState };
|
||||
}
|
||||
var ClassifierShimObject = (function (_super) {
|
||||
__extends(ClassifierShimObject, _super);
|
||||
function ClassifierShimObject(factory) {
|
||||
function ClassifierShimObject(factory, logger) {
|
||||
_super.call(this, factory);
|
||||
this.logger = logger;
|
||||
this.classifier = ts.createClassifier();
|
||||
}
|
||||
ClassifierShimObject.prototype.getEncodedLexicalClassifications = function (text, lexState, syntacticClassifierAbsent) {
|
||||
var _this = this;
|
||||
return forwardJSONCall(this.logger, "getEncodedLexicalClassifications", function () { return convertClassifications(_this.classifier.getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent)); },
|
||||
/*noPerfLogging:*/ true);
|
||||
};
|
||||
/// COLORIZATION
|
||||
ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState, classifyKeywordsInGenerics) {
|
||||
var classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics);
|
||||
|
@ -41927,7 +42080,7 @@ var ts;
|
|||
this.host = host;
|
||||
}
|
||||
CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
|
||||
return forwardJSONCall(this.logger, actionDescription, action);
|
||||
return forwardJSONCall(this.logger, actionDescription, action, false);
|
||||
};
|
||||
CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceTextSnapshot) {
|
||||
return this.forwardJSONCall("getPreProcessedFileInfo('" + fileName + "')", function () {
|
||||
|
@ -42005,7 +42158,7 @@ var ts;
|
|||
};
|
||||
TypeScriptServicesFactory.prototype.createClassifierShim = function (logger) {
|
||||
try {
|
||||
return new ClassifierShimObject(this);
|
||||
return new ClassifierShimObject(this, logger);
|
||||
}
|
||||
catch (err) {
|
||||
logInternalError(logger, err);
|
||||
|
|
|
@ -1361,8 +1361,16 @@ declare module ts {
|
|||
getSyntacticDiagnostics(fileName: string): Diagnostic[];
|
||||
getSemanticDiagnostics(fileName: string): Diagnostic[];
|
||||
getCompilerOptionsDiagnostics(): Diagnostic[];
|
||||
/**
|
||||
* @deprecated Use getEncodedSyntacticClassifications instead.
|
||||
*/
|
||||
getSyntacticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[];
|
||||
/**
|
||||
* @deprecated Use getEncodedSemanticClassifications instead.
|
||||
*/
|
||||
getSemanticClassifications(fileName: string, span: TextSpan): ClassifiedSpan[];
|
||||
getEncodedSyntacticClassifications(fileName: string, span: TextSpan): Classifications;
|
||||
getEncodedSemanticClassifications(fileName: string, span: TextSpan): Classifications;
|
||||
getCompletionsAtPosition(fileName: string, position: number): CompletionInfo;
|
||||
getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails;
|
||||
getQuickInfoAtPosition(fileName: string, position: number): QuickInfo;
|
||||
|
@ -1391,6 +1399,10 @@ declare module ts {
|
|||
getSourceFile(fileName: string): SourceFile;
|
||||
dispose(): void;
|
||||
}
|
||||
interface Classifications {
|
||||
spans: number[];
|
||||
endOfLineState: EndOfLineState;
|
||||
}
|
||||
interface ClassifiedSpan {
|
||||
textSpan: TextSpan;
|
||||
classificationType: string;
|
||||
|
@ -1602,7 +1614,7 @@ declare module ts {
|
|||
text: string;
|
||||
}
|
||||
const enum EndOfLineState {
|
||||
Start = 0,
|
||||
None = 0,
|
||||
InMultiLineCommentTrivia = 1,
|
||||
InSingleQuoteStringLiteral = 2,
|
||||
InDoubleQuoteStringLiteral = 3,
|
||||
|
@ -1648,8 +1660,10 @@ declare module ts {
|
|||
* classifications which may be incorrectly categorized will be given
|
||||
* back as Identifiers in order to allow the syntactic classifier to
|
||||
* subsume the classification.
|
||||
* @deprecated Use getLexicalClassifications instead.
|
||||
*/
|
||||
getClassificationsForLine(text: string, lexState: EndOfLineState, syntacticClassifierAbsent: boolean): ClassificationResult;
|
||||
getEncodedLexicalClassifications(text: string, endOfLineState: EndOfLineState, syntacticClassifierAbsent: boolean): Classifications;
|
||||
}
|
||||
/**
|
||||
* The document registry represents a store of SourceFile objects that can be shared between
|
||||
|
@ -1760,7 +1774,27 @@ declare module ts {
|
|||
static interfaceName: string;
|
||||
static moduleName: string;
|
||||
static typeParameterName: string;
|
||||
static typeAlias: string;
|
||||
static typeAliasName: string;
|
||||
static parameterName: string;
|
||||
}
|
||||
const enum ClassificationType {
|
||||
comment = 1,
|
||||
identifier = 2,
|
||||
keyword = 3,
|
||||
numericLiteral = 4,
|
||||
operator = 5,
|
||||
stringLiteral = 6,
|
||||
regularExpressionLiteral = 7,
|
||||
whiteSpace = 8,
|
||||
text = 9,
|
||||
punctuation = 10,
|
||||
className = 11,
|
||||
enumName = 12,
|
||||
interfaceName = 13,
|
||||
moduleName = 14,
|
||||
typeParameterName = 15,
|
||||
typeAliasName = 16,
|
||||
parameterName = 17,
|
||||
}
|
||||
interface DisplayPartsSymbolWriter extends SymbolWriter {
|
||||
displayParts(): SymbolDisplayPart[];
|
||||
|
|
|
@ -36218,7 +36218,7 @@ var ts;
|
|||
})(ts.OutputFileType || (ts.OutputFileType = {}));
|
||||
var OutputFileType = ts.OutputFileType;
|
||||
(function (EndOfLineState) {
|
||||
EndOfLineState[EndOfLineState["Start"] = 0] = "Start";
|
||||
EndOfLineState[EndOfLineState["None"] = 0] = "None";
|
||||
EndOfLineState[EndOfLineState["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia";
|
||||
EndOfLineState[EndOfLineState["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral";
|
||||
EndOfLineState[EndOfLineState["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral";
|
||||
|
@ -36320,10 +36320,31 @@ var ts;
|
|||
ClassificationTypeNames.interfaceName = "interface name";
|
||||
ClassificationTypeNames.moduleName = "module name";
|
||||
ClassificationTypeNames.typeParameterName = "type parameter name";
|
||||
ClassificationTypeNames.typeAlias = "type alias name";
|
||||
ClassificationTypeNames.typeAliasName = "type alias name";
|
||||
ClassificationTypeNames.parameterName = "parameter name";
|
||||
return ClassificationTypeNames;
|
||||
})();
|
||||
ts.ClassificationTypeNames = ClassificationTypeNames;
|
||||
(function (ClassificationType) {
|
||||
ClassificationType[ClassificationType["comment"] = 1] = "comment";
|
||||
ClassificationType[ClassificationType["identifier"] = 2] = "identifier";
|
||||
ClassificationType[ClassificationType["keyword"] = 3] = "keyword";
|
||||
ClassificationType[ClassificationType["numericLiteral"] = 4] = "numericLiteral";
|
||||
ClassificationType[ClassificationType["operator"] = 5] = "operator";
|
||||
ClassificationType[ClassificationType["stringLiteral"] = 6] = "stringLiteral";
|
||||
ClassificationType[ClassificationType["regularExpressionLiteral"] = 7] = "regularExpressionLiteral";
|
||||
ClassificationType[ClassificationType["whiteSpace"] = 8] = "whiteSpace";
|
||||
ClassificationType[ClassificationType["text"] = 9] = "text";
|
||||
ClassificationType[ClassificationType["punctuation"] = 10] = "punctuation";
|
||||
ClassificationType[ClassificationType["className"] = 11] = "className";
|
||||
ClassificationType[ClassificationType["enumName"] = 12] = "enumName";
|
||||
ClassificationType[ClassificationType["interfaceName"] = 13] = "interfaceName";
|
||||
ClassificationType[ClassificationType["moduleName"] = 14] = "moduleName";
|
||||
ClassificationType[ClassificationType["typeParameterName"] = 15] = "typeParameterName";
|
||||
ClassificationType[ClassificationType["typeAliasName"] = 16] = "typeAliasName";
|
||||
ClassificationType[ClassificationType["parameterName"] = 17] = "parameterName";
|
||||
})(ts.ClassificationType || (ts.ClassificationType = {}));
|
||||
var ClassificationType = ts.ClassificationType;
|
||||
function displayPartsToString(displayParts) {
|
||||
if (displayParts) {
|
||||
return ts.map(displayParts, function (displayPart) { return displayPart.text; }).join("");
|
||||
|
@ -40027,29 +40048,37 @@ var ts;
|
|||
return ts.NavigationBar.getNavigationBarItems(sourceFile);
|
||||
}
|
||||
function getSemanticClassifications(fileName, span) {
|
||||
return convertClassifications(getEncodedSemanticClassifications(fileName, span));
|
||||
}
|
||||
function getEncodedSemanticClassifications(fileName, span) {
|
||||
synchronizeHostData();
|
||||
var sourceFile = getValidSourceFile(fileName);
|
||||
var typeChecker = program.getTypeChecker();
|
||||
var result = [];
|
||||
processNode(sourceFile);
|
||||
return result;
|
||||
return { spans: result, endOfLineState: 0 /* None */ };
|
||||
function pushClassification(start, length, type) {
|
||||
result.push(start);
|
||||
result.push(length);
|
||||
result.push(type);
|
||||
}
|
||||
function classifySymbol(symbol, meaningAtPosition) {
|
||||
var flags = symbol.getFlags();
|
||||
if (flags & 32 /* Class */) {
|
||||
return ClassificationTypeNames.className;
|
||||
return 11 /* className */;
|
||||
}
|
||||
else if (flags & 384 /* Enum */) {
|
||||
return ClassificationTypeNames.enumName;
|
||||
return 12 /* enumName */;
|
||||
}
|
||||
else if (flags & 524288 /* TypeAlias */) {
|
||||
return ClassificationTypeNames.typeAlias;
|
||||
return 16 /* typeAliasName */;
|
||||
}
|
||||
else if (meaningAtPosition & 2 /* Type */) {
|
||||
if (flags & 64 /* Interface */) {
|
||||
return ClassificationTypeNames.interfaceName;
|
||||
return 13 /* interfaceName */;
|
||||
}
|
||||
else if (flags & 262144 /* TypeParameter */) {
|
||||
return ClassificationTypeNames.typeParameterName;
|
||||
return 15 /* typeParameterName */;
|
||||
}
|
||||
}
|
||||
else if (flags & 1536 /* Module */) {
|
||||
|
@ -40058,7 +40087,7 @@ var ts;
|
|||
// - There exists a module declaration which actually impacts the value side.
|
||||
if (meaningAtPosition & 4 /* Namespace */ ||
|
||||
(meaningAtPosition & 1 /* Value */ && hasValueSideModule(symbol))) {
|
||||
return ClassificationTypeNames.moduleName;
|
||||
return 14 /* moduleName */;
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
|
@ -40079,10 +40108,7 @@ var ts;
|
|||
if (symbol) {
|
||||
var type = classifySymbol(symbol, getMeaningFromLocation(node));
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(node.getStart(), node.getWidth()),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(node.getStart(), node.getWidth(), type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40090,7 +40116,42 @@ var ts;
|
|||
}
|
||||
}
|
||||
}
|
||||
function getClassificationTypeName(type) {
|
||||
switch (type) {
|
||||
case 1 /* comment */: return ClassificationTypeNames.comment;
|
||||
case 2 /* identifier */: return ClassificationTypeNames.identifier;
|
||||
case 3 /* keyword */: return ClassificationTypeNames.keyword;
|
||||
case 4 /* numericLiteral */: return ClassificationTypeNames.numericLiteral;
|
||||
case 5 /* operator */: return ClassificationTypeNames.operator;
|
||||
case 6 /* stringLiteral */: return ClassificationTypeNames.stringLiteral;
|
||||
case 8 /* whiteSpace */: return ClassificationTypeNames.whiteSpace;
|
||||
case 9 /* text */: return ClassificationTypeNames.text;
|
||||
case 10 /* punctuation */: return ClassificationTypeNames.punctuation;
|
||||
case 11 /* className */: return ClassificationTypeNames.className;
|
||||
case 12 /* enumName */: return ClassificationTypeNames.enumName;
|
||||
case 13 /* interfaceName */: return ClassificationTypeNames.interfaceName;
|
||||
case 14 /* moduleName */: return ClassificationTypeNames.moduleName;
|
||||
case 15 /* typeParameterName */: return ClassificationTypeNames.typeParameterName;
|
||||
case 16 /* typeAliasName */: return ClassificationTypeNames.typeAliasName;
|
||||
case 17 /* parameterName */: return ClassificationTypeNames.parameterName;
|
||||
}
|
||||
}
|
||||
function convertClassifications(classifications) {
|
||||
ts.Debug.assert(classifications.spans.length % 3 === 0);
|
||||
var dense = classifications.spans;
|
||||
var result = [];
|
||||
for (var i = 0, n = dense.length; i < n; i += 3) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(dense[i], dense[i + 1]),
|
||||
classificationType: getClassificationTypeName(dense[i + 2])
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function getSyntacticClassifications(fileName, span) {
|
||||
return convertClassifications(getEncodedSyntacticClassifications(fileName, span));
|
||||
}
|
||||
function getEncodedSyntacticClassifications(fileName, span) {
|
||||
// doesn't use compiler - no need to synchronize with host
|
||||
var sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName);
|
||||
// Make a scanner we can get trivia from.
|
||||
|
@ -40098,7 +40159,12 @@ var ts;
|
|||
var mergeConflictScanner = ts.createScanner(2 /* Latest */, false, sourceFile.text);
|
||||
var result = [];
|
||||
processElement(sourceFile);
|
||||
return result;
|
||||
return { spans: result, endOfLineState: 0 /* None */ };
|
||||
function pushClassification(start, length, type) {
|
||||
result.push(start);
|
||||
result.push(length);
|
||||
result.push(type);
|
||||
}
|
||||
function classifyLeadingTrivia(token) {
|
||||
var tokenStart = ts.skipTrivia(sourceFile.text, token.pos, false);
|
||||
if (tokenStart === token.pos) {
|
||||
|
@ -40117,10 +40183,7 @@ var ts;
|
|||
}
|
||||
if (ts.isComment(kind)) {
|
||||
// Simple comment. Just add as is.
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(start, width),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, width, 1 /* comment */);
|
||||
continue;
|
||||
}
|
||||
if (kind === 6 /* ConflictMarkerTrivia */) {
|
||||
|
@ -40129,10 +40192,7 @@ var ts;
|
|||
// for the <<<<<<< and >>>>>>> markers, we just add them in as comments
|
||||
// in the classification stream.
|
||||
if (ch === 60 /* lessThan */ || ch === 62 /* greaterThan */) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(start, width),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, width, 1 /* comment */);
|
||||
continue;
|
||||
}
|
||||
// for the ======== add a comment for the first line, and then lex all
|
||||
|
@ -40151,10 +40211,7 @@ var ts;
|
|||
break;
|
||||
}
|
||||
}
|
||||
result.push({
|
||||
textSpan: ts.createTextSpanFromBounds(start, i),
|
||||
classificationType: ClassificationTypeNames.comment
|
||||
});
|
||||
pushClassification(start, i - start, 1 /* comment */);
|
||||
mergeConflictScanner.setTextPos(i);
|
||||
while (mergeConflictScanner.getTextPos() < end) {
|
||||
classifyDisabledCodeToken();
|
||||
|
@ -40166,10 +40223,7 @@ var ts;
|
|||
var end = mergeConflictScanner.getTextPos();
|
||||
var type = classifyTokenType(tokenKind);
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpanFromBounds(start, end),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(start, end - start, type);
|
||||
}
|
||||
}
|
||||
function classifyToken(token) {
|
||||
|
@ -40177,10 +40231,7 @@ var ts;
|
|||
if (token.getWidth() > 0) {
|
||||
var type = classifyTokenType(token.kind, token);
|
||||
if (type) {
|
||||
result.push({
|
||||
textSpan: ts.createTextSpan(token.getStart(), token.getWidth()),
|
||||
classificationType: type
|
||||
});
|
||||
pushClassification(token.getStart(), token.getWidth(), type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40189,7 +40240,7 @@ var ts;
|
|||
// classify based on that instead.
|
||||
function classifyTokenType(tokenKind, token) {
|
||||
if (ts.isKeyword(tokenKind)) {
|
||||
return ClassificationTypeNames.keyword;
|
||||
return 3 /* keyword */;
|
||||
}
|
||||
// Special case < and > If they appear in a generic context they are punctuation,
|
||||
// not operators.
|
||||
|
@ -40197,7 +40248,7 @@ var ts;
|
|||
// If the node owning the token has a type argument list or type parameter list, then
|
||||
// we can effectively assume that a '<' and '>' belong to those lists.
|
||||
if (token && ts.getTypeArgumentOrTypeParameterList(token.parent)) {
|
||||
return ClassificationTypeNames.punctuation;
|
||||
return 10 /* punctuation */;
|
||||
}
|
||||
}
|
||||
if (ts.isPunctuation(tokenKind)) {
|
||||
|
@ -40207,63 +40258,68 @@ var ts;
|
|||
if (token.parent.kind === 199 /* VariableDeclaration */ ||
|
||||
token.parent.kind === 133 /* PropertyDeclaration */ ||
|
||||
token.parent.kind === 130 /* Parameter */) {
|
||||
return ClassificationTypeNames.operator;
|
||||
return 5 /* operator */;
|
||||
}
|
||||
}
|
||||
if (token.parent.kind === 170 /* BinaryExpression */ ||
|
||||
token.parent.kind === 168 /* PrefixUnaryExpression */ ||
|
||||
token.parent.kind === 169 /* PostfixUnaryExpression */ ||
|
||||
token.parent.kind === 171 /* ConditionalExpression */) {
|
||||
return ClassificationTypeNames.operator;
|
||||
return 5 /* operator */;
|
||||
}
|
||||
}
|
||||
return ClassificationTypeNames.punctuation;
|
||||
return 10 /* punctuation */;
|
||||
}
|
||||
else if (tokenKind === 7 /* NumericLiteral */) {
|
||||
return ClassificationTypeNames.numericLiteral;
|
||||
return 4 /* numericLiteral */;
|
||||
}
|
||||
else if (tokenKind === 8 /* StringLiteral */) {
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
else if (tokenKind === 9 /* RegularExpressionLiteral */) {
|
||||
// TODO: we should get another classification type for these literals.
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
else if (ts.isTemplateLiteralKind(tokenKind)) {
|
||||
// TODO (drosen): we should *also* get another classification type for these literals.
|
||||
return ClassificationTypeNames.stringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
else if (tokenKind === 65 /* Identifier */) {
|
||||
if (token) {
|
||||
switch (token.parent.kind) {
|
||||
case 202 /* ClassDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.className;
|
||||
return 11 /* className */;
|
||||
}
|
||||
return;
|
||||
case 129 /* TypeParameter */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.typeParameterName;
|
||||
return 15 /* typeParameterName */;
|
||||
}
|
||||
return;
|
||||
case 203 /* InterfaceDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.interfaceName;
|
||||
return 13 /* interfaceName */;
|
||||
}
|
||||
return;
|
||||
case 205 /* EnumDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.enumName;
|
||||
return 12 /* enumName */;
|
||||
}
|
||||
return;
|
||||
case 206 /* ModuleDeclaration */:
|
||||
if (token.parent.name === token) {
|
||||
return ClassificationTypeNames.moduleName;
|
||||
return 14 /* moduleName */;
|
||||
}
|
||||
return;
|
||||
case 130 /* Parameter */:
|
||||
if (token.parent.name === token) {
|
||||
return 17 /* parameterName */;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
return ClassificationTypeNames.text;
|
||||
return 9 /* text */;
|
||||
}
|
||||
}
|
||||
function processElement(element) {
|
||||
|
@ -40543,6 +40599,8 @@ var ts;
|
|||
getCompilerOptionsDiagnostics: getCompilerOptionsDiagnostics,
|
||||
getSyntacticClassifications: getSyntacticClassifications,
|
||||
getSemanticClassifications: getSemanticClassifications,
|
||||
getEncodedSyntacticClassifications: getEncodedSyntacticClassifications,
|
||||
getEncodedSemanticClassifications: getEncodedSemanticClassifications,
|
||||
getCompletionsAtPosition: getCompletionsAtPosition,
|
||||
getCompletionEntryDetails: getCompletionEntryDetails,
|
||||
getSignatureHelpItems: getSignatureHelpItems,
|
||||
|
@ -40671,9 +40729,58 @@ var ts;
|
|||
// if there are more cases we want the classifier to be better at.
|
||||
return true;
|
||||
}
|
||||
function convertClassifications(classifications, text) {
|
||||
var entries = [];
|
||||
var dense = classifications.spans;
|
||||
var lastEnd = 0;
|
||||
for (var i = 0, n = dense.length; i < n; i += 3) {
|
||||
var start = dense[i];
|
||||
var length_1 = dense[i + 1];
|
||||
var type = dense[i + 2];
|
||||
// Make a whitespace entry between the last item and this one.
|
||||
if (lastEnd >= 0) {
|
||||
var whitespaceLength_1 = start - lastEnd;
|
||||
if (whitespaceLength_1 > 0) {
|
||||
entries.push({ length: whitespaceLength_1, classification: TokenClass.Whitespace });
|
||||
}
|
||||
}
|
||||
entries.push({ length: length_1, classification: convertClassification(type) });
|
||||
lastEnd = start + length_1;
|
||||
}
|
||||
var whitespaceLength = text.length - lastEnd;
|
||||
if (whitespaceLength > 0) {
|
||||
entries.push({ length: whitespaceLength, classification: TokenClass.Whitespace });
|
||||
}
|
||||
return { entries: entries, finalLexState: classifications.endOfLineState };
|
||||
}
|
||||
function convertClassification(type) {
|
||||
switch (type) {
|
||||
case 1 /* comment */: return TokenClass.Comment;
|
||||
case 3 /* keyword */: return TokenClass.Keyword;
|
||||
case 4 /* numericLiteral */: return TokenClass.NumberLiteral;
|
||||
case 5 /* operator */: return TokenClass.Operator;
|
||||
case 6 /* stringLiteral */: return TokenClass.StringLiteral;
|
||||
case 8 /* whiteSpace */: return TokenClass.Whitespace;
|
||||
case 10 /* punctuation */: return TokenClass.Punctuation;
|
||||
case 2 /* identifier */:
|
||||
case 11 /* className */:
|
||||
case 12 /* enumName */:
|
||||
case 13 /* interfaceName */:
|
||||
case 14 /* moduleName */:
|
||||
case 15 /* typeParameterName */:
|
||||
case 16 /* typeAliasName */:
|
||||
case 9 /* text */:
|
||||
case 17 /* parameterName */:
|
||||
default:
|
||||
return TokenClass.Identifier;
|
||||
}
|
||||
}
|
||||
function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) {
|
||||
return convertClassifications(getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent), text);
|
||||
}
|
||||
// If there is a syntactic classifier ('syntacticClassifierAbsent' is false),
|
||||
// we will be more conservative in order to avoid conflicting with the syntactic classifier.
|
||||
function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) {
|
||||
function getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent) {
|
||||
var offset = 0;
|
||||
var token = 0 /* Unknown */;
|
||||
var lastNonTriviaToken = 0 /* Unknown */;
|
||||
|
@ -40713,8 +40820,8 @@ var ts;
|
|||
}
|
||||
scanner.setText(text);
|
||||
var result = {
|
||||
finalLexState: 0 /* Start */,
|
||||
entries: []
|
||||
endOfLineState: 0 /* None */,
|
||||
spans: []
|
||||
};
|
||||
// We can run into an unfortunate interaction between the lexical and syntactic classifier
|
||||
// when the user is typing something generic. Consider the case where the user types:
|
||||
|
@ -40816,7 +40923,7 @@ var ts;
|
|||
function processToken() {
|
||||
var start = scanner.getTokenPos();
|
||||
var end = scanner.getTextPos();
|
||||
addResult(end - start, classFromKind(token));
|
||||
addResult(start, end, classFromKind(token));
|
||||
if (end >= text.length) {
|
||||
if (token === 8 /* StringLiteral */) {
|
||||
// Check to see if we finished up on a multiline string literal.
|
||||
|
@ -40830,7 +40937,7 @@ var ts;
|
|||
// If we have an odd number of backslashes, then the multiline string is unclosed
|
||||
if (numBackslashes & 1) {
|
||||
var quoteChar = tokenText.charCodeAt(0);
|
||||
result.finalLexState = quoteChar === 34 /* doubleQuote */
|
||||
result.endOfLineState = quoteChar === 34 /* doubleQuote */
|
||||
? 3 /* InDoubleQuoteStringLiteral */
|
||||
: 2 /* InSingleQuoteStringLiteral */;
|
||||
}
|
||||
|
@ -40839,16 +40946,16 @@ var ts;
|
|||
else if (token === 3 /* MultiLineCommentTrivia */) {
|
||||
// Check to see if the multiline comment was unclosed.
|
||||
if (scanner.isUnterminated()) {
|
||||
result.finalLexState = 1 /* InMultiLineCommentTrivia */;
|
||||
result.endOfLineState = 1 /* InMultiLineCommentTrivia */;
|
||||
}
|
||||
}
|
||||
else if (ts.isTemplateLiteralKind(token)) {
|
||||
if (scanner.isUnterminated()) {
|
||||
if (token === 13 /* TemplateTail */) {
|
||||
result.finalLexState = 5 /* InTemplateMiddleOrTail */;
|
||||
result.endOfLineState = 5 /* InTemplateMiddleOrTail */;
|
||||
}
|
||||
else if (token === 10 /* NoSubstitutionTemplateLiteral */) {
|
||||
result.finalLexState = 4 /* InTemplateHeadOrNoSubstitutionTemplate */;
|
||||
result.endOfLineState = 4 /* InTemplateHeadOrNoSubstitutionTemplate */;
|
||||
}
|
||||
else {
|
||||
ts.Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #" + token);
|
||||
|
@ -40856,18 +40963,30 @@ var ts;
|
|||
}
|
||||
}
|
||||
else if (templateStack.length > 0 && ts.lastOrUndefined(templateStack) === 11 /* TemplateHead */) {
|
||||
result.finalLexState = 6 /* InTemplateSubstitutionPosition */;
|
||||
result.endOfLineState = 6 /* InTemplateSubstitutionPosition */;
|
||||
}
|
||||
}
|
||||
}
|
||||
function addResult(length, classification) {
|
||||
function addResult(start, end, classification) {
|
||||
if (classification === 8 /* whiteSpace */) {
|
||||
// Don't bother with whitespace classifications. They're not needed.
|
||||
return;
|
||||
}
|
||||
if (start === 0 && offset > 0) {
|
||||
// We're classifying the first token, and this was a case where we prepended
|
||||
// text. We should consider the start of this token to be at the start of
|
||||
// the original text.
|
||||
start += offset;
|
||||
}
|
||||
// All our tokens are in relation to the augmented text. Move them back to be
|
||||
// relative to the original text.
|
||||
start -= offset;
|
||||
end -= offset;
|
||||
var length = end - start;
|
||||
if (length > 0) {
|
||||
// If this is the first classification we're adding to the list, then remove any
|
||||
// offset we have if we were continuing a construct from the previous line.
|
||||
if (result.entries.length === 0) {
|
||||
length -= offset;
|
||||
}
|
||||
result.entries.push({ length: length, classification: classification });
|
||||
result.spans.push(start);
|
||||
result.spans.push(length);
|
||||
result.spans.push(classification);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40932,37 +41051,40 @@ var ts;
|
|||
}
|
||||
function classFromKind(token) {
|
||||
if (isKeyword(token)) {
|
||||
return TokenClass.Keyword;
|
||||
return 3 /* keyword */;
|
||||
}
|
||||
else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) {
|
||||
return TokenClass.Operator;
|
||||
return 5 /* operator */;
|
||||
}
|
||||
else if (token >= 14 /* FirstPunctuation */ && token <= 64 /* LastPunctuation */) {
|
||||
return TokenClass.Punctuation;
|
||||
return 10 /* punctuation */;
|
||||
}
|
||||
switch (token) {
|
||||
case 7 /* NumericLiteral */:
|
||||
return TokenClass.NumberLiteral;
|
||||
return 4 /* numericLiteral */;
|
||||
case 8 /* StringLiteral */:
|
||||
return TokenClass.StringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
case 9 /* RegularExpressionLiteral */:
|
||||
return TokenClass.RegExpLiteral;
|
||||
return 7 /* regularExpressionLiteral */;
|
||||
case 6 /* ConflictMarkerTrivia */:
|
||||
case 3 /* MultiLineCommentTrivia */:
|
||||
case 2 /* SingleLineCommentTrivia */:
|
||||
return TokenClass.Comment;
|
||||
return 1 /* comment */;
|
||||
case 5 /* WhitespaceTrivia */:
|
||||
case 4 /* NewLineTrivia */:
|
||||
return TokenClass.Whitespace;
|
||||
return 8 /* whiteSpace */;
|
||||
case 65 /* Identifier */:
|
||||
default:
|
||||
if (ts.isTemplateLiteralKind(token)) {
|
||||
return TokenClass.StringLiteral;
|
||||
return 6 /* stringLiteral */;
|
||||
}
|
||||
return TokenClass.Identifier;
|
||||
return 2 /* identifier */;
|
||||
}
|
||||
}
|
||||
return { getClassificationsForLine: getClassificationsForLine };
|
||||
return {
|
||||
getClassificationsForLine: getClassificationsForLine,
|
||||
getEncodedLexicalClassifications: getEncodedLexicalClassifications
|
||||
};
|
||||
}
|
||||
ts.createClassifier = createClassifier;
|
||||
/**
|
||||
|
@ -41461,7 +41583,9 @@ var debugObjectHost = this;
|
|||
var ts;
|
||||
(function (ts) {
|
||||
function logInternalError(logger, err) {
|
||||
logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message);
|
||||
if (logger) {
|
||||
logger.log("*INTERNAL ERROR* - Exception in typescript services: " + err.message);
|
||||
}
|
||||
}
|
||||
var ScriptSnapshotShimAdapter = (function () {
|
||||
function ScriptSnapshotShimAdapter(scriptSnapshotShim) {
|
||||
|
@ -41565,24 +41689,28 @@ var ts;
|
|||
return CoreServicesShimHostAdapter;
|
||||
})();
|
||||
ts.CoreServicesShimHostAdapter = CoreServicesShimHostAdapter;
|
||||
function simpleForwardCall(logger, actionDescription, action) {
|
||||
logger.log(actionDescription);
|
||||
var start = Date.now();
|
||||
function simpleForwardCall(logger, actionDescription, action, noPerfLogging) {
|
||||
if (!noPerfLogging) {
|
||||
logger.log(actionDescription);
|
||||
var start = Date.now();
|
||||
}
|
||||
var result = action();
|
||||
var end = Date.now();
|
||||
logger.log(actionDescription + " completed in " + (end - start) + " msec");
|
||||
if (typeof (result) === "string") {
|
||||
var str = result;
|
||||
if (str.length > 128) {
|
||||
str = str.substring(0, 128) + "...";
|
||||
if (!noPerfLogging) {
|
||||
var end = Date.now();
|
||||
logger.log(actionDescription + " completed in " + (end - start) + " msec");
|
||||
if (typeof (result) === "string") {
|
||||
var str = result;
|
||||
if (str.length > 128) {
|
||||
str = str.substring(0, 128) + "...";
|
||||
}
|
||||
logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'");
|
||||
}
|
||||
logger.log(" result.length=" + str.length + ", result='" + JSON.stringify(str) + "'");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
function forwardJSONCall(logger, actionDescription, action) {
|
||||
function forwardJSONCall(logger, actionDescription, action, noPerfLogging) {
|
||||
try {
|
||||
var result = simpleForwardCall(logger, actionDescription, action);
|
||||
var result = simpleForwardCall(logger, actionDescription, action, noPerfLogging);
|
||||
return JSON.stringify({ result: result });
|
||||
}
|
||||
catch (err) {
|
||||
|
@ -41627,7 +41755,7 @@ var ts;
|
|||
this.logger = this.host;
|
||||
}
|
||||
LanguageServiceShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
|
||||
return forwardJSONCall(this.logger, actionDescription, action);
|
||||
return forwardJSONCall(this.logger, actionDescription, action, false);
|
||||
};
|
||||
/// DISPOSE
|
||||
/**
|
||||
|
@ -41680,6 +41808,22 @@ var ts;
|
|||
return classifications;
|
||||
});
|
||||
};
|
||||
LanguageServiceShimObject.prototype.getEncodedSyntacticClassifications = function (fileName, start, length) {
|
||||
var _this = this;
|
||||
return this.forwardJSONCall("getEncodedSyntacticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
|
||||
// directly serialize the spans out to a string. This is much faster to decode
|
||||
// on the managed side versus a full JSON array.
|
||||
return convertClassifications(_this.languageService.getEncodedSyntacticClassifications(fileName, ts.createTextSpan(start, length)));
|
||||
});
|
||||
};
|
||||
LanguageServiceShimObject.prototype.getEncodedSemanticClassifications = function (fileName, start, length) {
|
||||
var _this = this;
|
||||
return this.forwardJSONCall("getEncodedSemanticClassifications('" + fileName + "', " + start + ", " + length + ")", function () {
|
||||
// directly serialize the spans out to a string. This is much faster to decode
|
||||
// on the managed side versus a full JSON array.
|
||||
return convertClassifications(_this.languageService.getEncodedSemanticClassifications(fileName, ts.createTextSpan(start, length)));
|
||||
});
|
||||
};
|
||||
LanguageServiceShimObject.prototype.getNewLine = function () {
|
||||
return this.host.getNewLine ? this.host.getNewLine() : "\r\n";
|
||||
};
|
||||
|
@ -41899,12 +42043,21 @@ var ts;
|
|||
};
|
||||
return LanguageServiceShimObject;
|
||||
})(ShimBase);
|
||||
function convertClassifications(classifications) {
|
||||
return { spans: classifications.spans.join(","), endOfLineState: classifications.endOfLineState };
|
||||
}
|
||||
var ClassifierShimObject = (function (_super) {
|
||||
__extends(ClassifierShimObject, _super);
|
||||
function ClassifierShimObject(factory) {
|
||||
function ClassifierShimObject(factory, logger) {
|
||||
_super.call(this, factory);
|
||||
this.logger = logger;
|
||||
this.classifier = ts.createClassifier();
|
||||
}
|
||||
ClassifierShimObject.prototype.getEncodedLexicalClassifications = function (text, lexState, syntacticClassifierAbsent) {
|
||||
var _this = this;
|
||||
return forwardJSONCall(this.logger, "getEncodedLexicalClassifications", function () { return convertClassifications(_this.classifier.getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent)); },
|
||||
/*noPerfLogging:*/ true);
|
||||
};
|
||||
/// COLORIZATION
|
||||
ClassifierShimObject.prototype.getClassificationsForLine = function (text, lexState, classifyKeywordsInGenerics) {
|
||||
var classification = this.classifier.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics);
|
||||
|
@ -41927,7 +42080,7 @@ var ts;
|
|||
this.host = host;
|
||||
}
|
||||
CoreServicesShimObject.prototype.forwardJSONCall = function (actionDescription, action) {
|
||||
return forwardJSONCall(this.logger, actionDescription, action);
|
||||
return forwardJSONCall(this.logger, actionDescription, action, false);
|
||||
};
|
||||
CoreServicesShimObject.prototype.getPreProcessedFileInfo = function (fileName, sourceTextSnapshot) {
|
||||
return this.forwardJSONCall("getPreProcessedFileInfo('" + fileName + "')", function () {
|
||||
|
@ -42005,7 +42158,7 @@ var ts;
|
|||
};
|
||||
TypeScriptServicesFactory.prototype.createClassifierShim = function (logger) {
|
||||
try {
|
||||
return new ClassifierShimObject(this);
|
||||
return new ClassifierShimObject(this, logger);
|
||||
}
|
||||
catch (err) {
|
||||
logInternalError(logger, err);
|
||||
|
|
Загрузка…
Ссылка в новой задаче